package MainWindow;
use strict;
use warnings;
use QtCore4;
use QtGui4;
# [0]
use QtCore4::isa qw( Qt::MainWindow );
# [0]
# [1]
use QtCore4::slots
newFile => [],
open => [],
save => [],
print => [],
undo => [],
redo => [],
cut => [],
copy => [],
paste => [],
bold => [],
italic => [],
leftAlign => [],
rightAlign => [],
justify => [],
center => [],
setLineSpacing => [],
setParagraphSpacing => [],
about => [],
aboutQt => [];
# [1]
# [3]
sub getFileMenu() {
return this->{fileMenu};
}
sub getEditMenu() {
return this->{editMenu};
}
sub getFormatMenu() {
return this->{formatMenu};
}
sub getHelpMenu() {
return this->{helpMenu};
}
sub getAlignmentGroup() {
return this->{alignmentGroup};
}
sub getNewAct() {
return this->{newAct};
}
sub getOpenAct() {
return this->{openAct};
}
sub getSaveAct() {
return this->{saveAct};
}
sub getPrintAct() {
return this->{printAct};
}
sub getExitAct() {
return this->{exitAct};
}
sub getUndoAct() {
return this->{undoAct};
}
sub getRedoAct() {
return this->{redoAct};
}
sub getCutAct() {
return this->{cutAct};
}
sub getCopyAct() {
return this->{copyAct};
}
sub getPasteAct() {
return this->{pasteAct};
}
sub getBoldAct() {
return this->{boldAct};
}
sub getItalicAct() {
return this->{italicAct};
}
sub getLeftAlignAct() {
return this->{leftAlignAct};
}
sub getRightAlignAct() {
return this->{rightAlignAct};
}
sub getJustifyAct() {
return this->{justifyAct};
}
sub getCenterAct() {
return this->{centerAct};
}
sub getSetLineSpacingAct() {
return this->{setLineSpacingAct};
}
sub getSetParagraphSpacingAct() {
return this->{setParagraphSpacingAct};
}
sub getAboutAct() {
return this->{aboutAct};
}
sub getAboutQtAct() {
return this->{aboutQtAct};
}
sub getInfoLabel() {
return this->{infoLabel};
}
# [3]
# [0]
sub NEW {
my ( $class ) = @_;
$class->SUPER::NEW();
my $widget = Qt::Widget();
this->setCentralWidget($widget);
# [0]
# [1]
my $topFiller = Qt::Widget();
$topFiller->setSizePolicy(Qt::SizePolicy::Expanding(), Qt::SizePolicy::Expanding());
my $infoLabel = this->{infoLabel} = Qt::Label(this->tr('Choose a menu option, or right-click to ' .
'invoke a context menu'));
$infoLabel->setFrameStyle(Qt::Frame::StyledPanel() | Qt::Frame::Sunken());
$infoLabel->setAlignment(Qt::AlignCenter());
my $bottomFiller = Qt::Widget();
$bottomFiller->setSizePolicy(Qt::SizePolicy::Expanding(), Qt::SizePolicy::Expanding());
my $layout = Qt::VBoxLayout();
$layout->setMargin(5);
$layout->addWidget($topFiller);
$layout->addWidget($infoLabel);
$layout->addWidget($bottomFiller);
$widget->setLayout($layout);
# [1]
# [2]
this->createActions();
this->createMenus();
my $message = this->tr('A context menu is available by right-clicking');
this->statusBar()->showMessage($message);
this->setWindowTitle(this->tr('Menus'));
this->setMinimumSize(160, 160);
this->resize(480, 320);
}
# [2]
# [3]
sub contextMenuEvent {
my ($event) = @_;
my $menu = Qt::Menu(this);
$menu->addAction(this->getCutAct);
$menu->addAction(this->getCopyAct);
$menu->addAction(this->getPasteAct);
$menu->exec($event->globalPos());
}
# [3]
sub newFile()
{
this->getInfoLabel->setText(this->tr('Invoked File|New'));
}
sub open()
{
this->getInfoLabel->setText(this->tr('Invoked File|Open'));
}
sub save()
{
this->getInfoLabel->setText(this->tr('Invoked File|Save'));
}
sub print()
{
this->getInfoLabel->setText(this->tr('Invoked File|Print'));
}
sub undo()
{
this->getInfoLabel->setText(this->tr('Invoked Edit|Undo'));
}
sub redo()
{
this->getInfoLabel->setText(this->tr('Invoked Edit|Redo'));
}
sub cut()
{
this->getInfoLabel->setText(this->tr('Invoked Edit|Cut'));
}
sub copy()
{
this->getInfoLabel->setText(this->tr('Invoked Edit|Copy'));
}
sub paste()
{
this->getInfoLabel->setText(this->tr('Invoked Edit|Paste'));
}
sub bold()
{
this->getInfoLabel->setText(this->tr('Invoked Edit|Format|Bold'));
}
sub italic()
{
this->getInfoLabel->setText(this->tr('Invoked Edit|Format|Italic'));
}
sub leftAlign()
{
this->getInfoLabel->setText(this->tr('Invoked Edit|Format|Left Align'));
}
sub rightAlign()
{
this->getInfoLabel->setText(this->tr('Invoked Edit|Format|Right Align'));
}
sub justify()
{
this->getInfoLabel->setText(this->tr('Invoked Edit|Format|Justify'));
}
sub center()
{
this->getInfoLabel->setText(this->tr('Invoked Edit|Format|Center'));
}
sub setLineSpacing()
{
this->getInfoLabel->setText(this->tr('Invoked Edit|Format|Set Line Spacing'));
}
sub setParagraphSpacing()
{
this->getInfoLabel->setText(this->tr('Invoked Edit|Format|Set Paragraph Spacing'));
}
sub about()
{
this->getInfoLabel->setText(this->tr('Invoked Help|About'));
Qt::MessageBox::about(this, this->tr('About Menu'),
this->tr('The Menu example shows how to create ' .
'menu-bar menus and context menus.'));
}
sub aboutQt()
{
this->getInfoLabel->setText(this->tr('Invoked Help|About Qt'));
}
# [4]
sub createActions()
{
# [5]
my $newAct = this->{newAct} = Qt::Action(this->tr('&New'), this);
$newAct->setShortcuts(Qt::KeySequence::New());
$newAct->setStatusTip(this->tr('Create a file'));
this->connect($newAct, SIGNAL 'triggered()', this, SLOT 'newFile()');
# [4]
my $openAct = this->{openAct} = Qt::Action(this->tr('&Open...'), this);
$openAct->setShortcuts(Qt::KeySequence::Open());
$openAct->setStatusTip(this->tr('Open an existing file'));
this->connect($openAct, SIGNAL 'triggered()', this, SLOT 'open()');
# [5]
my $saveAct = this->{saveAct} = Qt::Action(this->tr('&Save'), this);
$saveAct->setShortcuts(Qt::KeySequence::Save());
$saveAct->setStatusTip(this->tr('Save the document to disk'));
this->connect($saveAct, SIGNAL 'triggered()', this, SLOT 'save()');
my $printAct = this->{printAct} = Qt::Action(this->tr('&Print...'), this);
$printAct->setShortcuts(Qt::KeySequence::Print());
$printAct->setStatusTip(this->tr('Print the document'));
this->connect($printAct, SIGNAL 'triggered()', this, SLOT 'print()');
my $exitAct = this->{exitAct} = Qt::Action(this->tr('E&xit'), this);
$exitAct->setShortcut(Qt::KeySequence(this->tr('Ctrl+Q')));
$exitAct->setStatusTip(this->tr('Exit the application'));
this->connect($exitAct, SIGNAL 'triggered()', this, SLOT 'close()');
my $undoAct = this->{undoAct} = Qt::Action(this->tr('&Undo'), this);
$undoAct->setShortcuts(Qt::KeySequence::Undo());
$undoAct->setStatusTip(this->tr('Undo the last operation'));
this->connect($undoAct, SIGNAL 'triggered()', this, SLOT 'undo()');
my $redoAct = this->{redoAct} = Qt::Action(this->tr('&Redo'), this);
$redoAct->setShortcuts(Qt::KeySequence::Redo());
$redoAct->setStatusTip(this->tr('Redo the last operation'));
this->connect($redoAct, SIGNAL 'triggered()', this, SLOT 'redo()');
my $cutAct = this->{cutAct} = Qt::Action(this->tr('Cu&t'), this);
$cutAct->setShortcuts(Qt::KeySequence::Cut());
$cutAct->setStatusTip(this->tr('Cut the current selection\'s contents to the ' .
'clipboard'));
this->connect($cutAct, SIGNAL 'triggered()', this, SLOT 'cut()');
my $copyAct = this->{copyAct} = Qt::Action(this->tr('&Copy'), this);
$copyAct->setShortcut(Qt::KeySequence(this->tr('Ctrl+C')));
$copyAct->setStatusTip(this->tr('Copy the current selection\'s contents to the ' .
'clipboard'));
this->connect($copyAct, SIGNAL 'triggered()', this, SLOT 'copy()');
my $pasteAct = this->{pasteAct} = Qt::Action(this->tr('&Paste'), this);
$pasteAct->setShortcuts(Qt::KeySequence::Paste());
$pasteAct->setStatusTip(this->tr('Paste the clipboard\'s contents into the current ' .
'selection'));
this->connect($pasteAct, SIGNAL 'triggered()', this, SLOT 'paste()');
my $boldAct = this->{boldAct} = Qt::Action(this->tr('&Bold'), this);
$boldAct->setCheckable(1);
$boldAct->setShortcut(Qt::KeySequence(this->tr('Ctrl+B')));
$boldAct->setStatusTip(this->tr('Make the text bold'));
this->connect($boldAct, SIGNAL 'triggered()', this, SLOT 'bold()');
my $boldFont = $boldAct->font();
$boldFont->setBold(1);
$boldAct->setFont($boldFont);
my $italicAct = this->{italicAct} = Qt::Action(this->tr('&Italic'), this);
$italicAct->setCheckable(1);
$italicAct->setShortcut(Qt::KeySequence(this->tr('Ctrl+I')));
$italicAct->setStatusTip(this->tr('Make the text italic'));
this->connect($italicAct, SIGNAL 'triggered()', this, SLOT 'italic()');
my $italicFont = $italicAct->font();
$italicFont->setItalic(1);
$italicAct->setFont($italicFont);
my $setLineSpacingAct = this->{setLineSpacingAct} = Qt::Action(this->tr('Set &Line Spacing...'), this);
$setLineSpacingAct->setStatusTip(this->tr('Change the gap between the lines of a ' .
'paragraph'));
this->connect($setLineSpacingAct, SIGNAL 'triggered()', this, SLOT 'setLineSpacing()');
my $setParagraphSpacingAct = this->{setParagraphSpacingAct} = Qt::Action(this->tr('Set &Paragraph Spacing...'), this);
$setLineSpacingAct->setStatusTip(this->tr('Change the gap between paragraphs'));
this->connect($setParagraphSpacingAct, SIGNAL 'triggered()',
this, SLOT 'setParagraphSpacing()');
my $aboutAct = this->{aboutAct} = Qt::Action(this->tr('&About'), this);
$aboutAct->setStatusTip(this->tr('Show the application\'s About box'));
this->connect($aboutAct, SIGNAL 'triggered()', this, SLOT 'about()');
my $aboutQtAct = this->{aboutQtAct} = Qt::Action(this->tr('About &Qt'), this);
$aboutQtAct->setStatusTip(this->tr('Show the Qt4 library\'s About box'));
this->connect($aboutQtAct, SIGNAL 'triggered()', qApp, SLOT 'aboutQt()');
this->connect($aboutQtAct, SIGNAL 'triggered()', this, SLOT 'aboutQt()');
my $leftAlignAct = this->{leftAlignAct} = Qt::Action(this->tr('&Left Align'), this);
$leftAlignAct->setCheckable(1);
$leftAlignAct->setShortcut(Qt::KeySequence(this->tr('Ctrl+L')));
$leftAlignAct->setStatusTip(this->tr('Left align the selected text'));
this->connect($leftAlignAct, SIGNAL 'triggered()', this, SLOT 'leftAlign()');
my $rightAlignAct = this->{rightAlignAct} = Qt::Action(this->tr('&Right Align'), this);
$rightAlignAct->setCheckable(1);
$rightAlignAct->setShortcut(Qt::KeySequence(this->tr('Ctrl+R')));
$rightAlignAct->setStatusTip(this->tr('Right align the selected text'));
this->connect($rightAlignAct, SIGNAL 'triggered()', this, SLOT 'rightAlign()');
my $justifyAct = this->{justifyAct} = Qt::Action(this->tr('&Justify'), this);
$justifyAct->setCheckable(1);
$justifyAct->setShortcut(Qt::KeySequence(this->tr('Ctrl+J')));
$justifyAct->setStatusTip(this->tr('Justify the selected text'));
this->connect($justifyAct, SIGNAL 'triggered()', this, SLOT 'justify()');
my $centerAct = this->{centerAct} = Qt::Action(this->tr('&Center'), this);
$centerAct->setCheckable(1);
$centerAct->setShortcut(Qt::KeySequence(this->tr('Ctrl+E')));
$centerAct->setStatusTip(this->tr('Center the selected text'));
this->connect($centerAct, SIGNAL 'triggered()', this, SLOT 'center()');
# [6] //! [7]
my $alignmentGroup = this->{alignmentGroup} = Qt::ActionGroup(this);
$alignmentGroup->addAction($leftAlignAct);
$alignmentGroup->addAction($rightAlignAct);
$alignmentGroup->addAction($justifyAct);
$alignmentGroup->addAction($centerAct);
$leftAlignAct->setChecked(1);
# [6]
}
# [7]
# [8]
sub createMenus {
# [9] //! [10]
my $fileMenu = this->{fileMenu} = this->menuBar()->addMenu(this->tr('&File'));
$fileMenu->addAction(this->getNewAct);
# [9]
$fileMenu->addAction(this->getOpenAct);
# [10]
$fileMenu->addAction(this->getSaveAct);
$fileMenu->addAction(this->getPrintAct);
# [11]
$fileMenu->addSeparator();
# [11]
$fileMenu->addAction(this->getExitAct);
my $editMenu = this->{editMenu} = this->menuBar()->addMenu(this->tr('&Edit'));
$editMenu->addAction(this->getUndoAct);
$editMenu->addAction(this->getRedoAct);
$editMenu->addSeparator();
$editMenu->addAction(this->getCutAct);
$editMenu->addAction(this->getCopyAct);
$editMenu->addAction(this->getPasteAct);
$editMenu->addSeparator();
my $helpMenu = this->{helpMenu} = this->menuBar()->addMenu(this->tr('&Help'));
$helpMenu->addAction(this->getAboutAct);
$helpMenu->addAction(this->getAboutQtAct);
# [8]
# [12]
my $formatMenu = this->{formatMenu} = $editMenu->addMenu(this->tr('&Format'));
$formatMenu->addAction(this->getBoldAct);
$formatMenu->addAction(this->getItalicAct);
$formatMenu->addSeparator()->setText(this->tr('Alignment'));
$formatMenu->addAction(this->getLeftAlignAct);
$formatMenu->addAction(this->getRightAlignAct);
$formatMenu->addAction(this->getJustifyAct);
$formatMenu->addAction(this->getCenterAct);
$formatMenu->addSeparator();
$formatMenu->addAction(this->getSetLineSpacingAct);
$formatMenu->addAction(this->getSetParagraphSpacingAct);
}
# [12]
1;