910e62b5创建于 1月15日历史提交
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_VIEWS_LAYOUT_TABLE_LAYOUT_VIEW_H_
#define UI_VIEWS_LAYOUT_TABLE_LAYOUT_VIEW_H_

#include <memory>
#include <vector>

#include "base/memory/raw_ptr.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/views/layout/layout_types.h"
#include "ui/views/layout/table_layout.h"
#include "ui/views/metadata/view_factory.h"
#include "ui/views/view.h"

namespace views {

class VIEWS_EXPORT TableLayoutView : public View {
  METADATA_HEADER(TableLayoutView, View)

 public:
  TableLayoutView() = default;
  TableLayoutView(const TableLayoutView&) = delete;
  TableLayoutView& operator=(const TableLayoutView&) = delete;
  ~TableLayoutView() override = default;

  // The following surface the corresponding APIs from TableLayout. See the
  // comments/documentation on TableLayout for more information.
  TableLayoutView& AddColumn(LayoutAlignment h_align,
                             LayoutAlignment v_align,
                             float horizontal_resize,
                             TableLayout::ColumnSize size_type,
                             int fixed_width,
                             int min_width);
  TableLayoutView& AddPaddingColumn(float horizontal_resize, int width);
  TableLayoutView& AddRows(size_t n, float vertical_resize, int height = 0);
  TableLayoutView& AddPaddingRow(float vertical_resize, int height);
  TableLayoutView& LinkColumnSizes(std::vector<size_t> columns);
  TableLayoutView& SetLinkedColumnSizeLimit(int size_limit);
  TableLayoutView& SetMinimumSize(const gfx::Size& size);

 private:
  raw_ptr<TableLayout> table_layout_ =
      SetLayoutManager(std::make_unique<TableLayout>());
};

BEGIN_VIEW_BUILDER(VIEWS_EXPORT, TableLayoutView, View)
VIEW_BUILDER_METHOD(AddColumn,
                    views::LayoutAlignment,
                    views::LayoutAlignment,
                    float,
                    views::TableLayout::ColumnSize,
                    int,
                    int)
VIEW_BUILDER_METHOD(AddPaddingColumn, float, int)
VIEW_BUILDER_METHOD(AddRows, size_t, float, int)
VIEW_BUILDER_METHOD(AddPaddingRow, float, int)
VIEW_BUILDER_METHOD(LinkColumnSizes, std::vector<size_t>)
VIEW_BUILDER_PROPERTY(int, LinkedColumnSizeLimit)
VIEW_BUILDER_PROPERTY(gfx::Size, MinimumSize)
END_VIEW_BUILDER

}  // namespace views

DEFINE_VIEW_BUILDER(VIEWS_EXPORT, TableLayoutView)

#endif  // UI_VIEWS_LAYOUT_TABLE_LAYOUT_VIEW_H_