I'm intending to design a very complex program, and I certainly don't have any false ideas of what's it going to take, but I hope one day to complete it. I just thought I would go ahead and post my plan here, just in case anyone can offer me any helpful suggestions or tips...
Here it is:
Things it should have
- A page to display images in thumbnail format, in a grid-type of style. This would be the main page of the program.
- A function to import images into the program, where they are stored on the said page, in small squares, and when the mouse pointer is hovered over an image, a preview of the image would be showed, in enlarged view (taking up the whole screen). Dimensions for thumbnails: Undecided
- A function to cycle through the imported images, in either a specified order, or a random order (random by default). There would need to be an option to change this setting.
- A function to convert typed text into spoken speech. There would need to be a way for the program to create sound, and read inputted text, to accomplish this, and obviously the two things would have to be linked.
- A function to play back the sound file (created by the user) in sync with the image selected by the user to create the sound file showing full-screen as the imported images are being cycled through, in a slide-show type of thing. In order to accomplish this objective, there would have to be a way for the program to time itself, possibly by user input of how long each image should be displayed before moving to the next, in slideshow mode. To increase functionality, it would be neat if I could find to way to sync the sound with the image automatically (behind the scenes) when the user specifies the time for the image to be displayed, though if I do this, obviously this option would handle no “back-talk”, and just give messages like “Program requires time to be given for image x” if user attempts to quit this window without specifying the time. Better, yet, maybe I could just “grey” out the exit button (red X), so it cannot be pressed. Or not even have an exit button for that window, if possible.
- The image boxes will have numbers, ordered in sequence, i.e. so that the first image on the top row (the count will be done from left to right) will be named 1, the second image (on the top row) 2, etc.
- Each imported image (limit of images to be imported not decided yet) should have the function mentioned above, and be able to have its own sound file.
- When the images are being played through as a slideshow, there would need to be options shown during this mode, where you can pause the slideshow, go to next image or previous image, and stop the slideshow altogether if you so desire.
- There should be several menus, such as File (which would store options like import, opening without importing, save, save as, etc.), Edit (for options like delete imported images, edit an image with basic options like crop/resize/etc.), and other menus the program may need for all the options I have already mentioned, and those that I may add to the list.
- Possibly, there should be buttons on a taskbar in the program that function as “quick” methods of performing some of the same things the options in the menus would do (though this is option, and would only be added, if at all, for user functionality).
- To increase simplicity, there would be a minimum of options in the program, and perhaps the only button in the far right corner will be the exit button (the normal minimize, and shrink, window buttons which exist in most programs non-existant). Or maybe I would have those options, since what is a window without that capability.
- I believe that’s a good start for the plan for my program! If I come up with anything else, I will add it to the list.
Things I need to decide
- Dimensions of main window of program. I’m thinking a good idea for that may be to be half the size of the screen (both length and width), it would probably be a good size. After-all, its not really essential for the user that it fill up the entire screen, especially not if I don’t have a button to resize it to a smaller size.
- Dimensions of each image box.
- How many images can be imported into the program (and remain) at a time. I’m thinking a value like 50 or less would be good. The image boxes (which would hold the images), excluding the ones that would be permanently existent in the program, would only need to be called up when the maximum amount of images that can be displayed in the window at one time (without using the scroll button) is reached, and there is still more images being imported. After that number (whatever number it is…I’m thinking 5 might be good) is reached, then only the image boxes that fit the rest of the amount of the images being imported (and no more) will need to be existent. Otherwise, I would be just wasting memory by storing variables that aren’t even being used. I’m thinking an array would be perfect to store those image boxes (which will linked to the images that will be stored in them) in.
- Dimensions of each smaller (options) window. Since each user’s screen size (and resolution) would probably be different, I would need to find a way for my program to use whatever the screen resolution of the user’s is set to, so the program window’s size always remains the same size as related to the screen displaying it (though the actual size would vary; the relation to the screen displaying it would remain the same).
- The maximum amount of memory I want my program to use (so I can strive for it to be as resource-efficient as possible). I will need to find out what the recommended amount for such a program would be. After all, I need to keep in mind the program will be displaying graphical images, which may take up a lot of memory by themselves.
- I will need to decide what color modes my program should have (i.e. whether RGB, CMYK, etc.), and/or which would be best on a particular user’s system.
- Since this program will have audio, I will need to find a way for it to interact SAFELY with the sound drivers on whatever system it is installed on, and not become a resource-hog doing so.
All, and all, this makes to be a very complicated program, to be sure, and is probably beyond my capabilities at the moment. However, I intend to do my research, and learn as much as I can about C++ programming in the days to come, so that one day I will be able to make this program (and hopefully many others following it).
If anyone has any helpful insight to offer, I’d certainly love to hear it. Constructive criticism/comments is welcome. Just don't trash it. P: