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);
     }
 }
Ejemplo n.º 2
0
        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();
            }
        }