using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using ObjectEditors;
namespace FastGallery
{
///
/// An application to build simple photo galleries for the web.
///
public partial class FastGallery : Form
{
///
/// Constructor
///
public FastGallery()
{
InitializeComponent();
galleryObjectEditor.Target = Program.Settings.Gallery;
includedImagesCollectionEditor.Target = Program.Settings.Gallery.IncludedImages;
webBrowser1.StatusTextChanged += new EventHandler(webBrowser1_StatusTextChanged);
webBrowser1.ProgressChanged += new WebBrowserProgressChangedEventHandler(webBrowser1_ProgressChanged);
}
void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
{
if (e.CurrentProgress == 0)
{
toolStripProgressBar1.Visible = false;
}
else
{
toolStripProgressBar1.Maximum = (int)e.MaximumProgress;
toolStripProgressBar1.Value = (int)e.CurrentProgress;
}
}
void webBrowser1_StatusTextChanged(object sender, EventArgs e)
{
toolStripStatusLabel1.Text = webBrowser1.StatusText;
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
private void addImagesToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(Program.Settings.LastPath))
{
openFileDialog1.InitialDirectory = Program.Settings.LastPath;
}
switch (openFileDialog1.ShowDialog())
{
case DialogResult.OK:
foreach (string name in openFileDialog1.FileNames)
{
Program.Settings.Gallery.IncludedImages.Add(new IncludedImage(name));
Program.Settings.LastPath = System.IO.Path.GetDirectoryName(name);
}
break;
default:
break;
}
}
private void imageSetBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
if (pictureBox1.Image != null)
{
pictureBox1.Image.Dispose();
pictureBox1.Image = null;
}
IncludedImage includedImage = (IncludedImage)e.Argument;
Image image;
try
{
image = includedImage.GetBitmap();
}
catch (OutOfMemoryException)
{
return;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error displaying image");
return;
}
pictureBox1.Image = image;
}
private void includedImagesCollectionEditor_SelectedIndexChanged(object sender, EventArgs e)
{
if (!imageSetBackgroundWorker.IsBusy) //could used queued worker here
{
if (Program.Settings.Gallery.IncludedImages.Count == includedImagesCollectionEditor.Items.Count) // may be in the process of being updated
{
if (includedImagesCollectionEditor.SelectedIndices.Count > 0)
{
imageSetBackgroundWorker.RunWorkerAsync(Program.Settings.Gallery.IncludedImages[includedImagesCollectionEditor.SelectedIndices[0]]);
}
}
}
}
private void newGalleryToolStripMenuItem_Click(object sender, EventArgs e)
{
Program.Settings.Gallery = new Gallery(Program.Settings);
galleryObjectEditor.Target = Program.Settings.Gallery; // now a different object
includedImagesCollectionEditor.Target = Program.Settings.Gallery.IncludedImages; // now a different object
}
private bool rebuildGallery = false;
private void galleryValuesChanged(object sender, EventArgs e)
{
GalleryValuesChanged();
}
internal void GalleryValuesChanged()
{
if (galleryBuildVisualBackgroundWorker.IsBusy)
{
rebuildGallery = true;
galleryBuildVisualBackgroundWorker.CancelAsync();
}
else
{
galleryBuildVisualBackgroundWorker.Visible = true;
galleryBuildVisualBackgroundWorker.RunWorkerAsync();
}
}
private void galleryBuildVisualBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
Gallery gallery = Program.Settings.Gallery;// (Gallery)Program.Settings.Gallery.Clone();
try
{
gallery.Generate(galleryBuildVisualBackgroundWorker.GetBackgroundWorker());
webBrowser1.Url = new System.Uri(gallery.IndexPage());
}
catch (Gallery.CancelledException)
{
e.Cancel = true;
}
}
private void galleryBuildVisualBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (rebuildGallery)
{
rebuildGallery = false;
galleryBuildVisualBackgroundWorker.RunWorkerAsync(); // re-run
}
else
{
galleryBuildVisualBackgroundWorker.Visible = false;
}
}
private void FastGallery_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
System.IO.Directory.Delete(Program.GetTempPath(), true);
}
catch
{
}
}
private void galleryInBrowserToolStripMenuItem_Click(object sender, EventArgs e)
{
if (WaitForGalleryToBuild())
{
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.UseShellExecute = true;
process.StartInfo.FileName = Program.Settings.Gallery.IndexPage();
process.Start();
}
}
private void includedImagesCollectionEditor_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
foreach (string fileName in (string[])e.Data.GetData(DataFormats.FileDrop))
{
Program.Settings.Gallery.IncludedImages.Add(new IncludedImage(fileName));
}
}
}
private void includedImagesCollectionEditor_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Copy;
}
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
new About().ShowDialog();
}
private void rotateLeftToolStripButton_Click(object sender, EventArgs e)
{
foreach (int index in includedImagesCollectionEditor.SelectedIndices)
{
IncludedImage includedImage = Program.Settings.Gallery.IncludedImages[index];
includedImage.RotateLeft();
if (!imageSetBackgroundWorker.IsBusy) //could used queued worker here
{
imageSetBackgroundWorker.RunWorkerAsync(includedImage);
}
}
}
private void rotateRightToolStripButton_Click(object sender, EventArgs e)
{
foreach (int index in includedImagesCollectionEditor.SelectedIndices)
{
IncludedImage includedImage = Program.Settings.Gallery.IncludedImages[index];
includedImage.RotateRight();
if (!imageSetBackgroundWorker.IsBusy) //could used queued worker here
{
imageSetBackgroundWorker.RunWorkerAsync(includedImage);
}
}
}
private void homeToolStripButton_Click(object sender, EventArgs e)
{
webBrowser1.Url = new System.Uri(Program.Settings.Gallery.IndexPage());
}
private void backToolStripButton_Click(object sender, EventArgs e)
{
webBrowser1.GoBack();
}
private void forwardToolStripButton_Click(object sender, EventArgs e)
{
webBrowser1.GoForward();
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
string imagePath = Path.Combine(Program.Settings.Gallery.Directory, @"images");
if (e.Url.LocalPath.StartsWith(imagePath))
{
string remainder = e.Url.LocalPath.Substring(imagePath.Length + 1);
foreach (ListViewItem listViewItem in includedImagesCollectionEditor.Items)
{
IncludedImage includedImage = (IncludedImage)listViewItem.Tag;
listViewItem.Selected = includedImage.Name.Equals(remainder);
}
includedImagesCollectionEditor.HideSelection = false;
}
}
private void includedImagesCollectionEditor_Leave(object sender, EventArgs e)
{
includedImagesCollectionEditor.HideSelection = true;
}
private void removeToolStripButton_Click(object sender, EventArgs e)
{
includedImagesCollectionEditor.DeleteSelectedItems();
}
private void publishViaFTPToolStripMenuItem_Click(object sender, EventArgs e)
{
Publish ftpDialog = new Publish();
ftpDialog.FastGallery = this;
ftpDialog.Show();
}
private void settingsToolStripMenuItem_Click(object sender, EventArgs e)
{
ObjectEditorForm objectEditorForm = new ObjectEditorForm(Program.Settings.Gallery, "Gallery settings");
objectEditorForm.ShowDialog();
}
///
/// Waits for the background operation to complete, and informs the user what's going on.
///
internal bool WaitForGalleryToBuild()
{
if (galleryBuildVisualBackgroundWorker.Visible)
{
PleaseWait pleaseWait = new PleaseWait();
galleryBuildVisualBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(pleaseWait.galleryBuildVisualBackgroundWorker_ProgressChanged);
galleryBuildVisualBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(pleaseWait.galleryBuildVisualBackgroundWorker_RunWorkerCompleted);
pleaseWait.ShowDialog();
galleryBuildVisualBackgroundWorker.ProgressChanged -= pleaseWait.galleryBuildVisualBackgroundWorker_ProgressChanged;
galleryBuildVisualBackgroundWorker.RunWorkerCompleted -= pleaseWait.galleryBuildVisualBackgroundWorker_RunWorkerCompleted;
}
return !galleryBuildVisualBackgroundWorker.Visible; // still visible ? still being built
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.DefaultExt = "gal";
openFileDialog.Filter = "FastGallery gallery (*." + openFileDialog.DefaultExt + ")|*." + openFileDialog.DefaultExt;
switch (openFileDialog.ShowDialog())
{
case DialogResult.OK:
try
{
Program.Settings.Gallery = (Gallery)Gallery.Load(openFileDialog.FileName);
galleryObjectEditor.Target = Program.Settings.Gallery;
includedImagesCollectionEditor.Target = Program.Settings.Gallery.IncludedImages;
Program.Settings.MostRecentFilename = openFileDialog.FileName;
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, "An error occurred");
}
break;
default:
break;
}
}
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveGallery();
}
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveGalleryAs();
}
///
/// Lets the user save the gallery setup file with a name of his or her chosing.
///
private void SaveGalleryAs()
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.DefaultExt = "gal";
saveFileDialog.Filter = "FastGallery gallery (*." + saveFileDialog.DefaultExt + ")|*." + saveFileDialog.DefaultExt;
saveFileDialog.AddExtension = true;
saveFileDialog.FileName = saveFileDialog.FileName;
switch (saveFileDialog.ShowDialog(this))
{
case DialogResult.OK:
Program.Settings.MostRecentFilename = saveFileDialog.FileName;
SaveGallery();
break;
default:
break;
}
}
///
/// Lets the user save the gallery under the existing filename.
///
private void SaveGallery()
{
if (Program.Settings.MostRecentFilename == null)
{
SaveGalleryAs();
}
else
{
try
{
Program.Settings.Gallery.Save(Program.Settings.MostRecentFilename);
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, "An error occurred");
}
}
}
private void optionsToolStripMenuItem_Click(object sender, EventArgs e)
{
new ObjectEditorForm(Program.Settings, "Program settings").ShowDialog();
}
private void toolbarToolStripMenuItem_Click(object sender, EventArgs e)
{
mainToolStrip.Visible = !mainToolStrip.Visible;
}
private void toolsToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
{
toolbarToolStripMenuItem.Checked = mainToolStrip.Visible;
}
private void welcomeToolStripMenuItem_Click(object sender, EventArgs e)
{
Welcome welcome = new Welcome();
welcome.ShowDialog();
}
private void FastGallery_Load(object sender, EventArgs e)
{
if (Program.Settings.ShowStartupGuide)
{
Program.Settings.ShowStartupGuide = false;
Welcome welcome = new Welcome();
welcome.Location = new Point(Location.X + (Width - welcome.Width) / 2, Location.Y + (Height - welcome.Height) / 2);
welcome.Show();
}
}
}
}