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

Unified Diff: chrome/browser/views/options/geolocation_exceptions_view.cc

Issue 1539021: Geolocation exceptions window, Windows.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 9 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 | « chrome/browser/views/options/geolocation_exceptions_view.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/views/options/geolocation_exceptions_view.cc
===================================================================
--- chrome/browser/views/options/geolocation_exceptions_view.cc (revision 0)
+++ chrome/browser/views/options/geolocation_exceptions_view.cc (revision 0)
@@ -0,0 +1,180 @@
+// Copyright (c) 2010 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 "chrome/browser/views/options/geolocation_exceptions_view.h"
+
+#include <algorithm>
+#include <vector>
+
+#include "app/l10n_util.h"
+#include "grit/generated_resources.h"
+#include "grit/locale_settings.h"
+#include "gfx/rect.h"
+#include "views/controls/button/native_button.h"
+#include "views/controls/table/table_view.h"
+#include "views/grid_layout.h"
+#include "views/standard_layout.h"
+#include "views/window/window.h"
+
+static const int kExceptionsViewInsetSize = 5;
+static GeolocationExceptionsView* instance = NULL;
+
+// static
+void GeolocationExceptionsView::ShowExceptionsWindow(
+ gfx::NativeWindow parent,
+ GeolocationContentSettingsMap* map) {
+ if (!instance) {
+ instance = new GeolocationExceptionsView(map);
+ views::Window::CreateChromeWindow(parent, gfx::Rect(), instance);
+ }
+
+ // This will show invisible windows and bring visible windows to the front.
+ instance->window()->Show();
+}
+
+GeolocationExceptionsView::~GeolocationExceptionsView() {
+ instance = NULL;
+ table_->SetModel(NULL);
+}
+
+void GeolocationExceptionsView::OnSelectionChanged() {
+ UpdateButtonState();
+}
+
+void GeolocationExceptionsView::OnTableViewDelete(
+ views::TableView* table_view) {
+ Remove();
+}
+
+void GeolocationExceptionsView::ButtonPressed(views::Button* sender,
+ const views::Event& event) {
+ switch (sender->tag()) {
+ case IDS_EXCEPTIONS_REMOVEALL_BUTTON:
+ RemoveAll();
+ break;
+ case IDS_EXCEPTIONS_REMOVE_BUTTON:
+ Remove();
+ break;
+ default:
+ NOTREACHED();
+ }
+}
+
+void GeolocationExceptionsView::Layout() {
+ views::NativeButton* buttons[] = { remove_button_, remove_all_button_ };
+
+ // The buttons are placed in the parent, but we need to lay them out.
+ int max_y = GetParent()->GetLocalBounds(false).bottom() - kButtonVEdgeMargin;
+ int x = kPanelHorizMargin;
+
+ for (size_t i = 0; i < arraysize(buttons); ++i) {
+ gfx::Size pref = buttons[i]->GetPreferredSize();
+ buttons[i]->SetBounds(x, max_y - pref.height(), pref.width(),
+ pref.height());
+ x += pref.width() + kRelatedControlHorizontalSpacing;
+ }
+
+ // Lay out the rest of this view.
+ View::Layout();
+}
+
+gfx::Size GeolocationExceptionsView::GetPreferredSize() {
+ return gfx::Size(views::Window::GetLocalizedContentsSize(
+ IDS_GEOLOCATION_EXCEPTION_DIALOG_WIDTH_CHARS,
+ IDS_GEOLOCATION_EXCEPTION_DIALOG_HEIGHT_LINES));
+}
+
+void GeolocationExceptionsView::ViewHierarchyChanged(bool is_add,
+ views::View* parent,
+ views::View* child) {
+ if (is_add && child == this)
+ Init();
+}
+
+std::wstring GeolocationExceptionsView::GetWindowTitle() const {
+ return l10n_util::GetString(IDS_GEOLOCATION_EXCEPTION_TITLE);
+}
+
+GeolocationExceptionsView::GeolocationExceptionsView(
+ GeolocationContentSettingsMap* map)
+ : model_(map),
+ table_(NULL),
+ remove_button_(NULL),
+ remove_all_button_(NULL) {
+}
+
+void GeolocationExceptionsView::Init() {
+ if (table_)
+ return; // We've already Init'd.
+
+ using views::GridLayout;
+
+ std::vector<TableColumn> columns;
+ columns.push_back(
+ TableColumn(IDS_EXCEPTIONS_HOSTNAME_HEADER, TableColumn::LEFT, -1, .75));
+ columns.back().sortable = true;
+ columns.push_back(
+ TableColumn(IDS_EXCEPTIONS_ACTION_HEADER, TableColumn::LEFT, -1, .25));
+ columns.back().sortable = true;
+ table_ = new views::TableView(&model_, columns, views::TEXT_ONLY, false, true,
+ false);
+ views::TableView::SortDescriptors sort;
+ sort.push_back(
+ views::TableView::SortDescriptor(IDS_EXCEPTIONS_HOSTNAME_HEADER, true));
+ table_->SetSortDescriptors(sort);
+ table_->SetObserver(this);
+
+ remove_button_ = new views::NativeButton(
+ this, l10n_util::GetString(IDS_EXCEPTIONS_REMOVE_BUTTON));
+ remove_button_->set_tag(IDS_EXCEPTIONS_REMOVE_BUTTON);
+ remove_all_button_ = new views::NativeButton(
+ this, l10n_util::GetString(IDS_EXCEPTIONS_REMOVEALL_BUTTON));
+ remove_all_button_->set_tag(IDS_EXCEPTIONS_REMOVEALL_BUTTON);
+
+ View* parent = GetParent();
+ parent->AddChildView(remove_button_);
+ parent->AddChildView(remove_all_button_);
+
+ GridLayout* layout = new GridLayout(this);
+ layout->SetInsets(kExceptionsViewInsetSize, kExceptionsViewInsetSize,
+ kExceptionsViewInsetSize, kExceptionsViewInsetSize);
+ SetLayoutManager(layout);
+
+ const int single_column_layout_id = 0;
+ views::ColumnSet* column_set = layout->AddColumnSet(single_column_layout_id);
+ column_set->AddPaddingColumn(0, kRelatedControlHorizontalSpacing);
+ column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1,
+ GridLayout::USE_PREF, 0, 0);
+ layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
+
+ layout->StartRow(1, single_column_layout_id);
+ layout->AddView(table_);
+ layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
+
+ UpdateButtonState();
+}
+
+GeolocationContentSettingsTableModel::Rows
+ GeolocationExceptionsView::GetSelectedRows() const {
+ GeolocationContentSettingsTableModel::Rows rows;
+ for (views::TableView::iterator i(table_->SelectionBegin());
+ i != table_->SelectionEnd(); ++i)
+ rows.insert(*i);
+ return rows;
+}
+
+void GeolocationExceptionsView::UpdateButtonState() {
+ remove_button_->SetEnabled(model_.CanRemoveExceptions(GetSelectedRows()));
+ remove_all_button_->SetEnabled(model_.RowCount() > 0);
+}
+
+void GeolocationExceptionsView::Remove() {
+ model_.RemoveExceptions(GetSelectedRows());
+ UpdateButtonState();
+}
+
+void GeolocationExceptionsView::RemoveAll() {
+ model_.RemoveAll();
+ UpdateButtonState();
+}
Property changes on: chrome/browser/views/options/geolocation_exceptions_view.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « chrome/browser/views/options/geolocation_exceptions_view.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698