Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(444)

Unified Diff: athena/system/network_selector.cc

Issue 665803003: Revert of Support modal windows (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git/+/master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « athena/system/network_selector.h ('k') | athena/system/shutdown_dialog.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: athena/system/network_selector.cc
diff --git a/athena/system/network_selector.cc b/athena/system/network_selector.cc
index ef45bfb7111b76a421ae796b66d6205bd823d430..7519968c9c63c9abc8f93e00d678e972640e118a 100644
--- a/athena/system/network_selector.cc
+++ b/athena/system/network_selector.cc
@@ -4,7 +4,6 @@
#include "athena/system/network_selector.h"
-#include "athena/screen/public/screen_manager.h"
#include "base/memory/weak_ptr.h"
#include "base/strings/utf_string_conversions.h"
#include "chromeos/network/network_configuration_handler.h"
@@ -39,7 +38,6 @@
#include "ui/views/layout/box_layout.h"
#include "ui/views/layout/fill_layout.h"
#include "ui/views/widget/widget.h"
-#include "ui/views/window/dialog_delegate.h"
using chromeos::NetworkConfigurationHandler;
using chromeos::NetworkConnectionHandler;
@@ -49,14 +47,18 @@
namespace {
+const int kBackgroundColor = SkColorSetARGB(0x7f, 0, 0, 0);
+
// The View for the user to enter the password for connceting to a network. This
// view also shows an error message if the network connection fails.
class PasswordView : public views::View, public views::ButtonListener {
public:
PasswordView(const ui::NetworkInfo& network,
- const base::Callback<void(bool)>& callback)
+ const base::Callback<void(bool)>& callback,
+ views::View* parent_container)
: network_(network),
callback_(callback),
+ parent_container_(parent_container),
connect_(NULL),
cancel_(NULL),
textfield_(NULL),
@@ -100,7 +102,7 @@
virtual ~PasswordView() {}
private:
- void CloseDialog(bool successful) { callback_.Run(successful); }
+ void Close(bool successful) { callback_.Run(successful); }
void OnKnownError(const std::string& error_name,
scoped_ptr<base::DictionaryValue> error_data) {
@@ -120,7 +122,7 @@
if (!error_msg_->parent()) {
AddChildView(error_msg_);
InvalidateLayout();
- GetWidget()->GetRootView()->Layout();
+ parent_container_->Layout();
ScrollRectToVisible(error_msg_->bounds());
}
connect_->SetEnabled(true);
@@ -147,7 +149,7 @@
check_error_state);
}
- void OnConnectionSucceed() { CloseDialog(true); }
+ void OnConnectionSucceed() { Close(true); }
// views::View:
virtual void ViewHierarchyChanged(
@@ -174,7 +176,7 @@
textfield_->text()),
base::Bind(&PasswordView::OnKnownError, weak_ptr_.GetWeakPtr()));
} else if (sender == cancel_) {
- CloseDialog(false);
+ Close(false);
} else {
NOTREACHED();
}
@@ -182,6 +184,7 @@
ui::NetworkInfo network_;
base::Callback<void(bool)> callback_;
+ views::View* parent_container_;
views::BlueButton* connect_;
views::LabelButton* cancel_;
@@ -196,8 +199,8 @@
// contains the View for taking password for password-protected networks.
class NetworkRow : public views::View {
public:
- NetworkRow(const ui::NetworkInfo& network)
- : network_(network), weak_ptr_(this) {
+ NetworkRow(const ui::NetworkInfo& network, views::View* container)
+ : network_(network), container_(container), weak_ptr_(this) {
SetBorder(views::Border::CreateEmptyBorder(10, 5, 10, 5));
SetLayoutManager(
new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 10));
@@ -227,7 +230,7 @@
void OnPasswordComplete(bool successful) {
password_view_.reset();
InvalidateLayout();
- GetWidget()->GetRootView()->Layout();
+ container_->Layout();
ScrollRectToVisible(GetContentsBounds());
}
@@ -246,11 +249,12 @@
password_view_.reset(new PasswordView(
network_,
- base::Bind(&NetworkRow::OnPasswordComplete, weak_ptr_.GetWeakPtr())));
+ base::Bind(&NetworkRow::OnPasswordComplete, weak_ptr_.GetWeakPtr()),
+ container_));
password_view_->set_owned_by_client();
AddChildView(password_view_.get());
PreferredSizeChanged();
- GetWidget()->GetRootView()->Layout();
+ container_->Layout();
ScrollRectToVisible(password_view_->bounds());
}
@@ -306,6 +310,7 @@
}
ui::NetworkInfo network_;
+ views::View* container_;
scoped_ptr<views::View> password_view_;
base::WeakPtrFactory<NetworkRow> weak_ptr_;
@@ -314,12 +319,15 @@
class NetworkSelector : public ui::NetworkListDelegate,
public chromeos::NetworkStateHandlerObserver,
- public views::DialogDelegate {
+ public ui::EventHandler {
public:
- NetworkSelector()
- : scroll_content_(NULL), scroller_(NULL), network_list_(this) {
+ explicit NetworkSelector(aura::Window* container)
+ : background_view_(NULL),
+ scroll_content_(NULL),
+ scroller_(NULL),
+ network_list_(this) {
+ CreateWidget(container);
CreateNetworkList();
- CreateWidget();
NetworkHandler::Get()->network_state_handler()->RequestScan();
NetworkHandler::Get()->network_state_handler()->AddObserver(this,
@@ -332,19 +340,36 @@
}
private:
- void CreateWidget() {
- // Same as CreateDialogWidgetWithBounds() with an empty |bounds|.
- views::Widget* widget = views::DialogDelegate::CreateDialogWidget(
- this, athena::ScreenManager::Get()->GetContext(), NULL);
- widget->Show();
- widget->CenterWindow(gfx::Size(400, 400));
+ void CreateWidget(aura::Window* container) {
+ views::Widget::InitParams params;
+ params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS;
+ params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
+ params.activatable = views::Widget::InitParams::ACTIVATABLE_DEFAULT;
+ params.accept_events = true;
+ params.bounds = gfx::Rect(container->bounds().size());
+ params.parent = container;
+ params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ widget_.reset(new views::Widget());
+ widget_->Init(params);
+ widget_->Show();
+
+ background_view_ = new views::View;
+ background_view_->set_background(
+ views::Background::CreateSolidBackground(kBackgroundColor));
+ background_view_->SetBorder(
+ views::Border::CreateEmptyBorder(100, 300, 300, 300));
+ background_view_->SetLayoutManager(new views::FillLayout());
+ background_view_->set_target_handler(this);
+
+ widget_->SetContentsView(background_view_);
}
void CreateNetworkList() {
- const int kListHeight = 400;
+ const int kListHeight = 500;
scroller_ = new views::ScrollView();
scroller_->set_background(
views::Background::CreateSolidBackground(SK_ColorWHITE));
+ scroller_->SetBounds(0, 0, 400, kListHeight);
scroll_content_ = new views::View;
scroll_content_->SetLayoutManager(
@@ -353,16 +378,21 @@
scroller_->ClipHeightTo(kListHeight, kListHeight);
scroller_->SetVerticalScrollBar(new views::OverlayScrollBar(false));
+ background_view_->AddChildView(scroller_);
+
+ background_view_->Layout();
network_list_.set_content_view(scroll_content_);
}
void UpdateNetworkList() { network_list_.UpdateNetworkList(); }
+
+ void Close() { delete this; }
// ui::NetworkListDelegate:
virtual views::View* CreateViewForNetwork(
const ui::NetworkInfo& info) override {
- return new NetworkRow(info);
+ return new NetworkRow(info, background_view_);
}
virtual bool IsViewHovered(views::View* view) override {
@@ -399,19 +429,25 @@
virtual void NetworkPropertiesUpdated(
const chromeos::NetworkState* network) override {}
- // views::DialogDelegate:
- virtual ui::ModalType GetModalType() const override {
- return ui::MODAL_TYPE_SYSTEM;
- }
- virtual void DeleteDelegate() override { delete this; }
- virtual views::Widget* GetWidget() override { return scroller_->GetWidget(); }
- virtual const views::Widget* GetWidget() const override {
- return scroller_->GetWidget();
- }
- virtual views::View* GetContentsView() override { return scroller_; }
- virtual int GetDialogButtons() const override { return ui::DIALOG_BUTTON_OK; }
- virtual bool Close() override { return true; }
-
+ // ui::EventHandler:
+ virtual void OnMouseEvent(ui::MouseEvent* mouse) override {
+ CHECK_EQ(background_view_, mouse->target());
+ if (mouse->type() == ui::ET_MOUSE_PRESSED && !mouse->handled()) {
+ Close();
+ mouse->SetHandled();
+ }
+ }
+
+ virtual void OnGestureEvent(ui::GestureEvent* gesture) override {
+ CHECK_EQ(background_view_, gesture->target());
+ if (gesture->type() == ui::ET_GESTURE_TAP && !gesture->handled()) {
+ Close();
+ gesture->SetHandled();
+ }
+ }
+
+ scoped_ptr<views::Widget> widget_;
+ views::View* background_view_;
views::View* scroll_content_;
views::ScrollView* scroller_;
@@ -426,8 +462,8 @@
namespace athena {
-void CreateNetworkSelector() {
- new NetworkSelector();
+void CreateNetworkSelector(aura::Window* container) {
+ new NetworkSelector(container);
}
} // namespace athena
« no previous file with comments | « athena/system/network_selector.h ('k') | athena/system/shutdown_dialog.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698