diff options
Diffstat (limited to 'qtjava/javalib/examples/popup')
-rw-r--r-- | qtjava/javalib/examples/popup/Frame.java | 166 | ||||
-rw-r--r-- | qtjava/javalib/examples/popup/README | 3 |
2 files changed, 169 insertions, 0 deletions
diff --git a/qtjava/javalib/examples/popup/Frame.java b/qtjava/javalib/examples/popup/Frame.java new file mode 100644 index 00000000..afbf2edc --- /dev/null +++ b/qtjava/javalib/examples/popup/Frame.java @@ -0,0 +1,166 @@ +/*************************************************************************** +* $Id$ +** +* Definition of something or other +** +* Created : 979899 +** +* Copyright (C) 1997 by Trolltech AS. All rights reserved. +** +* This file is part of an example program for Qt. This example +* program may be used, distributed and modified without limitation. +** +****************************************************************************/ + +import org.kde.qt.*; + +class Frame extends QFrame +{ + +private QPushButton button1; +private QPushButton button2; + +private QFrame popup1; +private FancyPopup popup2; + +Frame() +{ + this(null, null); +} + +Frame(QWidget parent, String name) +{ + super(parent, name); + button1 = new QPushButton("Simple Popup", this); + connect ( button1, SIGNAL(" clicked()"), SLOT(" button1Clicked()") ); + button2 = new QPushButton("Fancy Popup", this); + connect ( button2, SIGNAL(" pressed()"), SLOT(" button2Pressed()") ); + + QBoxLayout l = new QHBoxLayout( this ); + button1.setMaximumSize(button1.sizeHint()); + button2.setMaximumSize(button2.sizeHint()); + l.addWidget( button1 ); + l.addWidget( button2 ); + l.activate(); + +// button1.setGeometry(20,20,100,30); +// button2.setGeometry(140,20,100,30); + resize(270, 70); + + //create a very simple popup: it is just composed with other + //widget and will be shown after clicking on button1 + + popup1 = new QFrame( this ,null, WType_Popup); + popup1.setFrameStyle( WinPanel|Raised ); + popup1.resize(150,100); + QLineEdit tmpE = new QLineEdit( popup1 ); + connect( tmpE, SIGNAL(" returnPressed()"), popup1, SLOT(" hide()") ); + tmpE.setGeometry(10,10, 130, 30); + tmpE.setFocus(); + QPushButton tmpB = new QPushButton("Click me!", popup1); + connect( tmpB, SIGNAL(" clicked()"), popup1, SLOT(" close()") ); + tmpB.setGeometry(10, 50, 130, 30); + + // the fancier version uses its own class. It will be shown when + // pressing button2, so they behavior is more like a modern menu + // or toolbar. + + popup2 = new FancyPopup( this ); + + // you might also add new widgets to the popup, just like you do + // it with any other widget. The next four lines (if not + // commented out) will for instance add a line edit widget. + +// tmpE = new QLineEdit( popup2 ); +// tmpE.setFocus(); +// connect( tmpE, SIGNAL(" returnPressed()"), popup2, SLOT(" close()") ); +// tmpE.setGeometry(10, 10, 130, 30); +} + + +void button1Clicked(){ + popup1.move( mapToGlobal( button1.geometry().bottomLeft() ) ); + popup1.show(); +} + +void button2Pressed(){ + popup2.popup(button2); +} + +class FancyPopup extends QLabel +{ +private QWidget popupParent; +private int moves; + + + +FancyPopup( QWidget parent ) +{ + this(parent, null); +} + +FancyPopup( QWidget parent, String name ) +{ + super( parent, name, WType_Popup ); + setFrameStyle( WinPanel|Raised ); + setAlignment( AlignCenter ); + resize(150,100); + moves = 0; + setMouseTracking( true ); +} + +protected void mouseMoveEvent( QMouseEvent e){ + moves++; + String s = e.pos().x() + "/" + e.pos().y(); + if ((e.state() & QMouseEvent.LeftButton) != 0) + s += " (down)"; + setText(s); +} + +protected void mouseReleaseEvent( QMouseEvent e){ + if (rect().contains( e.pos() ) || moves > 5) + close(); +} + +protected void closeEvent( QCloseEvent e ){ + e.accept(); + moves = 0; + if (popupParent == null) + return; + + // remember that we (as a popup) might recieve the mouse release + // event instead of the popupParent. This is due to the fact that + // the popupParent popped us up in its mousePressEvent handler. To + // avoid the button remaining in pressed state we simply send a + // faked mouse button release event to it. + QMouseEvent me = new QMouseEvent( QEvent.MouseButtonRelease, new QPoint(0,0), new QPoint(0,0), QMouseEvent.LeftButton, QMouseEvent.NoButton); + QApplication.sendEvent( popupParent, me ); +} + +void popup( QWidget parent) { + popupParent = parent; + setText("Move the mouse!"); + if (popupParent != null) + move( popupParent.mapToGlobal( popupParent.rect().bottomLeft() ) ); + show(); +} + +} + + +public static void main(String[] args) +{ + QApplication a = new QApplication( args ); + + Frame frame = new Frame(); + frame.setCaption("Qt Example - Custom Popups"); + a.setMainWidget(frame); + frame.show(); + a.exec(); + return; +} + + static { + qtjava.initialize(); + } +} diff --git a/qtjava/javalib/examples/popup/README b/qtjava/javalib/examples/popup/README new file mode 100644 index 00000000..3be117bb --- /dev/null +++ b/qtjava/javalib/examples/popup/README @@ -0,0 +1,3 @@ +The popup program demonstrates some easy techniques for creating custom +popup widgets like a fancy color or line-width selection for the +toolbar of a drawing program or a browsebox for various symbols or ... |