Height="{../../../TabThickness}"
Left="{../../TabOffset}"
LayoutChanged="../../../TabTitleLayoutChanged"/>
- <Container
+ <Container Background="LightGray"
Name="Content" Width="{../../../WidthPolicy}" Height="{../../../HeightPolicy}"/>
</GenericStack>
<?xml version="1.0" encoding="UTF-8" ?>
<TabView Orientation="Horizontal" Spacing="20" Margin="0">
- <TabItem Caption="tab 1" Width="0" Height="0" Margin="0" Background="Gray">
+ <TabItem Name="TabItem1" Caption="tab 1" Width="0" Height="0" Margin="0" Background="Gray"
+ MouseEnter="{Background=Red}"
+ MouseLeave="{Background=Gray}">
<Label Text="tab content test 1"/>
</TabItem>
- <TabItem Caption="tab 2" Width="0" Height="0" Margin="0" Background="Gray">
+ <TabItem Name="TabItem2" Caption="tab 2" Width="0" Height="0" Margin="0" Background="Gray"
+ MouseEnter="{Background=Red}"
+ MouseLeave="{Background=Gray}">
<Label Text="tab content test 2"/>
</TabItem>
using System;
using System.Xml.Serialization;
using System.ComponentModel;
+using System.Diagnostics;
namespace Crow
{
[DefaultTemplate("#Crow.Templates.TabItem.crow")]
public class TabItem : TemplatedContainer
{
+ #region Private fields
string caption;
Container _contentContainer;
GraphicObject _tabTitle;
+ int tabOffset;
+ #endregion
+ #region CTOR
public TabItem () : base()
{
}
+ #endregion
+
+ #region TemplatedControl overrides
public override GraphicObject Content {
get {
return _contentContainer == null ? null : _contentContainer.Child;
_tabTitle = this.child.FindByName ("TabTitle");
}
internal GraphicObject TabTitle { get { return _tabTitle; }}
+ #endregion
#region GraphicObject overrides
- [XmlAttributeAttribute()][DefaultValue(true)]
+ [XmlAttributeAttribute()][DefaultValue(false)]
public override bool Focusable
{
get { return base.Focusable; }
set { base.Focusable = value; }
}
#endregion
- int tabOffset;
+
[XmlAttributeAttribute()][DefaultValue(0)]
public virtual int TabOffset {
get { return tabOffset; }
NotifyValueChanged ("Caption", caption);
}
}
+ public override bool MouseIsIn (Point m)
+ {
+ if (!Visible)
+ return false;
+
+ Debug.WriteLine ("Mouse Testing " + this.ToString ());
+
+ if (TabTitle.MouseIsIn (m)){
+ Debug.WriteLine ("Mouse is in title of " + this.ToString ());
+ return true;
+ }
+ if (Content.MouseIsIn (m)){
+ Debug.WriteLine ("Mouse is in content of " + this.ToString ());
+ return true;
+ }
+
+ Debug.WriteLine ("Mouse is not in " + this.ToString ());
+ return false;
+ }
protected override void onDraw (Cairo.Context gr)
{
int spacing = (Parent as TabView).Spacing;
using System.ComponentModel;
using Cairo;
using System.Diagnostics;
+using OpenTK.Input;
namespace Crow
{
return base.UpdateLayout(layoutType);
}
+ protected override void onDraw (Context gr)
+ {
+ Rectangle rBack = new Rectangle (Slot.Size);
+
+ Background.SetAsSource (gr, rBack);
+ CairoHelpers.CairoRectangle(gr,rBack, CornerRadius);
+ gr.Fill ();
+
+ gr.Save ();
+ //clip to client zone
+ CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
+ gr.Clip ();
+
+ for (int i = 0; i < Children.Count; i++) {
+ if (i == SelectedTab)
+ continue;
+ Children [i].Paint (ref gr);
+ }
+ Children [SelectedTab].Paint (ref gr);
+
+ gr.Restore ();
+ }
+
+ #region Mouse handling
+ public override void checkHoverWidget (MouseMoveEventArgs e)
+ {
+ Debug.WriteLine ("TabView check Hover");
+
+ if (HostContainer.hoverWidget != this) {
+ HostContainer.hoverWidget = this;
+ onMouseEnter (this, e);
+ }
+ if (Children[SelectedTab].MouseIsIn(e.Position))
+ {
+ Children[SelectedTab].checkHoverWidget (e);
+ return;
+ }
+ for (int i = Children.Count - 1; i >= 0; i--) {
+ if (i == SelectedTab)
+ continue;
+ if (Children[i].MouseIsIn(e.Position))
+ {
+ Children[i].checkHoverWidget (e);
+ return;
+ }
+ }
+ base.checkHoverWidget (e);
+ }
+ #endregion
void TabTitleLayoutChanged (object sender, LayoutingEventArgs e)
{
void Ti_MouseDown (object sender, OpenTK.Input.MouseButtonEventArgs e)
{
SelectedTab = Children.IndexOf (sender as GraphicObject);
+ Debug.WriteLine ("selected tab: " + (selectedTab + 1).ToString ());
}
}
}