123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478 |
- using System;
- using System.Collections.Generic;
- using System.Windows.Forms;
- using System.Drawing;
- using System.ComponentModel;
- using FastReport.Utils;
- using FastReport.Forms;
- #if !MONO
- using FastReport.DevComponents.DotNetBar;
- #endif
- namespace FastReport.Design
- {
- #if !MONO
- #if !DEBUG
- [DesignTimeVisible(false)]
- #endif
- internal class ObjectsToolbar : Bar, IDesignerPlugin
- #else
- internal class ObjectsToolbar : ToolStrip, IDesignerPlugin
- #endif
- {
- #region Fields
- private Designer designer;
- private Report currentReport;
- private PageBase currentPage;
- private ObjectInfo nowInserting;
- #if !MONO
- public ButtonItem btnSelect;
- #else
- public ToolStripButton btnSelect;
- #endif
- #endregion
- #region Properties
- internal Designer Designer
- {
- get { return designer; }
- }
- /// <inheritdoc/>
- public string PluginName
- {
- get { return Name; }
- }
- #endregion
- #region Private Methods
- #if !MONO
- private void DoCreateButtons(ObjectInfo rootItem, SubItemsCollection items)
- {
- foreach (ObjectInfo item in rootItem.Items)
- {
- if (!item.Enabled)
- continue;
- ButtonItem button = new ButtonItem();
- button.Image = Designer.GetImage(item.ImageIndex);
- int buttonSize = Designer.LogicalToDevice(25);
- string text = Res.TryGet(item.Text);
- if (items == Items)
- {
- button.Tooltip = text;
- button.FixedSize = new Size(buttonSize, buttonSize);
- }
- else
- {
- button.Text = text;
- button.ButtonStyle = eButtonStyle.ImageAndText;
- }
- if (item.Items.Count > 0)
- {
- // it's a category
- DoCreateButtons(item, button.SubItems);
- button.PopupSide = ePopupSide.Right;
- button.AutoExpandOnClick = true;
- button.FixedSize = new Size(buttonSize, Designer.LogicalToDevice(32));
- button.Tag = item;
- }
- else
- {
- button.Tag = item;
- button.Click += button_Click;
- }
- items.Add(button);
- }
- SortButtons(items);
- }
- private void CreateSelectBtn()
- {
- btnSelect = new ButtonItem();
- btnSelect.Image = Designer.GetImage(100);
- btnSelect.Click += btnSelect_Click;
- btnSelect.FixedSize = Designer.LogicalToDevice(new Size(25, 25));
- btnSelect.Tooltip = Res.Get("Designer,Toolbar,Objects,Select");
- Items.Add(btnSelect);
- }
- private void SortButtons(SubItemsCollection root)
- {
- List<BaseItem> tempItems = new List<BaseItem>();
- List<BaseItem> lastItems = new List<BaseItem>();
- tempItems.Add(root[0]);
- for (int i = 1; i < root.Count; i++)
- {
- for (int j = 1; j < root.Count; j++)
- {
- ObjectInfo objInfo = (root[j] as ButtonItem).Tag as ObjectInfo;
- if (objInfo != null)
- {
- if (objInfo.ButtonIndex == i)
- {
- tempItems.Add(root[j]);
- }
- if (objInfo.ButtonIndex < 0 || objInfo.ButtonIndex >= root.Count)
- {
- lastItems.Add(root[j]);
- }
- }
- }
- }
- root.Clear();
- root.AddRange(tempItems.ToArray());
- root.AddRange(lastItems.ToArray());
- }
- #else
- private void DoCreateButtons(ObjectInfo rootItem)
- {
- foreach (ObjectInfo item in rootItem.Items)
- {
- if (item.Items.Count == 0)
- {
- // it's an object
- ToolStripButton button = new ToolStripButton();
- button.AutoSize = false;
- button.Size = new Size(22, 23);
- button.Image = this.GetImage(item.ImageIndex);
- button.ToolTipText = Res.TryGet(item.Text);
- button.Tag = item;
- button.Click += button_Click;
- Items.Add(button);
- }
- else
- {
- // it's a category
- ToolStripDropDownButton button = new ToolStripDropDownButton();
- button.Image = this.GetImage(item.ImageIndex);
- button.ToolTipText = Res.TryGet(item.Text);
- button.Tag = item;
- button.ShowDropDownArrow = false;
- button.AutoSize = false;
- button.Size = new Size(22, 23);
- DoCreateMenus(item, button.DropDownItems);
- Items.Add(button);
- }
- }
- SortButtons(Items);
- }
- private void DoCreateMenus(ObjectInfo rootItem, ToolStripItemCollection items)
- {
- foreach (ObjectInfo item in rootItem.Items)
- {
- ToolStripMenuItem menuItem = new ToolStripMenuItem();
- menuItem.Image = this.GetImage(item.ImageIndex);
- menuItem.Text = Res.TryGet(item.Text);
- menuItem.Tag = item;
- menuItem.Font = DrawUtils.DefaultFont;
- items.Add(menuItem);
- if (item.Items.Count != 0)
- {
- // it's a category
- DoCreateMenus(item, menuItem.DropDownItems);
- }
- else
- {
- menuItem.Click += button_Click;
- }
- }
- SortButtons(items);
- }
- private void CreateSelectBtn()
- {
- btnSelect = new ToolStripButton();
- btnSelect.Image = this.GetImage(100);
- btnSelect.AutoSize = false;
- btnSelect.Size = new Size(22, 23);
- btnSelect.ToolTipText = Res.Get("Designer,Toolbar,Objects,Select");
- btnSelect.Click += btnSelect_Click;
- Items.Add(btnSelect);
- }
- private void SortButtons(ToolStripItemCollection root)
- {
- List<ToolStripItem> tempItems = new List<ToolStripItem>();
- List<ToolStripItem> lastItems = new List<ToolStripItem>();
- tempItems.Add(root[0]);
- for (int i = 1; i < root.Count; i++)
- {
- for (int j = 1; j < root.Count; j++)
- {
- ObjectInfo objInfo = (root[j] as ToolStripItem).Tag as ObjectInfo;
- if (objInfo != null)
- {
- if (objInfo.ButtonIndex == i)
- {
- tempItems.Add(root[j]);
- }
- if (objInfo.ButtonIndex < 0 || objInfo.ButtonIndex >= root.Count)
- {
- lastItems.Add(root[j]);
- }
- }
- }
- }
- root.Clear();
- root.AddRange(tempItems.ToArray());
- root.AddRange(lastItems.ToArray());
- }
- #endif
- private void CreateButtons(bool forceCreate = false)
- {
- if (!forceCreate &&
- Designer.ActiveReport != null && Designer.ActiveReport == currentReport &&
- Designer.ActiveReportTab.ActivePage == currentPage)
- return;
- currentReport = Designer.ActiveReport;
- if (Designer.ActiveReportTab != null)
- currentPage = Designer.ActiveReportTab.ActivePage;
- else
- currentPage = null;
- // delete all buttons except btnSelect
- int i = 0;
- while (i < Items.Count)
- {
- if (!forceCreate && Items[i] == btnSelect)
- i++;
- else
- {
- Items[i].Dispose();
- #if !MONO
- Items.RemoveAt(i);
- #endif
- }
- }
- #if !MONO
- if (forceCreate)
- CreateSelectBtn();
- if (currentPage == null)
- {
- RecalcLayout();
- return;
- }
- // create object buttons
- ObjectInfo pageItem = RegisteredObjects.FindObject(currentPage);
- if (pageItem != null)
- {
- DoCreateButtons(pageItem, Items);
- }
- RecalcLayout();
- #else
- if (forceCreate)
- CreateSelectBtn();
- // create object buttons
- ObjectInfo pageItem = new ObjectInfo();
- ObjectInfo info = RegisteredObjects.FindObject(currentPage);
- bool contain = true;
- if (info != null)
- {
- foreach(ObjectInfo item in info.Items)
- {
- contain = true;
- if (pageItem.Items.Count != 0)
- {
- foreach (ObjectInfo obj_item in pageItem.Items)
- {
- if (item.Text == obj_item.Text)
- {
- contain = false;
- break;
- }
- }
- }
- if (contain)
- {
- pageItem.Items.Add(item);
- }
- }
- DoCreateButtons(pageItem);
- }
- #endif
- }
- private void button_Click(object sender, EventArgs e)
- {
- Designer.FormatPainter = false;
- if (!Designer.cmdInsert.Enabled)
- return;
- ResetButtons();
- #if !MONO
- if (sender is ButtonItem && (sender as ButtonItem).IsOnBar)
- (sender as ButtonItem).Checked = true;
- nowInserting = (sender as ButtonItem).Tag as ObjectInfo;
- #else
- if (sender is ToolStripButton)
- (sender as ToolStripButton).Checked = true;
- nowInserting = (sender as ToolStripItem).Tag as ObjectInfo;
- #endif
- Designer.InsertObject(nowInserting, InsertFrom.NewObject);
- }
- private void btnSelect_Click(object sender, EventArgs e)
- {
- Designer.FormatPainter = false;
- if (Designer.ActiveReportTab == null)
- return;
- DoClickSelectButton(true);
- }
- private void DoClickSelectButton(bool ignoreMultiInsert)
- {
- if (!btnSelect.Checked)
- {
- if (nowInserting != null && nowInserting.MultiInsert && !ignoreMultiInsert)
- {
- Designer.InsertObject(nowInserting, InsertFrom.NewObject);
- }
- else
- {
- ResetButtons();
- btnSelect.Checked = true;
- Designer.CancelPaste();
- }
- }
- }
- private void ResetButtons()
- {
- #if !MONO
- foreach (BaseItem item in Items)
- {
- if (item is ButtonItem)
- (item as ButtonItem).Checked = false;
- }
- #else
- foreach (ToolStripItem item in Items)
- {
- if (item is ToolStripButton)
- (item as ToolStripButton).Checked = false;
- }
- #endif
- }
- #endregion
- #region Public Methods
- public void ClickSelectButton(bool ignoreMultiInsert)
- {
- DoClickSelectButton(ignoreMultiInsert);
- }
- #endregion
- #region IDesignerPlugin
- /// <inheritdoc/>
- public void SaveState()
- {
- }
- /// <inheritdoc/>
- public void RestoreState()
- {
- }
- /// <inheritdoc/>
- public void SelectionChanged()
- {
- CreateButtons();
- }
- /// <inheritdoc/>
- public void UpdateContent()
- {
- CreateButtons();
- }
- /// <inheritdoc/>
- public void Lock()
- {
- }
- /// <inheritdoc/>
- public void Unlock()
- {
- UpdateContent();
- }
- /// <inheritdoc/>
- public void Localize()
- {
- MyRes res = new MyRes("Designer,Toolbar,Objects");
- Text = res.Get("");
- #if !MONO
- btnSelect.Tooltip = res.Get("Select");
- #else
- btnSelect.ToolTipText = res.Get("Select");
- #endif
- }
- /// <inheritdoc/>
- public DesignerOptionsPage GetOptionsPage()
- {
- return null;
- }
- /// <inheritdoc/>
- public void UpdateUIStyle()
- {
- #if MONO
- Renderer = UIStyleUtils.GetToolStripRenderer(Designer.UIStyle);
- #endif
- }
- /// <inheritdoc/>
- public new void UpdateDpiDependencies()
- {
- SuspendLayout();
- Font = this.LogicalToDevice(DrawUtils.DefaultFont);
- #if !MONO
- base.UpdateDpiDependencies();
- #endif
- CreateButtons(true);
- ResumeLayout();
- }
- #endregion
- public ObjectsToolbar(Designer designer)
- : base()
- {
- this.designer = designer;
- Name = "ObjectsToolbar";
- Dock = DockStyle.Left;
- #if !MONO
- DockOrientation = eOrientation.Vertical;
- RoundCorners = false;
- #else
- GripStyle = ToolStripGripStyle.Hidden;
- AutoSize = false;
- Width = 26;
- if (Config.IsRunningOnMono)
- Padding = new Padding(1, 0, 0, 0);
- #endif
- #if !MONO
- Parent = Designer.DotNetBarManager.ToolbarLeftDockSite;
- #else
- Parent = Designer;
- #endif
- UpdateDpiDependencies();
- Localize();
- }
- }
- }
|