/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 *************************************************************/

import "objidl.idl";
import "oaidl.idl";
import "oleacc.idl";
import "AccessibleKeyStroke.idl";

[object, uuid(6B1923AC-3E9A-4336-99E1-A69EA4E946E9)]
interface IAccessibleKeyBinding : IUnknown
{
  ///
  /// get number of key bindings for this object
  ///
  [propget] HRESULT nKeyBindings
    (
     [out, retval] long *nKeyBindings
     );

  ///
  /// get length of keystroke sequence for specified key binding
  ///
  [propget] HRESULT keyStrokeSequenceLength
    (
     [in] long keyBindingIndex,
     [out] long *sequenceLength
     );

  ///
  /// The returned sequence of key strokes describes one method
  /// to invoke the associated action (the one from which you
  /// obtained the object at which you called this method) by
  /// pressing keys. The keys specified by each of the returned
  /// key strokes have to be pressed at the same time (the
  /// Control-key and the A-key for example). The keys of one key
  /// stroke have to be released before pressing those of the next.
  /// The order of the key strokes in the sequence define the order
  /// in which to press them.
  ///
  [propget] HRESULT keyBinding
    (
     [in] long keyBindingIndex,
     [in] long keyStrokeSequenceLength,
     [out, size_is(,keyStrokeSequenceLength), length_is(,*actualKeyStrokeSequenceLength)]
       ACCESSIBLE_KEYSTROKE **keyStroke,
     [out, retval] long *actualKeyStrokeSequenceLength
     );
}
