| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- using System;
- using System.Drawing;
- using System.Windows.Forms;
- namespace Core.LZMes.Client.UIM.comm
- {
- internal class BandTagInfo
- {
- public OutlookBar outlookBar;
- public int index;
- public BandTagInfo(OutlookBar ob, int index)
- {
- outlookBar = ob;
- this.index = index;
- }
- }
- public class OutlookBar : Panel
- {
- private int buttonHeight;
- private int selectedBand;
- private int selectedBandHeight;
- public int ButtonHeight
- {
- get
- {
- return buttonHeight;
- }
- set
- {
- buttonHeight = value;
- // do recalc layout for entire bar
- }
- }
- public int SelectedBand
- {
- get
- {
- return selectedBand;
- }
- set
- {
- SelectBand(value);
- }
- }
- public OutlookBar()
- {
- buttonHeight = 25;
- selectedBand = 0;
- selectedBandHeight = 0;
- }
- public void Initialize()
- {
- // parent must exist!
- Parent.SizeChanged += new EventHandler(SizeChangedEvent);
- }
- public void AddBand(string caption, ContentPanel content, EventHandler onClickEvent)
- {
- content.outlookBar = this;
- int index = Controls.Count;
- BandTagInfo bti = new BandTagInfo(this, index);
- BandPanel bandPanel = new BandPanel(caption, content, bti,onClickEvent);
- bandPanel.Text = caption;
- Controls.Add(bandPanel);
- UpdateBarInfo();
- RecalcLayout(bandPanel, index);
- }
- public void SelectBand(int index)
- {
- selectedBand = index;
- RedrawBands();
- }
- private void RedrawBands()
- {
- for (int i = 0; i < Controls.Count; i++)
- {
- BandPanel bp = Controls[i] as BandPanel;
- RecalcLayout(bp, i);
- }
- }
- private void UpdateBarInfo()
- {
- selectedBandHeight = ClientRectangle.Height - (Controls.Count * buttonHeight);
- }
- private void RecalcLayout(BandPanel bandPanel, int index)
- {
- int vPos = (index <= selectedBand) ? buttonHeight * index : buttonHeight * index + selectedBandHeight;
- int height = selectedBand == index ? selectedBandHeight + buttonHeight : buttonHeight;
- // the band dimensions
- bandPanel.Location = new Point(0, vPos);
- bandPanel.Size = new Size(ClientRectangle.Width, height);
- // the contained button dimensions
- bandPanel.Controls[0].Location = new Point(0, 0);
- bandPanel.Controls[0].Size = new Size(ClientRectangle.Width, buttonHeight);
- // the contained content panel dimensions
- bandPanel.Controls[1].Location = new Point(0, buttonHeight);
- bandPanel.Controls[1].Size = new Size(ClientRectangle.Width - 2, height - 8);
- }
- private void SizeChangedEvent(object sender, EventArgs e)
- {
- Size = new Size(Size.Width, ((Control)sender).ClientRectangle.Size.Height);
- UpdateBarInfo();
- RedrawBands();
- }
- }
- internal class BandPanel : Panel
- {
- private string text;
- public string TextBox
- {
- get
- {
- return text;
- }
- }
- public BandPanel(string caption, ContentPanel content, BandTagInfo bti, EventHandler onClickEvent)
- {
- BandButton bandButton = new BandButton(caption, bti);
- bandButton.Click += onClickEvent;
- text = caption;
- Controls.Add(bandButton);
- Controls.Add(content);
- }
- }
- internal class BandButton : Button
- {
- private BandTagInfo bti;
- public BandButton(string caption, BandTagInfo bti)
- {
- Text = caption;
- FlatStyle = FlatStyle.Standard;
- Visible = true;
- this.bti = bti;
- Click += new EventHandler(SelectBand);
- }
- private void SelectBand(object sender, EventArgs e)
- {
- bti.outlookBar.SelectBand(bti.index);
- }
- }
- public abstract class ContentPanel : Panel
- {
- public OutlookBar outlookBar;
- public ContentPanel()
- {
- // initial state
- Visible = true;
- }
- }
- public class IconPanel : ContentPanel
- {
- protected int iconSpacing;
- protected int margin;
- public int IconSpacing
- {
- get
- {
- return iconSpacing;
- }
- }
- public int Margin
- {
- get
- {
- return margin;
- }
- }
- public IconPanel()
- {
- margin = 10;
- iconSpacing = 32 + 15 + 10; // icon height + text height + margin
- BackColor = Color.LightBlue;
- AutoScroll = true;
- }
- public void AddIcon(string caption, Image image, EventHandler onClickEvent)
- {
- int index = Controls.Count / 2; // two entries per icon
- PanelIcon panelIcon = new PanelIcon(this, image, index, onClickEvent);
- panelIcon.Text = caption;
- Controls.Add(panelIcon);
- Label label = new Label();
- label.Text = caption;
- label.Visible = true;
- label.Location = new Point(0, margin + image.Size.Height + index * iconSpacing);
- label.Size = new Size(Size.Width, 15);
- label.TextAlign = ContentAlignment.TopCenter;
- label.Click += onClickEvent;
- label.Tag = panelIcon;
- Controls.Add(label);
- }
- }
- public class PanelIcon : PictureBox
- {
- public int index;
- public IconPanel iconPanel;
- private Color bckgColor;
- private bool mouseEnter;
- private string text;
- public int Index
- {
- get
- {
- return index;
- }
- }
- public string Text
- {
- get
- {
- return text;
- }
- set
- {
- text = value;
- }
- }
- public PanelIcon(IconPanel parent, Image image, int index, EventHandler onClickEvent)
- {
- this.index = index;
- this.iconPanel = parent;
- Image = image;
- Visible = true;
- Location = new Point(iconPanel.outlookBar.Size.Width / 2 - image.Size.Width / 2,
- iconPanel.Margin + index * iconPanel.IconSpacing);
- Size = image.Size;
- Click += onClickEvent;
- Tag = this;
- MouseEnter += new EventHandler(OnMouseEnter);
- MouseLeave += new EventHandler(OnMouseLeave);
- MouseMove += new MouseEventHandler(OnMouseMove);
- bckgColor = iconPanel.BackColor;
- mouseEnter = false;
- }
- private void OnMouseMove(object sender, MouseEventArgs args)
- {
- if ((args.X < Size.Width - 2) &&
- (args.Y < Size.Width - 2) &&
- (!mouseEnter))
- {
- BackColor = Color.LightCyan;
- BorderStyle = BorderStyle.FixedSingle;
- Location = Location - new Size(1, 1);
- mouseEnter = true;
- }
- }
- private void OnMouseEnter(object sender, EventArgs e)
- {
- }
- private void OnMouseLeave(object sender, EventArgs e)
- {
- if (mouseEnter)
- {
- BackColor = bckgColor;
- BorderStyle = BorderStyle.None;
- Location = Location + new Size(1, 1);
- mouseEnter = false;
- }
- }
- }
- }
|