// UpdateLayoutModels // Update the five default layouts based on the new ZoneCount private void UpdateLayoutModels() { // Update the "Focus" Default Layout _focusModel.Zones.Clear(); // Sanity check for imported settings that may have invalid data if (ZoneCount < 1) { ZoneCount = 3; } // If changing focus layout zones size and/or increment, // same change should be applied in ZoneSet.cpp (ZoneSet::CalculateFocusLayout) Int32Rect focusZoneRect = new Int32Rect(100, 100, (int)(WorkArea.Width * 0.4), (int)(WorkArea.Height * 0.4)); int focusRectXIncrement = (ZoneCount <= 1) ? 0 : 50; int focusRectYIncrement = (ZoneCount <= 1) ? 0 : 50; for (int i = 0; i < ZoneCount; i++) { _focusModel.Zones.Add(focusZoneRect); focusZoneRect.X += focusRectXIncrement; focusZoneRect.Y += focusRectYIncrement; } // Update the "Rows" and "Columns" Default Layouts // They can share their model, just transposed _rowsModel.CellChildMap = new int[ZoneCount, 1]; _columnsModel.CellChildMap = new int[1, ZoneCount]; _rowsModel.Rows = _columnsModel.Columns = ZoneCount; _rowsModel.RowPercents = _columnsModel.ColumnPercents = new List <int>(ZoneCount); for (int i = 0; i < ZoneCount; i++) { _rowsModel.CellChildMap[i, 0] = i; _columnsModel.CellChildMap[0, i] = i; // Note: This is NOT equal to _multiplier / ZoneCount and is done like this to make // the sum of all RowPercents exactly (_multiplier). // _columnsModel is sharing the same array _rowsModel.RowPercents.Add(((_multiplier * (i + 1)) / ZoneCount) - ((_multiplier * i) / ZoneCount)); } // Update the "Grid" Default Layout int rows = 1; while (ZoneCount / rows >= rows) { rows++; } rows--; int cols = ZoneCount / rows; if (ZoneCount % rows == 0) { // even grid } else { cols++; } _gridModel.Rows = rows; _gridModel.Columns = cols; _gridModel.RowPercents = new List <int>(rows); _gridModel.ColumnPercents = new List <int>(cols); _gridModel.CellChildMap = new int[rows, cols]; // Note: The following are NOT equal to _multiplier divided by rows or columns and is // done like this to make the sum of all RowPercents exactly (_multiplier). for (int row = 0; row < rows; row++) { _gridModel.RowPercents.Add(((_multiplier * (row + 1)) / rows) - ((_multiplier * row) / rows)); } for (int col = 0; col < cols; col++) { _gridModel.ColumnPercents.Add(((_multiplier * (col + 1)) / cols) - ((_multiplier * col) / cols)); } int index = ZoneCount - 1; for (int col = cols - 1; col >= 0; col--) { for (int row = rows - 1; row >= 0; row--) { _gridModel.CellChildMap[row, col] = index--; if (index < 0) { index = 0; } } } // Update the "Priority Grid" Default Layout if (ZoneCount <= _priorityData.Length) { _priorityGridModel.Reload(_priorityData[ZoneCount - 1]); } else { // same as grid; _priorityGridModel.Rows = _gridModel.Rows; _priorityGridModel.Columns = _gridModel.Columns; _priorityGridModel.RowPercents = _gridModel.RowPercents; _priorityGridModel.ColumnPercents = _gridModel.ColumnPercents; _priorityGridModel.CellChildMap = _gridModel.CellChildMap; } }
// UpdateLayoutModels // Update the five default layouts based on the new ZoneCount private void UpdateLayoutModels() { // Update the "Focus" Default Layout _focusModel.Zones.Clear(); Int32Rect focusZoneRect = new Int32Rect((int)(_focusModel.ReferenceWidth * 0.1), (int)(_focusModel.ReferenceHeight * 0.1), (int)(_focusModel.ReferenceWidth * 0.6), (int)(_focusModel.ReferenceHeight * 0.6)); int focusRectXIncrement = (ZoneCount <= 1) ? 0 : (int)(_focusModel.ReferenceWidth * 0.2) / (ZoneCount - 1); int focusRectYIncrement = (ZoneCount <= 1) ? 0 : (int)(_focusModel.ReferenceHeight * 0.2) / (ZoneCount - 1); for (int i = 0; i < ZoneCount; i++) { _focusModel.Zones.Add(focusZoneRect); focusZoneRect.X += focusRectXIncrement; focusZoneRect.Y += focusRectYIncrement; } // Update the "Rows" and "Columns" Default Layouts // They can share their model, just transposed _rowsModel.CellChildMap = new int[ZoneCount, 1]; _columnsModel.CellChildMap = new int[1, ZoneCount]; _rowsModel.Rows = _columnsModel.Columns = ZoneCount; _rowsModel.RowPercents = _columnsModel.ColumnPercents = new int[ZoneCount]; for (int i = 0; i < ZoneCount; i++) { _rowsModel.CellChildMap[i, 0] = i; _columnsModel.CellChildMap[0, i] = i; _rowsModel.RowPercents[i] = _multiplier / ZoneCount; // _columnsModel is sharing the same array } // Update the "Grid" Default Layout int rows = 1; while (ZoneCount / rows >= rows) { rows++; } rows--; int cols = ZoneCount / rows; if (ZoneCount % rows == 0) { // even grid } else { cols++; } _gridModel.Rows = rows; _gridModel.Columns = cols; _gridModel.RowPercents = new int[rows]; _gridModel.ColumnPercents = new int[cols]; _gridModel.CellChildMap = new int[rows, cols]; for (int row = 0; row < rows; row++) { _gridModel.RowPercents[row] = _multiplier / rows; } for (int col = 0; col < cols; col++) { _gridModel.ColumnPercents[col] = _multiplier / cols; } int index = 0; for (int col = cols - 1; col >= 0; col--) { for (int row = rows - 1; row >= 0; row--) { _gridModel.CellChildMap[row, col] = index++; if (index == ZoneCount) { index--; } } } // Update the "Priority Grid" Default Layout if (ZoneCount <= _priorityData.Length) { _priorityGridModel.Reload(_priorityData[ZoneCount - 1]); } else { // same as grid; _priorityGridModel.Rows = _gridModel.Rows; _priorityGridModel.Columns = _gridModel.Columns; _priorityGridModel.RowPercents = _gridModel.RowPercents; _priorityGridModel.ColumnPercents = _gridModel.ColumnPercents; _priorityGridModel.CellChildMap = _gridModel.CellChildMap; } }