@ISA
=
qw(Qt::Label)
;
sub
new {
my
$self
=
shift
->SUPER::new(
@_
);
my
$tab
= Qt::TabDialog->new(
undef
,
'top-level dialog'
);
$tab
->setCaption(
'Ugly Tab Dialog'
);
my
$w
= Qt::Widget->new(
$tab
,
'page one'
);
my
$g
= Qt::GridLayout->new(
$w
, 2, 2, 5);
my
$ed1
= Qt::MultiLineEdit->new(
$w
);
$g
->addWidget(
$ed1
, 0, 1);
$ed1
->setText(
''
);
$ed1
->setMinimumSize(Qt::Size->new(100, 10));
my
$ed2
= Qt::MultiLineEdit->new(
$w
);
$g
->addWidget(
$ed2
, 1, 1);
$ed2
->setText(
''
);
$ed2
->setMinimumSize(Qt::Size->new(100, 10));
$g
->setColStretch(1, 1);
my
$l
= Qt::Label->new(
$w
);
$g
->addWidget(
$l
, 0, 0);
$l
->setText(
'&Name'
);
$l
->setBuddy(
$ed1
);
$l
->setMinimumSize(
$l
->sizeHint());
$l
= Qt::Label->new(
$w
);
$g
->addWidget(
$l
, 1, 0);
$l
->setText(
'&Email'
);
$l
->setBuddy(
$ed2
);
$l
->setMinimumSize(
$l
->sizeHint());
$g
->setColStretch(0, 0);
$tab
->addTab(
$w
,
'Who'
);
$g
->activate();
$w
= Qt::Widget->new(
$tab
,
'page two'
);
my
$b
= Qt::BoxLayout->new(
$w
, Qt::BoxLayout::LeftToRight, 5);
my
$radioBoxes
= Qt::BoxLayout->new(Qt::BoxLayout::Down);
$b
->addLayout(
$radioBoxes
);
my
$b1
= Qt::RadioButton->new(
$w
,
'radio button 1'
);
$b1
->setText(
'Male'
);
$b1
->setMinimumSize(
$b1
->sizeHint());
$b1
->setMaximumSize(500,
$b1
->minimumSize()->height());
$radioBoxes
->addWidget(
$b1
, Qt::AlignLeft|Qt::AlignTop);
my
$b2
= Qt::RadioButton->new(
$w
,
'radio button 2'
);
$b2
->setText(
'Female'
);
$b2
->setMinimumSize(
$b2
->sizeHint());
$b2
->setMaximumSize(500,
$b2
->minimumSize()->height());
$radioBoxes
->addWidget(
$b2
, Qt::AlignLeft|Qt::AlignTop);
my
$b3
= Qt::RadioButton->new(
$w
,
'radio button 3'
);
$b3
->setText(
'Duo Pack'
);
$b3
->setMinimumSize(
$b3
->sizeHint());
$b3
->setMaximumSize(500,
$b3
->minimumSize()->height());
$radioBoxes
->addWidget(
$b3
, Qt::AlignLeft|Qt::AlignTop);
$radioBoxes
->addStretch(1);
my
$bg
= Qt::ButtonGroup->new;
$bg
->insert(
$b1
);
$bg
->insert(
$b2
);
$bg
->insert(
$b3
);
$b
->addStretch(1);
my
$mood
= Qt::Slider->new(Qt::Slider::Vertical,
$w
,
'mood slider'
);
$mood
->setRange(0, 127);
$mood
->setMinimumSize(
$mood
->sizeHint());
$mood
->setMaximumSize(
$mood
->minimumSize->width(), 500);
$b
->addWidget(
$mood
, Qt::AlignLeft|Qt::AlignTop|Qt::AlignBottom);
my
$labels
= Qt::BoxLayout->new(Qt::BoxLayout::Down);
$b
->addLayout(
$labels
);
$b
->addLayout(
$labels
);
$l
= Qt::Label->new(
'Optimistic'
,
$w
,
'optimistic'
);
$l
->setFixedSize(
$l
->sizeHint());
$labels
->addWidget(
$l
, Qt::AlignTop|Qt::AlignLeft);
$labels
->addStretch(1);
$l
= Qt::Label->new(
'Pessimistic'
,
$w
,
'pessimistic'
);
$l
->setFixedSize(
$l
->sizeHint());
$labels
->addWidget(
$l
, Qt::AlignBottom|Qt::AlignLeft);
$b
->activate();
$tab
->addTab(
$w
,
'How'
);
$tab
->setApplyButton();
$tab
->setCancelButton();
$self
->
connect
(
$tab
,
'applyButtonPressed()'
,
'apply()'
);
$self
->
connect
(
$tab
,
'cancelButtonPressed()'
,
'setup()'
);
$self
->
connect
(
$tab
,
'aboutToShow()'
,
'setup()'
);
$tab
->resize(200, 135);
$self
->setText(
"This tab dialog is rather ugly: "
.
"The code is clear, though:\n"
.
"There are no hard-to-understand aesthetic tradeoffs\n"
);
@$self
{
'ed1'
,
'ed2'
,
'bg'
,
'b1'
,
'b2'
,
'b3'
,
'mood'
} =
(
$ed1
,
$ed2
,
$bg
,
$b1
,
$b2
,
$b3
,
$mood
);
$self
->show();
$tab
->show();
return
$self
;
}
sub
setup {
my
$self
=
shift
;
my
(
$ed1
,
$ed2
,
$b1
,
$mood
) =
@$self
{
'ed1'
,
'ed2'
,
'b1'
,
'mood'
};
$ed1
->setText(
'Perl Qt'
);
$ed2
->setText(
'perlqt@pig.org'
);
$b1
->setChecked(1);
$mood
->setValue(42);
}
sub
apply {
my
$self
=
shift
;
my
(
$ed1
,
$ed2
,
$b1
,
$b2
,
$b3
,
$mood
) =
@$self
{
'ed1'
,
'ed2'
,
'b1'
,
'b2'
,
'b3'
,
'mood'
};
my
$s
=
sprintf
(
"What the dialog decided:\n"
.
"\tLine Edit 1: %s\n\tLineEdit 2: %s\n"
.
"\tMood: %d (0 == down, 127 == up)\n"
.
"\tButtons: %s %s %s\n"
,
$ed1
->text(),
$ed2
->text(),
$mood
->value(),
$b1
->isChecked() ?
'X'
:
'-'
,
$b2
->isChecked() ?
'X'
:
'-'
,
$b3
->isChecked() ?
'X'
:
'-'
);
$self
->setText(
$s
);
my
$sh
=
$self
->sizeHint();
my
$b
= 0;
if
(
$sh
->width() >
$self
->width()) {
$sh
->setWidth(
$self
->width());
$b
= 1;
}
if
(
$sh
->height() >
$self
->height()) {
$sh
->setHeight(
$self
->height());
$b
= 1;
}
$self
->resize(
$sh
)
if
$b
;
$self
->repaint();
}