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("\"", "'") )); } } }
// 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); }
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); }