43 void Set(
int px,
int py) {
x = px;
y = py; }
55 SizerSize(
int width = 0,
int height = 0) :
w(width),
h(height) {}
60 void Set(
int width,
int height) {
w = width;
h = height; }
72 SizerRect(
int x = 0,
int y = 0,
int width = 0,
int height = 0) :
p(x, y),
s(width, height) {}
79 void Set(
int x,
int y,
int w,
int h) {
p.
Set(x, y);
s.
Set(w, h); }
136 void Move(
int x,
int y,
int w,
int h);
166 DWORD style = GetWindowLong(window, GWL_STYLE);
167 AdjustWindowRectEx(&r,
169 (style & WS_CHILD) == 0 && GetMenu(window) != NULL,
170 GetWindowLong(window, GWL_EXSTYLE));
172 mmi->ptMinTrackSize.x = r.right - r.left;
173 mmi->ptMinTrackSize.y = r.bottom - r.top;
196 ISizer& operator= (
const ISizer& other) {
return *
this; }
238 virtual void OnRectChanged(
int x,
int y,
int w,
int h) { MoveWindow(window, x, y, w, h, TRUE); }
269 int GetHPadding() {
return leftPadding+rightPadding; }
270 int GetVPadding() {
return topPadding+bottomPadding; }
314 std::vector<ISizer*> items;
368 int GetTotalPadding() {
return items.empty() ? 0 : ((int)items.size()-1)*padding; }
374 int GetMajorCoord(
const SizerPoint& p)
const {
return horizontal ? p.
x : p.
y; }
375 int GetMinorCoord(
const SizerPoint& p)
const {
return horizontal ? p.
y : p.
x; }
376 int& MajorCoord(
SizerPoint& p)
const {
return horizontal ? p.
x : p.
y; }
377 int& MinorCoord(
SizerPoint& p)
const {
return horizontal ? p.
y : p.
x; }
378 SizerPoint PosFromMajorMinor(
int major,
int minor)
const {
return horizontal ?
SizerPoint(major, minor) : SizerPoint(minor, major); }
379 int GetMajorCoord(
const SizerSize& s)
const {
return horizontal ? s.
w : s.
h; }
380 int GetMinorCoord(
const SizerSize& s)
const {
return horizontal ? s.
h : s.
w; }
381 int& MajorCoord(
SizerSize& s)
const {
return horizontal ? s.
w : s.
h; }
382 int& MinorCoord(
SizerSize& s)
const {
return horizontal ? s.
h : s.
w; }
383 SizerSize SizeFromMajorMinor(
int major,
int minor)
const {
return horizontal ?
SizerSize(major, minor) : SizerSize(minor, major); }
397 std::vector<Item> items;
401 bool stretchInMinorDir;
404 std::vector<SizerSize> calcedSizes;
586 void Add(
ISizer* sizer,
size_t row,
size_t column,
size_t spannedRows = 1,
size_t spannedColumns = 1);
591 void Add(HWND window,
size_t row,
size_t column,
size_t spannedRows = 1,
size_t spannedColumns = 1) {
return Add(
new WindowSizer(window), row, column, spannedRows, spannedColumns); }
596 void Remove(
size_t row,
size_t column);
628 void EnsureCellExists(
size_t row,
size_t column);
629 int GetTotalPaddingX() {
return grid.totalColumns == 0 ? 0 : ((int)grid.totalColumns-1)*paddingX; }
630 int GetTotalPaddingY() {
return grid.totalRows == 0 ? 0 : ((int)grid.totalRows-1)*paddingY; }
634 class Grid :
public std::vector<T>
638 void SetSize(
size_t rows,
size_t columns, T defaultValue);
639 T& Get(
size_t row,
size_t column);
640 void Set(
size_t row,
size_t column,
const T& value);
650 Item(
ISizer* pSizer,
size_t row,
size_t column,
size_t spannedRows,
size_t spannedColumns)
655 startColumn = column;
657 spanRows = spannedRows < 1 ? 1 : spannedRows;
658 spanColumns = spannedRows < 1 ? 1 : spannedColumns;
661 ~Item() {
delete sizer; }
663 bool IsColumnSpan() {
return spanColumns > 1; }
664 bool IsRowSpan() {
return spanRows > 1; }
665 bool IsSpan() {
return IsColumnSpan() || IsRowSpan(); }
678 RowOrColumn() : proportion(0), allItemsSameSize(false) {}
681 bool allItemsSameSize;
684 std::vector<RowOrColumn> rows;
685 std::vector<RowOrColumn> columns;
688 std::vector<Item*> items;
696 std::vector<int> rowHeights;
697 std::vector<int> columnWidths;
698 Grid<SizerSize> calcedCellSizes;
736 std::vector<ISizer*> items;