using FastReport.Cloud.StorageClient;
using FastReport.Cloud.StorageClient.Dropbox;
using FastReport.Cloud.StorageClient.Ftp;
using FastReport.Cloud.StorageClient.S3;
#if !AVALONIA
using FastReport.Cloud.StorageClient.Box;
using FastReport.Cloud.StorageClient.GoogleDrive;
using FastReport.Cloud.StorageClient.SkyDrive;
#endif
using FastReport.Export;
using FastReport.Export.BIFF8;
using FastReport.Export.Csv;
using FastReport.Export.Dbf;
using FastReport.Export.Dxf;
using FastReport.Export.Html;
using FastReport.Export.Image;
using FastReport.Export.Json;
using FastReport.Export.LaTeX;
using FastReport.Export.Mht;
using FastReport.Export.Odf;
using FastReport.Export.OoXML;
using FastReport.Export.Pdf;
using FastReport.Export.Ppml;
using FastReport.Export.PS;
using FastReport.Export.RichText;
using FastReport.Export.Svg;
using FastReport.Export.Text;
using FastReport.Export.XAML;
using FastReport.Export.Xml;
using FastReport.Export.Zpl;
using FastReport.Messaging;
using System;
namespace FastReport.Utils
{
#if !COMMUNITY
public partial class ExportsOptions
{
private void CreateDefaultExports()
{
var root = ExportsMenu;
root.AddExport(typeof(PDFExport), "Pdf", 201);
root.AddCategory("Office", 190)
.AddExport(typeof(Excel2007Export), "Xlsx", 191)
.AddExport(typeof(Word2007Export), "Docx", 190)
.AddExport(typeof(PowerPoint2007Export), "Pptx")
.AddExport(typeof(ODSExport), "Ods")
.AddExport(typeof(ODTExport), "Odt")
.AddExport(typeof(RTFExport), "RichText", 190)
.AddExport(typeof(Excel2003Document), "Xls")
.AddExport(typeof(XMLExport), "Xml");
root.AddCategory("Web", 153)
.AddExport(typeof(HTMLExport), "Html")
.AddExport(typeof(MHTExport), "Mht");
root.AddCategory("Image", 103)
.AddExport(typeof(ImageExport), "Image")
.AddExport(typeof(SVGExport), "Svg");
root.AddCategory("DataBase", 53)
.AddExport(typeof(CSVExport), "Csv")
.AddExport(typeof(DBFExport), "Dbf")
.AddExport(typeof(JsonExport), "Json");
root.AddCategory("Print", 195)
.AddExport(typeof(TextExport), "Text")
.AddExport(typeof(ZplExport), "Zpl")
.AddExport(typeof(PPMLExport), "Ppml")
.AddExport(typeof(PSExport), "PS")
.AddExport(typeof(XPSExport), "Xps");
root.AddCategory("Other")
.AddExport(typeof(LaTeXExport), "LaTeX")
.AddExport(typeof(DxfExport), "Dxf")
.AddExport(typeof(XAMLExport), "Xaml");
}
private ExportsTreeNode cloudMenu;
///
/// All cloud exports available in the preview.
///
public ExportsTreeNode CloudMenu
{
get
{
if (cloudMenu == null)
{
cloudMenu = new ExportsTreeNode() { Name = "Cloud", ImageIndex = 238 };
cloudMenu
.AddCloud(typeof(FtpStorageClient), "Ftp")
.AddCloud(typeof(DropboxStorageClient), "Dropbox", 238)
#if !AVALONIA
.AddCloud(typeof(BoxStorageClient), "Box", 238)
.AddCloud(typeof(GoogleDriveStorageClient), "GoogleDrive", 238)
.AddCloud(typeof(SkyDriveStorageClient), "SkyDrive", 238)
#endif
.AddCloud(typeof(S3StorageClient), "S3", 238);
}
return cloudMenu;
}
}
private ExportsTreeNode messengerMenu;
///
/// All messengers exports available in the preview.
///
public ExportsTreeNode MessengerMenu
{
get
{
if (messengerMenu == null)
{
messengerMenu = new ExportsTreeNode() { Name = "Messengers" };
//messengerMenu.AddMessenger("Xmpp", typeof(Messaging.Xmpp.XmppMessenger));
}
return messengerMenu;
}
}
internal PreviewExports Exports
{
get
{
var result = PreviewExports.None;
foreach (var node in EnumNodes(ExportsMenu))
{
if (node.Enabled && node.GetEnum(out var res))
result |= res;
}
return result;
}
set
{
foreach (var node in EnumNodes(ExportsMenu))
{
if (node.GetEnum(out var res))
node.Enabled = (value & res) != 0;
}
}
}
internal PreviewClouds Clouds
{
get
{
var result = PreviewClouds.None;
foreach (var node in EnumNodes(CloudMenu))
{
if (node.Enabled && node.GetEnum(out var res))
result |= res;
}
return result;
}
set
{
foreach (var node in EnumNodes(CloudMenu))
{
if (node.GetEnum(out var res))
node.Enabled = (value & res) != 0;
}
}
}
internal PreviewMessengers Messengers
{
get
{
var result = PreviewMessengers.None;
foreach (var node in EnumNodes(MessengerMenu))
{
if (node.Enabled && node.GetEnum(out var res))
result |= res;
}
return result;
}
set
{
foreach (var node in EnumNodes(MessengerMenu))
{
if (node.GetEnum(out var res))
node.Enabled = (value & res) != 0;
}
}
}
private void SaveMenuTree(XmlItem item, ExportsTreeNode root)
{
item.Items.Clear();
item.Name = root.Name;
if (!root.Enabled)
item.SetProp("Enabled", "false");
foreach (ExportsTreeNode node in root.Nodes)
{
SaveMenuTree(item.Add(), node);
}
}
private XmlItem SaveMenuTree(ExportsTreeNode root)
{
var item = new XmlItem();
SaveMenuTree(item, root);
return item;
}
private void SaveMenuTree(string name, ExportsTreeNode root)
{
SaveMenuTree(Config.Root.FindItem("PreviewSettings").FindItem(name), root);
}
private void RestoreMenuTree(XmlItem item, ExportsTreeNode root)
{
for (int i = 0; i < item.Count; i++)
{
var xi = item[i];
var name = xi.Name;
var node = FindItem(root.Root, name, null) ?? new ExportsTreeNode() { Name = name };
if (i < root.Nodes.Count)
root.Nodes.Insert(i, node);
else
root.Nodes.Add(node);
node.Enabled = string.Compare(xi.GetProp("Enabled"), "false", true) != 0;
RestoreMenuTree(xi, node);
}
}
private void RestoreMenuTree(string name, ExportsTreeNode root)
{
RestoreMenuTree(Config.Root.FindItem("PreviewSettings").FindItem(name), root);
}
private XmlItem defaultExports;
private XmlItem defaultClouds;
private XmlItem defaultMessengers;
private void RestoreOptions()
{
// save current state as default one
defaultExports = SaveMenuTree(ExportsMenu);
defaultClouds = SaveMenuTree(CloudMenu);
defaultMessengers = SaveMenuTree(MessengerMenu);
RestoreMenuTree("Exports", ExportsMenu);
RestoreMenuTree("Cloud", CloudMenu);
RestoreMenuTree("Messengers", MessengerMenu);
}
private void SaveOptions()
{
SaveMenuTree("Exports", ExportsMenu);
SaveMenuTree("Cloud", CloudMenu);
SaveMenuTree("Messengers", MessengerMenu);
}
///
/// Resets the export nodes to default state.
///
public void ResetToDefault()
{
if (defaultExports != null)
RestoreMenuTree(defaultExports, ExportsMenu);
if (defaultClouds != null)
RestoreMenuTree(defaultClouds, CloudMenu);
if (defaultMessengers != null)
RestoreMenuTree(defaultMessengers, MessengerMenu);
}
public partial class ExportsTreeNode
{
///
/// Returns true if the node is a category.
///
public bool IsCategory => ExportType == null;
///
/// Returns true if the node is an export.
///
public bool IsExport => ExportType != null && ExportType.IsSubclassOf(typeof(ExportBase));
///
/// Returns true if the node is a cloud export.
///
public bool IsCloud => ExportType != null && ExportType.IsSubclassOf(typeof(CloudStorageClient));
///
/// Returns true if the node is a category.
///
public bool IsMessenger => ExportType != null && ExportType.IsSubclassOf(typeof(MessengerBase));
///
/// Adds a cloud export and registers it.
///
/// The export type.
/// The display text.
/// The image index.
/// Returns this object to allow method chaining.
public ExportsTreeNode AddCloud(Type type, string text, int imageIndex = -1)
{
var node = new ExportsTreeNode() { Name = type.Name, ExportType = type, Text = text, ImageIndex = imageIndex };
node.Tag = RegisteredObjects.AddCloud(node.ExportType, node.ToString(), node.ImageIndex);
Nodes.Add(node);
return this;
}
///
/// Adds a messenger and registers it.
///
/// The export type.
/// The display text.
/// The image index.
/// Returns this object to allow method chaining.
public ExportsTreeNode AddMessenger(Type type, string text, int imageIndex = -1)
{
var node = new ExportsTreeNode() { Name = type.Name, ExportType = type, Text = text, ImageIndex = imageIndex };
node.Tag = RegisteredObjects.AddMessenger(node.ExportType, node.ToString(), node.ImageIndex);
Nodes.Add(node);
return this;
}
internal bool GetEnum(out T res) where T : struct => Enum.TryParse(Name, out res);
///
public override string ToString()
{
string resPath;
if (IsCategory)
{
resPath = "Export,ExportGroups," + Name;
}
else
{
if (IsExport)
{
resPath = "Export," + Text + ",File";
}
else
{
resPath = (IsCloud ? "Cloud," : "Messaging,") + Text + ",Name";
}
}
string result = Res.TryGet(resPath);
if (result == resPath)
return Text;
return result;
}
}
}
#endif
}