object IAccessible.accNavigate(NAVDIR navDir, VarInt varStart) { int i = varStart; if (navDir == NAVDIR.FIRSTCHILD || navDir == NAVDIR.LASTCHILD) { if (i != -1) { return(null); } } else { if (i == -1) { return(_StdAO.accNavigate(navDir, varStart)); //never mind: gets some not adjacent UI element } } var v = Navigate(navDir, i); if (v == null) { return(null); } return(v.Value + 1); }
void IAccessible.accDoDefaultAction(VarInt varChild) { if (!_B(varChild, out var b) || b.IsDisabled) { return; } _w.Post(Api.WM_USER + 50, (int)varChild); }
bool _B(VarInt varChild, out popupMenu.MenuItem b) { int i = varChild; if (i == -1) { b = null; return(false); } b = _a[i]; return(true); }
string IAccessible.get_accKeyboardShortcut(VarInt varChild) { if (_B(varChild, out var b) && !b.rawText) { var s = b.Text; int i = StringUtil.FindUnderlineChar(s); if (i >= 0) { return(s[i].ToString()); } } return(null); }
void IAccessible.accSelect(ESelect flagsSelect, VarInt varChild) { int child = varChild; if (flagsSelect.Has(ESelect.TAKEFOCUS)) { Api.SetFocus(_w); // _e.Focus();//SHOULDDO: now Api.SetFocus makes KTreeView item nonfocused (works like focused but displayed like not) } if (child == -1) { if (flagsSelect is not(ESelect.TAKEFOCUS or 0)) { throw new ArgumentException(); } } else { SelectChild(flagsSelect, child); } }
VarInt IAccessible.get_accState(VarInt varChild) { EState r = 0; if (!_w.IsEnabled()) { r |= EState.DISABLED; } if (!_B(varChild, out var b)) { if (!_w.IsVisible) { r |= EState.INVISIBLE; } } else { if (b.IsDisabled) { r |= EState.DISABLED; } if (FocusedItem == b) { r |= EState.FOCUSED | EState.HOTTRACKED; } if (b.IsChecked) { r |= EState.CHECKED; } if (b.IsSubmenu) { r |= EState.HASPOPUP; } //SHOULDDO: if offscreen, r |= EState.INVISIBLE | EState.OFFSCREEN; } return((int)r - 1); }
object IAccessible.accNavigate(NAVDIR navDir, VarInt varStart) { int i = varStart; if (navDir == NAVDIR.FIRSTCHILD || navDir == NAVDIR.LASTCHILD) { if (i == -1) { return(navDir == NAVDIR.FIRSTCHILD ? 1 : _a.Count); } } else { if (i == -1) { return(_StdAO.accNavigate(navDir, varStart)); } switch (navDir) { case NAVDIR.PREVIOUS: if (i > 0) { return(i); } break; case NAVDIR.NEXT: if (++i < _a.Count) { return(i + 1); } break; } } return(null); }
string IAccessible.get_accKeyboardShortcut(VarInt varChild) => KeyboardShortcut(varChild);
void IAccessible.accLocation(out int pxLeft, out int pyTop, out int pcxWidth, out int pcyHeight, VarInt varChild) { if (!_B(varChild, out var b)) { _StdAO.accLocation(out pxLeft, out pyTop, out pcxWidth, out pcyHeight, varChild); } else { var r = _ItemRect(b, inScreen: true); pxLeft = r.left; pyTop = r.top; pcxWidth = r.Width; pcyHeight = r.Height; } }
string IAccessible.get_accDefaultAction(VarInt varChild) => !_B(varChild, out var b) || b.IsDisabled ? null : b.IsSubmenu ? "Open" : "Execute";
void IAccessible.accSelect(ESelect flagsSelect, VarInt varChild) => throw new NotImplementedException();
void IAccessible.accDoDefaultAction(VarInt varChild) => DoDefaultAction(varChild);
string IAccessible.get_accDefaultAction(VarInt varChild) => DefaultAction(varChild);
string IAccessible.get_accValue(VarInt varChild) => null;
VarInt IAccessible.get_accRole(VarInt varChild) { var r = !_B(varChild, out var b) ? ERole.MENUPOPUP : (b.IsSeparator ? ERole.SEPARATOR : ERole.MENUITEM); return((int)r - 1); }
string IAccessible.get_accName(VarInt varChild) => Name(varChild);
int IAccessible.get_accChild(VarInt varChild, out object ppdispChild) { ppdispChild = null; return(1); }
//[PreserveSig] int IAccessible.get_accChild(VarInt varChild, [MarshalAs(UnmanagedType.IDispatch)] out object ppdispChild) { ppdispChild = null; return(1); //currently this class supports only simple element children. }
void IAccessible.put_accValue(VarInt varChild, string szValue) { }
void IAccessible.put_accName(VarInt varChild, string szName) { }
void IAccessible.put_accValue(VarInt varChild, string szValue) => throw new NotImplementedException();
string IAccessible.get_accHelp(VarInt varChild) => Help(varChild);
string IAccessible.get_accDescription(VarInt varChild) => Description(varChild);
void IAccessible.accLocation(out int pxLeft, out int pyTop, out int pcxWidth, out int pcyHeight, VarInt varChild) { int child = varChild; if (child == -1) { _StdAO.accLocation(out pxLeft, out pyTop, out pcxWidth, out pcyHeight, varChild); } else { var r = ChildRect(child); _w.MapClientToScreen(ref r); pxLeft = r.left; pyTop = r.top; pcxWidth = r.Width; pcyHeight = r.Height; } }
string IAccessible.get_accName(VarInt varChild) => !_B(varChild, out var b) ? _name : (b.rawText ? b.Text : StringUtil.RemoveUnderlineChar(b.Text));
VarInt IAccessible.get_accRole(VarInt varChild) => (int)Role(varChild) - 1;
string IAccessible.get_accDescription(VarInt varChild) => _B(varChild, out _) ? null : "Popup menu";
string IAccessible.get_accHelp(VarInt varChild) => _B(varChild, out var b) ? _GetFullTooltip(b) : null;
int IAccessible.get_accHelpTopic(out string pszHelpFile, VarInt varChild) => throw new NotImplementedException();
VarInt IAccessible.get_accState(VarInt varChild) => (int)State(varChild) - 1;