using System;
using System.Collections.Generic;
using FastReport.Export.Image;
using FastReport.Export.RichText;
using FastReport.Export.Xml;
using FastReport.Export.Html;
using FastReport.Export.Mht;
using FastReport.Export.Odf;
using FastReport.Export.Pdf;
using FastReport.Export.Csv;
using FastReport.Export.Dbf;
using FastReport.Export.Dxf;
using FastReport.Export.XAML;
using FastReport.Export.Svg;
using FastReport.Export.Ppml;
using FastReport.Export.PS;
using FastReport.Export.BIFF8;
using FastReport.Export.OoXML;
using FastReport.Export.Json;
using FastReport.Export.LaTeX;
using FastReport.Export.Text;
using FastReport.Export.Zpl;
using FastReport.Cloud.StorageClient;
using FastReport.Messaging;
using FastReport.Export;
using FastReport.Cloud.StorageClient.Ftp;
using FastReport.Cloud.StorageClient.Box;
using FastReport.Cloud.StorageClient.Dropbox;
using FastReport.Cloud.StorageClient.GoogleDrive;
using FastReport.Cloud.StorageClient.SkyDrive;
namespace FastReport.Utils
{
#if !COMMUNITY
public partial class ExportsOptions
{
public partial class ExportsTreeNode
{
private const string CLOUD_ITEM_PREFIX = "Cloud,";
private const string MESSENGER_ITEM_PREFIX = "Messaging,";
public override string ToString()
{
string resPath;
if (exportType == null)
{
resPath = CATEGORY_PREFIX + name;
}
else
{
if (exportType.IsSubclassOf(typeof(ExportBase)))
{
resPath = EXPORT_ITEM_PREFIX + name + EXPORT_ITEM_POSTFIX;
}
else
{
resPath = (exportType.IsSubclassOf(typeof(CloudStorageClient))
? CLOUD_ITEM_PREFIX : MESSENGER_ITEM_PREFIX) + name + ITEM_POSTFIX;
}
}
return Res.Get(resPath);
}
}
///
/// Default Exports menu
///
/// Tree that contains default Exports menu
public List DefaultExports()
{
List defaultMenu = new List();
defaultMenu.Add(new ExportsTreeNode("Pdf", typeof(PDFExport), 201, true, RegisteredObjects.FindExport(typeof(PDFExport))));
defaultMenu.Add(new ExportsTreeNode("Office", 190, true));
defaultMenu[1].Nodes.Add(new ExportsTreeNode("RichText", typeof(RTFExport), 190, true, RegisteredObjects.FindExport(typeof(RTFExport))));
defaultMenu[1].Nodes.Add(new ExportsTreeNode("Xlsx", typeof(Excel2007Export), 191, true, RegisteredObjects.FindExport(typeof(Excel2007Export))));
defaultMenu[1].Nodes.Add(new ExportsTreeNode("Xls", typeof(Excel2003Document), 191, true, RegisteredObjects.FindExport(typeof(Excel2003Document))));
defaultMenu[1].Nodes.Add(new ExportsTreeNode("Docx", typeof(Word2007Export), 190, true, RegisteredObjects.FindExport(typeof(Word2007Export))));
defaultMenu[1].Nodes.Add(new ExportsTreeNode("Pptx", typeof(PowerPoint2007Export), true, RegisteredObjects.FindExport(typeof(PowerPoint2007Export))));
defaultMenu[1].Nodes.Add(new ExportsTreeNode("Ods", typeof(ODSExport), true, RegisteredObjects.FindExport(typeof(ODSExport))));
defaultMenu[1].Nodes.Add(new ExportsTreeNode("Odt", typeof(ODTExport), true, RegisteredObjects.FindExport(typeof(ODTExport))));
defaultMenu.Add(new ExportsTreeNode("XML", 191, true));
defaultMenu[2].Nodes.Add(new ExportsTreeNode("Xml", typeof(XMLExport), true, RegisteredObjects.FindExport(typeof(XMLExport))));
defaultMenu[2].Nodes.Add(new ExportsTreeNode("Xaml", typeof(XAMLExport), true, RegisteredObjects.FindExport(typeof(XAMLExport))));
defaultMenu.Add(new ExportsTreeNode("Web", 246, true));
defaultMenu[3].Nodes.Add(new ExportsTreeNode("Html", typeof(HTMLExport), true, RegisteredObjects.FindExport(typeof(HTMLExport))));
defaultMenu[3].Nodes.Add(new ExportsTreeNode("Mht", typeof(MHTExport), true, RegisteredObjects.FindExport(typeof(MHTExport))));
defaultMenu.Add(new ExportsTreeNode("Image", 103, true));
defaultMenu[4].Nodes.Add(new ExportsTreeNode("Image", typeof(ImageExport), true, RegisteredObjects.FindExport(typeof(ImageExport))));
defaultMenu[4].Nodes.Add(new ExportsTreeNode("Svg", typeof(SVGExport), true, RegisteredObjects.FindExport(typeof(SVGExport))));
defaultMenu.Add(new ExportsTreeNode("DataBase", 53, true));
defaultMenu[5].Nodes.Add(new ExportsTreeNode("Csv", typeof(CSVExport), true, RegisteredObjects.FindExport(typeof(CSVExport))));
defaultMenu[5].Nodes.Add(new ExportsTreeNode("Dbf", typeof(DBFExport), true, RegisteredObjects.FindExport(typeof(DBFExport))));
defaultMenu[5].Nodes.Add(new ExportsTreeNode("Json", typeof(JsonExport), true, RegisteredObjects.FindExport(typeof(JsonExport))));
defaultMenu.Add(new ExportsTreeNode("Print", 195, true));
defaultMenu[6].Nodes.Add(new ExportsTreeNode("Text", typeof(TextExport), true, RegisteredObjects.FindExport(typeof(TextExport))));
defaultMenu[6].Nodes.Add(new ExportsTreeNode("Zpl", typeof(ZplExport), true, RegisteredObjects.FindExport(typeof(ZplExport))));
defaultMenu[6].Nodes.Add(new ExportsTreeNode("Ppml", typeof(PPMLExport), true, RegisteredObjects.FindExport(typeof(PPMLExport))));
defaultMenu[6].Nodes.Add(new ExportsTreeNode("PS", typeof(PSExport), true, RegisteredObjects.FindExport(typeof(PSExport))));
defaultMenu.Add(new ExportsTreeNode("Other", true));
defaultMenu[7].Nodes.Add(new ExportsTreeNode("Xps", typeof(XPSExport), true, RegisteredObjects.FindExport(typeof(XPSExport))));
defaultMenu[7].Nodes.Add(new ExportsTreeNode("LaTeX", typeof(LaTeXExport), true, RegisteredObjects.FindExport(typeof(LaTeXExport))));
defaultMenu[7].Nodes.Add(new ExportsTreeNode("Dxf", typeof(DxfExport), true, RegisteredObjects.FindExport(typeof(DBFExport))));
return defaultMenu;
}
private ExportsTreeNode cloudNodes;
private ExportsTreeNode messengerNodes = new ExportsTreeNode("Messengers", false);
///
/// All cloud exports available in the preview.
///
public ExportsTreeNode CloudMenu
{
get
{
if (cloudNodes.Nodes.Count <= 0)
RestoreOptionsFor("Cloud");
return cloudNodes;
}
}
///
/// All messengers exports available in the preview.
///
public ExportsTreeNode MessengerMenu
{
get
{
if (messengerNodes.Nodes.Count <= 0)
RestoreOptionsFor("Messenger");
return messengerNodes;
}
}
///
/// Default cloud exports menu.
///
/// Tree that contains default cloud exports menu.
public ExportsTreeNode DefaultCloud()
{
cloudNodes = new ExportsTreeNode("Cloud", 238, false);
cloudNodes.Nodes.Add(new ExportsTreeNode("Ftp", typeof(FtpStorageClient), false, RegisteredObjects.FindObject(typeof(FtpStorageClient))));
cloudNodes.Nodes.Add(new ExportsTreeNode("Box", typeof(BoxStorageClient), 238, false, RegisteredObjects.FindObject(typeof(BoxStorageClient))));
cloudNodes.Nodes.Add(new ExportsTreeNode("Dropbox", typeof(DropboxStorageClient), 238, false, RegisteredObjects.FindObject(typeof(DropboxStorageClient))));
cloudNodes.Nodes.Add(new ExportsTreeNode("GoogleDrive", typeof(GoogleDriveStorageClient), 238, false, RegisteredObjects.FindObject(typeof(GoogleDriveStorageClient))));
cloudNodes.Nodes.Add(new ExportsTreeNode("SkyDrive", typeof(SkyDriveStorageClient), 238, false, RegisteredObjects.FindObject(typeof(SkyDriveStorageClient))));
return cloudNodes;
}
///
/// Default messengers.
///
///
public ExportsTreeNode DefaultMessengers()
{
messengerNodes = new ExportsTreeNode("Messengers", false);
//messengerNodes.Nodes.Add(new ExportsTreeNode("Xmpp", typeof(XmppMessenger), false));
return messengerNodes;
}
///
/// Register all clouds.
///
public void RegisterClouds()
{
foreach (ExportsTreeNode node in cloudNodes.Nodes)
{
var tag = RegisteredObjects.AddCloud(node.ExportType, node.ToString(), node.ImageIndex);
node.Tag = tag;
}
}
///
/// Register all messengers.
///
public void RegisterMessengers()
{
foreach (ExportsTreeNode node in messengerNodes.Nodes)
{
var tag = RegisteredObjects.InternalAddMessenger(node.ExportType, node.ToString());
node.Tag = tag;
}
}
private XmlItem SaveItem(ExportsTreeNode node)
{
XmlItem newItem = new XmlItem();
newItem.Name = node.Name;
if (node.ExportType != null)
{
newItem.SetProp("ExportType", node.ExportType.FullName);
}
if (node.ImageIndex != -1)
{
newItem.SetProp("Icon", node.ImageIndex.ToString());
}
newItem.SetProp("Enabled", node.Enabled.ToString());
return newItem;
}
private void SaveMenuTree(XmlItem xi, List nodes)
{
xi.Items.Clear();
foreach (ExportsTreeNode node in nodes)
{
if (node.ContainsIn(DefaultExports()) || node.Equals(DefaultCloud()) || node.ContainsIn(DefaultCloud()))
continue;
XmlItem newItem = SaveItem(node);
xi.Items.Add(newItem);
if (node.Nodes.Count != 0)
{
SaveMenuTree(newItem, node.Nodes);
}
}
}
private void UpdateExportItemInConfig(XmlItem item)
{
Type exportType = Type.GetType(item.GetProp("ExportType"));
bool isExport = exportType != null && item.Name != "Cloud" && item.Name != "Messengers" &&
!exportType.IsSubclassOf(typeof(CloudStorageClient)) &&
!exportType.IsSubclassOf(typeof(MessengerBase));
if (isExport && item.GetProp("Enabled").ToLower() == "true")
{
PreviewExports type;
bool parsed = Enum.TryParse(exportType.Name, out type);
if (parsed)
Config.PreviewSettings.Exports |= type;
}
}
///
/// Update Config.PreviewSettings.Exports property.
///
private void UpdateExportsInConfig(XmlItem exportsItem)
{
if ((Config.PreviewSettings.Exports & PreviewExports.Prepared) != 0)
{
Config.PreviewSettings.Exports = PreviewExports.Prepared;
}
else
{
Config.PreviewSettings.Exports = PreviewExports.None;
}
foreach (XmlItem item in exportsItem.Items)
{
if (item.Items.Count > 0)
{
foreach (XmlItem subItem in item.Items)
{
UpdateExportItemInConfig(subItem);
}
}
else
{
UpdateExportItemInConfig(item);
}
}
}
///
/// Update Config.PreviewSettings.Clouds property.
///
private void UpdateCloudsInConfig(XmlItem cloudsItem)
{
Config.PreviewSettings.Clouds = PreviewClouds.None;
Type exportType;
bool isCloud;
foreach (XmlItem item in cloudsItem.Items)
{
exportType = Type.GetType(item.GetProp("ExportType"));
isCloud = item.Name != "Cloud" && item.Name != "Messengers" &&
exportType != null && exportType.IsSubclassOf(typeof(CloudStorageClient));
if (isCloud && item.GetProp("Enabled").ToLower() == "true")
{
PreviewClouds type;
bool parsed = Enum.TryParse(exportType.Name.Replace("StorageClient", ""), out type);
if (parsed)
{
Config.PreviewSettings.Clouds |= type;
}
}
}
}
///
/// Update Config.PreviewSettings.Messengers property.
///
private void UpdateMessengersInConfig(XmlItem messengersItem)
{
Config.PreviewSettings.Messengers = PreviewMessengers.None;
Type exportType;
bool isMessenger;
foreach (XmlItem item in messengersItem.Items)
{
exportType = Type.GetType(item.GetProp("ExportType"));
isMessenger = item.Name != "Cloud" && item.Name != "Messengers" &&
exportType != null && exportType.IsSubclassOf(typeof(MessengerBase));
if (isMessenger && item.GetProp("Enabled").ToLower() == "true")
{
PreviewMessengers type;
bool parsed = Enum.TryParse(exportType.Name.Replace("Messenger", ""), out type);
if (parsed)
{
Config.PreviewSettings.Messengers |= type;
}
}
}
}
///
/// Update availability of exports, clouds and messengers in Config.
///
public void UpdateConfig()
{
UpdateExportsInConfig(Config.Root.FindItem("ExportOptions"));
UpdateCloudsInConfig(Config.Root.FindItem("Cloud"));
UpdateMessengersInConfig(Config.Root.FindItem("Messengers"));
}
private void SaveExportOption(string option)
{
XmlItem options = Config.Root.FindItem(option);
List nodes;
if (option == "ExportOptions")
{
RemoveCloudsAndMessengersDuplicatesInMenuNodes();
nodes = menuNodes;
}
else if (option == "Cloud")
{
if (Config.PreviewSettings.Clouds != PreviewClouds.None)
{
cloudNodes.Enabled = true;
}
options.SetProp("Enabled", cloudNodes.Enabled.ToString());
options.SetProp("Icon", cloudNodes.ImageIndex.ToString());
nodes = cloudNodes.Nodes;
}
else
{
if (Config.PreviewSettings.Messengers != PreviewMessengers.None)
{
messengerNodes.Enabled = true;
}
//options.SetProp("Enabled", messengerNodes.Enabled.ToString());
options.SetProp("Enabled", "false");
nodes = messengerNodes.Nodes;
}
SaveMenuTree(options, nodes);
}
private ExportsTreeNode RestoreItem(XmlItem item)
{
Type exportType = null;
string typeProp = item.GetProp("ExportType");
if (!string.IsNullOrEmpty(typeProp))
{
exportType = Type.GetType(typeProp);
}
string imageIndexProp = item.GetProp("Icon");
int imageIndex = -1;
if (!string.IsNullOrEmpty(imageIndexProp))
{
int.TryParse(imageIndexProp, out imageIndex);
}
string enabledProp = item.GetProp("Enabled");
bool enabled = true;
if (!string.IsNullOrEmpty(enabledProp) && Config.PreviewSettings.Exports != PreviewExports.All)
{
bool.TryParse(enabledProp, out enabled);
}
bool isExport = item.Name != "Cloud" && item.Name != "Messengers" &&
(exportType != null && !exportType.IsSubclassOf(typeof(CloudStorageClient)) &&
!exportType.IsSubclassOf(typeof(MessengerBase)) || exportType == null);
if (isExport && Config.PreviewSettings.Exports != PreviewExports.All && exportType != null)
{
enabled = Config.PreviewSettings.Exports.ToString().ToLower().Contains(exportType.Name.ToLower());
}
bool isCloud = item.Name != "Cloud" && item.Name != "Messengers" &&
exportType != null && exportType.IsSubclassOf(typeof(CloudStorageClient));
if (isCloud && Config.PreviewSettings.Clouds != PreviewClouds.All && exportType != null)
{
enabled = Config.PreviewSettings.Clouds.ToString().Contains(exportType.Name.Replace("StorageClient", ""));
}
bool isMessenger = item.Name != "Cloud" && item.Name != "Messengers" &&
exportType != null && exportType.IsSubclassOf(typeof(MessengerBase));
if (isMessenger && Config.PreviewSettings.Messengers != PreviewMessengers.All && exportType != null)
{
enabled = false;//Config.PreviewSettings.Messengers.ToString().Contains(exportType.Name.Replace("Messenger", ""));
}
return new ExportsTreeNode(item.Name, exportType, imageIndex, enabled, isExport);
}
private void RestoreMenuTree(XmlItem xi, List nodes)
{
foreach (XmlItem item in xi.Items)
{
ExportsTreeNode currentNode = RestoreItem(item);
if (item.Items.Count > 0)
{
RestoreMenuTree(item, currentNode.Nodes);
currentNode.Enabled = false;
foreach (ExportsTreeNode subNode in currentNode.Nodes)
{
if (subNode.Enabled)
{
currentNode.Enabled = true;
break;
}
}
foreach (ExportsTreeNode node in nodes)
{
if (node.Name == currentNode.Name && !node.Equals(currentNode))
{
foreach(ExportsTreeNode subNode in node.Nodes)
foreach(ExportsTreeNode currentSubNode in currentNode.Nodes)
if (subNode.Name == currentSubNode.Name)
subNode.Enabled = currentSubNode.Enabled;
}
}
}
if (currentNode.ContainsIn(DefaultExports()) || currentNode.Equals(DefaultCloud()) || currentNode.ContainsIn(DefaultCloud()))
{
continue;
}
nodes.Add(currentNode);
}
}
private void RestoreOptionsFor(string option)
{
XmlItem options = Config.Root.FindItem(option);
List nodes = null;
if (option == "ExportOptions")
{
nodes = menuNodes;
menuNodes.AddRange(DefaultExports());
}
else if (option == "Cloud")
{
cloudNodes = DefaultCloud();
cloudNodes.Enabled = RestoreItem(options).Enabled;
nodes = cloudNodes.Nodes;
if (Config.PreviewSettings.Clouds == PreviewClouds.None)
{
cloudNodes.Enabled = false;
}
}
//else
//{
// messengerNodes = RestoreItem(options);
// nodes = messengerNodes.Nodes;
// if (options.Items.Count == 0)
// {
// messengerNodes = DefaultMessengers();
// }
// if (Config.PreviewSettings.Messengers == PreviewMessengers.None)
// {
// messengerNodes.Enabled = false;
// }
//}
if (options.Items.Count != 0)
{
RestoreMenuTree(options, nodes);
}
}
private void RestoreOptions()
{
RestoreOptionsFor("ExportOptions");
RestoreOptionsFor("Cloud");
//RestoreOptionsFor("Messengers");
}
private void SaveOptions()
{
SaveExportOption("ExportOptions");
SaveExportOption("Cloud");
//SaveExportOption("Messengers");
UpdateConfig();
}
}
#endif
}