Click here to Skip to main content
15,892,005 members
Articles / Programming Languages / C#

An Application to Create Interesting and Fully Customizable Web Photo Gallery

Rate me:
Please Sign up or sign in to vote.
4.47/5 (16 votes)
4 Apr 2007LGPL32 min read 55.9K   4.6K   81  
An application to create interesting and fully customizable Web photo gallery using plugins for generating pages
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Collections;
using System.Collections.ObjectModel;
using System.Windows.Forms;

namespace ExtendedWebGallery
{
    public class CTemplate
    {
        public CTemplate()
        {
            mainbeforetag = new List<string>();
            mainaftertag = new List<string>();
            pagesbeforetag = new List<string>();
            pagesaftertag = new List<string>();
            ReadTemplates();
        }

        private List<string> mainbeforetag;
        private List<string> mainaftertag;
        private List<string> pagesbeforetag;
        private List<string> pagesaftertag;


        /// <summary>
        /// Get main template
        /// </summary>
        /// <param name="before"></param>
        /// <param name="after"></param>
        public void GetMainTemplate(ref List<string> before, ref List<string> after)
        {
            before = new List<string>(mainbeforetag);
            after = new List<string>(mainaftertag);
        }

        /// <summary>
        /// Get pages template
        /// </summary>
        /// <param name="before"></param>
        /// <param name="after"></param>
        public void GetPagesTemplate(ref List<string> before, ref List<string> after)
        {
            before = new List<string>(pagesbeforetag);
            after = new List<string>(pagesaftertag);
        }
        /// <summary>
        /// Refreshes both templates
        /// </summary>
        /// <returns></returns>
        public bool RefreshTemplates()
        {
            mainbeforetag.Clear();
            mainaftertag.Clear();
            pagesbeforetag.Clear();
            pagesaftertag.Clear();
            ReadTemplates();
            return true;
        }
        /// <summary>
        /// Checks the presence of templates
        /// </summary>
        /// <returns></returns>
        public bool CheckTemplates()
        {
            if ((File.Exists(Application.StartupPath+"\\maintemplate.htm")))
            {
                if (!ValidateMainTemplate())
                {
                    File.Copy(Application.StartupPath+"\\maintemplate.htm", Application.StartupPath+"\\maintemplate_broken.htm");
                    generatedefaulttemplates(true, false, true);
                }
            }
            else
            {
                generatedefaulttemplates(true, false, true);
            }
            if ((File.Exists(Application.StartupPath+"\\pagestemplate.htm")))
            {
                if (!ValidatePagesTemplate())
                {
                    File.Copy(Application.StartupPath+"\\pagestemplate.htm", Application.StartupPath+"\\pagestemplate_broken.htm");
                    generatedefaulttemplates(false, true, true);
                }
            }
            else
            {
                generatedefaulttemplates(false, true, true);
            }
            return true;
        }

        /// <summary>
        /// Validates main template
        /// </summary>
        /// <returns></returns>
        private bool ValidateMainTemplate()
        {
            // A template is an html document that have inside "<!-- GalleryMain -->"
            bool findok = false;
            StreamReader re = File.OpenText(Application.StartupPath+"\\maintemplate.htm");
            string input = null;
            while ((input = re.ReadLine()) != null)
            {
                if (input.Contains("<!-- GalleryMain -->")) findok = true;
            }
            re.Close();
            return findok;
        }

        /// <summary>
        /// Validates pages template
        /// </summary>
        /// <returns></returns>
        private bool ValidatePagesTemplate()
        {
            // A template is an html document that have inside "<!-- GalleryPages -->"
            bool findok = false;
            StreamReader re = File.OpenText(Application.StartupPath+"\\pagestemplate.htm");
            string input = null;
            while ((input = re.ReadLine()) != null)
            {
                if (input.Contains("<!-- GalleryPages -->")) findok = true;
            }
            re.Close();
            return findok;
        }
        /// <summary>
        /// Read templates
        /// </summary>
        /// <returns></returns>
        private bool ReadTemplates()
        {
            CheckTemplates();

            mainbeforetag.Clear();
            mainaftertag.Clear();
            StreamReader re = File.OpenText(Application.StartupPath+"\\maintemplate.htm");
            string input = null;
            // prima parte
            while ((input = re.ReadLine()) != null)
            {
                if (input.Contains("<!-- GalleryMain -->")) break;
                mainbeforetag.Add(input);
            }
            // seconda parte
            while ((input = re.ReadLine()) != null)
            {
                mainaftertag.Add(input);
            }
            re.Close();

            // Pagine img
            pagesbeforetag.Clear();
            pagesaftertag.Clear();
            re = File.OpenText(Application.StartupPath+"\\pagestemplate.htm");
            input = null;
            // prima parte
            while ((input = re.ReadLine()) != null)
            {
                if (input.Contains("<!-- GalleryPages -->")) break;
                pagesbeforetag.Add(input);
            }
            // seconda parte
            while ((input = re.ReadLine()) != null)
            {
                pagesaftertag.Add(input);
            }
            re.Close();
            return true;
        }

