using FastReport.Controls; using FastReport.Design.ToolWindows; using FastReport.Utils; using System; using System.Windows.Forms; namespace FastReport.Design { public partial class Designer { private FRTabControl tabs; private Splitter vrSplitter; private Splitter vlSplitter; private Panel workArea; private Splitter hSplitter; private FRSideControl rSideControl; private FRSideControl lSideControl; public bool MessageWindowEnabled { get { return messagesWindow.Visible; } set { messagesWindow.Visible = value; hSplitter.Visible = value; } } private void UpdateUIStyleInternal() { var table = UIStyleUtils.GetColorTable(UIStyle); tabs.Style = table.Workspace; rSideControl.Style = lSideControl.Style = UIStyle; hSplitter.BackColor = vrSplitter.BackColor = vlSplitter.BackColor = table.Workspace.SplitterBackColor; } // init global designer plugins private void InitPluginsInternal() { SuspendLayout(); InitPlugins(); ResumeLayout(); } private void UpdateMdiMode() { tabs.ShowTabs = mdiMode; if (mdiMode) AddStartPageTab(); else if (StartPage != null) StartPage.Close(); } private void FTabs_SelectedTabChanged(object sender, EventArgs e) { if (tabs.SelectedTab is DocumentWindow) { if (tabs.SelectedTab is StartPageTab) ActiveReportTab = null; else ActiveReportTab = tabs.SelectedTab as ReportTab; } } private void FTabs_TabClosed(object sender, EventArgs e) { var tab = sender as DocumentWindow; if (tab != null) { if (!CloseDocument(tab)) return; } if (Documents.Count > 0) { Documents[Documents.Count - 1].Activate(); } else { ClearSelection(); } } private void DisableFloatingBars() { } private void InitRightToLeft() { #if AVALONIA Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() => { RightToLeft = Config.RightToLeft ? RightToLeft.Yes : RightToLeft.No; }); #else RightToLeft = Config.RightToLeft ? RightToLeft.Yes : RightToLeft.No; #endif } private void InitTools() { // make default layout workArea = new Panel(); workArea.Dock = DockStyle.Fill; Controls.Add(workArea); tabs = new FRTabControl(); tabs.Dock = DockStyle.Fill; tabs.TabOrientation = TabOrientation.Top; tabs.ShowCaption = false; tabs.SelectedTabChanged += FTabs_SelectedTabChanged; tabs.TabClosed += FTabs_TabClosed; objectsToolbar = new ObjectsToolbar(this); dataWindow = new DictionaryWindow(this); propertiesWindow = new PropertiesWindow(this); reportTreeWindow = new ReportTreeWindow(this); messagesWindow = new MessagesWindow(this); vrSplitter = new Splitter(); vrSplitter.Dock = DockStyle.Right; Controls.Add(vrSplitter); rSideControl = new FRSideControl(this) { Name = "RightSideControl" }; rSideControl.Dock = DockStyle.Right; rSideControl.Width = this.LogicalToDevice(280); rSideControl.TopPanel.Height = this.LogicalToDevice(350); rSideControl.LayoutChanged += (s, e) => { rSideControl.Visible = vrSplitter.Visible = !rSideControl.IsEmpty; }; Controls.Add(rSideControl); vlSplitter = new Splitter(); vlSplitter.Dock = DockStyle.Left; Controls.Add(vlSplitter); lSideControl = new FRSideControl(this) { Name = "LeftSideControl" }; lSideControl.Dock = DockStyle.Left; lSideControl.Width = this.LogicalToDevice(230); lSideControl.TopPanel.Height = this.LogicalToDevice(350); lSideControl.LayoutChanged += (s, e) => { lSideControl.Visible = vlSplitter.Visible = !lSideControl.IsEmpty; }; Controls.Add(lSideControl); hSplitter = new Splitter(); hSplitter.Dock = DockStyle.Bottom; messagesWindow.Dock = DockStyle.Bottom; MessageWindowEnabled = false; rSideControl.OtherSideControl = lSideControl; lSideControl.OtherSideControl = rSideControl; lSideControl.AddToTopPanel(dataWindow); lSideControl.AddToTopPanel(reportTreeWindow); rSideControl.AddToBottomPanel(propertiesWindow); rSideControl.RefreshLayout(); lSideControl.RefreshLayout(); workArea.Controls.AddRange(new Control[] { tabs, hSplitter, messagesWindow }); } private void UpdateDpiDependenciesInternal() { rSideControl.UpdateDpiDependencies(); lSideControl.UpdateDpiDependencies(); vrSplitter.Width = vlSplitter.Width = hSplitter.Height = this.LogicalToDevice(3); tabs.Height = this.LogicalToDevice(25); } private void LocalizeInternal() { rSideControl.UpdateText(); lSideControl.UpdateText(); } private void SaveDockState(XmlItem root) { rSideControl.SaveState(); lSideControl.SaveState(); var storage = new ControlStorageService(this, "Designer,MessagesWindow"); storage.SetDip("Height", messagesWindow.Height); storage.SetBool("Visible", MessageWindowEnabled); } private void RestoreDockState(XmlItem root) { var storage = new ControlStorageService(this, "Designer,MessagesWindow"); messagesWindow.Height = storage.GetDip("Height", 140, 50, 400); MessageWindowEnabled = storage.GetBool("Visible", false); rSideControl.RestoreState(); lSideControl.RestoreState(); } } }