/*=========================================================================

  Module:    $RCSfile: vtkKWWidgetWithScrollbarsSubclass.h.in,v $

  Copyright (c) Kitware, Inc.
  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
// .NAME @WidgetType@WithScrollbars - a @WidgetType@ associated to two vtkKWScrollbar's
// .SECTION Description
// This composite widget provides horizontal and vertical scrolling
// capabilities to a core widget. They can be enabled or disabled separately.
// As a subclass of vtkKWWidgetWithScrollbars, it inherits methods to
// retrieve the scrollbars and set their visibility and layout.
// @ingroup kwwidgets_autogenerated_widget_with_scrollbars_group
// .SECTION Note
// This class and the corresponding code were 
// \subpage kwwidgets_autogenerated_page "generated automatically" by
// instantiating the <tt>Templates/vtkKWWidgetWithScrollbarsSubclass.h.in</tt>
// and <tt>Templates/vtkKWWidgetWithScrollbarsSubclass.cxx.in</tt> files for 
// the type @WidgetType@. Classes related to the same template can be found
// in the \ref kwwidgets_autogenerated_widget_with_scrollbars_group section.
// .SECTION See Also
// vtkKWWidgetWithScrollbars @WidgetType@

#ifndef __@WidgetType@WithScrollbars_h
#define __@WidgetType@WithScrollbars_h

#include "vtkKWWidgetWithScrollbars.h"

class vtkKWScrollbar;
class @WidgetType@;

class KWWidgets_EXPORT @WidgetType@WithScrollbars : public vtkKWWidgetWithScrollbars
{
public:
  static @WidgetType@WithScrollbars* New();
  vtkTypeRevisionMacro(@WidgetType@WithScrollbars,vtkKWWidgetWithScrollbars);
  void PrintSelf(ostream& os, vtkIndent indent);

  // Description:
  // Get the @WidgetType@ for which we addded the scrollbars
  virtual @WidgetType@* GetWidget();
  
  // Description:
  // Update the "enable" state of the object and its internal parts.
  // Depending on different Ivars (this->Enabled, the application's 
  // Limited Edition Mode, etc.), the "enable" state of the object is updated
  // and propagated to its internal parts/subwidgets. This will, for example,
  // enable/disable parts of the widget UI, enable/disable the visibility
  // of 3D widgets, etc.
  virtual void UpdateEnableState();

protected:
  @WidgetType@WithScrollbars();
  ~@WidgetType@WithScrollbars();

  // Description:
  // Create the widget.
  virtual void CreateWidget();

  // Description:
  // Internal widget
  @WidgetType@ *Widget;

  // Description:
  // Create scrollbars and associate the scrollbars to a widget by
  // setting up the callbacks between both instances.
  // Re-implemented to set the associated now that we know the internal widget
  virtual void CreateHorizontalScrollbar();
  virtual void CreateVerticalScrollbar();

  // Description:
  // Pack.
  virtual void Pack();

private:
  @WidgetType@WithScrollbars(const @WidgetType@WithScrollbars&); // Not implemented
  void operator=(const @WidgetType@WithScrollbars&); // Not implemented
};

#endif
