I'm trying to create a simple dialog box following the exam at http://dev.chromium.org/developers/design-documents/views-windowing. Note that I'm using views as in a standalone app (I'm not embedding this dialog in Chromium).
I've added 2 views::Textfields to WindowView, but I can't seem to tab between them. When I press the tab key, it simply inserts a tab into the editbox. Here is what I have: <snip> #pragma once #include "views/controls/textfield/textfield.h" #include "views/view.h" #include "views/window/dialog_delegate.h" namespace views { class Label; class Textfield; } class WindowView : public views::View, public views::DialogDelegate, public views::Textfield::Controller { public: WindowView(); ~WindowView(); // Overridden from views::View: virtual void Paint(gfx::Canvas* canvas); virtual void Layout(); virtual gfx::Size GetPreferredSize(); // Overridden from views::DialogDelegate: virtual std::wstring GetWindowTitle() const { return L"Demo"; } virtual bool CanResize() const { return true; } virtual bool CanMaximize() const { return true; } virtual views::View* GetContentsView() { return this; } virtual int GetDialogButtons() const { return MessageBoxFlags::DIALOGBUTTON_OK; } // Return the view that you want to have initially focused virtual views::View* GetInitiallyFocusedView(); private: // Overridden from views::Textfield::Controller: virtual void ContentsChanged(views::Textfield* sender, const std::wstring& new_contents); virtual bool HandleKeystroke(views::Textfield* sender, const views::Textfield::Keystroke& keystroke); views::Label* label1_; views::Textfield* textbox1_; views::Label* label2_; views::Textfield* textbox2_; DISALLOW_COPY_AND_ASSIGN(WindowView); }; </snip> <snip> #include "kreofusion/misc/context_menu_demo/window_view.h" #include "app/gfx/canvas.h" #include "base/message_loop.h" #include "views/controls/label.h" #include "views/standard_layout.h" #include "views/widget/root_view.h" WindowView::WindowView() : label1_(new views::Label(L"Textbox 1")), textbox1_(new views::Textfield()), label2_(new views::Label(L"Textbox 2")), textbox2_(new views::Textfield()) { textbox1_->SetController(this); textbox2_->SetController(this); AddChildView(label1_); AddChildView(textbox1_); AddChildView(label2_); AddChildView(textbox2_); } WindowView::~WindowView() { MessageLoop::current()->Quit(); } void WindowView::Paint(gfx::Canvas* canvas) { views::View::Paint(canvas); } void WindowView::Layout() { const gfx::Rect lb = bounds(); if (lb.IsEmpty()) return; gfx::Size ps = label1_->GetPreferredSize(); int y = kButtonVEdgeMargin; label1_->SetBounds(kButtonHEdgeMargin, y, ps.width(), ps.height()); y += ps.height() + kRelatedControlSmallVerticalSpacing; ps = textbox1_->GetPreferredSize(); textbox1_->SetBounds(kButtonHEdgeMargin, y, lb.width() - 2*kButtonHEdgeMargin, ps.height()); y += ps.height() + kUnrelatedControlVerticalSpacing; ps = label2_->GetPreferredSize(); label2_->SetBounds(kButtonHEdgeMargin, y, ps.width(), ps.height()); y += ps.height() + kRelatedControlSmallVerticalSpacing; ps = textbox2_->GetPreferredSize(); textbox2_->SetBounds(kButtonHEdgeMargin, y, lb.width() - 2*kButtonHEdgeMargin, ps.height()); } gfx::Size WindowView::GetPreferredSize() { gfx::Size ps = label1_->GetPreferredSize(); ps.set_width(ps.width() + 200); ps.set_height(ps.height() + 200); return ps; } views::View* WindowView::GetInitiallyFocusedView() { return textbox2_; } //////////////////////////////////////////////////////////////////////////////// // WindowView, private: void WindowView::ContentsChanged(views::Textfield* sender, const std::wstring& new_contents) { } bool WindowView::HandleKeystroke(views::Textfield* sender, const views::Textfield::Keystroke& keystroke) { return false; } </snip> What am I doing wrong? --~--~---------~--~----~------------~-------~--~----~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~----------~----~----~----~------~----~------~--~---