Qt
view release on metacpan or search on metacpan
qtgui/examples/widgets/charactermap/MainWindow.pm view on Meta::CPAN
package MainWindow;
use strict;
use warnings;
use List::Util qw( max );
use QtCore4;
use QtGui4;
use QtCore4::isa qw( Qt::MainWindow );
use QtCore4::slots
findStyles => ['QFont'],
findSizes => ['QFont'],
insertCharacter => ['QString'],
updateClipboard => [];
use CharacterWidget;
sub characterWidget() {
return this->{characterWidget};
}
sub clipboard() {
return this->{clipboard};
}
sub styleCombo() {
return this->{styleCombo};
}
sub sizeCombo() {
return this->{sizeCombo};
}
sub fontCombo() {
return this->{fontCombo};
}
sub lineEdit() {
return this->{lineEdit};
}
sub scrollArea() {
return this->{scrollArea};
}
sub fontMerging() {
return this->{fontMerging};
}
sub setCharacterWidget {
return this->{characterWidget} = shift;
}
sub setClipboard {
return this->{clipboard} = shift;
}
sub setStyleCombo {
return this->{styleCombo} = shift;
}
sub setSizeCombo {
return this->{sizeCombo} = shift;
}
sub setFontCombo {
return this->{fontCombo} = shift;
}
sub setLineEdit {
return this->{lineEdit} = shift;
}
sub setScrollArea {
return this->{scrollArea} = shift;
}
sub setFontMerging {
return this->{fontMerging} = shift;
}
# [0]
sub NEW {
my ( $class, $parent ) = @_;
$class->SUPER::NEW( $parent );
my $centralWidget = Qt::Widget();
my $fontLabel = Qt::Label(this->tr('Font:'));
this->setFontCombo( Qt::FontComboBox() );
my $sizeLabel = Qt::Label(this->tr('Size:'));
this->setSizeCombo( Qt::ComboBox() );
my $styleLabel = Qt::Label(this->tr('Style:'));
this->setStyleCombo( Qt::ComboBox() );
my $fontMergingLabel = Qt::Label(this->tr('Automatic Font Merging:'));
this->setFontMerging( Qt::CheckBox() );
this->fontMerging->setChecked(1);
this->setScrollArea( Qt::ScrollArea() );
this->setCharacterWidget( CharacterWidget() );
this->scrollArea->setWidget(this->characterWidget);
# [0]
# [1]
this->findStyles(this->fontCombo->currentFont());
# [1]
this->findSizes(this->fontCombo->currentFont());
# [2]
this->setLineEdit( Qt::LineEdit() );
my $clipboardButton = Qt::PushButton(this->tr('&To clipboard'));
# [2]
# [3]
this->setClipboard( Qt::Application::clipboard() );
# [3]
# [4]
this->connect(this->fontCombo, SIGNAL 'currentFontChanged(const QFont &)',
this, SLOT 'findStyles(const QFont &)');
this->connect(this->fontCombo, SIGNAL 'currentFontChanged(const QFont &)',
this, SLOT 'findSizes(const QFont &)');
this->connect(this->fontCombo, SIGNAL 'currentFontChanged(const QFont &)',
this->characterWidget, SLOT 'updateFont(const QFont &)');
this->connect(this->sizeCombo, SIGNAL 'currentIndexChanged(const QString &)',
this->characterWidget, SLOT 'updateSize(const QString &)');
this->connect(this->styleCombo, SIGNAL 'currentIndexChanged(const QString &)',
this->characterWidget, SLOT 'updateStyle(const QString &)');
# [4] //! [5]
this->connect(this->characterWidget, SIGNAL 'characterSelected(const QString &)',
this, SLOT 'insertCharacter(const QString &)');
this->connect($clipboardButton, SIGNAL 'clicked()', this, SLOT 'updateClipboard()');
# [5]
this->connect(this->fontMerging, SIGNAL 'toggled(bool)', this->characterWidget, SLOT 'updateFontMerging(bool)');
# [6]
my $controlsLayout = Qt::HBoxLayout();
$controlsLayout->addWidget($fontLabel);
$controlsLayout->addWidget(this->fontCombo, 1);
$controlsLayout->addWidget($sizeLabel);
$controlsLayout->addWidget(this->sizeCombo, 1);
$controlsLayout->addWidget($styleLabel);
$controlsLayout->addWidget(this->styleCombo, 1);
$controlsLayout->addWidget($fontMergingLabel);
$controlsLayout->addWidget(this->fontMerging, 1);
$controlsLayout->addStretch(1);
my $lineLayout = Qt::HBoxLayout();
$lineLayout->addWidget(this->lineEdit, 1);
$lineLayout->addSpacing(12);
$lineLayout->addWidget($clipboardButton);
my $centralLayout = Qt::VBoxLayout();
$centralLayout->addLayout($controlsLayout);
$centralLayout->addWidget(this->scrollArea, 1);
$centralLayout->addSpacing(4);
$centralLayout->addLayout($lineLayout);
$centralWidget->setLayout($centralLayout);
this->setCentralWidget($centralWidget);
this->setWindowTitle(this->tr('Character Map'));
}
# [6]
# [7]
sub findStyles {
my ($font) = @_;
my $fontDatabase = Qt::FontDatabase();
my $currentItem = this->styleCombo->currentText();
this->styleCombo->clear();
# [7]
# [8]
foreach my $style ( @{$fontDatabase->styles($font->family())} ) {
this->styleCombo->addItem($style);
}
my $styleIndex = this->styleCombo->findText($currentItem);
if ($styleIndex == -1) {
this->styleCombo->setCurrentIndex(0);
}
else {
this->styleCombo->setCurrentIndex($styleIndex);
}
}
# [8]
sub findSizes {
my ($font) = @_;
my $fontDatabase = Qt::FontDatabase();
my $currentSize = this->sizeCombo->currentText();
this->sizeCombo->blockSignals(1);
this->sizeCombo->clear();
if($fontDatabase->isSmoothlyScalable($font->family(), $fontDatabase->styleString($font))) {
foreach my $size ( @{Qt::FontDatabase::standardSizes()} ) {
this->sizeCombo->addItem("$size");
this->sizeCombo->setEditable(1);
}
} else {
foreach my $size ( @{$fontDatabase->smoothSizes($font->family(), $fontDatabase->styleString($font))} ) {
this->sizeCombo->addItem("$size");
this->sizeCombo->setEditable(0);
}
}
this->sizeCombo->blockSignals(0);
my $sizeIndex = this->sizeCombo->findText($currentSize);
if($sizeIndex == -1) {
this->sizeCombo->setCurrentIndex(max(0, this->sizeCombo->count() / 3));
}
else {
this->sizeCombo->setCurrentIndex($sizeIndex);
}
}
# [9]
sub insertCharacter {
my ($character) = @_;
this->lineEdit->insert($character);
}
# [9]
# [10]
sub updateClipboard {
# [11]
this->clipboard->setText(this->lineEdit->text(), Qt::Clipboard::Clipboard());
# [11]
this->clipboard->setText(this->lineEdit->text(), Qt::Clipboard::Selection());
}
# [10]
1;
( run in 0.785 second using v1.01-cache-2.11-cpan-2398b32b56e )