Home | History | Annotate | Download | only in oak
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "ui/oak/oak_aura_window_display.h"
      6 
      7 #include "base/logging.h"
      8 #include "base/strings/string_util.h"
      9 #include "base/strings/stringprintf.h"
     10 #include "base/strings/utf_string_conversions.h"
     11 #include "ui/aura/window.h"
     12 #include "ui/base/models/table_model_observer.h"
     13 #include "ui/oak/oak_pretty_print.h"
     14 
     15 namespace oak {
     16 namespace internal {
     17 namespace {
     18 enum {
     19 ROW_ID = 0,
     20 ROW_DELEGATE,
     21 ROW_TYPE,
     22 ROW_NAME,
     23 ROW_TITLE,
     24 ROW_TRANSPARENT,
     25 ROW_LAYER,
     26 ROW_VISIBLE,
     27 ROW_BOUNDS,
     28 ROW_BOUNDSINROOTWINDOW,
     29 ROW_TRANSFORM,
     30 ROW_PARENT,
     31 ROW_ROOTWINDOW,
     32 ROW_TRANSIENTCHILDREN,
     33 ROW_TRANSIENTPARENT,
     34 ROW_USERDATA,
     35 ROW_IGNOREEVENTS,
     36 ROW_CANFOCUS,
     37 ROW_HITTESTBOUNDSOVERRIDEOUTER,
     38 ROW_HITTESTBOUNDSOVERRIDEINNER,
     39 ROW_COUNT
     40 };
     41 
     42 // aura::Window-specific pretty printing.
     43 base::string16 PropertyWithWindowType(int type) {
     44   std::string property = "Type: ";
     45   switch (type) {
     46     case aura::client::WINDOW_TYPE_UNKNOWN:
     47       property.append("WINDOW_TYPE_UNKNOWN");
     48       break;
     49     case aura::client::WINDOW_TYPE_NORMAL:
     50       property.append("WINDOW_TYPE_NORMAL");
     51       break;
     52     case aura::client::WINDOW_TYPE_POPUP:
     53       property.append("WINDOW_TYPE_POPUP");
     54       break;
     55     case aura::client::WINDOW_TYPE_CONTROL:
     56       property.append("WINDOW_TYPE_CONTROL");
     57       break;
     58     case aura::client::WINDOW_TYPE_PANEL:
     59       property.append("WINDOW_TYPE_PANEL");
     60       break;
     61     case aura::client::WINDOW_TYPE_MENU:
     62       property.append("WINDOW_TYPE_MENU");
     63       break;
     64     case aura::client::WINDOW_TYPE_TOOLTIP:
     65       property.append("WINDOW_TYPE_TOOLTIP");
     66       break;
     67     default:
     68       NOTREACHED();
     69       break;
     70   }
     71   return ASCIIToUTF16(property);
     72 }
     73 
     74 }  // namespace
     75 
     76 ////////////////////////////////////////////////////////////////////////////////
     77 // OakAuraWindowDisplay, public:
     78 
     79 OakAuraWindowDisplay::OakAuraWindowDisplay() : observer_(NULL), window_(NULL) {
     80 }
     81 
     82 OakAuraWindowDisplay::~OakAuraWindowDisplay() {
     83 }
     84 
     85 ////////////////////////////////////////////////////////////////////////////////
     86 // OakAuraWindowDisplay, OakDetailsModel overrides:
     87 
     88 void OakAuraWindowDisplay::SetValue(aura::Window* window) {
     89   window_ = window;
     90   observer_->OnModelChanged();
     91 }
     92 
     93 ////////////////////////////////////////////////////////////////////////////////
     94 // OakAuraWindowDisplay, ui::TableModel implementation:
     95 
     96 int OakAuraWindowDisplay::RowCount() {
     97   return ROW_COUNT;
     98 }
     99 
    100 base::string16 OakAuraWindowDisplay::GetText(int row, int column_id) {
    101   if (!window_)
    102     return EmptyString16();
    103 
    104   base::string16 text;
    105   switch (row) {
    106     case ROW_ID:
    107       return PropertyWithInteger("Id: ", window_->id());
    108     case ROW_DELEGATE:
    109       return PropertyWithVoidStar("Delegate: ", window_->delegate());
    110     case ROW_TYPE:
    111       return PropertyWithWindowType(window_->type());
    112     case ROW_NAME:
    113       return ASCIIToUTF16("Name: " + window_->name());
    114     case ROW_TITLE:
    115       return ASCIIToUTF16("Title: ") + window_->title();
    116     case ROW_TRANSPARENT:
    117       return PropertyWithBool("Transparent: ", window_->transparent());
    118     case ROW_LAYER:
    119       return PropertyWithVoidStar("Layer: ", window_->layer());
    120     case ROW_VISIBLE:
    121       return PropertyWithBool("Visible: ", window_->IsVisible());
    122     case ROW_BOUNDS:
    123       return PropertyWithBounds("Bounds: ", window_->bounds());
    124     case ROW_BOUNDSINROOTWINDOW:
    125       return PropertyWithBounds("Bounds in Root Window: ",
    126                                 window_->GetBoundsInRootWindow());
    127     case ROW_TRANSFORM:
    128       return ASCIIToUTF16("Transform:");
    129     case ROW_PARENT:
    130       return PropertyWithVoidStar("Parent: ", window_->parent());
    131     case ROW_ROOTWINDOW:
    132       return PropertyWithVoidStar("Root Window: ", window_->GetRootWindow());
    133     case ROW_TRANSIENTCHILDREN:
    134       return PropertyWithInteger("Transient Children: ",
    135                                  window_->transient_children().size());
    136     case ROW_TRANSIENTPARENT:
    137       return PropertyWithVoidStar("Transient Parent: ",
    138                                   window_->transient_parent());
    139     case ROW_USERDATA:
    140       return PropertyWithVoidStar("User Data: ", window_->user_data());
    141     case ROW_IGNOREEVENTS:
    142       return PropertyWithBool("Can receive events: ",
    143                               window_->CanReceiveEvents());
    144     case ROW_CANFOCUS:
    145       return PropertyWithBool("Can Focus: ", window_->CanFocus());
    146     case ROW_HITTESTBOUNDSOVERRIDEOUTER:
    147       return PropertyWithInsets("Hit test bounds override outer: ",
    148           window_->hit_test_bounds_override_outer_mouse());
    149     case ROW_HITTESTBOUNDSOVERRIDEINNER:
    150       return PropertyWithInsets("Hit test bounds override inner: ",
    151                                 window_->hit_test_bounds_override_inner());
    152     default:
    153       NOTREACHED();
    154       break;
    155   }
    156   return EmptyString16();
    157 }
    158 
    159 void OakAuraWindowDisplay::SetObserver(ui::TableModelObserver* observer) {
    160   observer_ = observer;
    161 }
    162 
    163 }  // namespace internal
    164 }  // namespace oak
    165