using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.IO;
namespace WindowsApplication1
{
public partial class MainForm : Form
{
int m_currentNo = 0;
int m_totalSlides = 0;
int m_currentSlide = 1;
bool b_readyToDrawText = false;
bool b_readyToDrawImage = false;
public ArrayList m_SlideContainer;
private MainObject m_tempObject;
private SlidesControl m_selectedSlide;
private Color[] m_backColor;
public MainForm()
{
InitializeComponent();
m_SlideContainer = new ArrayList();
}
private void Form1_Load(object sender, EventArgs e)
{
addSlide("White");
}
private void textControl1_Load(object sender, EventArgs e)
{
}
private MainObject[][] listToArray()
{
MainObject[][] slides = new MainObject[m_SlideContainer.Count][];
for (int i = 0; i < m_SlideContainer.Count; i++)
{
slides[i] = new MainObject[((ArrayList)((ArrayList)m_SlideContainer[i])).Count];
for (int j = 0; j < ((ArrayList)((ArrayList)m_SlideContainer[i])).Count; j++)
{
MainObject obj = ((MainObject)((ArrayList)((ArrayList)m_SlideContainer[i]))[j]);
slides[i][j] = obj;
}
}
return slides;
}
private void arrangeCurrentSlide()
{
Control[] ctrl = this.Controls.Find("newCustomControl", false);
MainObject tmpTextControl;
for (int i = 0; i < ctrl.Length; i++)
{
//aaa[i].Top = aaa[i - 1].Top + aaa[i].Height;
if (findCast(ctrl[i]) == "TextControl")
tmpTextControl = ((TextControl)ctrl[i]);
else
tmpTextControl = ((PictureControl)ctrl[i]);
int x = (int)(((float)tmpTextControl.Left + tmpTextControl.Width / 2) / this.Width * 100);
int y = (int)((float)tmpTextControl.Top / this.Height * 100);
tmpTextControl.X2 = tmpTextControl.X1 = tmpTextControl.Left;
tmpTextControl.Y2 = tmpTextControl.Y1 = tmpTextControl.Top;
}
}
private Color[] getSlidesBackColor()
{
m_backColor = new Color[m_totalSlides];
Control[] slideControl = SlidePanel.Controls.Find("newSlideObject", false);
for (int i = 0; i < slideControl.Length; i++)
{
m_backColor[i] = ((SlidesControl)slideControl[i]).BackColor;
}
return m_backColor;
}
private void textBoxToolStripMenuItem_Click(object sender, EventArgs e)
{
m_currentNo++;
b_readyToDrawText = true;
b_readyToDrawImage = false;
//TextControl textbox = new TextControl();
//textbox.Name = "textControl1" + currentNo.ToString();
}
private void Form1_Click(object sender, EventArgs e)
{
animationToolStripMenuItem.Enabled = false;
}
private void addSlide(string bgColor)
{
SlidesControl SlideObject = new SlidesControl();
SlideObject.Name = "newSlideObject";
SlideObject.Size = slideCtrl.Size;
SlideObject.Location = slideCtrl.Location;
SlideObject.Top = 20;
SlideObject.Left = 0;
SlideObject.AutoSize = false;
SlideObject.BackColor = System.Drawing.ColorTranslator.FromHtml(bgColor); //slideCtrl.BackColor;
SlideObject.BorderStyle = BorderStyle.FixedSingle;
SlideObject.Visible = true;
SlideObject.Text = "Slide " + (m_totalSlides + 1);
m_SlideContainer.Add(new ArrayList());
SlideObject.Click += new System.EventHandler(this.runTimeSlide_Click);
m_totalSlides++;
if (m_totalSlides == 1)
{
SlideObject.Selected = true;
this.BackColor = SlideObject.BackColor;
m_selectedSlide = SlideObject;
}
SlidePanel.Controls.Add(SlideObject);
Control[] ctrl = SlidePanel.Controls.Find("newSlideObject", false);
SlidesControl tmpControl;
for (int i = 1; i < ctrl.Length; i++)
{
tmpControl = ((SlidesControl)ctrl[i]);
tmpControl.Left = ((SlidesControl)ctrl[i - 1]).Left;
tmpControl.Top = ((SlidesControl)ctrl[i - 1]).Top + tmpControl.Height;
}
}
private void insertCustomControl(string type,Point Location,Size size,int Animation,string caption,string path,string foreColor, bool addToStage )
{
MainObject tempControl;
if (type == "TextControl")
tempControl = new TextControl();
else
tempControl = new PictureControl();
tempControl.Name = "newCustomControl";
tempControl.Size = textControl1.Size;
tempControl.Location = Location;
tempControl.Animation = Animation;
if (type == "TextControl")
{
((TextControl)tempControl).Caption = caption;
((TextControl)tempControl).ForeColor= System.Drawing.ColorTranslator.FromHtml(foreColor);
}
else
((PictureControl)tempControl).Path = path;
tempControl.Click += new System.EventHandler(this.runTime_Click);
tempControl.KeyDown += new System.Windows.Forms.KeyEventHandler(this.runTime_KeyDown);
((ArrayList)m_SlideContainer[m_currentSlide - 1]).Add(tempControl);
if(addToStage)
this.Controls.Add(tempControl);
}
private void insertCustomControl(string type,Point Location,Size size,int Animation,bool addToStage )
{
MainObject tempControl;
if (type == "TextControl")
tempControl = new TextControl();
else
tempControl = new PictureControl();
tempControl.Name = "newCustomControl";
tempControl.Size = textControl1.Size;
tempControl.Location = Location;
tempControl.Animation = Animation;
tempControl.Click += new System.EventHandler(this.runTime_Click);
tempControl.KeyDown += new System.Windows.Forms.KeyEventHandler(this.runTime_KeyDown);
((ArrayList)m_SlideContainer[m_currentSlide - 1]).Add(tempControl);
if(addToStage)
this.Controls.Add(tempControl);
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
Point pt = new Point(e.X, e.Y);
if (b_readyToDrawText)
{
b_readyToDrawText = false;
insertCustomControl("TextControl",pt,textControl1.Size,1005 ,true);
}
else if(b_readyToDrawImage)
{
b_readyToDrawImage=false;
insertCustomControl("PictureControl", pt, pictureControl1.Size,1005, true);
}
}
private void runTime_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 46)
{
this.Controls.Remove(((MainObject)sender));
}
}
private string findCast(object obj)
{
Type cast = obj.GetType();
string[] str = cast.ToString().Split(new Char[] { '.' });
string s_cast = str[1];
return s_cast;
}
private void refreshCurrentSlide()
{
int length = ((ArrayList)m_SlideContainer[m_currentSlide - 1]).Count;
for (int i = 0; i < length; i++)
{
((ArrayList)m_SlideContainer[m_currentSlide - 1]).RemoveAt(0);
}
Control[] ctrl1 = this.Controls.Find("newCustomControl", false);
for (int i = 0; i < ctrl1.Length; i++)
{
// Type objType = ctrl1[i].GetType();
if (findCast(ctrl1[i]) == "TextControl")
((ArrayList)m_SlideContainer[m_currentSlide - 1]).Add((TextControl)ctrl1[i]);
else if (findCast(ctrl1[i]) == "PictureControl")
((ArrayList)m_SlideContainer[m_currentSlide - 1]).Add((PictureControl)ctrl1[i]);
}
}
private void runTimeSlide_Click(object sender, EventArgs e)
{
//for slides selection
Control[] slideControl = SlidePanel.Controls.Find("newSlideObject", false);
for (int i = 0; i < slideControl.Length; i++)
{
((SlidesControl)slideControl[i]).Selected = false;
}
((SlidesControl)sender).Selected = true;
this.BackColor = ((SlidesControl)sender).BackColor;
m_selectedSlide = ((SlidesControl)sender);
//
int tempSlide = Int32.Parse(((SlidesControl)sender).Text.Substring(5));
if (tempSlide != m_currentSlide)
{
refreshCurrentSlide();
m_currentSlide = tempSlide;
resetCurrentSlide();
}
}
private void resetCurrentSlide()
{
Control[] ctrl = this.Controls.Find("newCustomControl", false);
for (int i = 0; i < ctrl.Length; i++)
{
// TextControl tmpTextControl;
// PictureControl tmpPictureControl;
// tmpTextControl = ((TextControl)ctrl2[i]);
this.Controls.Remove(ctrl[i]);
}
for (int i = 0; i < ((ArrayList)m_SlideContainer[m_currentSlide - 1]).Count; i++)
{
object obj = ((ArrayList)((ArrayList)m_SlideContainer[m_currentSlide - 1]))[i];
if (findCast(obj) == "TextControl")
this.Controls.Add(((TextControl)((ArrayList)((ArrayList)m_SlideContainer[m_currentSlide - 1]))[i]));
else if (findCast(obj) == "PictureControl")
this.Controls.Add(((PictureControl)((ArrayList)((ArrayList)m_SlideContainer[m_currentSlide - 1]))[i]));
}
}
private void unLoadAllData()
{
Control[] slideControl = SlidePanel.Controls.Find("newSlideObject", false);
for (int i = 0; i < slideControl.Length; i++)
{
SlidePanel.Controls.Remove(slideControl[i]);
}
Control[] ctrl = this.Controls.Find("newCustomControl", false);
for (int i = 0; i < ctrl.Length; i++)
{
this.Controls.Remove(ctrl[i]);
}
m_totalSlides = 0;
m_currentSlide = 1;
m_SlideContainer = new ArrayList();
}
private void runTime_Click(object sender, EventArgs e)
{
if(findCast(sender)=="TextControl")
m_tempObject = ((TextControl)sender);
else
m_tempObject = ((PictureControl)sender);
animationToolStripMenuItem.Enabled = true;
// ((TextControl)sender).Top = 0;// "Clicked";
//this.Text = "Link Clicked :" + ((TextControl)sender).Caption;
}
private void textControl1_Click(object sender, EventArgs e)
{
}
private void fromRightToolStripMenuItem_Click(object sender, EventArgs e)
{
m_tempObject.Animation = m_tempObject.Animation_Right;
}
private void animationToolStripMenuItem_Click(object sender, EventArgs e)
{
m_tempObject.X1 = this.Width;// -tempObject.Width;
m_tempObject.X2 = (int)((float)m_tempObject.Top / this.Height * 100);
m_tempObject.Y1 = m_tempObject.Y2 = (int)((float)m_tempObject.Top / this.Height * 100);
m_tempObject.Y1 = -10000;
}
private void fromLeftToolStripMenuItem_Click(object sender, EventArgs e)
{
m_tempObject.Animation = m_tempObject.Animation_Left;
}
private void fromTopToolStripMenuItem_Click(object sender, EventArgs e)
{
m_tempObject.Animation = m_tempObject.Animation_Top;
}
private void fromBottomToolStripMenuItem_Click(object sender, EventArgs e)
{
m_tempObject.Animation = m_tempObject.Animation_Bottom;
}
private void textControl1_KeyDown(object sender, KeyEventArgs e)
{
}
private void newSlideToolStripMenuItem_Click(object sender, EventArgs e)
{
addSlide("White");
}
private void label1_Click(object sender, EventArgs e)
{
}
private void pictureToolStripMenuItem_Click(object sender, EventArgs e)
{
m_currentNo++;
b_readyToDrawText = false;
b_readyToDrawImage = true;
}
private void backColorToolStripMenuItem_Click(object sender, EventArgs e)
{
colorDialog.ShowDialog();
this.BackColor = colorDialog.Color;
m_selectedSlide.BackColor = this.BackColor;
}
private void slideCtrl_Load(object sender, EventArgs e)
{
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
openFile();
}
private ArrayList getDataBlock(string fileData,string tag1,string tag2)
{
string str= " ";
ArrayList stringList = new ArrayList();
int last=0;
while (last > -1)
{
str = parseBetweenStrings(fileData, tag1, tag2);
last = fileData.IndexOf(tag2);
if (last > -1)
{
fileData = fileData.Substring(last + tag2.Length, fileData.Length - (last + tag2.Length));
stringList.Add(str);
}
}
int i = stringList.Count;
return stringList;
}
private string parseBetweenStrings(string str,string str1, string str2)
{
int first = str.IndexOf(str1);
first = first + str1.Length;
int last = str.IndexOf(str2);
//
//
if (last > 1)
{
string parsedString = str.Substring(first, last - first);
return parsedString;
}
return null;// ".";
}
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
refreshCurrentSlide();
arrangeCurrentSlide();
getSlidesBackColor();
MainObject[][] slides = listToArray();
string saveText="";
for (int i = 0; i < slides.Length; i++)
{
saveText = saveText + "<Slide>";
string strColor = System.Drawing.ColorTranslator.ToHtml(m_backColor[i]);
saveText = saveText + "<bgColor>" + strColor + "</bgColor>";
for (int j = 0; j<slides[i].Length ; j++)
{
string cast = findCast(((object)slides[i][j]));
saveText = saveText + "<object> <type>" + cast + "</type>";
saveText = saveText + "<location>" + slides[i][j].Left.ToString() + "," + slides[i][j].Top.ToString() + "</location>";
saveText = saveText + "<animation>" + ((MainObject)slides[i][j]).Animation + "</animation>";
if (cast == "TextControl")
{
saveText = saveText + "<caption>" + ((TextControl)slides[i][j]).Caption + "</caption>";
string strForeColor = System.Drawing.ColorTranslator.ToHtml(((TextControl)slides[i][j]).ForeColor);
saveText = saveText + "<forecolor>" + strForeColor + "</forecolor>";
}
else
saveText = saveText + "<image>" + ((PictureControl)slides[i][j]).Path + "</image>";
saveText = saveText + "</object>";
}
saveText = saveText + " </Slide> \n";
}
saveDialog.Filter = "All presentation files |*.apf";
saveDialog.ShowDialog();
string fileName = saveDialog.FileName;
if (fileName.Length > 0)
{
if (System.IO.File.Exists(fileName))
System.IO.File.Delete(fileName);
using (System.IO.FileStream fs = System.IO.File.Create(fileName))
{
byte[] info = new System.Text.UTF8Encoding(true).GetBytes(saveText);
fs.Write(info, 0, info.Length);
}
}
}
private void newToolStripMenuItem_Click(object sender, EventArgs e)
{
unLoadAllData();
addSlide("White");
}
private void openFile()
{
openDialog.Filter = "All presentation files |*.apf";
openDialog.ShowDialog();
string fileName = openDialog.FileName;
if (fileName.Length > 0)
{
string info = "";
try
{
using (System.IO.StreamReader sr = System.IO.File.OpenText(fileName))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
info = info + s;
}
parseDatFromString(info);
}
}
catch(Exception e)
{
}
}
}
private void parseDatFromString(string info)
{
System.ComponentModel.TypeConverter converter =
System.ComponentModel.TypeDescriptor.GetConverter(typeof(Point));
ArrayList SlidesList = getDataBlock(info, "<Slide>", "</Slide>");
unLoadAllData();
for (int i = 0; i < SlidesList.Count; i++)
{
String sObject = (string)SlidesList[i];
ArrayList ObjectList = getDataBlock((string)SlidesList[i], "<object>", "</object>");
string strColor = parseBetweenStrings((string)SlidesList[i], "<bgColor>", "</bgColor>");
//to add the current slide
addSlide(strColor);
m_currentSlide = i + 1;
//parsing slides objects
for (int j = 0; j < ObjectList.Count; j++)
{
string type = parseBetweenStrings((string)ObjectList[j], "<type>", "</type>");
string location = parseBetweenStrings((string)ObjectList[j], "<location>", "</location>");
string animation = parseBetweenStrings((string)ObjectList[j], "<animation>", "</animation>");
string caption = parseBetweenStrings((string)ObjectList[j], "<caption>", "</caption>");
string path = parseBetweenStrings((string)ObjectList[j], "<image>", "</image>");
string foreColor = parseBetweenStrings((string)ObjectList[j], "<forecolor>", "</forecolor>");
//if(foreColor.Length>1)
Point pt = (Point)converter.ConvertFromString(location);
bool isVisible = false;
if (i == 0) isVisible = true;
insertCustomControl(type, pt, textControl1.Size, Int32.Parse(animation), caption, path,foreColor, isVisible);
}
}
m_currentSlide = 1;
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Dispose();
}
private void foreColorToolStripMenuItem_Click(object sender, EventArgs e)
{
if (findCast(m_tempObject) == "TextControl")
{
colorDialog.ShowDialog();
((TextControl)m_tempObject).ForeColor= colorDialog.Color;
}
}
private void slideShowToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void slideViewToolStripMenuItem_Click(object sender, EventArgs e)
{
for (int i = 0; i < m_totalSlides; i++)
{
refreshCurrentSlide();
m_currentSlide = i + 1;
resetCurrentSlide();
arrangeCurrentSlide();
}
arrangeCurrentSlide();
MainObject[][] slides = listToArray();
SlideView sView = new SlideView(slides, getSlidesBackColor());
sView.ShowDialog();
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
About aboutBox = new About();
aboutBox.ShowDialog();
}
private void SlidePanel_Paint(object sender, PaintEventArgs e)
{
}
}
}