internal static void ModelessMessageBox(tvProfile aoProfile, string asNamespace, string asTitle, string asMessage)
        {
            String lcsMsgBoxExeName = "MessageBox.exe";

            System.Diagnostics.Process[] loProcessArray = System.Diagnostics.Process.GetProcessesByName(
                System.IO.Path.GetFileNameWithoutExtension(lcsMsgBoxExeName));

            if (loProcessArray.Length < aoProfile.iValue("-ModelessMessageBoxMaxCount", 3))
            {
                string lsMsgExePathFile = Path.Combine(
                    Path.GetDirectoryName(aoProfile.sExePathFile), lcsMsgBoxExeName);

                tvFetchResource.ToDisk(asNamespace, lcsMsgBoxExeName, lsMsgExePathFile);

                if (File.Exists(lsMsgExePathFile))
                {
                    System.Diagnostics.Process.Start(lsMsgExePathFile, String.Format(
                                                         "-Title=\"{0}: {1}\" -Message=\"{2}\""
                                                         , asNamespace.Replace("\"", "'")
                                                         , asTitle.Replace("\"", "'")
                                                         , asMessage.Replace("\"", "'")
                                                         ));
                }
            }
        }
Example #2
0
        // Scan data from the profile file to generate the cards for the deck.
        // ROBIN TODO: Generalize this method so that it works for cards with any properties (not just those specific to Monopoly Deal).
        public List <Card> GenerateDeck()
        {
            // Variables to hold temporary data.
            string          name;
            CardType        cardType;
            EnhancementType enhanceType;
            int             value;
            PropertyType    propertyType;
            PropertyType    altPropertyType;
            string          uriPath;
            string          soundUriPath;
            int             actionID;

            List <Card> cardList = new List <Card>();

            // Each card must have a unique ID.
            int cardID = 0;

            foreach (DictionaryEntry keyVal in Profile)
            {
                string    resourceName = keyVal.Key as string;
                tvProfile cardProfile  = Profile.oProfile(resourceName);

                for (int a = 0; a < cardProfile.iValue("-Count", 0); ++a)
                {
                    name            = cardProfile.sValue("-Name", "");
                    cardType        = (CardType)Enum.Parse(typeof(CardType), cardProfile.sValue("-CardType", ""));
                    enhanceType     = (EnhancementType)Enum.Parse(typeof(EnhancementType), cardProfile.sValue("-EnhancementType", "None"));
                    value           = cardProfile.iValue("-Value", 0);
                    propertyType    = (cardProfile.sValue("-PropertyType", "") == "") ? PropertyType.None : (PropertyType)Enum.Parse(typeof(PropertyType), cardProfile.sValue("-PropertyType", ""));
                    altPropertyType = (cardProfile.sValue("-AltPropertyType", "") == "") ? PropertyType.None : (PropertyType)Enum.Parse(typeof(PropertyType), cardProfile.sValue("-AltPropertyType", ""));
                    uriPath         = resourceName.Replace("-", string.Empty) + "DrawingImage";

                    string soundEffectFileName = cardProfile.sValue("-SoundEffectFile", string.Empty);
                    soundUriPath = string.IsNullOrWhiteSpace(soundEffectFileName) ? ResourceList.UriPathEmpty : ResourceList.UriPathAudioFolder + soundEffectFileName;

                    actionID = (cardProfile.sValue("-ActionID", "") == "") ? -1 : Convert.ToInt32((cardProfile.sValue("-ActionID", "")));

                    cardList.Add(new Card(name, cardType, value, propertyType, altPropertyType, uriPath, soundUriPath, actionID, cardID));

                    // Iterate the card ID so that it is different for the next card.
                    cardID++;
                }
            }

            return(cardList);
        }
