topbanner_forum
  *

avatar image

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
  • Thursday March 28, 2024, 10:39 am
  • Proudly celebrating 15+ years online.
  • Donate now to become a lifetime supporting member of the site and get a non-expiring license key for all of our programs.
  • donate

Last post Author Topic: NANY 2012 RELEASE: Christian Prayer Minder  (Read 70696 times)

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
NANY 2012 RELEASE: Christian Prayer Minder
« on: December 07, 2011, 08:00 AM »
NANY 2012 Entry Information

Application Name Christian Prayer Minder
Version 1.0.5.8 (attention: prayer files from versions prior to 1.0.0.9 aren't compatible with later versions of the program; If you currently have v1.0.1.1 or earlier installed, please manually install version 1.0.5.8 after uninstalling any previous version. From now on, you should be able to update from within the program as usual. If you have v1.0.1.2 or later installer, you should be able to download the updated installer from within your currently running program.)
Short Descriptionprovides informative texts on prayer-related topics, plus enables easy save/retrieve/edit prayer files, and searching prayer files based on tags and/or author
Supported OSes Windows XP forward
Setup File (4.8 M) http://kyrathaba.dcm...count/click.php?id=8
Memory Footprintabout 6,680 Kb (this will increase slightly when many prayers have been searched)
System Requirementsrequires .NET Framework v4.0 (program detects if absent, and will download/install it if permission is given)
Author InfoDC member kyrathaba, developer of these other NANY 2012 entries: Found Money, Kyrathaba's Hangman, and Source Code Line Counter. My past NANY entries include: Crocus Contacts, Blackjack, and NANY Excuse Manager.
DescriptionI realize that there are relatively few Christianity adherents here. Nevertheless, for those of us who are, I believe that this program offers something valuable. I began thinking about writing this application several weeks ago, after a series of conversations with my pastor in which we discussed how it's often difficult to concentrate while trying to pray. We've also discussed the need for a tool that acts as a prayer reminder, and one that can track written prayers and offer search functionality. Finally, we wanted a tool that allows the user to come back at a later time to a prayer and offer thoughts/insights into prayer-answers, or meditations on the prayer itself.  This tool will also, in future updates, allow the user to customize prompts and prompt-frequencies for various types of prayer (praise, intercession, supplication, etc.) The program could also be used to store diary/journal entries, although that isn't its intended purpose.
Screencast
Features
  • built-in CHM Help file
  • pray at the speed of typing (for me, that's about 85 wpm)
  • enter author, and any related tags to help in future searches (or omit them)
  • main form features fantastic background images, many of them by J. R. Bell
  • twelve fore-/back-color schemes for the "My Prayers" panel
  • option to launch application when Windows starts
  • ten in-depth articles on prayer-related topics
  • articles on spiritual disciplines, and the Biblical plan of salvation
  • ability to print the article, or whatever portion of its text is selected
  • recommended further reading (some titles with accompanying URLs)
  • real-time filesystem watcher monitors for creation/deletion/renaming of prayer files
  • informative message-boxes
  • program uses index files to make searching for specific prayer files faster
  • warns user if they attempt to save a prayer file in a non-MyPrayers directory
  • error-trapping correctly detects and handles case where user attempts to load a non-PrayerMinder file
  • click a Search result in ListBox to view its filename, lastModified date, path to file, Author, and tags
  • double-click the Search result entry to load that prayer file
  • zero Registry footprint
  • you can now increase or decrease font size in the MyPrayers textbox by selecting your desired font size in Options
  • three ways to exit application: close button, file menu, or Escape key
  • optional "Did You Know" dialog at program startup
  • search either by author and/or tags, using indexes (fast: on the order of milliseconds)
  • search within prayer file contents for a search phrase, returning all files that contain that search phrase (slow: seconds, not milliseconds)
  • if you double-click a Search results listbox entry and it is the result of a search-within-for-phrase Search, the search-phrase is highlighted when the prayer file is loaded
  • smart-saving removes any excess whitespace from the prayer before saving it
  • option to set a backup directory (makes program compatible with using Dropbox for backing up the program's data files)
  • full list of features  [url=http://kyrathaba.dcmembers.com/downloads.htm#prayerMinderFeatures]here
Favorite method in this project: bgWorkerSearch_DoWork()
Spoiler
Code: C# [Select]
  1. void bgWorkerSearch_DoWork (object sender, DoWorkEventArgs e) {
  2.  
  3.             log.write("We have entered the background worker that does the heavy-lifting in Searches...");
  4.             DateTime _start = DateTime.Now;
  5.             clsSearcherArgument arg = (clsSearcherArgument)e.Argument;
  6.  
  7.             #region ifDebuggerAttachedGiveSomeInfo
  8.  
  9.             if (Debugger.IsAttached) {
  10.  
  11.                 string msg = "Search type: " + ((SearchType)arg.SearchType).ToString() + Environment.NewLine;
  12.  
  13.                 msg += "Search ";
  14.                 msg += (arg.SearchType == (int)SearchType.SearchWithinFiles) ? " phrase: " : " tag(s): ";
  15.                 if (arg.searchPhraseOrTags.Length > 0) {
  16.                     msg += arg.searchPhraseOrTags + Environment.NewLine;
  17.                 } else {
  18.                     msg += "[none]" + Environment.NewLine;
  19.                 }
  20.  
  21.                 msg += "Author filter: ";
  22.                 if (arg.searchedForAuthor.Length > 0) {
  23.                     msg += arg.searchedForAuthor + Environment.NewLine;
  24.                 } else {
  25.                     msg += "[none]" + Environment.NewLine;
  26.                 }
  27.  
  28.                 msg += "Time constraint: " + ((TimeConstraint)arg.timeConstraint).ToString();
  29.  
  30.                 MessageBox.Show(msg);
  31.  
  32.             }
  33.  
  34.             #endregion
  35.  
  36.             #region setUpNeededVariables            
  37.  
  38.             DirectoryInfo di = new DirectoryInfo(pathToMyPrayers);
  39.             FileInfo[] fi = di.GetFiles();
  40.             List<clsPrayerInfo> information = new List<clsPrayerInfo>();
  41.            
  42.             int totalPrayerFiles = fi.GetLength(0);
  43.             string searchedForAuthor = arg.searchedForAuthor.Trim().ToLower();
  44.             string searchedForPhrase = arg.searchPhraseOrTags.Trim().ToLower();            
  45.             int examined_so_far = 0;
  46.             int hits = 0;
  47.             int time_constraint = arg.timeConstraint;
  48.             double totalSeconds = 0;
  49.             bool blnPassesTimeConstraint;
  50.             bool blnPassesAuthor;
  51.             bool blnPassesSearchPhrase;
  52.             decimal fraction = 0;
  53.             int the_percent = 0;
  54.  
  55.             for (int i = 0; i < totalPrayerFiles; i++) {
  56.                 if (fi[i].FullName.ToLower().Contains("thumbs.db")) { totalPrayerFiles--; }
  57.             }
  58.  
  59.             #endregion
  60.  
  61.             if (arg.SearchType == (int)SearchType.SearchWithinFiles) {
  62.  
  63.                 log.write("About to enter foreach loop for searching within files...");
  64.                
  65.                 foreach (FileInfo f in fi) {
  66.                
  67.                     blnPassesTimeConstraint = false;
  68.                     blnPassesAuthor = false;
  69.                     blnPassesSearchPhrase = false;
  70.                    
  71.                     if (f.FullName.ToLower().Contains("thumbs.db")) { continue; }
  72.                    
  73.                     #region codeForExaminingWithinPrayerFileContents
  74.                    
  75.                     blnPassesAuthor = true; //because SearchWithinFiles doesn't care about the author                  
  76.                     FileStream fs = new FileStream(f.FullName, FileMode.Open, FileAccess.Read, FileShare.None);
  77.                     clsPrayerInfo oInfo = new clsPrayerInfo();                    
  78.  
  79.                     try {
  80.                         BinaryFormatter bFormatter = new BinaryFormatter();
  81.                         clsPrayer prayer = (clsPrayer)bFormatter.Deserialize(fs);
  82.                         string contents = prayer.content.Trim().ToLower();
  83.                         if (contents.Contains(searchedForPhrase)) {
  84.                             blnPassesSearchPhrase = true;
  85.                             oInfo = new clsPrayerInfo(prayer, f.FullName);
  86.                             int selStart = contents.IndexOf(searchedForPhrase);
  87.                             oInfo.StartOfSelection = selStart;                            
  88.                             #region determineIfWePassTheTimeConstraint
  89.                             if (time_constraint == (int)TimeConstraint.NoConstraint) {
  90.                                 blnPassesTimeConstraint = true;
  91.                             } else {
  92.                                 DateTime rightNow = DateTime.Now;
  93.                                 TimeSpan ts = rightNow.Subtract(oInfo.lastModified);
  94.                                 totalSeconds = ts.TotalSeconds;
  95.                                 switch (time_constraint) {
  96.                                     case (int)TimeConstraint.PastWeek:
  97.                                         if (totalSeconds <= 604800) { blnPassesTimeConstraint = true; }
  98.                                         break;
  99.                                     case (int)TimeConstraint.PastMonth:
  100.                                         if (totalSeconds <= 2592000) { blnPassesTimeConstraint = true; }
  101.                                         break;
  102.                                     case (int)TimeConstraint.PastYear:
  103.                                         if (totalSeconds <= 31536000) { blnPassesTimeConstraint = true; }
  104.                                         break;
  105.                                 }
  106.                             }
  107.                             #endregion
  108.                         } else {
  109.                             blnPassesSearchPhrase = false;
  110.                         }
  111.  
  112.                         examined_so_far++;
  113.                         log.write("We have examined this many files: " + examined_so_far.ToString());
  114.  
  115.                         if (blnPassesTimeConstraint && blnPassesSearchPhrase && blnPassesAuthor) {
  116.                             information.Add(oInfo);                            
  117.                             hits++;
  118.                         }
  119.  
  120.                     } catch (Exception exceptionOpeningPrayerFile) {
  121.                         string msgWithinFilesException = "Error in SearchWithinFiles portion of code in method bgWorkerSearch_DoWork(): " + exceptionOpeningPrayerFile.Message;
  122.                         log.write(msgWithinFilesException);
  123.                         MessageBox.Show(msgWithinFilesException, "Error Opening Prayer File During Search");
  124.                     }
  125.                     finally {
  126.                         if (fs != null) { fs.Close(); }
  127.                     }
  128.                     #endregion
  129.  
  130.                     fraction = (decimal)examined_so_far / (decimal)totalPrayerFiles;
  131.                     the_percent = Convert.ToInt32(fraction * 100);
  132.                     bgWorkerSearch.ReportProgress(the_percent);
  133.                     log.write("Records counted: " + examined_so_far.ToString() + " of " + totalPrayerFiles.ToString() + " (hits: " + hits.ToString() + ") -- " + the_percent.ToString() + " % complete...");
  134.                 }
  135.            
  136.             } else {
  137.  
  138.                 log.write("About to enter foreach loop for searching via tracking files...");
  139.                
  140.                 foreach (FileInfo f in fi) {
  141.  
  142.                     blnPassesTimeConstraint = false;
  143.                     blnPassesAuthor = false;
  144.                     blnPassesSearchPhrase = false;
  145.  
  146.                     if (f.FullName.ToLower().Contains("thumbs.db")) { continue; }
  147.                    
  148.                     #region codeForSearchingAgainstAuthorAndOrTagsUsingTrackingFiles
  149.                    
  150.                     clsPrayerInfo oInfo = new clsPrayerInfo();
  151.                     string pathToTracker = Path.Combine(pathToTrackingDirectory, Path.GetFileNameWithoutExtension(f.FullName));
  152.                     if (!File.Exists(pathToTracker)) {
  153.                         log.write("Tracking file doesn't exist: " + pathToTracker);
  154.                         continue;
  155.                     } else {
  156.                         log.write("The following tracking file DOES exist: " + pathToTracker);
  157.                     }
  158.                    
  159.                     FileStream fs = new FileStream(pathToTracker, FileMode.Open, FileAccess.Read, FileShare.None);
  160.                     try {
  161.  
  162.                         BinaryFormatter bFormatter = new BinaryFormatter();
  163.                         oInfo = (clsPrayerInfo)bFormatter.Deserialize(fs);
  164.                         oInfo.StartOfSelection = -1;
  165.                         DateTime rightNow = DateTime.Now;
  166.                         TimeSpan ts = rightNow.Subtract(oInfo.lastModified);
  167.                         totalSeconds = ts.TotalSeconds;
  168.  
  169.                         log.write("We were able to open the tracker...");
  170.  
  171.                         #region determineIfTheTimeConstraintPasses
  172.                         if (time_constraint == (int)TimeConstraint.NoConstraint) {
  173.                             blnPassesTimeConstraint = true;
  174.                         } else {
  175.                             switch (time_constraint) {
  176.                                 case (int)TimeConstraint.PastWeek:
  177.                                     if (totalSeconds <= 604800) { blnPassesTimeConstraint = true; }
  178.                                     break;
  179.                                 case (int)TimeConstraint.PastMonth:
  180.                                     if (totalSeconds <= 2592000) { blnPassesTimeConstraint = true; }
  181.                                     break;
  182.                                 case (int)TimeConstraint.PastYear:
  183.                                     if (totalSeconds <= 31536000) { blnPassesTimeConstraint = true; }
  184.                                     break;
  185.                             }
  186.                         }
  187.                         #endregion
  188.                         if (blnPassesTimeConstraint) {
  189.                             log.write("TimeConstraint passed in Search using Mode Normal or ExactMatch...");
  190.                             #region determineIfAuthorPasses
  191.                             if (searchedForAuthor.Length == 0) {
  192.                                 blnPassesAuthor = true;
  193.                             } else {
  194.                                 if (searchedForAuthor == oInfo.author.Trim().ToLower()) { blnPassesAuthor = true; }
  195.                             }
  196.                             #endregion
  197.                             if (blnPassesAuthor) {
  198.                                 #region determineIfSearchPhrasePasses
  199.                                 if (searchedForPhrase.Length == 0) {
  200.                                     blnPassesSearchPhrase = (arg.SearchType == (int)SearchType.Normal) ? true : false;
  201.                                 } else {
  202.                                     if (arg.SearchType == (int)SearchType.ExactMatch) {
  203.                                         blnPassesSearchPhrase = (searchedForPhrase == oInfo.tags.Trim().ToLower()) ? true : false;
  204.                                     } else {
  205.                                         blnPassesSearchPhrase = (oInfo.tags.Trim().ToLower().Contains(searchedForPhrase)) ? true : false;
  206.                                     }
  207.                                 }
  208.                                 #endregion
  209.                             }//end if (blnPassesAuthor)
  210.                         }//end if (blnPassesTimeContraint)
  211.  
  212.                         if (blnPassesSearchPhrase && blnPassesAuthor && blnPassesTimeConstraint) {
  213.                             information.Add(oInfo);
  214.                             hits++;
  215.                         }
  216.  
  217.                         examined_so_far++;
  218.                         log.write("We have examined this many files: " + examined_so_far.ToString());
  219.  
  220.                     } catch (Exception exception) {
  221.                         log.write("Exception caught while trying to load clsPrayerInfo data from this tracking file in bgWorkerSearch_DoWork(): " + Path.GetFileName(pathToTracker));
  222.                         log.write(exception.Message);
  223.                     }
  224.                     finally {
  225.                         if (fs != null) { fs.Close(); }
  226.                     }
  227.  
  228.                     #endregion
  229.                    
  230.                     fraction = (decimal)examined_so_far / (decimal)totalPrayerFiles;
  231.                     the_percent = Convert.ToInt32(fraction * 100);
  232.                     bgWorkerSearch.ReportProgress(the_percent);
  233.                     log.write("Records counted: " + examined_so_far.ToString() + " of " + totalPrayerFiles.ToString() + " (hits: " + hits.ToString() + ") -- " + the_percent.ToString() + " % complete...");
  234.                
  235.                 }
  236.            
  237.             }
  238.  
  239.             DateTime _finished = DateTime.Now;
  240.             TimeSpan tsOverall = _finished.Subtract(_start);
  241.             string duration = clsGetDurationDesc.getDurationDesc(tsOverall.TotalMilliseconds);
  242.  
  243.             clsSearcherResults oResults = new clsSearcherResults(information, duration, examined_so_far, hits);
  244.             e.Result = oResults;
  245.  
  246.             log.write("Now exiting bgWorkerSearch_DoWork()...");
  247.  
  248.         }

Screenshots (there are 8 more images in addition to the twelve shown here, but you'll have to download/install the program to discover them...)
KyrPrayerMinder.pngNANY 2012 RELEASE: Christian Prayer Minder
forOurStruggle.pngNANY 2012 RELEASE: Christian Prayer Minder
hearMyPrayer.pngNANY 2012 RELEASE: Christian Prayer Minder
fellAmongThorns.pngNANY 2012 RELEASE: Christian Prayer Minder
rescuedUsFromDarkness.pngNANY 2012 RELEASE: Christian Prayer Minder
lightOfTheWorld.pngNANY 2012 RELEASE: Christian Prayer Minder
AChildIsBorn.pngNANY 2012 RELEASE: Christian Prayer Minder
dietOfWurms.pngNANY 2012 RELEASE: Christian Prayer Minder
GodIsLove.pngNANY 2012 RELEASE: Christian Prayer Minder
inTheBeginning.pngNANY 2012 RELEASE: Christian Prayer Minder
lovesHisWife.pngNANY 2012 RELEASE: Christian Prayer Minder
rescuedUsFromDarkness.pngNANY 2012 RELEASE: Christian Prayer Minder
Installationrun the Inno Setup installer
Using the applicationpretty standard Windows application menu system, with some additional options.  Should be straightforward, although I intend to author a help file.
UninstallingRun the uninstaller that the installation provides
Known IssuesI've fixed quite a few minor issues. Let me know if you think you've found a bug: it's probably a feature ;)
« Last Edit: January 14, 2012, 08:13 AM by kyrathaba »

mouser

  • First Author
  • Administrator
  • Joined in 2005
  • *****
  • Posts: 40,896
    • View Profile
    • Mouser's Software Zone on DonationCoder.com
    • Read more about this member.
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Prayer Minder
« Reply #1 on: December 07, 2011, 09:12 AM »
I'm not a prayer, but it looks pretty cool, and i love the idea of high-tech praying :)
It will be fun to see what you've come up with.

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Prayer Minder
« Reply #2 on: December 07, 2011, 05:44 PM »
It's worth a download and a few runs just to see the various form background images (a random one of twenty gets chosen each time the program runs).  Some pretty cool images in there.

panzer

  • Participant
  • Joined in 2008
  • *
  • default avatar
  • Posts: 941
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Prayer Minder
« Reply #3 on: December 07, 2011, 09:50 PM »
Add some music ...

techidave

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 1,044
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Prayer Minder
« Reply #4 on: December 07, 2011, 10:52 PM »
Looks pretty cool, kyrathaba.  I like the features that have been built into it.

perhaps a feature request or two.

instead of saving with date and title, let it default to whatever the title of the prayer is.  Come tomorrow, I won't be able to tell by the file name, what the prayer concern is.

is it possible to use the arrow keys to "scroll" through the list of concerns?  instead of actually having to 'load" each one.

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Prayer Minder
« Reply #5 on: December 08, 2011, 07:25 AM »
instead of saving with date and title, let it default to whatever the title of the prayer is.  Come tomorrow, I won't be able to tell by the file name, what the prayer concern is.

@techidave: Yeah, I get your drift.  The reason the files are auto-named based upon the date-time, rather than prompting the user with a SaveFileDialog, is that it will make it very easy later to implement a search-by-date function. The "Title" field (see screenshot) below, is meant to allow you to give a memorable title to the prayer.

pm_fields.png

But I think I see where I could make it more user-friendly: currently, when you click the Load button, you see this:

loadDlg.png

What would be nicer is if you saw a list of the prayers you've saved, by their "Title" field:

altLoadDlg.png

Am I understanding correctly?


is it possible to use the arrow keys to "scroll" through the list of concerns?  instead of actually having to 'load" each one.

I'll see what I can come up with... :)

techidave

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 1,044
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Prayer Minder
« Reply #6 on: December 08, 2011, 02:50 PM »
you are understanding correctly.   :Thmbsup:

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Prayer Minder
« Reply #7 on: December 08, 2011, 09:22 PM »
I've fixed the first: you can now name your own files; I'll also be providing your second wish, such that you'll be able to scroll through a listing of all saved prayer files, and see, at a glance, the filename, author, tags associated with the file currently highlighted in a listbox.

techidave

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 1,044
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Prayer Minder
« Reply #8 on: December 08, 2011, 10:15 PM »
cool, i will give it a whirl.

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Prayer Minder
« Reply #9 on: December 09, 2011, 06:22 AM »
Haven't uploaded the fix yet. Will probably have next version uploaded (and announced) either today or tomorrow.

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Prayer Minder
« Reply #10 on: December 10, 2011, 12:38 PM »
Okay, I've fulfilled both your feature requests, techidave. Now I've only to re-work the Search algorithm, and I'll be ready with v1.0.0.7. Best estimate is that it'll get uploaded in the next few hours, though possibly not until sometime Sunday.

techidave

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 1,044
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Prayer Minder
« Reply #11 on: December 10, 2011, 12:53 PM »
no hurry on my part!  take your time.  i would hate to see you create a bug while trying to add features.   :o

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Prayer Minder
« Reply #12 on: December 10, 2011, 10:23 PM »
Okay, techidave and several others who have emailed me via the program's email button in the About dialog, thanks for your patience. The next version is almost ready for download. I just need to tie some code into the SelectedIndexChanged event of the lstSearchResults ListBox, so that as you scroll through entries, you'll be presented with filename, tags, author. Should be back sometime tomorrow with an announcement that it's okay to update to the newest version.

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Prayer Minder
« Reply #13 on: December 11, 2011, 07:45 AM »
v1.0.0.8 is released! Please update using the Update button from the program's About dialog to download the installer for the updated version (no need to uninstall previous version: the installer will overwrite it, and any application data will be preserved).

See OP for additional features that have been added. At some point I'll be doing (hopefully) a video showing how the rebuilt Search feature is most robust/powerful.

@techidave: both your requests have been fulfilled. Here's a screenshot of the Search results. You can scroll through the results ListBox to view pertinent data associated with the selected prayer file. You can double-click the item to Load the prayer for further editing:

searchResults.png

alternate fore-/back-color scheme:

searchResults_b.png

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Christian Prayer Minder
« Reply #14 on: December 14, 2011, 07:22 AM »
Version 1.0.0.9 is available. Be alerted that it isn't compatible with prayer files created using earlier versions.

Improvements added in this version include:

  • fixed cosmetic bug wherein temp form that shows article text was seen in taskbar
  • fixed bug in buildTrackingFile() that caused UI to look all funky after method execution
  • added contextMenuStrip to the textBox made by method showTextInDialogFormTextbox(), so that user can send article to his printer
  • added application logging to "pminderLog.txt" in the AppData directory
  • I've completely gotten rid of the text-based prayerInfo tracking system, and am using a serialized class now.
  • Download of updated installer is now asynchronous, allowing examination of the rest of the About dialog while you wait.

I was painfully reminded of a .NET irritation: your program cannot write to the application directory. Silly: why not? Grrr...
« Last Edit: December 14, 2011, 07:28 AM by kyrathaba »

Ath

  • Supporting Member
  • Joined in 2006
  • **
  • Posts: 3,612
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Christian Prayer Minder
« Reply #15 on: December 14, 2011, 08:08 AM »
I was painfully reminded of a .NET irritation
That's more a Vista/Win7 thing than just a .NET thing ;)

wraith808

  • Supporting Member
  • Joined in 2006
  • **
  • default avatar
  • Posts: 11,186
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Christian Prayer Minder
« Reply #16 on: December 14, 2011, 09:00 AM »
I was painfully reminded of a .NET irritation: your program cannot write to the application directory. Silly: why not? Grrr...

Because you're supposed to write to the AppData folder.  That's for security reasons, so that what's in the program files folder is only what you install, and that it can be locked down for UAC

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Christian Prayer Minder
« Reply #17 on: December 15, 2011, 06:45 AM »
Because you're supposed to write to the AppData folder.  That's for security reasons, so that what's in the program files folder is only what you install, and that it can be locked down for UAC

Ah, I figured it must be a User Access Control thing. I guess to prevent any other program from writing to your application directory, it also has to prevent your app itself...

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Christian Prayer Minder
« Reply #18 on: December 15, 2011, 08:31 AM »
Version 1.0.1.1 is available. This version requires the uninstall of the previous version (v1.0.0.9) and manual install of the new version. The reason for this is that I changed some code in the methods that check for an available update and download an available file. You will be able to update to v1.0.1.2 and later version from the program's Update menu item.
« Last Edit: December 15, 2011, 08:59 AM by kyrathaba »

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Christian Prayer Minder
« Reply #19 on: December 15, 2011, 09:34 AM »
Versions 11 and 12 were released in quick succession because I found potentially program-crashing bugs and wanted to get the fix available immediately. Thank you!

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Christian Prayer Minder
« Reply #20 on: December 16, 2011, 09:17 AM »
Coming soon: version 13 will slim-down the menu system, drops the program's Windows Registry footprint to zero, reduces the installer's file size, adds more robust error-handling, adds the option to display a "Did You Know?" dialog at startup, and more. Stay tuned!

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Christian Prayer Minder
« Reply #21 on: December 17, 2011, 03:41 PM »
Version 1.0.1.4 is available. It adds additional color schemes, the articles are presented more succinctly, with the option to print or write-to-file the entire article, or selected portions of it, Windows Registry is not used. However, file size did not decrease because I wound up not eliminating some resources I'd thought I might.

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Christian Prayer Minder
« Reply #22 on: December 18, 2011, 07:22 AM »
version 1.0.1.5 is released:

v1.0.1.5 (12/17/2011)

  • simplied user-interaction upon clicking the About dialog's Donate button
  • I've now gotten bold versus regular font styles implemented correctly as color schemes change in the MyPrayers panel.
  • Added four additional color schemes: boldorange, boldlime, boldcyan, and boldblue
  • replaced the Ctrl-+/Ctrl-minus key combination for changing font sizes with a dropdown combo box under the options menu. The program will correctly apply the desired font to a new prayer you're typing, or to a saved prayer you've just loaded.
  • added a read-only textbox at the same level as the top-level menu items. It is populated at form-load, and shows the total number of prayer files found in the MyPrayers directory, and their combined file sizes.

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Christian Prayer Minder
« Reply #23 on: December 18, 2011, 07:57 AM »
version 1.0.1.6 is released:

  • fixed a bug wherein color schemes that call for a bold font got reset to FontStyle.Regular when the "Click here..." text was clicked to begin a New Prayer.
  • updated the TabIndex for the MyPrayers controls, so that the color-scheme-chooser combobox is part of the tab order
  • Duh: I'd lost my entire menu system a few days ago. Apparently, in the process of restoring from backup and filling in any gaps, I overlooked the Save Prayer menu item. Sure, the Save button was still there, but still...

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: NANY 2012 Pledge and Early Beta: Christian Prayer Minder
« Reply #24 on: December 18, 2011, 08:02 AM »
Add some music ...


@panzer: I assume you mean allow the user to select an MP3 that'll run asynchronously as s/he uses the program? (that's do-able). Or do you want a startup trill? Or both features? Anyone else want music capability?