Interacción con Scroll Bar


En este último ejemplo, leemos una imagen, la visualizamos en una ventana de dimensiones menores a las de la imagen original y posteriormente, con la ayuda de un bicotiActorGraphic2DScrollBar permitimos que el usuario la explore interactivamente.

Imagen Original

El código responsable de llevar a cabo esto es el siguiente:
 

#include <actor_graphic_2D_panel.hpp>
#include <actor_graphic_2D_scroll_bar.hpp>
#include <actor_image_2D_char_qt.hpp>

#define CurrentImageType bicotiActorImage2DCharQT

class ImageScroll : public bicotiListenerScrollBar
{
private:
  static const int altura = 300;
  static const int ancho_scroll = 20;

  CurrentImageType * ptr_imagen;
  bicotiActorGraphic2DScrollBar * ptr_scroll;
  bicotiActorGraphic2DPanel * ptr_panel;

public:
  typedef CurrentImageType :: EventLoopManager EventLoop;
  typedef CurrentImageType :: HomologousFactory Factory;

  ImageScroll()
    {Factory factory;
    ptr_imagen = new bicotiActorImage2DCharQT;
    ptr_imagen->BuildMapper();
    ptr_imagen->GetMapper()->BuildDeviceFile( "scroll.jpg" );
    ptr_imagen->GetMapper()->BuildMapperJPEGIJG();
    ptr_imagen->GetMapper()->Read();
    ptr_imagen->DestroyMapper();
    ptr_imagen->GetActor()->SetSize( ptr_imagen->GetImplementation()->GetX0Size(), altura );
    ptr_imagen->GetActor()->SetPosition( 0, 0 );
    factory.CreateHomologous( ptr_imagen->GetActor() );

    ptr_scroll = new bicotiActorGraphic2DScrollBar( "scrbar" );
    ptr_scroll->SetMinimum( 0 );
    ptr_scroll->SetMaximum( ptr_imagen->GetImplementation()->GetX1Size() - altura );
    ptr_scroll->SetLineStep( 1 );
    ptr_scroll->SetPageStep( 20 );
    ptr_scroll->SetVertical( true );
    ptr_scroll->SetSize( ancho_scroll, altura );
    ptr_scroll->SetPosition( ptr_imagen->GetImplementation()->GetX0Size(), 0 );
    ptr_scroll->AddListenerScrollBar( this );
    factory.CreateHomologous( ptr_scroll );
    ptr_scroll->SetValue( 0 );

    ptr_panel = new bicotiActorGraphic2DPanel;
    ptr_panel->SetFixedSize( ptr_imagen->GetImplementation()->GetX0Size() + ancho_scroll, altura );
    ptr_panel->SetMainActor( true );
    ptr_panel->SetChild( ptr_imagen->GetActor() );
    ptr_panel->SetChild( ptr_scroll );
    factory.CreateHomologous( ptr_panel );}

  ~ImageScroll()
    {delete ptr_scroll;
    delete ptr_imagen;
    delete ptr_panel;}

  void ScrollBarValueChanged( bicotiActor * ptr_actor, int val )
    {
      ptr_imagen->GetActor()->RefreshImage( 0, val, ptr_imagen->GetActor()->GetWidth(), altura );
    }

  void ScrollBarRangeChanged( bicotiActor * ptr_actor, const bicotiEventScrollBarRange & event ) {}
  void ScrollBarStepChanged( bicotiActor * ptr_actor, const bicotiEventScrollBarStep & event ) {}
  void ScrollBarSliderPressed( bicotiActor * ptr_actor, int val ) {}
  void ScrollBarSliderReleased( bicotiActor * ptr_actor, int val ) {}
};
 

void main( int argc, char ** argv )
{
  ImageScroll :: EventLoop event_loop( argc, argv );
  ImageScroll ima_scr;
  event_loop.Start();
}


El aspecto de la aplicación funcionando sería:


Aspecto de la aplicación


 
 
 
 


Todos estos ejemplos, así como innumerables otros, fueron incluídos en ejemplos, categorizados de acuerdo al módulo en que hacen énfasis. Esperamos que los mismos, apoyados con el manual de referencia, sirvan de apoyo para futuros desarrolladores.