        /// <summary>
        /// Generates default templates
        /// </summary>
        /// <param name="main"></param>
        /// <param name="pages"></param>
        /// <param name="overwrite"></param>
        private void generatedefaulttemplates(bool main, bool pages, bool overwrite)
        {
            if (File.Exists(Application.StartupPath+"\\maintemplate.htm") || overwrite)
            {
                if (main)
                {
                    try
                    {
                        StreamWriter wrind = File.CreateText(Application.StartupPath+"\\maintemplate.htm");
                        wrind.WriteLine("<html>");
                        wrind.WriteLine("<head>");
                        wrind.WriteLine("<title>Galery</title>");
                        wrind.WriteLine("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">");
                        wrind.WriteLine("<STYLE type=\"text/css\">");
                        wrind.WriteLine("<!--");
                        wrind.WriteLine("BODY {");
                        wrind.WriteLine("scrollbar-face-color:#0A0A89;");
                        wrind.WriteLine("scrollbar-highlight-color:#330066;");
                        wrind.WriteLine("scrollbar-3dlight-color:#330066;");
                        wrind.WriteLine("scrollbar-darkshadow-color:#000000;");
                        wrind.WriteLine("scrollbar-shadow-color:#808080;");
                        wrind.WriteLine("scrollbar-arrow-color:#FFFF00;");
                        wrind.WriteLine("scrollbar-track-color:#0000CC;");
                        wrind.WriteLine("}");
                        wrind.WriteLine("-->");
                        wrind.WriteLine("</STYLE>");
                        wrind.WriteLine("</head>");
                        wrind.WriteLine(" ");
                        wrind.WriteLine("<body bgcolor=\"#FFFFFF\" text=\"#000000\" link=\"#0000FF\" vlink=\"#00FF00\" alink=\"#00FF00\">");
                        wrind.WriteLine("<div align=\"center\">");
                        wrind.WriteLine("<p><font face=\"Script MT Bold\" size=\"5\" color=\"#000000\">Web Gallery</font></p>");
                        wrind.WriteLine("<p align=\"left\">&nbsp;</p>");
                        wrind.WriteLine("<p align=\"left\">&nbsp;</p>");
                        wrind.WriteLine("<!-- GalleryMain -->");
                        wrind.WriteLine("<p>&nbsp;</p>");
                        wrind.WriteLine("<p><font face=\"Georgia, Times New Roman, Times, serif\" size=\"3\">Click over the thumbnails to view them larger in a new window</font></p>");
                        wrind.WriteLine("<p>&nbsp;</p>");
                        wrind.WriteLine("<p><font face=\"Georgia, Times New Roman, Times, serif\" size=\"1\" color=\"#00FF00\"><a href=\"http://www.solchiere.it\" target=\"_blank\">Powered by www.solchiere.it</a></font></p>");
                        wrind.WriteLine("</div>");
                        wrind.WriteLine("</body>");
                        wrind.WriteLine("</html>");
                        wrind.Close();
                    }
                    catch
                    {
                    }
                }
            }
            if (File.Exists(Application.StartupPath+"\\pagestemplate.htm") || overwrite)
            {
                if (pages)
                {
                    try
                    {
                        StreamWriter wrind = File.CreateText(Application.StartupPath+"\\pagestemplate.htm");
                        wrind.WriteLine("<html>");
                        wrind.WriteLine("<head>");
                        wrind.WriteLine("<title>Image</title>");
                        wrind.WriteLine("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">");
                        wrind.WriteLine("<STYLE type=\"text/css\">");
                        wrind.WriteLine("<!--");
                        wrind.WriteLine("BODY {");
                        wrind.WriteLine("scrollbar-face-color:#0A0A89;");
                        wrind.WriteLine("scrollbar-highlight-color:#330066;");
                        wrind.WriteLine("scrollbar-3dlight-color:#330066;");
                        wrind.WriteLine("scrollbar-darkshadow-color:#000000;");
                        wrind.WriteLine("scrollbar-shadow-color:#808080;");
                        wrind.WriteLine("scrollbar-arrow-color:#FFFF00;");
                        wrind.WriteLine("scrollbar-track-color:#0000CC;");
                        wrind.WriteLine("}");
                        wrind.WriteLine("-->");
                        wrind.WriteLine("</STYLE>");
                        wrind.WriteLine("</head>");
                        wrind.WriteLine(" ");
                        wrind.WriteLine("<body bgcolor=\"#FFFFFF\" text=\"#000000\" link=\"#0000FF\" vlink=\"#00FF00\" alink=\"#00FF00\">");
                        wrind.WriteLine("<div align=\"center\">");
                        wrind.WriteLine("<p><font face=\"Script MT Bold\" size=\"5\" color=\"#000000\">Single Image</font></p>");
                        wrind.WriteLine("<!-- GalleryPages -->");
                        wrind.WriteLine("</div>");
                        wrind.WriteLine("</body>");
                        wrind.WriteLine("</html>");
                        wrind.Close();
                    }
                    catch
                    {
                    }
                }
            }

        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)


Written By
Web Developer
Italy Italy
I'm an electronic engeneer form Genoa.
I like very much dotnet and C#. I've developed some works like an html gallery generator, a graphic formula viewer (user defined), a webcam grabber and html gallery generator, a little framework for image processing, an image resizer, elaboration in batch and some other application tool.
Actually I'm working in VC++ 6 MFC, but I hope that my future is .net !!!
Some of my works are downloadable at:
http://www.solchiere.it
Lorenzo Banderali

Comments and Discussions