#include // action #include // menubar #include // toolbar #include // a label #include // the header file for the QPushButton #include #include // the QPEApplication #include #include // a template + macro to save the main method and allow quick launching #include #include #include "simple.h" /* * implementation of simple */ /* * The factory is used for quicklaunching * It needs a constructor ( c'tor ) with at least QWidget, const char* and WFlags as parameter and a static QString appName() matching the TARGET of the .pro * * Depending on the global quick launch setting this will create * either a main method or one for our component plugin system */ /* The OApplicationFactory is in the Opie::Core namespace */ using namespace Opie::Core; OPIE_EXPORT_APP( OApplicationFactory ) MainWindow::MainWindow(QWidget *parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl ) { setCaption(tr("My MainWindow") ); initUI(); /* * Tab widget as central */ Opie::Ui::OTabWidget *tab = new Opie::Ui::OTabWidget(this); connect(tab, SIGNAL(currentChanged(QWidget*) ), this, SLOT( slotCurrentChanged(QWidget*) ) ); setCentralWidget( tab ); Simple1 *simple1 = new Simple1( this ); tab->addTab( simple1, "new", tr("Simple1") ); tab->setCurrentTab( tr("Simple1") ); Simple2 *simple2 = new Simple2( this ); tab->addTab( simple2, "trash", tr("Simple2") ); m_oldCurrent = simple1; connect(m_fire, SIGNAL(activated() ), simple1, SLOT(slotFire() ) ); } MainWindow::~MainWindow() { // again nothing to delete because Qt takes care } void MainWindow::setDocument( const QString& /*str*/ ) { } void MainWindow::slotCurrentChanged( QWidget *wid) { disconnect(m_fire, SIGNAL(activated() ), m_oldCurrent, SLOT(slotFire() ) ); connect(m_fire, SIGNAL(activated() ), wid, SLOT(slotFire() ) ); m_oldCurrent = wid; } void MainWindow::initUI() { setToolBarsMovable( false ); QToolBar *menuBarHolder = new QToolBar( this ); menuBarHolder->setHorizontalStretchable( true ); QMenuBar *mb = new QMenuBar( menuBarHolder ); QToolBar *tb = new QToolBar( this ); QPopupMenu *fileMenu = new QPopupMenu( this ); QAction *a = new QAction( tr("Quit"), Opie::Core::OResource::loadPixmap("quit_icon", Opie::Core::OResource::SmallIcon), QString::null, 0, this, "quit_action" ); /* * Connect quit to the QApplication quit slot */ connect(a, SIGNAL(activated() ), qApp, SLOT(quit() ) ); a->addTo( fileMenu ); a = new QAction(tr("Fire"), Opie::Core::OResource::loadPixmap("new", Opie::Core::OResource::SmallIcon), QString::null, 0, this, "fire_button"); /* see the power? */ a->addTo( fileMenu ); a->addTo( tb ); m_fire = a; mb->insertItem(tr("File"), fileMenu ); } Simple1::Simple1( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QVBoxLayout *layout = new QVBoxLayout( this ); layout->setSpacing( 8 ); layout->setMargin( 11 ); QLabel *lbl = new QLabel( this, "a name for the label" ); lbl->setText( tr("Click on the button or follow the white rabbit") ); layout->addWidget( lbl ); m_button = new QPushButton(this); m_button->setText( tr("Fire", "translatable quit string" ) ); layout->addWidget( m_button ); connect( m_button, SIGNAL(clicked() ), this, SLOT( slotFire() ) ); } Simple1::~Simple1() { } void Simple1::slotFire() { /* * NOTE: Simple is now a child window of MainWindow * close will hide() Simple and not delete it. But as * the mainwindow is shown all children will be shown as well */ close(); } Simple2::Simple2( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { /* * sets the caption of this toplevel widget * put all translatable string into tr() */ setCaption(tr("My Simple Application") ); /* * A simple vertical layout * either call layout->setAutoAdd( true ) * or use layout->addWidget( wid ) to add widgets */ QVBoxLayout *layout = new QVBoxLayout( this ); layout->setSpacing( 8 ); layout->setMargin( 11 ); /* * creates a label * The first parameter is this widget so the Label is a child * of us and will be deleted when we're deleted. */ QLabel *lbl = new QLabel( this, "a name for the label" ); /* * OResource will search hard for a Pixmap in $OPIEDIR/pics * to find 'logo/opielogo' You need to pass the subdir * but not the ending */ lbl->setPixmap( Opie::Core::OResource::loadPixmap("logo/opielogo", Opie::Core::OResource::SmallIcon) ); layout->addWidget( lbl ); /* creates a button as child of this widget */ m_button = new QPushButton(this); /* * another way to call tr. The first parameter is the string * to translate and the second a hint to the translator */ m_button->setText( tr("Fire", "translatable fire string" ) ); layout->addWidget( m_button ); connect( m_button, SIGNAL(clicked() ), this, SLOT( slotQuit() ) ); } Simple2::~Simple2() { } void Simple2::slotFire() { /* * We will fire up a sound * Note that Sound will use Resource as well * and we do not need to supply an ending * sounds are found in $OPIEDIR/sounds */ Sound snd("hit_target01"); snd.play(); }