Designer.Net.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. using FastReport.Design.ToolWindows;
  2. using FastReport.DevComponents.DotNetBar;
  3. using FastReport.Utils;
  4. using System;
  5. using System.Drawing;
  6. using System.Windows.Forms;
  7. namespace FastReport.Design
  8. {
  9. public partial class Designer
  10. {
  11. private DotNetBarManager dotNetBarManager;
  12. private DockSite bottomDockSite;
  13. private DockSite leftDockSite;
  14. private DockSite rightDockSite;
  15. private DockSite topDockSite;
  16. private DockSite tbLeftDockSite;
  17. private DockSite tbRightDockSite;
  18. private DockSite tbTopDockSite;
  19. private DockSite tbBottomDockSite;
  20. private FastReport.DevComponents.DotNetBar.TabControl tabs;
  21. internal DotNetBarManager DotNetBarManager
  22. {
  23. get { return dotNetBarManager; }
  24. }
  25. private void UpdateDpiDependenciesInternal()
  26. {
  27. }
  28. private void LocalizeInternal()
  29. {
  30. }
  31. private void UpdateUIStyleInternal()
  32. {
  33. switch (UIStyle)
  34. {
  35. case UIStyle.Office2003:
  36. case UIStyle.Office2007Blue:
  37. case UIStyle.Office2010Blue:
  38. StyleManager.ChangeStyle(eStyle.Office2010Blue, Color.Empty);
  39. break;
  40. case UIStyle.Office2007Silver:
  41. case UIStyle.Office2010Silver:
  42. StyleManager.ChangeStyle(eStyle.Office2010Silver, Color.Empty);
  43. break;
  44. case UIStyle.Office2007Black:
  45. case UIStyle.Office2010Black:
  46. StyleManager.ChangeStyle(eStyle.Office2010Black, Color.Empty);
  47. break;
  48. case UIStyle.Office2013:
  49. StyleManager.ChangeStyle(eStyle.Office2013, Color.Empty);
  50. break;
  51. case UIStyle.VisualStudio2005:
  52. case UIStyle.VisualStudio2010:
  53. StyleManager.ChangeStyle(eStyle.VisualStudio2010Blue, Color.Empty);
  54. break;
  55. case UIStyle.VisualStudio2012Light:
  56. StyleManager.ChangeStyle(eStyle.VisualStudio2012Light, Color.Empty);
  57. break;
  58. case UIStyle.VistaGlass:
  59. StyleManager.ChangeStyle(eStyle.Windows7Blue, Color.Empty);
  60. break;
  61. }
  62. dotNetBarManager.Style = UIStyleUtils.GetDotNetBarStyle(UIStyle);
  63. }
  64. private void InitPluginsInternal()
  65. {
  66. SuspendLayout();
  67. InitPlugins();
  68. foreach (Type pluginType in DesignerPlugins.Plugins)
  69. {
  70. IDesignerPlugin plugin = plugins.Add(pluginType);
  71. if (plugin is ToolWindowBase)
  72. (plugin as ToolWindowBase).DoDefaultDock();
  73. }
  74. ResumeLayout();
  75. }
  76. private void UpdateMdiMode()
  77. {
  78. tabs.TabsVisible = mdiMode;
  79. if (mdiMode)
  80. AddStartPageTab();
  81. else if (StartPage != null)
  82. StartPage.Close();
  83. }
  84. private void FTabs_SelectedTabChanged(object sender, TabStripTabChangedEventArgs e)
  85. {
  86. if (e.NewTab is DocumentWindow)
  87. {
  88. if (e.NewTab is StartPageTab)
  89. ActiveReportTab = null;
  90. else
  91. ActiveReportTab = e.NewTab as ReportTab;
  92. }
  93. }
  94. private void FTabs_TabItemClose(object sender, TabStripActionEventArgs e)
  95. {
  96. if (tabs.SelectedTab is ReportTab)
  97. {
  98. ReportTab tab = tabs.SelectedTab as ReportTab;
  99. if (!CloseDocument(tab))
  100. {
  101. return;
  102. }
  103. }
  104. else if (tabs.SelectedTab is StartPageTab)
  105. {
  106. StartPageTab tab = tabs.SelectedTab as StartPageTab;
  107. if (!CloseDocument(tab))
  108. {
  109. return;
  110. }
  111. }
  112. if (Documents.Count > 0)
  113. {
  114. Documents[Documents.Count - 1].Activate();
  115. }
  116. else
  117. {
  118. ClearSelection();
  119. }
  120. }
  121. private void InitRightToLeft()
  122. {
  123. RightToLeft = Config.RightToLeft ? RightToLeft.Yes : RightToLeft.No;
  124. objectsToolbar.DockSide = Config.RightToLeft ? eDockSide.Right : eDockSide.Left;
  125. }
  126. private void InitTools()
  127. {
  128. BarUtilities.UseTextRenderer = true;
  129. // docking
  130. tabs = new FastReport.DevComponents.DotNetBar.TabControl();
  131. tabs.Dock = DockStyle.Fill;
  132. tabs.TabLayoutType = eTabLayoutType.FixedWithNavigationBox;
  133. tabs.AutoHideSystemBox = false;
  134. tabs.CloseButtonOnTabsVisible = true;
  135. tabs.ControlTabNavigationEnabled = false;
  136. tabs.SelectedTabChanged += new TabStrip.SelectedTabChangedEventHandler(FTabs_SelectedTabChanged);
  137. tabs.TabItemClose += new TabStrip.UserActionEventHandler(FTabs_TabItemClose);
  138. Controls.Add(tabs);
  139. dotNetBarManager = new DotNetBarManager();
  140. leftDockSite = new DockSite();
  141. rightDockSite = new DockSite();
  142. topDockSite = new DockSite();
  143. bottomDockSite = new DockSite();
  144. tbLeftDockSite = new DockSite();
  145. tbRightDockSite = new DockSite();
  146. tbTopDockSite = new DockSite();
  147. tbBottomDockSite = new DockSite();
  148. //
  149. // dotNetBarManager
  150. //
  151. dotNetBarManager.AutoDispatchShortcuts.Add(eShortcut.F1);
  152. dotNetBarManager.AutoDispatchShortcuts.Add(eShortcut.CtrlC);
  153. dotNetBarManager.AutoDispatchShortcuts.Add(eShortcut.CtrlA);
  154. dotNetBarManager.AutoDispatchShortcuts.Add(eShortcut.CtrlV);
  155. dotNetBarManager.AutoDispatchShortcuts.Add(eShortcut.CtrlX);
  156. dotNetBarManager.AutoDispatchShortcuts.Add(eShortcut.CtrlZ);
  157. dotNetBarManager.AutoDispatchShortcuts.Add(eShortcut.CtrlY);
  158. dotNetBarManager.AutoDispatchShortcuts.Add(eShortcut.Del);
  159. dotNetBarManager.AutoDispatchShortcuts.Add(eShortcut.Ins);
  160. dotNetBarManager.DefinitionName = "";
  161. dotNetBarManager.EnableFullSizeDock = false;
  162. dotNetBarManager.ShowCustomizeContextMenu = false;
  163. dotNetBarManager.LeftDockSite = leftDockSite;
  164. dotNetBarManager.RightDockSite = rightDockSite;
  165. dotNetBarManager.TopDockSite = topDockSite;
  166. dotNetBarManager.BottomDockSite = bottomDockSite;
  167. dotNetBarManager.ToolbarLeftDockSite = tbLeftDockSite;
  168. dotNetBarManager.ToolbarRightDockSite = tbRightDockSite;
  169. dotNetBarManager.ToolbarTopDockSite = tbTopDockSite;
  170. dotNetBarManager.ToolbarBottomDockSite = tbBottomDockSite;
  171. //
  172. // leftDockSite
  173. //
  174. leftDockSite.Dock = DockStyle.Left;
  175. leftDockSite.DocumentDockContainer = new DocumentDockContainer();
  176. leftDockSite.Name = "leftDockSite";
  177. //
  178. // rightDockSite
  179. //
  180. rightDockSite.Dock = DockStyle.Right;
  181. rightDockSite.DocumentDockContainer = new DocumentDockContainer();
  182. rightDockSite.Name = "rightDockSite";
  183. //
  184. // topDockSite
  185. //
  186. topDockSite.Dock = DockStyle.Top;
  187. topDockSite.DocumentDockContainer = new DocumentDockContainer();
  188. topDockSite.Name = "topDockSite";
  189. //
  190. // bottomDockSite
  191. //
  192. bottomDockSite.Dock = DockStyle.Bottom;
  193. bottomDockSite.DocumentDockContainer = new DocumentDockContainer();
  194. bottomDockSite.Name = "bottomDockSite";
  195. //
  196. // tbLeftDockSite
  197. //
  198. tbLeftDockSite.Dock = DockStyle.Left;
  199. tbLeftDockSite.Name = "tbLeftDockSite";
  200. //
  201. // tbRightDockSite
  202. //
  203. tbRightDockSite.Dock = DockStyle.Right;
  204. tbRightDockSite.Name = "tbRightDockSite";
  205. //
  206. // tbTopDockSite
  207. //
  208. tbTopDockSite.Dock = DockStyle.Top;
  209. tbTopDockSite.Name = "tbTopDockSite";
  210. //
  211. // tbBottomDockSite
  212. //
  213. tbBottomDockSite.Dock = DockStyle.Bottom;
  214. tbBottomDockSite.Name = "tbBottomDockSite";
  215. Controls.Add(leftDockSite);
  216. Controls.Add(rightDockSite);
  217. Controls.Add(topDockSite);
  218. Controls.Add(bottomDockSite);
  219. Controls.Add(tbLeftDockSite);
  220. Controls.Add(tbRightDockSite);
  221. Controls.Add(tbTopDockSite);
  222. Controls.Add(tbBottomDockSite);
  223. // create tools
  224. objectsToolbar = new ObjectsToolbar(this);
  225. dataWindow = new DictionaryWindow(this);
  226. propertiesWindow = new PropertiesWindow(this);
  227. reportTreeWindow = new ReportTreeWindow(this);
  228. messagesWindow = new MessagesWindow(this);
  229. // do default layout
  230. dataWindow.DockTo(rightDockSite);
  231. reportTreeWindow.DockTo(dataWindow);
  232. propertiesWindow.DockTo(rightDockSite, dataWindow, eDockSide.Bottom);
  233. messagesWindow.DockTo(bottomDockSite);
  234. messagesWindow.Bar.AutoHide = true;
  235. messagesWindow.Hide();
  236. rightDockSite.Width = 250;
  237. leftDockSite.MouseUp += dockSite_MouseUp;
  238. rightDockSite.MouseUp += dockSite_MouseUp;
  239. topDockSite.MouseUp += dockSite_MouseUp;
  240. bottomDockSite.MouseUp += dockSite_MouseUp;
  241. dotNetBarManager.AutoHideChanged += LayoutChanged;
  242. dotNetBarManager.BarDock += LayoutChanged;
  243. dataWindow.VisibleChanged += LayoutChanged;
  244. propertiesWindow.VisibleChanged += LayoutChanged;
  245. reportTreeWindow.VisibleChanged += LayoutChanged;
  246. messagesWindow.VisibleChanged += LayoutChanged;
  247. }
  248. /// <inheritdoc/>
  249. protected override void OnParentChanged(EventArgs e)
  250. {
  251. base.OnParentChanged(e);
  252. dotNetBarManager.ParentForm = FindForm();
  253. if (DesignMode)
  254. DisableFloatingBars();
  255. }
  256. private void SaveDockState(XmlItem root)
  257. {
  258. XmlItem xi = root.FindItem("Designer").FindItem("DockRibbon");
  259. xi.SetProp("Text", dotNetBarManager.LayoutDefinition);
  260. }
  261. private void RestoreDockState(XmlItem root)
  262. {
  263. XmlItem xi = root.FindItem("Designer").FindItem("DockRibbon");
  264. string s = xi.GetProp("Text");
  265. if (s != "")
  266. {
  267. // clear toolbar's DockLine property to restore position correctly
  268. foreach (Bar bar in dotNetBarManager.Bars)
  269. {
  270. if (bar.BarType == eBarType.Toolbar)
  271. bar.DockLine = 0;
  272. }
  273. dotNetBarManager.LayoutDefinition = s;
  274. foreach (Bar bar in dotNetBarManager.Bars)
  275. {
  276. // fix issue with ReportTree window (wrong font scaling when undocked from DataTree)
  277. bar.Font = null;
  278. }
  279. }
  280. }
  281. private void DisableFloatingBars()
  282. {
  283. foreach (Bar bar in dotNetBarManager.Bars)
  284. {
  285. bar.CanUndock = false;
  286. }
  287. }
  288. private void dockSite_MouseUp(object sender, MouseEventArgs e)
  289. {
  290. LayoutChanged(sender, EventArgs.Empty);
  291. }
  292. internal void LayoutChanged(object sender, EventArgs e)
  293. {
  294. if (DesignMode && !initFlag)
  295. {
  296. if (LayoutChangedEvent != null)
  297. LayoutChangedEvent(this, EventArgs.Empty);
  298. }
  299. }
  300. }
  301. }