2 // Radegast Metaverse Client
3 // Copyright (c) 2009-2014, Radegast Development Team
4 // All rights reserved.
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are met:
9 // * Redistributions of source code must retain the above copyright notice,
10 // this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above copyright
12 // notice, this list of conditions and the following disclaimer in the
13 // documentation and/or other materials provided with the distribution.
14 // * Neither the name of the application "Radegast", nor the names of its
15 // contributors may be used to endorse or promote products derived from
16 // this software without specific prior written permission.
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 using System.Collections.Generic;
37 using System.Windows.Forms;
41 public class Floater : RadegastForm
43 public Control Control, TrackedControl;
44 public bool DockedToMain;
51 public Floater(RadegastInstance instance, Control control, Control trackedControl)
54 this.Control = control;
55 this.TrackedControl = trackedControl;
56 SettingsKeyBase = "tab_window_" + control.GetType().Name;
57 AutoSavePosition = true;
59 FormBorderStyle = FormBorderStyle.SizableToolWindow;
62 TrackedControl.ParentChanged += new EventHandler(Control_ParentChanged);
63 Control.TextChanged += new EventHandler(Control_TextChanged);
64 Activated += new EventHandler(Floater_Activated);
65 Deactivate += new EventHandler(Floater_Deactivate);
66 ResizeEnd += new EventHandler(Floater_ResizeEnd);
67 Shown += new EventHandler(Floater_Shown);
68 Load += new EventHandler(Floater_Load);
72 void Floater_Load(object sender, EventArgs e)
74 Control.Dock = DockStyle.Fill;
75 ClientSize = Control.Size;
76 Controls.Add(Control);
78 parentForm.Move += new EventHandler(parentForm_Move);
81 void Floater_Shown(object sender, EventArgs e)
86 void Floater_ResizeEnd(object sender, EventArgs e)
91 void Floater_Activated(object sender, EventArgs e)
96 void Floater_Deactivate(object sender, EventArgs e)
104 void Control_TextChanged(object sender, EventArgs e)
109 void parentForm_Move(object sender, EventArgs e)
113 Left += (parentForm.Left - mainLeft);
114 Top += (parentForm.Top - mainTop);
120 void Control_ParentChanged(object sender, EventArgs e)
122 if (parentForm != null)
124 parentForm.Move -= new EventHandler(parentForm_Move);
128 if (parentForm != null)
131 parentForm.Move += new EventHandler(parentForm_Move);
136 void SaveMainFormPos()
138 parentForm = TrackedControl.FindForm();
139 if (parentForm != null)
141 mainTop = parentForm.Top;
142 mainLeft = parentForm.Left;
143 mainSize = parentForm.Size;
147 private void UpdatePos()
149 Rectangle mainRect = new Rectangle(new Point(mainLeft, mainTop), mainSize);
150 Rectangle myRect = new Rectangle(new Point(Left, Top), Size);
152 if (mainRect == Rectangle.Union(mainRect, myRect))
158 DockedToMain = false;