1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file.
44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_GENERIC_INFO_VIEW_H_
64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_GENERIC_INFO_VIEW_H_
74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once
84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "base/gtest_prod_util.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "base/string16.h"
124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/view.h"
134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace views {
154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass GridLayout;
164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Label;
174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Textfield;
184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}
194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// GenericInfoView, displays a tabular grid of read-only textual information,
214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// <name, value> pairs. The fixed number of rows must be known at the time of
224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// construction.
234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass GenericInfoView : public views::View {
244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Constructs a info view with |number_of_rows| and populated with
264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // empty strings.
274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  explicit GenericInfoView(int number_of_rows);
284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Constructs a info view with |number_of_rows|, and populates
304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // the name column with localized strings having the given
314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // |name_string_ids|. The array of ids should contain |number_of_rows|
324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // values and should remain valid for the life of the view.
334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  GenericInfoView(int number_of_rows, const int name_string_ids[]);
344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // The following methods should only be called after
364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // the view has been added to a view hierarchy.
374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void SetNameByStringId(int row, int id);
384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void SetName(int row, const string16& name);
394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void SetValue(int row, const string16& value);
404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void ClearValues() {
414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    const string16 kEmptyString;
424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    for (int i = 0; i < number_of_rows_; ++i)
434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      SetValue(i, kEmptyString);
444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  }
454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch protected:
474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // views::View override
484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void ViewHierarchyChanged(
494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      bool is_add, views::View* parent, views::View* child);
504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private:
524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  FRIEND_TEST_ALL_PREFIXES(GenericInfoViewTest, GenericInfoView);
534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void InitGenericInfoView();
554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void AddRow(int layout_id, views::GridLayout* layout,
564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch              views::Label* name, views::Textfield* value);
574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  const int number_of_rows_;
594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  const int* name_string_ids_;
604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  scoped_array<views::Label*> name_views_;
614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  scoped_array<views::Textfield*> value_views_;
624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(GenericInfoView);
644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif  // CHROME_BROWSER_UI_VIEWS_GENERIC_INFO_VIEW_H_
674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
68