/**************************************************************
 * 
 * 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
     );
}
