summaryrefslogtreecommitdiffstats
path: root/PerlQt/examples/opengl/box/glbox
blob: fed74a306b30126ff6994019c7662e738e232e21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

package GLObjectWindow;

use strict;

use TQt;
use TQt::isa qw(TQt::Widget);          
use TQt::attributes qw(
    file
    frame
    menu
    box
    xpos
    ypos
    zpos
);

use GLBox;

sub NEW
{
    shift->SUPER::NEW(@_);

    # Create a menu
    file = TQt::PopupMenu( this );
    file->insertItem( "Exit",  TQt::app(), TQT_SLOT 'quit()', TQt::KeySequence(int &CTRL + &Key_Q ));

    # Create a menu bar
    menu = TQt::MenuBar( this );
    menu->setSeparator( &TQt::MenuBar::InWindowsStyle );
    menu->insertItem("&File", file );

    # Create a nice frame to put around the OpenGL widget
    frame = TQt::Frame( this, "frame" );
    frame->setFrameStyle( &TQt::Frame::Sunken | &TQt::Frame::Panel );
    frame->setLineWidth( 2 );

    # Create our OpenGL widget
    box = GLBox( frame, "glbox");

    # Create the three sliders; one for each rotation axis
    xpos = TQt::Slider ( 0, 360, 60, 0, &TQt::Slider::Vertical, this, "xsl" );
    xpos->setTickmarks( &TQt::Slider::Left );
    TQt::Object::connect( xpos, TQT_SIGNAL 'valueChanged(int)', box, TQT_SLOT 'setXRotation(int)' );

    ypos = TQt::Slider ( 0, 360, 60, 0, &TQt::Slider::Vertical, this, "ysl" );
    ypos->setTickmarks( &TQt::Slider::Left );
    TQt::Object::connect( ypos, TQT_SIGNAL 'valueChanged(int)', box, TQT_SLOT 'setYRotation(int)' );

    zpos = TQt::Slider ( 0, 360, 60, 0, &TQt::Slider::Vertical, this, "zsl" );
    zpos->setTickmarks( &TQt::Slider::Left );
    TQt::Object::connect( zpos, TQT_SIGNAL 'valueChanged(int)', box, TQT_SLOT 'setZRotation(int)' );


    # Now that we have all the widgets, put them into a nice layout

    # Put the sliders on top of each other
    my $vlayout = TQt::VBoxLayout( 20, "vlayout");
    $vlayout->addWidget( xpos );
    $vlayout->addWidget( ypos );
    $vlayout->addWidget( zpos );

    # Put the GL widget inside the frame
    my $flayout = TQt::HBoxLayout( frame, 2, 2, "flayout");
    $flayout->addWidget( box, 1 );

    # Top level layout, puts the sliders to the left of the frame/GL widget
    my $hlayout = TQt::HBoxLayout( this, 20, 20, "hlayout");
    $hlayout->setMenuBar( menu );
    $hlayout->addLayout( $vlayout );
    $hlayout->addWidget( frame, 1 );
}

1;

package main;

use TQt;
use GLObjectWindow;

my $a = TQt::Application(\@ARGV);

my $w = GLObjectWindow;
$w->resize(350,350);
$w->show;

$a->setMainWidget( $w);

exit $a->exec;