summaryrefslogtreecommitdiffstats
path: root/examples/menu/menu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/menu/menu.cpp')
-rw-r--r--examples/menu/menu.cpp355
1 files changed, 355 insertions, 0 deletions
diff --git a/examples/menu/menu.cpp b/examples/menu/menu.cpp
new file mode 100644
index 000000000..f71b8152d
--- /dev/null
+++ b/examples/menu/menu.cpp
@@ -0,0 +1,355 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for TQt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#include "menu.h"
+#include <qcursor.h>
+#include <qpopupmenu.h>
+#include <qapplication.h>
+#include <qmessagebox.h>
+#include <qpixmap.h>
+#include <qpainter.h>
+
+/* XPM */
+static const char * p1_xpm[] = {
+"16 16 3 1",
+" c None",
+". c #000000000000",
+"X c #FFFFFFFF0000",
+" ",
+" ",
+" .... ",
+" .XXXX. ",
+" .............. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .XXXXXXXXXXXX. ",
+" .............. ",
+" "};
+
+/* XPM */
+static const char * p2_xpm[] = {
+"16 16 3 1",
+" c None",
+". c #000000000000",
+"X c #FFFFFFFFFFFF",
+" ",
+" ...... ",
+" .XXX.X. ",
+" .XXX.XX. ",
+" .XXX.XXX. ",
+" .XXX..... ",
+" .XXXXXXX. ",
+" .XXXXXXX. ",
+" .XXXXXXX. ",
+" .XXXXXXX. ",
+" .XXXXXXX. ",
+" .XXXXXXX. ",
+" .XXXXXXX. ",
+" ......... ",
+" ",
+" "};
+
+/* XPM */
+static const char * p3_xpm[] = {
+"16 16 3 1",
+" c None",
+". c #000000000000",
+"X c #FFFFFFFFFFFF",
+" ",
+" ",
+" ......... ",
+" ........... ",
+" ........ .. ",
+" ........... ",
+" ........... ",
+" ........... ",
+" ........... ",
+" ...XXXXX... ",
+" ...XXXXX... ",
+" ...XXXXX... ",
+" ...XXXXX... ",
+" ......... ",
+" ",
+" "};
+
+
+/*
+ Auxiliary class to provide fancy menu items with different
+ fonts. Used for the "bold" and "underline" menu items in the options
+ menu.
+ */
+class MyMenuItem : public TQCustomMenuItem
+{
+public:
+ MyMenuItem( const TQString& s, const TQFont& f )
+ : string( s ), font( f ){};
+ ~MyMenuItem(){}
+
+ void paint( TQPainter* p, const TQColorGroup& /*cg*/, bool /*act*/, bool /*enabled*/, int x, int y, int w, int h )
+ {
+ p->setFont ( font );
+ p->drawText( x, y, w, h, AlignLeft | AlignVCenter | DontClip | ShowPrefix, string );
+ }
+
+ TQSize sizeHint()
+ {
+ return TQFontMetrics( font ).size( AlignLeft | AlignVCenter | ShowPrefix | DontClip, string );
+ }
+private:
+ TQString string;
+ TQFont font;
+};
+
+
+MenuExample::MenuExample( TQWidget *parent, const char *name )
+ : TQWidget( parent, name )
+{
+ TQPixmap p1( p1_xpm );
+ TQPixmap p2( p2_xpm );
+ TQPixmap p3( p3_xpm );
+ TQPopupMenu *print = new TQPopupMenu( this );
+ Q_CHECK_PTR( print );
+ print->insertTearOffHandle();
+ print->insertItem( "&Print to printer", this, SLOT(printer()) );
+ print->insertItem( "Print to &file", this, SLOT(file()) );
+ print->insertItem( "Print to fa&x", this, SLOT(fax()) );
+ print->insertSeparator();
+ print->insertItem( "Printer &Setup", this, SLOT(printerSetup()) );
+
+ TQPopupMenu *file = new TQPopupMenu( this );
+ Q_CHECK_PTR( file );
+ file->insertItem( p1, "&Open", this, SLOT(open()), CTRL+Key_O );
+ file->insertItem( p2, "&New", this, SLOT(news()), CTRL+Key_N );
+ file->insertItem( p3, "&Save", this, SLOT(save()), CTRL+Key_S );
+ file->insertItem( "&Close", this, SLOT(closeDoc()), CTRL+Key_W );
+ file->insertSeparator();
+ file->insertItem( "&Print", print, CTRL+Key_P );
+ file->insertSeparator();
+ file->insertItem( "E&xit", qApp, SLOT(tquit()), CTRL+Key_Q );
+
+ TQPopupMenu *edit = new TQPopupMenu( this );
+ Q_CHECK_PTR( edit );
+ int undoID = edit->insertItem( "&Undo", this, SLOT(undo()) );
+ int redoID = edit->insertItem( "&Redo", this, SLOT(redo()) );
+ edit->setItemEnabled( undoID, FALSE );
+ edit->setItemEnabled( redoID, FALSE );
+
+ TQPopupMenu* options = new TQPopupMenu( this );
+ Q_CHECK_PTR( options );
+ options->insertTearOffHandle();
+ options->setCaption("Options");
+ options->insertItem( "&Normal Font", this, SLOT(normal()) );
+ options->insertSeparator();
+
+ options->polish(); // adjust system settings
+ TQFont f = options->font();
+ f.setBold( TRUE );
+ boldID = options->insertItem( new MyMenuItem( "Bold", f ) );
+ options->setAccel( CTRL+Key_B, boldID );
+ options->connectItem( boldID, this, SLOT(bold()) );
+ f = font();
+ f.setUnderline( TRUE );
+ underlineID = options->insertItem( new MyMenuItem( "Underline", f ) );
+ options->setAccel( CTRL+Key_U, underlineID );
+ options->connectItem( underlineID, this, SLOT(underline()) );
+
+ isBold = FALSE;
+ isUnderline = FALSE;
+ options->setCheckable( TRUE );
+
+
+ TQPopupMenu *help = new TQPopupMenu( this );
+ Q_CHECK_PTR( help );
+ help->insertItem( "&About", this, SLOT(about()), CTRL+Key_H );
+ help->insertItem( "About &TQt", this, SLOT(aboutTQt()) );
+
+ // If we used a TQMainWindow we could use its built-in menuBar().
+ menu = new TQMenuBar( this );
+ Q_CHECK_PTR( menu );
+ menu->insertItem( "&File", file );
+ menu->insertItem( "&Edit", edit );
+ menu->insertItem( "&Options", options );
+ menu->insertSeparator();
+ menu->insertItem( "&Help", help );
+ menu->setSeparator( TQMenuBar::InWindowsStyle );
+
+
+ TQLabel *msg = new TQLabel( this );
+ Q_CHECK_PTR( msg );
+ msg->setText( "A context menu is available.\n"
+ "Invoke it by right-clicking or by"
+ " pressing the 'context' button." );
+ msg->setGeometry( 0, height() - 60, width(), 60 );
+ msg->setAlignment( AlignCenter );
+
+ label = new TQLabel( this );
+ Q_CHECK_PTR( label );
+ label->setGeometry( 20, rect().center().y()-20, width()-40, 40 );
+ label->setFrameStyle( TQFrame::Box | TQFrame::Raised );
+ label->setLineWidth( 1 );
+ label->setAlignment( AlignCenter );
+
+ connect( this, SIGNAL(explain(const TQString&)),
+ label, SLOT(setText(const TQString&)) );
+
+ setMinimumSize( 100, 80 );
+ setFocusPolicy( TQWidget::ClickFocus );
+}
+
+
+void MenuExample::contextMenuEvent( TQContextMenuEvent * )
+{
+ TQPopupMenu* contextMenu = new TQPopupMenu( this );
+ Q_CHECK_PTR( contextMenu );
+ TQLabel *caption = new TQLabel( "<font color=darkblue><u><b>"
+ "Context Menu</b></u></font>", this );
+ caption->setAlignment( TQt::AlignCenter );
+ contextMenu->insertItem( caption );
+ contextMenu->insertItem( "&New", this, SLOT(news()), CTRL+Key_N );
+ contextMenu->insertItem( "&Open...", this, SLOT(open()), CTRL+Key_O );
+ contextMenu->insertItem( "&Save", this, SLOT(save()), CTRL+Key_S );
+ TQPopupMenu *submenu = new TQPopupMenu( this );
+ Q_CHECK_PTR( submenu );
+ submenu->insertItem( "&Print to printer", this, SLOT(printer()) );
+ submenu->insertItem( "Print to &file", this, SLOT(file()) );
+ submenu->insertItem( "Print to fa&x", this, SLOT(fax()) );
+ contextMenu->insertItem( "&Print", submenu );
+ contextMenu->exec( TQCursor::pos() );
+ delete contextMenu;
+}
+
+
+void MenuExample::open()
+{
+ emit explain( "File/Open selected" );
+}
+
+
+void MenuExample::news()
+{
+ emit explain( "File/New selected" );
+}
+
+void MenuExample::save()
+{
+ emit explain( "File/Save selected" );
+}
+
+
+void MenuExample::closeDoc()
+{
+ emit explain( "File/Close selected" );
+}
+
+
+void MenuExample::undo()
+{
+ emit explain( "Edit/Undo selected" );
+}
+
+
+void MenuExample::redo()
+{
+ emit explain( "Edit/Redo selected" );
+}
+
+
+void MenuExample::normal()
+{
+ isBold = FALSE;
+ isUnderline = FALSE;
+ TQFont font;
+ label->setFont( font );
+ menu->setItemChecked( boldID, isBold );
+ menu->setItemChecked( underlineID, isUnderline );
+ emit explain( "Options/Normal selected" );
+}
+
+
+void MenuExample::bold()
+{
+ isBold = !isBold;
+ TQFont font;
+ font.setBold( isBold );
+ font.setUnderline( isUnderline );
+ label->setFont( font );
+ menu->setItemChecked( boldID, isBold );
+ emit explain( "Options/Bold selected" );
+}
+
+
+void MenuExample::underline()
+{
+ isUnderline = !isUnderline;
+ TQFont font;
+ font.setBold( isBold );
+ font.setUnderline( isUnderline );
+ label->setFont( font );
+ menu->setItemChecked( underlineID, isUnderline );
+ emit explain( "Options/Underline selected" );
+}
+
+
+void MenuExample::about()
+{
+ TQMessageBox::about( this, "TQt Menu Example",
+ "This example demonstrates simple use of TQt menus.\n"
+ "You can cut and paste lines from it to your own\n"
+ "programs." );
+}
+
+
+void MenuExample::aboutTQt()
+{
+ TQMessageBox::aboutTQt( this, "TQt Menu Example" );
+}
+
+
+void MenuExample::printer()
+{
+ emit explain( "File/Printer/Print selected" );
+}
+
+void MenuExample::file()
+{
+ emit explain( "File/Printer/Print To File selected" );
+}
+
+void MenuExample::fax()
+{
+ emit explain( "File/Printer/Print To Fax selected" );
+}
+
+void MenuExample::printerSetup()
+{
+ emit explain( "File/Printer/Printer Setup selected" );
+}
+
+
+void MenuExample::resizeEvent( TQResizeEvent * )
+{
+ label->setGeometry( 20, rect().center().y()-20, width()-40, 40 );
+}
+
+
+int main( int argc, char ** argv )
+{
+ TQApplication a( argc, argv );
+ MenuExample m;
+ m.setCaption("TQt Examples - Menus");
+ a.setMainWidget( &m );
+ m.show();
+ return a.exec();
+}