using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using FastReport.Design;
using FastReport.Utils;
using FastReport.Wizards;
namespace FastReport.Forms
{
///
/// Represents the Welcome window displayed on the designer startup
///
public partial class WelcomeForm : BaseForm
{
private Designer designer;
private Button btnOpen;
private const int maxItemsInColumn = 9;
///
/// Initializes a new instance of the class.
///
///
public WelcomeForm(Designer designer)
{
InitializeComponent();
#if COMMUNITY
if (Config.WelcomeScreen != null)
this.banner.Image = Config.WelcomeScreen;
#endif
this.designer = designer;
setupLeftPanel();
setupRightPanel();
Localize();
cbShowOnStartup.Checked = Config.WelcomeShowOnStartup;
Config.DesignerSettings.ReportLoaded += DesignerSettings_ReportLoaded;
UIUtils.CheckRTL(this);
UpdateDpiDependencies();
}
public override void UpdateDpiDependencies()
{
base.UpdateDpiDependencies();
this.banner.Image = GetImage("Images.Welcome.png");
}
#region Setup
private void setupLeftPanel()
{
int i = 0;
// Open item
btnOpen = createButton
(
open_Click,
"Open...",
66,
getX(),
getY(i),
panelLeft,
null,
true,
null
);
i++;
// Recent items
if (designer.cmdRecentFiles.Enabled && designer.RecentFiles.Count > 0)
{
for (int k = designer.RecentFiles.Count - 1; k >= 0; k--)
{
string file = designer.RecentFiles[k];
createButton
(
recent_Click,
Path.GetFileName(file),
0,
getX(),
getY(i),
panelLeft,
file,
true,
file
);
i++;
if (i >= maxItemsInColumn)
break;
}
}
}
private void setupRightPanel()
{
List objects = new List();
RegisteredObjects.Objects.EnumItems(objects);
int i = 0;
// Wizards
foreach (ObjectInfo info in objects)
{
if (info.Object != null &&
info.Object.IsSubclassOf(typeof(WizardBase)) &&
info.Flags == 0)
{
createButton
(
new_Click,
Res.TryGet(info.Text),
info.ImageIndex,
getX(),
getY(i),
panelRight,
null,
true,
info
);
i++;
if (i >= maxItemsInColumn)
break;
}
}
}
public override void Localize()
{
MyRes res = new MyRes("Designer,Welcome");
Text = res.Get("Title");
#if COMMUNITY
Text += " Community";
#endif
cbShowOnStartup.Text = res.Get("Show");
lblOpen.Text = res.Get("Open");
lblNew.Text = res.Get("New");
btnOpen.Text = " " + Res.Get("Designer,Menu,File,Open");
}
#endregion
#region Events
private void open_Click(object sender, EventArgs e)
{
designer.cmdOpen.Invoke();
}
private void recent_Click(object sender, EventArgs e)
{
designer.UpdatePlugins(null);
designer.cmdOpen.LoadFile((sender as Button).Tag as string);
}
private void new_Click(object sender, EventArgs e)
{
(Activator.CreateInstance(((sender as Button).Tag as ObjectInfo).Object) as WizardBase).Run(designer);
}
private void table_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
if (e.Column == 0 && e.Row == 0)
{
int t = 15;
e.Graphics.DrawLine(new Pen(Color.DarkGray),
e.CellBounds.Right,
e.CellBounds.Top + t,
e.CellBounds.Right,
e.CellBounds.Bottom - t);
}
}
private void bottom_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawLine(new Pen(Color.LightGray),
e.ClipRectangle.Left,
e.ClipRectangle.Top,
e.ClipRectangle.Right,
e.ClipRectangle.Top);
}
private void DesignerSettings_ReportLoaded(object sender, ReportLoadedEventArgs e)
{
Config.DesignerSettings.ReportLoaded -= DesignerSettings_ReportLoaded;
Close();
}
private void cbShowOnStartup_CheckedChanged(object sender, EventArgs e)
{
Config.WelcomeShowOnStartup = cbShowOnStartup.Checked;
}
#endregion
#region Utils
private Button createButton(EventHandler onClick,
string text,
int icon,
int x,
int y,
Control parent,
string tooltipText,
bool trimText,
object tag)
{
Button b = new Button();
b.Tag = tag;
if (onClick != null)
b.Click += onClick;
b.Location = new Point(x, y);
b.Height = (int)(28 * DrawUtils.ScreenDpi / 96f);
b.Width = parent.Width;
b.Text = " " + text;
b.TextAlign = ContentAlignment.MiddleLeft;
b.TextImageRelation = TextImageRelation.ImageBeforeText;
b.FlatStyle = FlatStyle.Flat;
b.FlatAppearance.BorderSize = 0;
b.FlatAppearance.BorderColor = parent != null ? parent.BackColor : Color.White;
b.FlatAppearance.MouseOverBackColor = Color.FromArgb(-2628366);
b.FlatAppearance.MouseDownBackColor = Color.FromArgb(-4599318);
b.Image = GetImage(icon);
b.ImageAlign = ContentAlignment.MiddleLeft;
if (tooltipText != null && tooltipText.Trim() != "")
{
ToolTip tooltip = new ToolTip();
tooltip.SetToolTip(b, tooltipText);
}
if (trimText)
trim(b);
if (parent != null)
parent.Controls.Add(b);
return b;
}
private int getX()
{
return (int)(40 * DrawUtils.ScreenDpi / 96f);
}
private int getY(int i)
{
return (int)(i * (28 * DrawUtils.ScreenDpi / 96f) + (45 * DrawUtils.ScreenDpi / 96f));
}
private bool trim(Control control)
{
string txt = control.Text;
if (txt.Length == 0 || control.Width == 0)
return false;
bool trimmed = false;
int i = txt.Length;
int iconWidth = control.LogicalToDevice(30);
while (TextRenderer.MeasureText(txt + "...", control.Font).Width > control.Width - iconWidth)
{
txt = control.Text.Substring(0, --i);
trimmed = true;
if (i == 0)
break;
}
control.Text = txt + (trimmed ? "..." : "");
return trimmed;
}
#endregion
}
}