internal static IPlayingSurfaceType AskUserForFieldType(bool saveAsDefaultChecked) { using (SelectPlayingSurfaceType sftDialog = new SelectPlayingSurfaceType()) { sftDialog.saveAsDefaultCheckBox.Checked = saveAsDefaultChecked; sftDialog.fieldTypeComboBox.DataSource = MainForm.AvailableFieldTypes; sftDialog.fieldTypeComboBox.DisplayMember = "Name"; if (sftDialog.fieldTypeComboBox.Items.Count > 0) { string defaultFieldType = global::SportsTacticsBoard.Properties.Settings.Default.DefaultFieldType; int selectedIndex = 0; if (defaultFieldType.Length > 0) { int index = sftDialog.fieldTypeComboBox.FindStringExact(defaultFieldType); if (index >= 0) { selectedIndex = index; } } sftDialog.fieldTypeComboBox.SelectedIndex = selectedIndex; } if (sftDialog.ShowDialog() != DialogResult.OK) { return(null); } IPlayingSurfaceType selectedFieldType = (IPlayingSurfaceType)sftDialog.fieldTypeComboBox.SelectedItem; if (sftDialog.saveAsDefaultCheckBox.Checked) { global::SportsTacticsBoard.Properties.Settings.Default.DefaultFieldType = selectedFieldType.Name; global::SportsTacticsBoard.Properties.Settings.Default.Save(); } return(selectedFieldType); } }
private void CalculateFieldGeometry(Size windowSize) { IPlayingSurfaceType ft = FieldType; if (null != ft) { // TESTING: Values to determine where the "viewport" is (centre-point of the zoom/window, zoom ratio (1.0 is unity)) // Calculate the ratio used to scale field units into pixels float ratioX = windowSize.Width / (ft.Length + (ft.Margin * 2.0F)); float ratioY = windowSize.Height / (ft.Width + (ft.Margin * 2.0F)); float ratio = (ratioX < ratioY) ? ratioX : ratioY; ratio *= zoomFactor; Point fieldOriginPositionInDisplayUnits = new Point(windowSize.Width / 2 - (int)Math.Round(ratio * zoomPoint.X), windowSize.Height / 2 - (int)Math.Round(ratio * zoomPoint.Y)); // NOTE: The order of these transforms is important. fieldToDisplayTransform = new Matrix(); fieldToDisplayTransform.Translate(fieldOriginPositionInDisplayUnits.X, fieldOriginPositionInDisplayUnits.Y); fieldToDisplayTransform.Scale(ratio, ratio); fieldToDisplayTransform.RotateAt(rotationAngle, zoomPoint); } else { fieldToDisplayTransform = new Matrix(); } // Create the reverse transform matrix displayToFieldTransfom = fieldToDisplayTransform.Clone(); if (displayToFieldTransfom.IsInvertible) { displayToFieldTransfom.Invert(); } }