diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/AcaciaZPushPlugin.csproj b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/AcaciaZPushPlugin.csproj
index c0f7e7f..d0e5f88 100644
--- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/AcaciaZPushPlugin.csproj
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/AcaciaZPushPlugin.csproj
@@ -208,7 +208,7 @@
- UserControl
+ Component
Component
@@ -224,7 +224,7 @@
- UserControl
+ Component
Component
@@ -416,7 +416,7 @@
UserControl
- UserControl
+ Component
GABLookupControl.cs
diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KAbstractComboBox.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KAbstractComboBox.cs
index 65a8898..e21a59a 100644
--- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KAbstractComboBox.cs
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KAbstractComboBox.cs
@@ -1,6 +1,7 @@
using Acacia.Native;
using System;
using System.Collections.Generic;
+using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
@@ -10,8 +11,15 @@ using System.Windows.Forms;
namespace Acacia.Controls
{
- public abstract class KAbstractComboBox : UserControl, IMessageFilter
+ public abstract class KAbstractComboBox : ContainerControl, IMessageFilter
{
+ #region Properties
+
+ [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
+ override public bool AutoSize { get { return base.AutoSize; } set { base.AutoSize = value; } }
+
+ #endregion
+
#region Components
private KTextBox _edit;
@@ -22,6 +30,7 @@ namespace Acacia.Controls
public KAbstractComboBox()
{
+ AutoSize = true;
SetupRenderer();
_edit = new KTextBox();
@@ -262,10 +271,11 @@ namespace Acacia.Controls
_state = new KVisualStateTracker(this, State.Normal, State.Disabled);
_state.Root.WithHot(State.Hot);
- _state.Root.WithFocus(State.Hot);
+ _state.Root.WithFocus(State.Pressed);
_stateButton = _state.Root.AddPart().WithPressed(State.Pressed);
_stateButton.Clicked += Button_Clicked;
+ _stateButton.WithFocus(State.Hot);
// TODO if (enableVisualStyles && Application.RenderWithVisualStyles)
}
@@ -273,6 +283,7 @@ namespace Acacia.Controls
protected override void OnPaint(PaintEventArgs e)
{
_style[COMBOBOXPARTS.CP_BORDER]?.DrawBackground(e.Graphics, _state.Root.State, ClientRectangle);
+ System.Diagnostics.Trace.WriteLine(string.Format("BUTTON: {0}", _stateButton.State));
_style[COMBOBOXPARTS.CP_DROPDOWNBUTTON]?.DrawBackground(e.Graphics, _stateButton.State, _stateButton.Rectangle);
}
diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KVisualStateTracker.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KVisualStateTracker.cs
index d875cf2..3a30de9 100644
--- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KVisualStateTracker.cs
+++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Controls/KVisualStateTracker.cs
@@ -41,28 +41,61 @@ namespace Acacia.Controls
this._parent = parent;
}
- public StateTypeId State
+ protected enum RawStateId
+ {
+ Disabled,
+ Normal,
+ Pressed,
+ Hot,
+ Focused
+ }
+
+ protected RawStateId RawState
{
get
{
if (_parent != null && !_mouseOver)
- {
- return _parent.State;
- }
+ return _parent.RawState;
if (!_tracker._control.Enabled)
- {
- return DisabledState;
- }
+ return RawStateId.Disabled;
- if (_focused && FocusedState.HasValue)
- return FocusedState.Value;
+ if (_focused)
+ return RawStateId.Focused;
if (_mouseOver && _mousePressed)
- return _pressedState.Value;
+ return RawStateId.Pressed;
- if (_mouseOver && HotState.HasValue)
- return HotState.Value;
+ if (_mouseOver)
+ return RawStateId.Hot;
+
+ return RawStateId.Normal;
+ }
+ }
+
+ public StateTypeId State
+ {
+ get
+ {
+ switch(RawState)
+ {
+ case RawStateId.Disabled:
+ return DisabledState;
+ case RawStateId.Focused:
+ if (FocusedState.HasValue)
+ return FocusedState.Value;
+ if (HotState.HasValue)
+ return HotState.Value;
+ break;
+ case RawStateId.Hot:
+ if (HotState.HasValue)
+ return HotState.Value;
+ break;
+ case RawStateId.Pressed:
+ if (_pressedState.HasValue)
+ return _pressedState.Value;
+ break;
+ }
return NormalState;
}
@@ -157,34 +190,12 @@ namespace Acacia.Controls
}
}
- private bool Focused
- {
- get { return _focused; }
- set
- {
- if (_focused != value)
- {
- _focused = value;
- Invalidate();
- }
- }
- }
private void Invalidate()
{
_tracker.Invalidate();
}
- internal void GotFocus(object sender, EventArgs e)
- {
- Focused = true;
- }
-
- internal void LostFocus(object sender, EventArgs e)
- {
- Focused = false;
- }
-
internal void MouseDown(object sender, MouseEventArgs e)
{
if (_pressedState != null && e.Button.HasFlag(MouseButtons.Left))
@@ -257,11 +268,38 @@ namespace Acacia.Controls
return this;
}
+ #region Focused
+
+ private bool Focused
+ {
+ get { return _focused; }
+ set
+ {
+ if (_focused != value)
+ {
+ _focused = value;
+ Invalidate();
+ }
+ }
+ }
+
+ internal void GotFocus(object sender, EventArgs e)
+ {
+ Focused = true;
+ }
+
+ internal void LostFocus(object sender, EventArgs e)
+ {
+ Focused = false;
+ }
+
public Part WithFocus(StateTypeId? focusState)
{
this._focusState = focusState;
return this;
}
+
+ #endregion
}
private readonly Control _control;