summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-12 20:38:01 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-12 20:38:01 +0000
commit3cd198a2911ac90e70e50b4c5e34ee3982ea9769 (patch)
tree5aeb1cfb14fd64d76320425c3a076fc07c0c427d
parent349f10bc01e0062c55d60a861972bac252cfb7ce (diff)
downloadchromium_src-3cd198a2911ac90e70e50b4c5e34ee3982ea9769.zip
chromium_src-3cd198a2911ac90e70e50b4c5e34ee3982ea9769.tar.gz
chromium_src-3cd198a2911ac90e70e50b4c5e34ee3982ea9769.tar.bz2
Basic skeleton of a window/layer/view inspector.
Ctrl+Shift+F1 brings it up. http://crbug.com/97266 TEST=none Review URL: https://chromiumcodereview.appspot.com/9662022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@126207 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--ash/accelerators/accelerator_controller.cc7
-rw-r--r--ash/accelerators/accelerator_table.cc1
-rw-r--r--ash/accelerators/accelerator_table.h1
-rw-r--r--ash/ash.gyp1
-rw-r--r--ash/ash_switches.cc3
-rw-r--r--ash/ash_switches.h1
-rw-r--r--build/all.gyp1
-rw-r--r--chrome/app/generated_resources.grd6
-rw-r--r--chrome/browser/about_flags.cc7
-rw-r--r--ui/oak/oak.gyp40
-rw-r--r--ui/oak/oak.h18
-rw-r--r--ui/oak/oak_aura_window_display.cc0
-rw-r--r--ui/oak/oak_aura_window_display.h0
-rw-r--r--ui/oak/oak_export.h29
-rw-r--r--ui/oak/oak_layer_display.cc0
-rw-r--r--ui/oak/oak_layer_display.h0
-rw-r--r--ui/oak/oak_tree_model.cc39
-rw-r--r--ui/oak/oak_tree_model.h28
-rw-r--r--ui/oak/oak_views_view_display.cc0
-rw-r--r--ui/oak/oak_views_view_display.h0
-rw-r--r--ui/oak/oak_views_widget_display.cc0
-rw-r--r--ui/oak/oak_views_widget_display.h0
-rw-r--r--ui/oak/oak_window.cc156
-rw-r--r--ui/oak/oak_window.h62
-rw-r--r--ui/resources/ui_resources.grd2
25 files changed, 402 insertions, 0 deletions
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc
index f05d25b..0eb7ce8 100644
--- a/ash/accelerators/accelerator_controller.cc
+++ b/ash/accelerators/accelerator_controller.cc
@@ -5,6 +5,7 @@
#include "ash/accelerators/accelerator_controller.h"
#include "ash/accelerators/accelerator_table.h"
+#include "ash/ash_switches.h"
#include "ash/caps_lock_delegate.h"
#include "ash/ime_control_delegate.h"
#include "ash/launcher/launcher.h"
@@ -17,6 +18,7 @@
#include "ash/volume_control_delegate.h"
#include "ash/wm/window_cycle_controller.h"
#include "ash/wm/window_util.h"
+#include "base/command_line.h"
#include "ui/aura/event.h"
#include "ui/aura/root_window.h"
#include "ui/base/accelerators/accelerator.h"
@@ -25,6 +27,7 @@
#include "ui/gfx/compositor/layer_animation_sequence.h"
#include "ui/gfx/compositor/layer_animator.h"
#include "ui/gfx/compositor/screen_rotation.h"
+#include "ui/oak/oak.h"
namespace {
@@ -260,6 +263,10 @@ bool AcceleratorController::AcceleratorPressed(
if (volume_control_delegate_.get())
return volume_control_delegate_->HandleVolumeUp(accelerator);
break;
+ case SHOW_OAK:
+ if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshEnableOak))
+ oak::ShowOakWindow();
+ break;
case NEXT_IME:
if (ime_control_delegate_.get())
return ime_control_delegate_->HandleNextIme();
diff --git a/ash/accelerators/accelerator_table.cc b/ash/accelerators/accelerator_table.cc
index e6efc5c..ba9ed05 100644
--- a/ash/accelerators/accelerator_table.cc
+++ b/ash/accelerators/accelerator_table.cc
@@ -67,6 +67,7 @@ const AcceleratorData kAcceleratorData[] = {
{ ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F10, false, false, false, VOLUME_UP },
{ ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_VOLUME_UP, false, false, false,
VOLUME_UP },
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F1, true, true, false, SHOW_OAK },
#if !defined(NDEBUG)
{ ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_HOME, false, true, false,
ROTATE_SCREEN },
diff --git a/ash/accelerators/accelerator_table.h b/ash/accelerators/accelerator_table.h
index 97f7a53..31f5a70 100644
--- a/ash/accelerators/accelerator_table.h
+++ b/ash/accelerators/accelerator_table.h
@@ -26,6 +26,7 @@ enum AcceleratorAction {
VOLUME_DOWN,
VOLUME_MUTE,
VOLUME_UP,
+ SHOW_OAK,
#if defined(OS_CHROMEOS)
LOCK_SCREEN,
#endif
diff --git a/ash/ash.gyp b/ash/ash.gyp
index bb0a1c1..e9fdd49 100644
--- a/ash/ash.gyp
+++ b/ash/ash.gyp
@@ -25,6 +25,7 @@
'../ui/aura/aura.gyp:aura',
'../ui/base/strings/ui_strings.gyp:ui_strings',
'../ui/gfx/compositor/compositor.gyp:compositor',
+ '../ui/oak/oak.gyp:oak',
'../ui/ui.gyp:ui',
'../ui/ui.gyp:ui_resources',
'../ui/ui.gyp:ui_resources_standard',
diff --git a/ash/ash_switches.cc b/ash/ash_switches.cc
index 88f3a3a..42feeb0 100644
--- a/ash/ash_switches.cc
+++ b/ash/ash_switches.cc
@@ -10,6 +10,9 @@ namespace switches {
// Use the in-progress uber system tray.
const char kAshUberTray[] = "ash-uber-tray";
+// Enables the Oak tree viewer.
+const char kAshEnableOak[] = "ash-enable-oak";
+
// Use Google-style dialog box frames.
const char kAuraGoogleDialogFrames[] = "aura-google-dialog-frames";
diff --git a/ash/ash_switches.h b/ash/ash_switches.h
index 7f85ef9..755f8db 100644
--- a/ash/ash_switches.h
+++ b/ash/ash_switches.h
@@ -17,6 +17,7 @@ namespace switches {
// Please keep alphabetized.
ASH_EXPORT extern const char kAshUberTray[];
+ASH_EXPORT extern const char kAshEnableOak[];
ASH_EXPORT extern const char kAuraGoogleDialogFrames[];
ASH_EXPORT extern const char kAuraLegacyPowerButton[];
ASH_EXPORT extern const char kAuraNoShadows[];
diff --git a/build/all.gyp b/build/all.gyp
index 24c8e1f..737f048 100644
--- a/build/all.gyp
+++ b/build/all.gyp
@@ -133,6 +133,7 @@
['use_aura==1', {
'dependencies': [
'../ui/aura/aura.gyp:*',
+ '../ui/oak/oak.gyp:*',
'../ash/ash.gyp:*',
],
}],
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 425faef..07a1232 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -5227,6 +5227,12 @@ Keep your key file in a safe place. You will need it to create new versions of y
<message name="IDS_FLAGS_ENABLE_ASH_UBER_TRAY_DESCRIPTION" desc="Description of the flag to enable the uber tray in ash.">
Enables the in-progress uber tray for ash. Replaces the existing status view.
</message>
+ <message name="IDS_FLAGS_ENABLE_ASH_OAK_NAME" desc="Name of the flag to enable the oak tree viewer in ash.">
+ Enable Oak.
+ </message>
+ <message name="IDS_FLAGS_ENABLE_ASH_OAK_DESCRIPTION" desc="Description of the flag to enable the oak tree viewer in ash.">
+ Enables the Oak tree viewer in ash. Allows inspection of window, layer and view hierarchies and their properties. Press Ctrl+Shift+F1 to access.
+ </message>
<message name="IDS_FLAGS_ENABLE_DEVTOOLS_EXPERIMENTS_NAME" desc="Name for the flag to enable experiments in Developer Tools">
Enable Developer Tools experiments.
</message>
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 5913857..dc0b46f 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -582,6 +582,13 @@ const Experiment kExperiments[] = {
kOsAll,
SINGLE_VALUE_TYPE(ash::switches::kAshUberTray),
},
+ {
+ "enable-ash-oak",
+ IDS_FLAGS_ENABLE_ASH_OAK_NAME,
+ IDS_FLAGS_ENABLE_ASH_OAK_DESCRIPTION,
+ kOsAll,
+ SINGLE_VALUE_TYPE(ash::switches::kAshEnableOak),
+ },
#endif
{
"enable-devtools-experiments",
diff --git a/ui/oak/oak.gyp b/ui/oak/oak.gyp
new file mode 100644
index 0000000..2051845
--- /dev/null
+++ b/ui/oak/oak.gyp
@@ -0,0 +1,40 @@
+# Copyright (c) 2012 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.
+
+{
+ 'variables': {
+ 'chromium_code': 1,
+ },
+
+ 'targets': [
+ {
+ 'target_name': 'oak',
+ 'type': 'static_library',
+ 'dependencies': [
+ '../../base/base.gyp:base',
+ '../../base/base.gyp:base_i18n',
+ '../../build/temp_gyp/googleurl.gyp:googleurl',
+ '../../skia/skia.gyp:skia',
+ '../aura/aura.gyp:aura',
+ '../gfx/compositor/compositor.gyp:compositor',
+ '../ui.gyp:ui',
+ '../ui.gyp:ui_resources',
+ '../ui.gyp:ui_resources_standard',
+ '../views/views.gyp:views',
+ ],
+ 'defines': [
+ 'OAK_IMPLEMENTATION',
+ ],
+ 'sources': [
+ # All .cc, .h under oak, except unittests
+ 'oak.h',
+ 'oak_export.h',
+ 'oak_tree_model.cc',
+ 'oak_tree_model.h',
+ 'oak_window.cc',
+ 'oak_window.h',
+ ],
+ },
+ ],
+}
diff --git a/ui/oak/oak.h b/ui/oak/oak.h
new file mode 100644
index 0000000..47af72e
--- /dev/null
+++ b/ui/oak/oak.h
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 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_OAK_OAK_WINDOW_H_
+#define ASH_OAK_OAK_WINDOW_H_
+#pragma once
+
+#include "ui/oak/oak_export.h"
+
+namespace oak {
+
+// Shows the Oak window. Refocuses an existing one.
+void ShowOakWindow();
+
+} // namespace oak
+
+#endif // ASH_OAK_OAK_WINDOW_H_
diff --git a/ui/oak/oak_aura_window_display.cc b/ui/oak/oak_aura_window_display.cc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ui/oak/oak_aura_window_display.cc
diff --git a/ui/oak/oak_aura_window_display.h b/ui/oak/oak_aura_window_display.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ui/oak/oak_aura_window_display.h
diff --git a/ui/oak/oak_export.h b/ui/oak/oak_export.h
new file mode 100644
index 0000000..c769ed1
--- /dev/null
+++ b/ui/oak/oak_export.h
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 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 UI_OAK_OAK_EXPORT_H_
+#define UI_OAK_OAK_EXPORT_H_
+#pragma once
+
+// Defines AURA_EXPORT so that functionality implemented by the aura module
+// can be exported to consumers.
+
+#if defined(COMPONENT_BUILD)
+#if defined(WIN32)
+
+#if defined(OAK_IMPLEMENTATION)
+#define OAK_EXPORT __declspec(dllexport)
+#else
+#define OAK_EXPORT __declspec(dllimport)
+#endif // defined(OAK_IMPLEMENTATION)
+
+#else // defined(WIN32)
+#define OAK_EXPORT __attribute__((visibility("default")))
+#endif
+
+#else // defined(COMPONENT_BUILD)
+#define OAK_EXPORT
+#endif
+
+#endif // UI_OAK_OAK_EXPORT_H_
diff --git a/ui/oak/oak_layer_display.cc b/ui/oak/oak_layer_display.cc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ui/oak/oak_layer_display.cc
diff --git a/ui/oak/oak_layer_display.h b/ui/oak/oak_layer_display.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ui/oak/oak_layer_display.h
diff --git a/ui/oak/oak_tree_model.cc b/ui/oak/oak_tree_model.cc
new file mode 100644
index 0000000..ff67ee5
--- /dev/null
+++ b/ui/oak/oak_tree_model.cc
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 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/oak/oak_tree_model.h"
+
+#include "base/utf_string_conversions.h"
+#include "ui/aura/root_window.h"
+#include "ui/aura/window.h"
+#include "ui/base/models/tree_node_model.h"
+
+namespace oak {
+namespace internal {
+
+string16 GetNodeTitleForWindow(aura::Window* window) {
+ std::string window_name = window->name();
+ if (window_name.empty())
+ window_name.append("Unnamed window");
+ return ASCIIToUTF16(window_name);
+}
+
+void AddChildWindows(aura::Window* parent_window, WindowNode* parent_node) {
+ aura::Window::Windows::const_iterator it = parent_window->children().begin();
+ for (; it != parent_window->children().end(); ++it) {
+ WindowNode* child_node = new WindowNode(GetNodeTitleForWindow(*it), *it);
+ parent_node->Add(child_node, parent_node->child_count());
+ AddChildWindows(*it, child_node);
+ }
+}
+
+TreeOfWindows* GenerateModel(aura::Window* root) {
+ WindowNode* root_node = new WindowNode(GetNodeTitleForWindow(root), root);
+ TreeOfWindows* tree = new TreeOfWindows(root_node);
+ AddChildWindows(root, root_node);
+ return tree;
+}
+
+} // namespace internal
+} // namespace oak
diff --git a/ui/oak/oak_tree_model.h b/ui/oak/oak_tree_model.h
new file mode 100644
index 0000000..ee62b85
--- /dev/null
+++ b/ui/oak/oak_tree_model.h
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 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 UI_OAK_OAK_TREE_MODEL_H_
+#define UI_OAK_OAK_TREE_MODEL_H_
+#pragma once
+
+#include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
+#include "ui/base/models/tree_node_model.h"
+
+namespace aura {
+class Window;
+}
+
+namespace oak {
+namespace internal {
+
+typedef ui::TreeNodeWithValue<aura::Window*> WindowNode;
+typedef ui::TreeNodeModel<WindowNode> TreeOfWindows;
+
+TreeOfWindows* GenerateModel(aura::Window* root);
+
+} // namespace internal
+} // namespace oak
+
+#endif // UI_OAK_OAK_TREE_MODEL_H_
diff --git a/ui/oak/oak_views_view_display.cc b/ui/oak/oak_views_view_display.cc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ui/oak/oak_views_view_display.cc
diff --git a/ui/oak/oak_views_view_display.h b/ui/oak/oak_views_view_display.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ui/oak/oak_views_view_display.h
diff --git a/ui/oak/oak_views_widget_display.cc b/ui/oak/oak_views_widget_display.cc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ui/oak/oak_views_widget_display.cc
diff --git a/ui/oak/oak_views_widget_display.h b/ui/oak/oak_views_widget_display.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ui/oak/oak_views_widget_display.h
diff --git a/ui/oak/oak_window.cc b/ui/oak/oak_window.cc
new file mode 100644
index 0000000..af4736d
--- /dev/null
+++ b/ui/oak/oak_window.cc
@@ -0,0 +1,156 @@
+// Copyright (c) 2012 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/oak/oak_window.h"
+
+#include "base/utf_string_conversions.h"
+#include "grit/ui_resources.h"
+#include "ui/aura/root_window.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/canvas.h"
+#include "ui/gfx/image/image.h"
+#include "ui/views/controls/tree/tree_view.h"
+#include "ui/views/layout/layout_constants.h"
+#include "ui/views/widget/widget.h"
+
+namespace oak {
+namespace internal {
+namespace {
+
+const SkColor kBorderColor = SkColorSetRGB(0xCC, 0xCC, 0xCC);
+
+class DetailsView : public views::View {
+ public:
+ DetailsView() {}
+ virtual ~DetailsView() {}
+
+ // Overridden from views::View:
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
+ canvas->sk_canvas()->drawColor(SK_ColorYELLOW);
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DetailsView);
+};
+
+} // namespace
+
+// static
+views::Widget* OakWindow::instance = NULL;
+
+////////////////////////////////////////////////////////////////////////////////
+// OakWindow, public:
+
+OakWindow::OakWindow() : tree_(NULL), tree_container_(NULL), details_(NULL) {
+}
+
+OakWindow::~OakWindow() {
+ // The tree needs to be destroyed before the model.
+ tree_.reset();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// OakWindow, views::WidgetDelegateView implementation:
+
+bool OakWindow::CanResize() const {
+ return true;
+}
+
+bool OakWindow::CanMaximize() const {
+ return true;
+}
+
+string16 OakWindow::GetWindowTitle() const {
+ return ASCIIToUTF16("Oak");
+}
+
+views::View* OakWindow::GetContentsView() {
+ return this;
+}
+
+SkBitmap OakWindow::GetWindowIcon() {
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
+ return *rb.GetImageNamed(IDR_OAK).ToSkBitmap();
+}
+
+bool OakWindow::ShouldShowWindowIcon() const {
+ return true;
+}
+
+void OakWindow::DeleteDelegate() {
+ instance = NULL;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// OakWindow, views::View overrides:
+
+void OakWindow::OnPaint(gfx::Canvas* canvas) {
+ canvas->sk_canvas()->drawColor(SK_ColorWHITE);
+ canvas->FillRect(separator_rect_, kBorderColor);
+}
+
+void OakWindow::ViewHierarchyChanged(bool is_add,
+ views::View* parent,
+ views::View* child) {
+ if (is_add && child == this)
+ Init();
+}
+
+void OakWindow::Layout() {
+ gfx::Rect content_bounds = GetLocalBounds();
+ content_bounds.Inset(views::kPanelHorizMargin, views::kPanelVertMargin);
+
+ int tree_height =
+ (content_bounds.height() / 2) - views::kUnrelatedControlVerticalSpacing;
+ gfx::Rect tree_bounds = content_bounds;
+ tree_bounds.set_height(tree_height);
+ tree_container_->SetBoundsRect(tree_bounds);
+
+ separator_rect_ = content_bounds;
+ separator_rect_.set_y(
+ tree_bounds.bottom() + views::kRelatedControlVerticalSpacing);
+ separator_rect_.set_height(1);
+
+ gfx::Rect details_bounds = content_bounds;
+ details_bounds.set_y(
+ separator_rect_.bottom() + views::kRelatedControlVerticalSpacing);
+ details_bounds.set_height(content_bounds.bottom() - details_bounds.y());
+ details_->SetBoundsRect(details_bounds);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// OakWindow, views::TreeViewController implementation:
+
+void OakWindow::OnTreeViewSelectionChanged(views::TreeView* tree) {
+ NOTIMPLEMENTED();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// OakWindow, private:
+
+void OakWindow::Init() {
+ tree_model_.reset(
+ GenerateModel(GetWidget()->GetNativeView()->GetRootWindow()));
+ tree_.reset(new views::TreeView);
+ tree_->set_parent_owned(false);
+ tree_->SetController(this);
+ tree_->SetModel(tree_model_.get());
+ tree_container_ = tree_->CreateParentIfNecessary();
+ AddChildView(tree_container_);
+ details_ = new DetailsView;
+ AddChildView(details_);
+}
+
+} // namespace internal
+
+void ShowOakWindow() {
+ if (!internal::OakWindow::instance) {
+ internal::OakWindow::instance =
+ views::Widget::CreateWindowWithBounds(new internal::OakWindow,
+ gfx::Rect(10, 10, 500, 500));
+ }
+ internal::OakWindow::instance->Show();
+}
+
+} // namespace oak
diff --git a/ui/oak/oak_window.h b/ui/oak/oak_window.h
new file mode 100644
index 0000000..2406a66
--- /dev/null
+++ b/ui/oak/oak_window.h
@@ -0,0 +1,62 @@
+// Copyright (c) 2012 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 UI_OAK_OAK_WINDOW_H_
+#define UI_OAK_OAK_WINDOW_H_
+#pragma once
+
+#include "ui/oak/oak_tree_model.h"
+#include "ui/views/controls/tree/tree_view_controller.h"
+#include "ui/views/widget/widget_delegate.h"
+
+namespace oak {
+namespace internal {
+
+class OakTreeModel;
+
+class OakWindow : public views::WidgetDelegateView,
+ public views::TreeViewController {
+ public:
+ OakWindow();
+ virtual ~OakWindow();
+
+ static views::Widget* instance;
+
+ // Overridden from views::WidgetDelegateView:
+ virtual bool CanResize() const OVERRIDE;
+ virtual bool CanMaximize() const OVERRIDE;
+ virtual string16 GetWindowTitle() const OVERRIDE;
+ virtual views::View* GetContentsView() OVERRIDE;
+ virtual SkBitmap GetWindowIcon() OVERRIDE;
+ virtual bool ShouldShowWindowIcon() const OVERRIDE;
+ virtual void DeleteDelegate() OVERRIDE;
+
+ private:
+ // Overridden from views::View:
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
+ virtual void ViewHierarchyChanged(bool is_add,
+ views::View* parent,
+ views::View* child) OVERRIDE;
+ virtual void Layout() OVERRIDE;
+
+ // Overridden from views::TreeViewController:
+ virtual void OnTreeViewSelectionChanged(views::TreeView* tree) OVERRIDE;
+
+ void Init();
+
+ scoped_ptr<views::TreeView> tree_;
+ scoped_ptr<TreeOfWindows> tree_model_;
+ views::View* tree_container_;
+
+ gfx::Rect separator_rect_;
+
+ views::View* details_;
+
+ DISALLOW_COPY_AND_ASSIGN(OakWindow);
+};
+
+} // namespace internal
+} // namespace oak
+
+#endif // UI_OAK_OAK_WINDOW_H_
diff --git a/ui/resources/ui_resources.grd b/ui/resources/ui_resources.grd
index 39a69dd..c7e9572 100644
--- a/ui/resources/ui_resources.grd
+++ b/ui/resources/ui_resources.grd
@@ -228,6 +228,8 @@
<include name="IDR_AURA_UBER_TRAY_BRIGHTNESS" file="aura/status_brightness.png" type="BINDATA" />
<include name="IDR_AURA_UBER_TRAY_SETTINGS" file="aura/status_settings.png" type="BINDATA" />
<include name="IDR_AURA_UBER_TRAY_POWER_SMALL" file="aura/status_power_small_all.png" type="BINDATA" />
+
+ <include name="IDR_OAK" file="oak.png" type="BINDATA"/>
</if>
</includes>
</release>