// 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_aura_window_display.h" #include "base/logging.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "ui/aura/window.h" #include "ui/base/models/table_model_observer.h" #include "ui/oak/oak_pretty_print.h" namespace oak { namespace internal { namespace { enum { ROW_ID = 0, ROW_DELEGATE, ROW_TYPE, ROW_NAME, ROW_TITLE, ROW_TRANSPARENT, ROW_LAYER, ROW_VISIBLE, ROW_BOUNDS, ROW_BOUNDSINROOTWINDOW, ROW_TRANSFORM, ROW_PARENT, ROW_ROOTWINDOW, ROW_TRANSIENTCHILDREN, ROW_TRANSIENTPARENT, ROW_USERDATA, ROW_IGNOREEVENTS, ROW_CANFOCUS, ROW_HITTESTBOUNDSOVERRIDEOUTER, ROW_HITTESTBOUNDSOVERRIDEINNER, ROW_COUNT }; // aura::Window-specific pretty printing. base::string16 PropertyWithWindowType(int type) { std::string property = "Type: "; switch (type) { case aura::client::WINDOW_TYPE_UNKNOWN: property.append("WINDOW_TYPE_UNKNOWN"); break; case aura::client::WINDOW_TYPE_NORMAL: property.append("WINDOW_TYPE_NORMAL"); break; case aura::client::WINDOW_TYPE_POPUP: property.append("WINDOW_TYPE_POPUP"); break; case aura::client::WINDOW_TYPE_CONTROL: property.append("WINDOW_TYPE_CONTROL"); break; case aura::client::WINDOW_TYPE_PANEL: property.append("WINDOW_TYPE_PANEL"); break; case aura::client::WINDOW_TYPE_MENU: property.append("WINDOW_TYPE_MENU"); break; case aura::client::WINDOW_TYPE_TOOLTIP: property.append("WINDOW_TYPE_TOOLTIP"); break; default: NOTREACHED(); break; } return ASCIIToUTF16(property); } } // namespace //////////////////////////////////////////////////////////////////////////////// // OakAuraWindowDisplay, public: OakAuraWindowDisplay::OakAuraWindowDisplay() : observer_(NULL), window_(NULL) { } OakAuraWindowDisplay::~OakAuraWindowDisplay() { } //////////////////////////////////////////////////////////////////////////////// // OakAuraWindowDisplay, OakDetailsModel overrides: void OakAuraWindowDisplay::SetValue(aura::Window* window) { window_ = window; observer_->OnModelChanged(); } //////////////////////////////////////////////////////////////////////////////// // OakAuraWindowDisplay, ui::TableModel implementation: int OakAuraWindowDisplay::RowCount() { return ROW_COUNT; } base::string16 OakAuraWindowDisplay::GetText(int row, int column_id) { if (!window_) return base::string16(); base::string16 text; switch (row) { case ROW_ID: return PropertyWithInteger("Id: ", window_->id()); case ROW_DELEGATE: return PropertyWithVoidStar("Delegate: ", window_->delegate()); case ROW_TYPE: return PropertyWithWindowType(window_->type()); case ROW_NAME: return ASCIIToUTF16("Name: " + window_->name()); case ROW_TITLE: return ASCIIToUTF16("Title: ") + window_->title(); case ROW_TRANSPARENT: return PropertyWithBool("Transparent: ", window_->transparent()); case ROW_LAYER: return PropertyWithVoidStar("Layer: ", window_->layer()); case ROW_VISIBLE: return PropertyWithBool("Visible: ", window_->IsVisible()); case ROW_BOUNDS: return PropertyWithBounds("Bounds: ", window_->bounds()); case ROW_BOUNDSINROOTWINDOW: return PropertyWithBounds("Bounds in Root Window: ", window_->GetBoundsInRootWindow()); case ROW_TRANSFORM: return ASCIIToUTF16("Transform:"); case ROW_PARENT: return PropertyWithVoidStar("Parent: ", window_->parent()); case ROW_ROOTWINDOW: return PropertyWithVoidStar("Root Window: ", window_->GetRootWindow()); case ROW_TRANSIENTCHILDREN: return PropertyWithInteger("Transient Children: ", window_->transient_children().size()); case ROW_TRANSIENTPARENT: return PropertyWithVoidStar("Transient Parent: ", window_->transient_parent()); case ROW_USERDATA: return PropertyWithVoidStar("User Data: ", window_->user_data()); case ROW_IGNOREEVENTS: return PropertyWithBool("Can receive events: ", window_->CanReceiveEvents()); case ROW_CANFOCUS: return PropertyWithBool("Can Focus: ", window_->CanFocus()); case ROW_HITTESTBOUNDSOVERRIDEOUTER: return PropertyWithInsets("Hit test bounds override outer: ", window_->hit_test_bounds_override_outer_mouse()); case ROW_HITTESTBOUNDSOVERRIDEINNER: return PropertyWithInsets("Hit test bounds override inner: ", window_->hit_test_bounds_override_inner()); default: NOTREACHED(); break; } return base::string16(); } void OakAuraWindowDisplay::SetObserver(ui::TableModelObserver* observer) { observer_ = observer; } } // namespace internal } // namespace oak