Esempio n. 1
0
        public static String GetErrorForKey(IProject project, IModeElement modeElement, int key)
        {
            IMode elementMode = null;

            foreach (IMode mode in project.GetModes())
            {
                if (mode.KeyCode == key)
                {
                    return(String.Format(StringResources.KeyUsedByMode, mode.Title));
                }
                if (mode.GetElements().Contains(modeElement))
                {
                    elementMode = mode;
                }
            }
            if (elementMode != null)
            {
                foreach (IModeElement element in elementMode.GetElements())
                {
                    if (element != modeElement && element.Trigger != null && element.Trigger.TriggerType == TriggerType.Key &&
                        (element.Trigger as IKeyTrigger).KeyCode == key)
                    {
                        return(String.Format(StringResources.KeyUsedByModeElement, element.Title));
                    }
                }
            }
            if (s_GlobalReservedKeys.ContainsKey(key))
            {
                return(StringResources.KeyGloballyReserved);
            }

            return(String.Empty);
        }
Esempio n. 2
0
 public override void DoChecks(Data.IProject project, Ares.ModelInfo.IModelErrors errors, CancellationToken ct)
 {
     System.Windows.Forms.KeysConverter converter = new System.Windows.Forms.KeysConverter();
     for (int i = 0; i < project.GetModes().Count; ++i)
     {
         IMode mode = project.GetModes()[i];
         // check: no empty key
         if (mode.KeyCode == 0)
         {
             /*
              * AddError(errors, ModelError.ErrorSeverity.Warning,
              *  String.Format(StringResources.ModeNoKey, mode.Title), mode);
              */
         }
         else
         {
             // check: no globally reserved key
             if (s_GlobalReservedKeys.ContainsKey(mode.KeyCode))
             {
                 AddError(errors, Ares.ModelInfo.ModelError.ErrorSeverity.Error,
                          String.Format(StringResources.ModeKeyGloballyReserved,
                                        converter.ConvertToString((System.Windows.Forms.Keys)mode.KeyCode)), mode);
             }
             // check: key not used by another mode
             for (int j = i + 1; j < project.GetModes().Count; ++j)
             {
                 if (project.GetModes()[j].KeyCode == mode.KeyCode)
                 {
                     AddError(errors, Ares.ModelInfo.ModelError.ErrorSeverity.Error,
                              String.Format(StringResources.DuplicateModeKey,
                                            converter.ConvertToString((System.Windows.Forms.Keys)mode.KeyCode),
                                            mode.Title, project.GetModes()[j].Title), mode);
                 }
             }
         }
         // check mode elements
         for (int j = 0; j < mode.GetElements().Count; ++j)
         {
             IModeElement modeElement = mode.GetElements()[j];
             // get key code, if there is one
             int keyCode = 0;
             if (modeElement.Trigger != null)
             {
                 if (modeElement.Trigger.TriggerType == TriggerType.Key)
                 {
                     keyCode = ((IKeyTrigger)modeElement.Trigger).KeyCode;
                 }
                 else
                 {
                     // no key trigger, no checks
                     continue;
                 }
             }
             // check: no empty key
             if (keyCode == 0)
             {
                 /*
                  * AddError(errors, ModelError.ErrorSeverity.Warning,
                  *  String.Format(StringResources.ModeElementNoKey, modeElement.Title), modeElement);
                  */
             }
             else
             {
                 // check: no globally reserved key
                 if (s_GlobalReservedKeys.ContainsKey(keyCode))
                 {
                     AddError(errors, Ares.ModelInfo.ModelError.ErrorSeverity.Error,
                              String.Format(StringResources.ModeElementKeyGloballyReserved,
                                            converter.ConvertToString((System.Windows.Forms.Keys)keyCode)), modeElement);
                 }
                 // check: key not used by a mode
                 for (int k = 0; k < project.GetModes().Count; ++k)
                 {
                     if (project.GetModes()[k].KeyCode == keyCode)
                     {
                         AddError(errors, Ares.ModelInfo.ModelError.ErrorSeverity.Error,
                                  String.Format(StringResources.ModeElementKeyUsedByMode,
                                                converter.ConvertToString((System.Windows.Forms.Keys)keyCode),
                                                modeElement.Title, project.GetModes()[k].Title), modeElement);
                     }
                 }
                 // check: key not used by another element in the same mode
                 for (int k = j + 1; k < mode.GetElements().Count; ++k)
                 {
                     IModeElement other = mode.GetElements()[k];
                     if (other.Trigger != null && other.Trigger.TriggerType == TriggerType.Key)
                     {
                         if (((IKeyTrigger)other.Trigger).KeyCode == keyCode)
                         {
                             AddError(errors, Ares.ModelInfo.ModelError.ErrorSeverity.Error,
                                      String.Format(StringResources.DuplicateModeElementKey,
                                                    converter.ConvertToString((System.Windows.Forms.Keys)keyCode),
                                                    modeElement.Title, other.Title), modeElement);
                         }
                     }
                 }
             }
             ct.ThrowIfCancellationRequested();
         }
     }
 }