Example #3
0
    public static tvMessageBoxResults Show(
        Window aoWindow
        , string asMessageText
        , string asMessageCaption
        , tvMessageBoxButtons aeTvMessageBoxButtons
        , tvMessageBoxIcons aeTvMessageBoxIcon
        , bool abShowModeless
        , tvMessageBoxCheckBoxTypes aeTvMessageBoxCheckBoxType
        , tvProfile aoProfile
        , string asProfilePromptKey
        , tvMessageBoxResults aeTvMessageBoxResultsOverride
        )
    {
        tvMessageBoxResults liTvMessageBoxResult = tvMessageBoxResults.None;

        string lsPromptAnswerKey = null;
        bool   lbUseCheckBox     = tvMessageBoxCheckBoxTypes.None != aeTvMessageBoxCheckBoxType;

        if (lbUseCheckBox)
        {
            // Insert the prompt key prefix if it's not already there. A common prefix
            // is necessary to allow for the removal of all prompt keys as needed.
            if (!asProfilePromptKey.StartsWith(msProfilePromptKeyPrefix))
            {
                // Strip leading hyphen.
                if (asProfilePromptKey.StartsWith("-"))
                {
                    asProfilePromptKey = asProfilePromptKey.Substring(1, asProfilePromptKey.Length - 1);
                }

                // Insert prefix.
                asProfilePromptKey = msProfilePromptKeyPrefix + asProfilePromptKey;
            }

            // Make the answer key from the prompt key and the prompt key suffix.
            lsPromptAnswerKey = asProfilePromptKey + msProfilePromptKeySuffix;

            // Only the first display of a modeless dialog can contain a checkbox.
            // Why? Because the first prompt is not modeless. That's the only way
            // to capture the checkbox value. BTW, "lbUseCheckBox" is reset here
            // for use outside of this block to avoid the default setting next.
            if (abShowModeless)
            {
                lbUseCheckBox = !aoProfile.ContainsKey(asProfilePromptKey);
            }

            if (!aoProfile.bValue(asProfilePromptKey, false) &&
                aoProfile.ContainsKey(lsPromptAnswerKey))
            {
                // Do not prompt. Return the previous stored answer instead.
                return((tvMessageBoxResults)aoProfile.iValue(
                           lsPromptAnswerKey, (int)tvMessageBoxResults.None));
            }
        }

        if (null == asMessageCaption)
        {
            // No caption provided. Let's try to get one another way.

            if (null != aoWindow)               // Try window title first.
            {
                asMessageCaption = aoWindow.Title;
            }
            else
            if (null != Application.Current && null != Application.Current.MainWindow)    // Next try for application name.
            {
                asMessageCaption = Application.Current.MainWindow.Name;
            }
            else
            {
                asMessageCaption = System.IO.Path.GetFileNameWithoutExtension(Application.ResourceAssembly.Location);
            }
        }

        if (null != aoWindow)
        {
            aoWindow.Cursor = null;             // Turn off wait cursor in parent window.
        }
        tvMessageBox loMsgBox = new tvMessageBox();

        loMsgBox.MessageText.Text = asMessageText;

        // Use some parent window attributes, if available.
        if (null != aoWindow)
        {
            // Use the parent window's icon.
            loMsgBox.Icon = aoWindow.Icon;

            // Use the given asMessageCaption as the MsgBox title, if not null.
            // Otherwise use the parent window title with an added question mark.
            loMsgBox.Title = null != asMessageCaption
                                    ? asMessageCaption : aoWindow.Title + "?";
        }

        // Display the MsgBox header / title (ie. the caption), if provided.
        if (null != asMessageCaption)
        {
            loMsgBox.MessageTitle.Content    = asMessageCaption;
            loMsgBox.MessageTitle.Visibility = Visibility.Visible;
        }

        loMsgBox.SelectButtons(aeTvMessageBoxButtons);
        loMsgBox.SelectIcon(aeTvMessageBoxIcon);

        if (lbUseCheckBox)
        {
            switch (aeTvMessageBoxCheckBoxType)
            {
            case tvMessageBoxCheckBoxTypes.DontAsk:
                loMsgBox.chkDontAsk.Visibility = Visibility.Visible;
                break;

            case tvMessageBoxCheckBoxTypes.SkipThis:
                loMsgBox.chkSkipThis.Visibility = Visibility.Visible;
                break;
            }
        }

        if (!abShowModeless)
        {
            loMsgBox.ShowDialog();
        }
        else
        {
            // It can only be modeless after the checkbox has been stored.
            if (lbUseCheckBox)
            {
                loMsgBox.ShowDialog();
            }
            else
            {
                loMsgBox.Show();
            }
        }

        if (lbUseCheckBox)
        {
            bool lbCheckBoxValue = false;

            switch (aeTvMessageBoxCheckBoxType)
            {
            case tvMessageBoxCheckBoxTypes.DontAsk:
                lbCheckBoxValue = (bool)loMsgBox.chkDontAsk.IsChecked;
                break;

            case tvMessageBoxCheckBoxTypes.SkipThis:
                lbCheckBoxValue = (bool)loMsgBox.chkSkipThis.IsChecked;
                break;
            }

            // Use the answer override whenever not "none". This value is
            // necessary for certain stored answers that don't make sense
            // in a given context (eg. both "skip this" and "cancel" selected).
            if (tvMessageBoxResults.None == aeTvMessageBoxResultsOverride)
            {
                aeTvMessageBoxResultsOverride = loMsgBox.eTvMessageBoxResult;
            }

            // Reverse the boolean. "Don't ask" or "Skip this" means "Don't prompt".
            aoProfile[asProfilePromptKey] = !lbCheckBoxValue;
            aoProfile[lsPromptAnswerKey]  = (int)aeTvMessageBoxResultsOverride;
            aoProfile.Save();
        }

        liTvMessageBoxResult = loMsgBox.eTvMessageBoxResult;

        return(liTvMessageBoxResult);
    }