diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 90825e2392b2d70e43c7a25b8a3752299a933894 (patch) | |
tree | e33aa27f02b74604afbfd0ea4f1cfca8833d882a /qtjava/javalib/tutorial | |
download | tdebindings-90825e2392b2d70e43c7a25b8a3752299a933894.tar.gz tdebindings-90825e2392b2d70e43c7a25b8a3752299a933894.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebindings@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'qtjava/javalib/tutorial')
32 files changed, 2120 insertions, 0 deletions
diff --git a/qtjava/javalib/tutorial/t1/Tut1.java b/qtjava/javalib/tutorial/t1/Tut1.java new file mode 100644 index 00000000..dbb95131 --- /dev/null +++ b/qtjava/javalib/tutorial/t1/Tut1.java @@ -0,0 +1,22 @@ +import org.kde.qt.*; + +public class Tut1 extends QObject { + public static void main(String[] args) { + QApplication a = new QApplication(args); + QPushButton hello = new QPushButton("Hello World!", null); + hello.resize(100, 30); + + a.setMainWidget(hello); + hello.show(); + a.exec(); + } + + static { + try { + Class c = Class.forName("org.kde.qt.qtjava"); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Can't load qtjava class"); + } + } +} diff --git a/qtjava/javalib/tutorial/t10/CannonField.java b/qtjava/javalib/tutorial/t10/CannonField.java new file mode 100644 index 00000000..3f6e2727 --- /dev/null +++ b/qtjava/javalib/tutorial/t10/CannonField.java @@ -0,0 +1,72 @@ +import org.kde.qt.*; + +public class CannonField extends QWidget { + private int ang; + private int f; + + public CannonField(QWidget parent, String name) { + super(parent, name); + ang = 45; + setPalette(new QPalette(new QColor(250, 250, 200))); + } + + public int angle() { + return ang; + } + + public void setAngle(int degrees) { + if (degrees < 5) + degrees = 5; + if (degrees > 70) + degrees = 70; + if (ang == degrees) + return; + ang = degrees; + repaint(); + emit("angleChanged", ang); + } + + public int force() { + return f; + } + + public void setForce(int newton) { + if (newton < 0) + newton = 0; + if (f == newton) + return; + f = newton; + emit("forceChanged", f); + } + + private QRect cannonRect() { + QRect r = new QRect(0, 0, 50, 50); + r.moveBottomLeft(rect().bottomLeft()); + return r; + } + + public void paintEvent(QPaintEvent e) { + if (!e.rect().intersects(cannonRect())) + return; + + QRect cr = cannonRect(); + QPixmap pix = new QPixmap(cr.size()); + pix.fill(new QColor(250, 250, 200)); + + QPainter p = new QPainter(pix); + p.setBrush(blue()); + p.setPen(NoPen); + p.translate(0, pix.height() - 1); + p.drawPie(new QRect(-35,-35, 70, 70), 0, 90*16); + p.rotate(-ang); + p.drawRect(new QRect(33, -4, 15, 8)); + p.end(); + + p.begin(this); + p.drawPixmap(cr.topLeft(), pix); + } + + public QSizePolicy sizePolicy() { + return new QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding); + } +} diff --git a/qtjava/javalib/tutorial/t10/LCDRange.java b/qtjava/javalib/tutorial/t10/LCDRange.java new file mode 100644 index 00000000..7bbb9886 --- /dev/null +++ b/qtjava/javalib/tutorial/t10/LCDRange.java @@ -0,0 +1,38 @@ +import org.kde.qt.*; + +public class LCDRange extends QVBox { + private QSlider slider; + + public LCDRange(QWidget parent, String name) { + super(parent, name); + QLCDNumber lcd = new QLCDNumber(2, this, "lcd"); + slider = new QSlider(Horizontal, this, "slider"); + slider.setRange(0, 99); + slider.setValue(0); + + connect(slider, SIGNAL("valueChanged(int)"), + lcd, SLOT("display(int)")); + connect(slider, SIGNAL("valueChanged(int)"), + SIGNAL("valueChanged(int)")); + + setFocusProxy(slider); + } + + public int value() { + return slider.value(); + } + + public void setValue(int value) { + slider.setValue(value); + } + + public void setRange(int minVal, int maxVal) { + if (minVal < 0 || maxVal > 99 || minVal > maxVal) { + qWarning("LCDRange::setRange("+minVal+","+maxVal+")\n"+ + "\tRange must be 0..99\n"+ + "\tand minVal must not be greater than maxVal"); + return; + } + slider.setRange(minVal, maxVal); + } +} diff --git a/qtjava/javalib/tutorial/t10/Tut10.java b/qtjava/javalib/tutorial/t10/Tut10.java new file mode 100644 index 00000000..f9141636 --- /dev/null +++ b/qtjava/javalib/tutorial/t10/Tut10.java @@ -0,0 +1,63 @@ +import org.kde.qt.*; + +public class Tut10 extends QWidget { + public Tut10() { + QPushButton quit = new QPushButton("&Quit", this, "quit"); + quit.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(quit, SIGNAL("clicked()"), qApp(), SLOT("quit()")); + + LCDRange angle = new LCDRange(this, "angle"); + angle.setRange(5, 70); + + LCDRange force = new LCDRange(this, "force"); + force.setRange(10, 50); + + CannonField cannonField = new CannonField(this, "cannonField"); + + connect(angle, SIGNAL("valueChanged(int)"), + cannonField, SLOT("setAngle(int)")); + connect(cannonField, SIGNAL("angleChanged(int)"), + angle, SLOT("setValue(int)")); + + connect(force, SIGNAL("valueChanged(int)"), + cannonField, SLOT("setForce(int)")); + connect(cannonField, SIGNAL("forceChanged(int)"), + force, SLOT("setValue(int)")); + + QGridLayout grid = new QGridLayout(this, 2, 2, 10, -1, null); + grid.addWidget(quit, 0, 0); + grid.addWidget(cannonField, 1, 1); + grid.setColStretch(1, 10); + + QVBoxLayout leftBox = new QVBoxLayout(); + grid.addLayout(leftBox, 1, 0); + leftBox.addWidget(angle); + leftBox.addWidget(force); + + angle.setValue(60); + force.setValue(25); + angle.setFocus(); + } + + public static void main(String[] args) { + QApplication.setColorSpec(QApplication.CustomColor); + QApplication a = new QApplication(args); + Tut10 w = new Tut10(); + w.setGeometry( 100, 100, 500, 355 ); + + a.setMainWidget(w); + w.show(); + a.exec(); + return; + } + + static { + try { + Class c = Class.forName("org.kde.qt.qtjava"); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Can't load qtjava class"); + } + } +} diff --git a/qtjava/javalib/tutorial/t11/CannonField.java b/qtjava/javalib/tutorial/t11/CannonField.java new file mode 100644 index 00000000..fc2569ad --- /dev/null +++ b/qtjava/javalib/tutorial/t11/CannonField.java @@ -0,0 +1,140 @@ +import org.kde.qt.*; + +public class CannonField extends QWidget { + private int ang; + private int f; + + private int timerCount; + private QTimer autoShootTimer; + private float shoot_ang; + private float shoot_f; + private final QRect barrelRect = new QRect(33, -4, 15, 8); + + public CannonField(QWidget parent, String name) { + super(parent, name); + ang = 45; + f = 0; + timerCount = 0; + autoShootTimer = new QTimer(this, "movement handler"); + connect(autoShootTimer, SIGNAL("timeout()"), + this, SLOT("moveShot()")); + shoot_ang = 0; + shoot_f = 0; + + setPalette(new QPalette(new QColor(250, 250, 200))); + } + + public int angle() { + return ang; + } + + public void setAngle(int degrees) { + if (degrees < 5) + degrees = 5; + if (degrees > 70) + degrees = 70; + if (ang == degrees) + return; + ang = degrees; + repaint(); + emit("angleChanged", ang); + } + + public int force() { + return f; + } + + public void setForce(int newton) { + if (newton < 0) + newton = 0; + if (f == newton) + return; + f = newton; + emit("forceChanged", f); + } + + public void shoot() { + if (autoShootTimer.isActive()) + return; + timerCount = 0; + shoot_ang = ang; + shoot_f = f; + autoShootTimer.start(50); + } + + public void moveShot() { + QRegion r = new QRegion(shotRect()); + timerCount++; + + QRect shotR = shotRect(); + + if (shotR.x() > width() || shotR.y() > height()) + autoShootTimer.stop(); + else + r = r.unite(new QRegion(shotR)); + repaint(r); + } + + public void paintEvent(QPaintEvent e) { + QRect updateR = e.rect(); + QPainter p = new QPainter(this); + + if (updateR.intersects(cannonRect())) + paintCannon(p); + if (autoShootTimer.isActive() && updateR.intersects(shotRect())) + paintShot(p); + } + + private void paintShot(QPainter p) { + p.setBrush(black()); + p.setPen(NoPen); + p.drawRect(shotRect()); + } + + private void paintCannon(QPainter p) { + QRect cr = cannonRect(); + QPixmap pix = new QPixmap(cr.size()); + pix.fill(new QColor(250, 250, 200)); + + QPainter tmp = new QPainter(pix); + tmp.setBrush(blue()); + tmp.setPen(NoPen); + + tmp.translate(0, pix.height() - 1); + tmp.drawPie(new QRect(-35,-35, 70, 70), 0, 90*16); + tmp.rotate(-ang); + tmp.drawRect(barrelRect); + tmp.end(); + + p.drawPixmap(cr.topLeft(), pix); + } + + private QRect cannonRect() { + QRect r = new QRect(0, 0, 50, 50); + r.moveBottomLeft(rect().bottomLeft()); + return r; + } + + private QRect shotRect() { + final double gravity = 4; + + double time = timerCount / 4.0; + double velocity = shoot_f; + double radians = shoot_ang*3.14159265/180; + + double velx = velocity*Math.cos(radians); + double vely = velocity*Math.sin(radians); + double x0 = (barrelRect.right() + 5)*Math.cos(radians); + double y0 = (barrelRect.right() + 5)*Math.sin(radians); + double x = x0 + velx*time; + double y = y0 + vely*time - 0.5*gravity*time*time; + + QRect r = new QRect(0, 0, 6, 6); + r.moveCenter(new QPoint((int) x, height() - 1 - (int) y)); + return r; +} + + public QSizePolicy sizePolicy() { + return new QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding); + } +} diff --git a/qtjava/javalib/tutorial/t11/LCDRange.java b/qtjava/javalib/tutorial/t11/LCDRange.java new file mode 100644 index 00000000..7bbb9886 --- /dev/null +++ b/qtjava/javalib/tutorial/t11/LCDRange.java @@ -0,0 +1,38 @@ +import org.kde.qt.*; + +public class LCDRange extends QVBox { + private QSlider slider; + + public LCDRange(QWidget parent, String name) { + super(parent, name); + QLCDNumber lcd = new QLCDNumber(2, this, "lcd"); + slider = new QSlider(Horizontal, this, "slider"); + slider.setRange(0, 99); + slider.setValue(0); + + connect(slider, SIGNAL("valueChanged(int)"), + lcd, SLOT("display(int)")); + connect(slider, SIGNAL("valueChanged(int)"), + SIGNAL("valueChanged(int)")); + + setFocusProxy(slider); + } + + public int value() { + return slider.value(); + } + + public void setValue(int value) { + slider.setValue(value); + } + + public void setRange(int minVal, int maxVal) { + if (minVal < 0 || maxVal > 99 || minVal > maxVal) { + qWarning("LCDRange::setRange("+minVal+","+maxVal+")\n"+ + "\tRange must be 0..99\n"+ + "\tand minVal must not be greater than maxVal"); + return; + } + slider.setRange(minVal, maxVal); + } +} diff --git a/qtjava/javalib/tutorial/t11/Tut11.java b/qtjava/javalib/tutorial/t11/Tut11.java new file mode 100644 index 00000000..b64fcdbe --- /dev/null +++ b/qtjava/javalib/tutorial/t11/Tut11.java @@ -0,0 +1,74 @@ +import org.kde.qt.*; + +public class Tut11 extends QWidget { + public Tut11() { + QPushButton quit = new QPushButton("&Quit", this, "quit"); + quit.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(quit, SIGNAL("clicked()"), qApp(), SLOT("quit()")); + + LCDRange angle = new LCDRange(this, "angle"); + angle.setRange(5, 70); + + LCDRange force = new LCDRange(this, "force"); + force.setRange(10, 50); + + CannonField cannonField = new CannonField(this, "cannonField"); + + connect(angle, SIGNAL("valueChanged(int)"), + cannonField, SLOT("setAngle(int)")); + connect(cannonField, SIGNAL("angleChanged(int)"), + angle, SLOT("setValue(int)")); + + connect(force, SIGNAL("valueChanged(int)"), + cannonField, SLOT("setForce(int)")); + connect(cannonField, SIGNAL("forceChanged(int)"), + force, SLOT("setValue(int)")); + + + QPushButton shoot = new QPushButton("&Shoot", this, "shoot"); + shoot.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(shoot, SIGNAL("clicked()"), cannonField, SLOT("shoot()")); + + QGridLayout grid = new QGridLayout(this, 2, 2, 10, -1, null); + grid.addWidget(quit, 0, 0); + grid.addWidget(cannonField, 1, 1); + grid.setColStretch(1, 10); + + QVBoxLayout leftBox = new QVBoxLayout(); + grid.addLayout(leftBox, 1, 0); + leftBox.addWidget(angle); + leftBox.addWidget(force); + + QHBoxLayout topBox = new QHBoxLayout(); + grid.addLayout(topBox, 0, 1); + topBox.addWidget(shoot); + topBox.addStretch(1); + + angle.setValue(60); + force.setValue(25); + angle.setFocus(); + } + + public static void main(String[] args) { + QApplication.setColorSpec(QApplication.CustomColor); + QApplication a = new QApplication(args); + Tut11 w = new Tut11(); + w.setGeometry( 100, 100, 500, 355 ); + + a.setMainWidget(w); + w.show(); + a.exec(); + return; + } + + static { + try { + Class c = Class.forName("org.kde.qt.qtjava"); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Can't load qtjava class"); + } + } +} diff --git a/qtjava/javalib/tutorial/t12/CannonField.java b/qtjava/javalib/tutorial/t12/CannonField.java new file mode 100644 index 00000000..28077c15 --- /dev/null +++ b/qtjava/javalib/tutorial/t12/CannonField.java @@ -0,0 +1,173 @@ +import org.kde.qt.*; + +public class CannonField extends QWidget { + private int ang; + private int f; + + private int timerCount; + private QTimer autoShootTimer; + private float shoot_ang; + private float shoot_f; + + private QPoint target; + + private final QRect barrelRect = new QRect(33, -4, 15, 8); + + public CannonField(QWidget parent, String name) { + super(parent, name); + ang = 45; + f = 0; + timerCount = 0; + autoShootTimer = new QTimer(this, "movement handler"); + connect(autoShootTimer, SIGNAL("timeout()"), + this, SLOT("moveShot()")); + shoot_ang = 0; + shoot_f = 0; + target = new QPoint(0, 0); + + setPalette(new QPalette(new QColor(250, 250, 200))); + newTarget(); + } + + public int angle() { + return ang; + } + + public void setAngle(int degrees) { + if (degrees < 5) + degrees = 5; + if (degrees > 70) + degrees = 70; + if (ang == degrees) + return; + ang = degrees; + repaint(); + emit("angleChanged", ang); + } + + public int force() { + return f; + } + + public void setForce(int newton) { + if (newton < 0) + newton = 0; + if (f == newton) + return; + f = newton; + emit("forceChanged", f); + } + + public void shoot() { + if (autoShootTimer.isActive()) + return; + timerCount = 0; + shoot_ang = ang; + shoot_f = f; + autoShootTimer.start(50); + } + + public void newTarget() { + QRegion r = new QRegion(targetRect()); + target = new QPoint((int) (200 + Math.random()*190), + (int) (10 + Math.random()*255)); + repaint(r.unite(new QRegion(targetRect()))); + } + + public void moveShot() { + QRegion r = new QRegion(shotRect()); + timerCount++; + + QRect shotR = shotRect(); + + if (shotR.intersects(targetRect())) { + autoShootTimer.stop(); + emit("hit"); + } else if (shotR.x() > width() || shotR.y() > height()) { + autoShootTimer.stop(); + emit("missed"); + } else { + r = r.unite(new QRegion(shotR)); + } + + repaint(r); + } + + public void paintEvent(QPaintEvent e) { + QRect updateR = e.rect(); + QPainter p = new QPainter(this); + + if (updateR.intersects(cannonRect())) + paintCannon(p); + if (autoShootTimer.isActive() && updateR.intersects(shotRect())) + paintShot(p); + if (updateR.intersects(targetRect())) + paintTarget(p); + } + + private void paintShot(QPainter p) { + p.setBrush(black()); + p.setPen(NoPen); + p.drawRect(shotRect()); + } + + private void paintTarget(QPainter p) { + p.setBrush(red()); + p.setPen(black()); + p.drawRect(targetRect()); + } + + + private void paintCannon(QPainter p) { + QRect cr = cannonRect(); + QPixmap pix = new QPixmap(cr.size()); + pix.fill(new QColor(250, 250, 200)); + + QPainter tmp = new QPainter(pix); + tmp.setBrush(blue()); + tmp.setPen(NoPen); + + tmp.translate(0, pix.height() - 1); + tmp.drawPie(new QRect(-35,-35, 70, 70), 0, 90*16); + tmp.rotate(-ang); + tmp.drawRect(barrelRect); + tmp.end(); + + p.drawPixmap(cr.topLeft(), pix); + } + + private QRect cannonRect() { + QRect r = new QRect(0, 0, 50, 50); + r.moveBottomLeft(rect().bottomLeft()); + return r; + } + + private QRect shotRect() { + final double gravity = 4; + + double time = timerCount / 4.0; + double velocity = shoot_f; + double radians = shoot_ang*3.14159265/180; + + double velx = velocity*Math.cos(radians); + double vely = velocity*Math.sin(radians); + double x0 = (barrelRect.right() + 5)*Math.cos(radians); + double y0 = (barrelRect.right() + 5)*Math.sin(radians); + double x = x0 + velx*time; + double y = y0 + vely*time - 0.5*gravity*time*time; + + QRect r = new QRect(0, 0, 6, 6); + r.moveCenter(new QPoint((int) x, height() - 1 - (int) y)); + return r; + } + + private QRect targetRect() { + QRect r = new QRect(0, 0, 20, 10); + r.moveCenter(new QPoint(target.x(),height() - 1 - target.y())); + return r; + } + + public QSizePolicy sizePolicy() { + return new QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding); + } +} diff --git a/qtjava/javalib/tutorial/t12/LCDRange.java b/qtjava/javalib/tutorial/t12/LCDRange.java new file mode 100644 index 00000000..3211120b --- /dev/null +++ b/qtjava/javalib/tutorial/t12/LCDRange.java @@ -0,0 +1,56 @@ +import org.kde.qt.*; + +public class LCDRange extends QVBox { + private QSlider slider; + private QLabel label; + + public LCDRange(QWidget parent, String name) { + super(parent, name); + init(); + } + + public LCDRange(String s, QWidget parent, String name) { + super(parent, name); + init(); + setText(s); + } + + private void init() { + QLCDNumber lcd = new QLCDNumber(2, this, "lcd"); + slider = new QSlider(Horizontal, this, "slider"); + slider.setRange(0, 99); + slider.setValue(0); + + label = new QLabel(" ", this, "label", 0); + label.setAlignment(AlignCenter); + + connect(slider, SIGNAL("valueChanged(int)"), + lcd, SLOT("display(int)")); + connect(slider, SIGNAL("valueChanged(int)"), + SIGNAL("valueChanged(int)")); + + setFocusProxy(slider); + } + + public int value() { + return slider.value(); + } + + public void setValue(int value) { + slider.setValue(value); + } + + public void setRange(int minVal, int maxVal) { + if (minVal < 0 || maxVal > 99 || minVal > maxVal) { + qWarning("LCDRange::setRange("+minVal+","+maxVal+")\n"+ + "\tRange must be 0..99\n"+ + "\tand minVal must not be greater than maxVal"); + return; + } + slider.setRange(minVal, maxVal); + } + + public void setText(String s) { + label.setText(s); + } +} diff --git a/qtjava/javalib/tutorial/t12/Tut12.java b/qtjava/javalib/tutorial/t12/Tut12.java new file mode 100644 index 00000000..eb0dc917 --- /dev/null +++ b/qtjava/javalib/tutorial/t12/Tut12.java @@ -0,0 +1,74 @@ +import org.kde.qt.*; + +public class Tut12 extends QWidget { + public Tut12() { + QPushButton quit = new QPushButton("&Quit", this, "quit"); + quit.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(quit, SIGNAL("clicked()"), qApp(), SLOT("quit()")); + + LCDRange angle = new LCDRange("ANGLE", this, "angle"); + angle.setRange(5, 70); + + LCDRange force = new LCDRange("FORCE", this, "force"); + force.setRange(10, 50); + + CannonField cannonField = new CannonField(this, "cannonField"); + + connect(angle, SIGNAL("valueChanged(int)"), + cannonField, SLOT("setAngle(int)")); + connect(cannonField, SIGNAL("angleChanged(int)"), + angle, SLOT("setValue(int)")); + + connect(force, SIGNAL("valueChanged(int)"), + cannonField, SLOT("setForce(int)")); + connect(cannonField, SIGNAL("forceChanged(int)"), + force, SLOT("setValue(int)")); + + + QPushButton shoot = new QPushButton("&Shoot", this, "shoot"); + shoot.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(shoot, SIGNAL("clicked()"), cannonField, SLOT("shoot()")); + + QGridLayout grid = new QGridLayout(this, 2, 2, 10, -1, null); + grid.addWidget(quit, 0, 0); + grid.addWidget(cannonField, 1, 1); + grid.setColStretch(1, 10); + + QVBoxLayout leftBox = new QVBoxLayout(); + grid.addLayout(leftBox, 1, 0); + leftBox.addWidget(angle); + leftBox.addWidget(force); + + QHBoxLayout topBox = new QHBoxLayout(); + grid.addLayout(topBox, 0, 1); + topBox.addWidget(shoot); + topBox.addStretch(1); + + angle.setValue(60); + force.setValue(25); + angle.setFocus(); + } + + public static void main(String[] args) { + QApplication.setColorSpec(QApplication.CustomColor); + QApplication a = new QApplication(args); + Tut12 w = new Tut12(); + w.setGeometry( 100, 100, 500, 355 ); + + a.setMainWidget(w); + w.show(); + a.exec(); + return; + } + + static { + try { + Class c = Class.forName("org.kde.qt.qtjava"); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Can't load qtjava class"); + } + } +} diff --git a/qtjava/javalib/tutorial/t13/CannonField.java b/qtjava/javalib/tutorial/t13/CannonField.java new file mode 100644 index 00000000..9a3253df --- /dev/null +++ b/qtjava/javalib/tutorial/t13/CannonField.java @@ -0,0 +1,210 @@ +import org.kde.qt.*; + +public class CannonField extends QWidget { + private int ang; + private int f; + + private int timerCount; + private QTimer autoShootTimer; + private float shoot_ang; + private float shoot_f; + + private QPoint target; + + private boolean gameEnded; + + private final QRect barrelRect = new QRect(33, -4, 15, 8); + + public CannonField(QWidget parent, String name) { + super(parent, name); + ang = 45; + f = 0; + timerCount = 0; + autoShootTimer = new QTimer(this, "movement handler"); + connect(autoShootTimer, SIGNAL("timeout()"), + this, SLOT("moveShot()")); + shoot_ang = 0; + shoot_f = 0; + target = new QPoint(0, 0); + gameEnded = false; + + setPalette(new QPalette(new QColor(250, 250, 200))); + newTarget(); + } + + public int angle() { + return ang; + } + + public void setAngle(int degrees) { + if (degrees < 5) + degrees = 5; + if (degrees > 70) + degrees = 70; + if (ang == degrees) + return; + ang = degrees; + repaint(); + emit("angleChanged", ang); + } + + public int force() { + return f; + } + + public void setForce(int newton) { + if (newton < 0) + newton = 0; + if (f == newton) + return; + f = newton; + emit("forceChanged", f); + } + + public void shoot() { + if (isShooting()) + return; + timerCount = 0; + shoot_ang = ang; + shoot_f = f; + autoShootTimer.start(50); + emit("canShoot", false); + } + + public void newTarget() { + QRegion r = new QRegion(targetRect()); + target = new QPoint((int) (200 + Math.random()*190), + (int) (10 + Math.random()*255)); + repaint(r.unite(new QRegion(targetRect()))); + } + + public void setGameOver() { + if (gameEnded) + return; + if (isShooting()) + autoShootTimer.stop(); + gameEnded = true; + repaint(); + } + + public boolean gameOver() { + return gameEnded; + } + + public void restartGame() { + if (isShooting()) + autoShootTimer.stop(); + gameEnded = false; + repaint(); + emit("canShoot", true); + } + + + public void moveShot() { + QRegion r = new QRegion(shotRect()); + timerCount++; + + QRect shotR = shotRect(); + + if (shotR.intersects(targetRect())) { + autoShootTimer.stop(); + emit("hit"); + emit("canShoot", true); + } else if (shotR.x() > width() || shotR.y() > height()) { + autoShootTimer.stop(); + emit("missed"); + emit("canShoot", true); + } else { + r = r.unite(new QRegion(shotR)); + } + + repaint(r); + } + + protected void paintEvent(QPaintEvent e) { + QRect updateR = e.rect(); + QPainter p = new QPainter(this); + + if (gameEnded) { + p.setPen(black()); + p.setFont(new QFont("Courier", 48, QFont.Bold, false)); + p.drawText(rect(), AlignCenter, "Game Over"); + } + if (updateR.intersects(cannonRect())) + paintCannon(p); + if (isShooting() && updateR.intersects(shotRect())) + paintShot(p); + if (!gameEnded && updateR.intersects(targetRect())) + paintTarget(p); + } + + private void paintShot(QPainter p) { + p.setBrush(black()); + p.setPen(NoPen); + p.drawRect(shotRect()); + } + + private void paintTarget(QPainter p) { + p.setBrush(red()); + p.setPen(black()); + p.drawRect(targetRect()); + } + + + private void paintCannon(QPainter p) { + QRect cr = cannonRect(); + QPixmap pix = new QPixmap(cr.size()); + pix.fill(new QColor(250, 250, 200)); + + QPainter tmp = new QPainter(pix); + tmp.setBrush(blue()); + tmp.setPen(NoPen); + + tmp.translate(0, pix.height() - 1); + tmp.drawPie(new QRect(-35,-35, 70, 70), 0, 90*16); + tmp.rotate(-ang); + tmp.drawRect(barrelRect); + tmp.end(); + + p.drawPixmap(cr.topLeft(), pix); + } + + private QRect cannonRect() { + QRect r = new QRect(0, 0, 50, 50); + r.moveBottomLeft(rect().bottomLeft()); + return r; + } + + private QRect shotRect() { + final double gravity = 4; + + double time = timerCount / 4.0; + double velocity = shoot_f; + double radians = shoot_ang*3.14159265/180; + + double velx = velocity*Math.cos(radians); + double vely = velocity*Math.sin(radians); + double x0 = (barrelRect.right() + 5)*Math.cos(radians); + double y0 = (barrelRect.right() + 5)*Math.sin(radians); + double x = x0 + velx*time; + double y = y0 + vely*time - 0.5*gravity*time*time; + + QRect r = new QRect(0, 0, 6, 6); + r.moveCenter(new QPoint((int) x, height() - 1 - (int) y)); + return r; + } + + private QRect targetRect() { + QRect r = new QRect(0, 0, 20, 10); + r.moveCenter(new QPoint(target.x(),height() - 1 - target.y())); + return r; + } + + public boolean isShooting() { + return autoShootTimer.isActive(); + } + + public QSizePolicy sizePolicy() { + return new QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding); + } +} diff --git a/qtjava/javalib/tutorial/t13/GameBoard.java b/qtjava/javalib/tutorial/t13/GameBoard.java new file mode 100644 index 00000000..6e44c20f --- /dev/null +++ b/qtjava/javalib/tutorial/t13/GameBoard.java @@ -0,0 +1,108 @@ +import org.kde.qt.*; + +public class GameBoard extends QWidget { + private QLCDNumber hits; + private QLCDNumber shotsLeft; + private CannonField cannonField; + + public GameBoard() { + QPushButton quit = new QPushButton("&Quit", this, "quit"); + quit.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(quit, SIGNAL("clicked()"), qApp(), SLOT("quit()")); + + LCDRange angle = new LCDRange("ANGLE", this, "angle"); + angle.setRange(5, 70); + + LCDRange force = new LCDRange("FORCE", this, "force"); + force.setRange(10, 50); + + cannonField = new CannonField(this, "cannonField"); + + connect(angle, SIGNAL("valueChanged(int)"), + cannonField, SLOT("setAngle(int)")); + connect(cannonField, SIGNAL("angleChanged(int)"), + angle, SLOT("setValue(int)")); + + connect(force, SIGNAL("valueChanged(int)"), + cannonField, SLOT("setForce(int)")); + connect(cannonField, SIGNAL("forceChanged(int)"), + force, SLOT("setValue(int)")); + + connect(cannonField, SIGNAL("hit()"), + this, SLOT("hit()")); + connect(cannonField, SIGNAL("missed()"), + this, SLOT("missed()")); + + QPushButton shoot = new QPushButton("&Shoot", this, "shoot"); + shoot.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(shoot, SIGNAL("clicked()"), SLOT("fire()")); + connect(cannonField, SIGNAL("canShoot(boolean)"), + shoot, SLOT("setEnabled(boolean)")); + + QPushButton restart = new QPushButton("&New Game", this, "newgame"); + restart.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(restart, SIGNAL("clicked()"), this, SLOT("newGame()")); + + hits = new QLCDNumber(2, this, "hits"); + shotsLeft = new QLCDNumber(2, this, "shotsleft"); + QLabel hitsL = new QLabel("HITS", this, "hitsLabel", 0); + QLabel shotsLeftL = new QLabel("SHOTS LEFT", this, "shotsleftLabel", 0); + + QGridLayout grid = new QGridLayout(this, 2, 2, 10, -1, null); + grid.addWidget(quit, 0, 0); + grid.addWidget(cannonField, 1, 1); + grid.setColStretch(1, 10); + + QVBoxLayout leftBox = new QVBoxLayout(); + grid.addLayout(leftBox, 1, 0); + leftBox.addWidget(angle); + leftBox.addWidget(force); + + QHBoxLayout topBox = new QHBoxLayout(); + grid.addLayout(topBox, 0, 1); + topBox.addWidget(shoot); + topBox.addWidget(hits); + topBox.addWidget(hitsL); + topBox.addWidget(shotsLeft); + topBox.addWidget(shotsLeftL); + topBox.addStretch(1); + topBox.addWidget(restart); + + angle.setValue(60); + force.setValue(25); + angle.setFocus(); + + newGame(); + } + + protected void fire() { + if (cannonField.gameOver() || cannonField.isShooting()) + return; + shotsLeft.display(shotsLeft.intValue() - 1); + cannonField.shoot(); + } + + protected void hit() { + hits.display(hits.intValue() + 1); + if (shotsLeft.intValue() == 0) + cannonField.setGameOver(); + else + cannonField.newTarget(); + } + + protected void missed() { + if (shotsLeft.intValue() == 0) + cannonField.setGameOver(); + } + + protected void newGame() { + shotsLeft.display(15); + hits.display(0); + cannonField.restartGame(); + cannonField.newTarget(); + } + +} diff --git a/qtjava/javalib/tutorial/t13/LCDRange.java b/qtjava/javalib/tutorial/t13/LCDRange.java new file mode 100644 index 00000000..bf5001db --- /dev/null +++ b/qtjava/javalib/tutorial/t13/LCDRange.java @@ -0,0 +1,61 @@ +import org.kde.qt.*; + +public class LCDRange extends QWidget { + private QSlider slider; + private QLabel label; + + public LCDRange(QWidget parent, String name) { + super(parent, name); + init(); + } + + public LCDRange(String s, QWidget parent, String name) { + super(parent, name); + init(); + setText(s); + } + + private void init() { + QLCDNumber lcd = new QLCDNumber(2, this, "lcd"); + slider = new QSlider(Horizontal, this, "slider"); + slider.setRange(0, 99); + slider.setValue(0); + + label = new QLabel(" ", this, "label", 0); + label.setAlignment(AlignCenter); + + connect(slider, SIGNAL("valueChanged(int)"), + lcd, SLOT("display(int)")); + connect(slider, SIGNAL("valueChanged(int)"), + SIGNAL("valueChanged(int)")); + + setFocusProxy(slider); + + QVBoxLayout l = new QVBoxLayout(this); + l.addWidget(lcd, 1); + l.addWidget(slider); + l.addWidget(label); + } + + public int value() { + return slider.value(); + } + + public void setValue(int value) { + slider.setValue(value); + } + + public void setRange(int minVal, int maxVal) { + if (minVal < 0 || maxVal > 99 || minVal > maxVal) { + qWarning("LCDRange::setRange("+minVal+","+maxVal+")\n"+ + "\tRange must be 0..99\n"+ + "\tand minVal must not be greater than maxVal"); + return; + } + slider.setRange(minVal, maxVal); + } + + public void setText(String s) { + label.setText(s); + } +} diff --git a/qtjava/javalib/tutorial/t13/Tut13.java b/qtjava/javalib/tutorial/t13/Tut13.java new file mode 100644 index 00000000..ceb0d84d --- /dev/null +++ b/qtjava/javalib/tutorial/t13/Tut13.java @@ -0,0 +1,24 @@ +import org.kde.qt.*; + +public class Tut13 extends QObject { + public static void main(String[] args) { + QApplication.setColorSpec(QApplication.CustomColor); + QApplication a = new QApplication(args); + + GameBoard gb = new GameBoard(); + gb.setGeometry(100, 100, 500, 355); + a.setMainWidget(gb); + gb.show(); + a.exec(); + return; + } + + static { + try { + Class c = Class.forName("org.kde.qt.qtjava"); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Can't load qtjava class"); + } + } +} diff --git a/qtjava/javalib/tutorial/t14/CannonField.java b/qtjava/javalib/tutorial/t14/CannonField.java new file mode 100644 index 00000000..1ace9c78 --- /dev/null +++ b/qtjava/javalib/tutorial/t14/CannonField.java @@ -0,0 +1,261 @@ +import org.kde.qt.*; + +public class CannonField extends QWidget { + private int ang; + private int f; + + private int timerCount; + private QTimer autoShootTimer; + private float shoot_ang; + private float shoot_f; + + private QPoint target; + + private boolean gameEnded; + private boolean barrelPressed; + + private final QRect barrelRect = new QRect(33, -4, 15, 8); + + public CannonField(QWidget parent, String name) { + super(parent, name); + ang = 45; + f = 0; + timerCount = 0; + autoShootTimer = new QTimer(this, "movement handler"); + connect(autoShootTimer, SIGNAL("timeout()"), + this, SLOT("moveShot()")); + shoot_ang = 0; + shoot_f = 0; + target = new QPoint(0, 0); + gameEnded = false; + barrelPressed = false; + + setPalette(new QPalette(new QColor(250, 250, 200))); + newTarget(); + } + + public int angle() { + return ang; + } + + public void setAngle(int degrees) { + if (degrees < 5) + degrees = 5; + if (degrees > 70) + degrees = 70; + if (ang == degrees) + return; + ang = degrees; + repaint(); + emit("angleChanged", ang); + } + + public int force() { + return f; + } + + public void setForce(int newton) { + if (newton < 0) + newton = 0; + if (f == newton) + return; + f = newton; + emit("forceChanged", f); + } + + public void shoot() { + if (autoShootTimer.isActive()) + return; + timerCount = 0; + shoot_ang = ang; + shoot_f = f; + autoShootTimer.start(50); + emit("canShoot", false); + } + + public void newTarget() { + QRegion r = new QRegion(targetRect()); + target = new QPoint((int) (200 + Math.random()*190), + (int) (10 + Math.random()*255)); + repaint(r.unite(new QRegion(targetRect()))); + } + + public void setGameOver() { + if (gameEnded) + return; + if (isShooting()) + autoShootTimer.stop(); + gameEnded = true; + repaint(); + } + + public boolean gameOver() { + return gameEnded; + } + + public void restartGame() { + if (isShooting()) + autoShootTimer.stop(); + gameEnded = false; + repaint(); + emit("canShoot", true); + } + + + public void moveShot() { + QRegion r = new QRegion(shotRect()); + timerCount++; + + QRect shotR = shotRect(); + + if (shotR.intersects(targetRect())) { + autoShootTimer.stop(); + emit("hit"); + emit("canShoot", true); + } else if (shotR.x() > width() || shotR.y() > height() || + shotR.intersects(barrierRect())) { + autoShootTimer.stop(); + emit("missed"); + emit("canShoot", true); + } else { + r = r.unite(new QRegion(shotR)); + } + + repaint(r); + } + + protected void mousePressEvent(QMouseEvent e) { + if (e.button() != LeftButton) + return; + if (barrelHit(e.pos())) + barrelPressed = true; + } + + protected void mouseMoveEvent(QMouseEvent e) { + if (!barrelPressed) + return; + QPoint pnt = e.pos(); + if (pnt.x() <= 0) + pnt.setX(1); + if (pnt.y() >= height()) + pnt.setY(height() - 1); + double rad = Math.atan(((double)rect().bottom()-pnt.y())/pnt.x()); + setAngle((int) (rad*180/3.14159265)); + } + + protected void mouseReleaseEvent(QMouseEvent e) { + if (e.button() == LeftButton) + barrelPressed = true; + } + + + protected void paintEvent(QPaintEvent e) { + QRect updateR = e.rect(); + QPainter p = new QPainter(this); + + if (gameEnded) { + p.setPen(black()); + p.setFont(new QFont("Courier", 48, QFont.Bold, false)); + p.drawText(rect(), AlignCenter, "Game Over"); + } + if (updateR.intersects(cannonRect())) + paintCannon(p); + if (updateR.intersects(barrierRect())) + paintBarrier(p); + if (isShooting() && updateR.intersects(shotRect())) + paintShot(p); + if (!gameEnded && updateR.intersects(targetRect())) + paintTarget(p); + } + + private void paintShot(QPainter p) { + p.setBrush(black()); + p.setPen(NoPen); + p.drawRect(shotRect()); + } + + private void paintTarget(QPainter p) { + p.setBrush(red()); + p.setPen(black()); + p.drawRect(targetRect()); + } + + private void paintBarrier(QPainter p) { + p.setBrush(yellow()); + p.setPen(black()); + p.drawRect(barrierRect()); + } + + private void paintCannon(QPainter p) { + QRect cr = cannonRect(); + QPixmap pix = new QPixmap(cr.size()); + pix.fill(new QColor(250, 250, 200)); + + QPainter tmp = new QPainter(pix); + tmp.setBrush(blue()); + tmp.setPen(NoPen); + + tmp.translate(0, pix.height() - 1); + tmp.drawPie(new QRect(-35,-35, 70, 70), 0, 90*16); + tmp.rotate(-ang); + tmp.drawRect(barrelRect); + tmp.end(); + + p.drawPixmap(cr.topLeft(), pix); + } + + private QRect cannonRect() { + QRect r = new QRect(0, 0, 50, 50); + r.moveBottomLeft(rect().bottomLeft()); + return r; + } + + private QRect shotRect() { + final double gravity = 4; + + double time = timerCount / 4.0; + double velocity = shoot_f; + double radians = shoot_ang*3.14159265/180; + + double velx = velocity*Math.cos(radians); + double vely = velocity*Math.sin(radians); + double x0 = (barrelRect.right() + 5)*Math.cos(radians); + double y0 = (barrelRect.right() + 5)*Math.sin(radians); + double x = x0 + velx*time; + double y = y0 + vely*time - 0.5*gravity*time*time; + + QRect r = new QRect(0, 0, 6, 6); + r.moveCenter(new QPoint((int) x, height() - 1 - (int) y)); + return r; + } + + private QRect targetRect() { + QRect r = new QRect(0, 0, 20, 10); + r.moveCenter(new QPoint(target.x(),height() - 1 - target.y())); + return r; + } + + private QRect barrierRect() { + return new QRect(145, height() - 100, 15, 100); + } + + private boolean barrelHit(QPoint p) { + QWMatrix mtx = new QWMatrix(); + mtx.translate(0, height() - 1); + mtx.rotate(-ang); + mtx = mtx.invert(new boolean[1]); + return barrelRect.contains(mtx.map(p)); + } + + public boolean isShooting() { + return autoShootTimer.isActive(); + } + + public QSize sizeHint() { + return new QSize(400, 300); + } + + public QSizePolicy sizePolicy() { + return new QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding); + } +} diff --git a/qtjava/javalib/tutorial/t14/GameBoard.java b/qtjava/javalib/tutorial/t14/GameBoard.java new file mode 100644 index 00000000..46efa2eb --- /dev/null +++ b/qtjava/javalib/tutorial/t14/GameBoard.java @@ -0,0 +1,118 @@ +import org.kde.qt.*; + +public class GameBoard extends QWidget { + private QLCDNumber hits; + private QLCDNumber shotsLeft; + private CannonField cannonField; + + public GameBoard() { + super(null, "gameboard"); + QPushButton quit = new QPushButton("&Quit", this, "quit"); + quit.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(quit, SIGNAL("clicked()"), qApp(), SLOT("quit()")); + + LCDRange angle = new LCDRange("ANGLE", this, "angle"); + angle.setRange(5, 70); + + LCDRange force = new LCDRange("FORCE", this, "force"); + force.setRange(10, 50); + + QVBox box = new QVBox(this, "cannonFrame"); + box.setFrameStyle(QFrame.WinPanel | QFrame.Sunken); + + cannonField = new CannonField(box, "cannonField"); + + connect(angle, SIGNAL("valueChanged(int)"), + cannonField, SLOT("setAngle(int)")); + connect(cannonField, SIGNAL("angleChanged(int)"), + angle, SLOT("setValue(int)")); + + connect(force, SIGNAL("valueChanged(int)"), + cannonField, SLOT("setForce(int)")); + connect(cannonField, SIGNAL("forceChanged(int)"), + force, SLOT("setValue(int)")); + + connect(cannonField, SIGNAL("hit()"), + this, SLOT("hit()")); + connect(cannonField, SIGNAL("missed()"), + this, SLOT("missed()")); + + QPushButton shoot = new QPushButton("&Shoot", this, "shoot"); + shoot.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(shoot, SIGNAL("clicked()"), SLOT("fire()")); + + QPushButton restart = new QPushButton("&New Game", this, "newgame"); + restart.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(restart, SIGNAL("clicked()"), this, SLOT("newGame()")); + + hits = new QLCDNumber(2, this, "hits"); + shotsLeft = new QLCDNumber(2, this, "shotsleft"); + QLabel hitsL = new QLabel("HITS", this, "hitsLabel", 0); + QLabel shotsLeftL = new QLabel("SHOTS LEFT", this, "shotsleftLabel", 0); + + QAccel accel = new QAccel(this); + accel.connectItem(accel.insertItem(new QKeySequence(Key_Enter)), this, SLOT("fire()")); + accel.connectItem(accel.insertItem(new QKeySequence(Key_Return)), this, SLOT("fire()")); + accel.connectItem(accel.insertItem(new QKeySequence(CTRL+Key_Q)), qApp(), SLOT("quit()")); +/*** + accel.connectItem(accel.insertItem(Key_Enter), this, SLOT("fire()")); + accel.connectItem(accel.insertItem(Key_Return), this, SLOT("fire()")); + accel.connectItem(accel.insertItem(CTRL+Key_Q), qApp(), SLOT("quit()")); +***/ + QGridLayout grid = new QGridLayout(this, 2, 2, 10, -1, null); + grid.addWidget(quit, 0, 0); + grid.addWidget(box, 1, 1); + grid.setColStretch(1, 10); + + QVBoxLayout leftBox = new QVBoxLayout(); + grid.addLayout(leftBox, 1, 0); + leftBox.addWidget(angle); + leftBox.addWidget(force); + + QHBoxLayout topBox = new QHBoxLayout(); + grid.addLayout(topBox, 0, 1); + topBox.addWidget(shoot); + topBox.addWidget(hits); + topBox.addWidget(hitsL); + topBox.addWidget(shotsLeft); + topBox.addWidget(shotsLeftL); + topBox.addStretch(1); + topBox.addWidget(restart); + + angle.setValue(60); + force.setValue(25); + angle.setFocus(); + + newGame(); + } + + protected void fire() { + if (cannonField.gameOver() || cannonField.isShooting()) + return; + shotsLeft.display(shotsLeft.intValue() - 1); + cannonField.shoot(); + } + + protected void hit() { + hits.display(hits.intValue() + 1); + if (shotsLeft.intValue() == 0) + cannonField.setGameOver(); + else + cannonField.newTarget(); + } + + protected void missed() { + if (shotsLeft.intValue() == 0) + cannonField.setGameOver(); + } + + protected void newGame() { + shotsLeft.display(15); + hits.display(0); + cannonField.restartGame(); + cannonField.newTarget(); + } +} diff --git a/qtjava/javalib/tutorial/t14/LCDRange.java b/qtjava/javalib/tutorial/t14/LCDRange.java new file mode 100644 index 00000000..bf5001db --- /dev/null +++ b/qtjava/javalib/tutorial/t14/LCDRange.java @@ -0,0 +1,61 @@ +import org.kde.qt.*; + +public class LCDRange extends QWidget { + private QSlider slider; + private QLabel label; + + public LCDRange(QWidget parent, String name) { + super(parent, name); + init(); + } + + public LCDRange(String s, QWidget parent, String name) { + super(parent, name); + init(); + setText(s); + } + + private void init() { + QLCDNumber lcd = new QLCDNumber(2, this, "lcd"); + slider = new QSlider(Horizontal, this, "slider"); + slider.setRange(0, 99); + slider.setValue(0); + + label = new QLabel(" ", this, "label", 0); + label.setAlignment(AlignCenter); + + connect(slider, SIGNAL("valueChanged(int)"), + lcd, SLOT("display(int)")); + connect(slider, SIGNAL("valueChanged(int)"), + SIGNAL("valueChanged(int)")); + + setFocusProxy(slider); + + QVBoxLayout l = new QVBoxLayout(this); + l.addWidget(lcd, 1); + l.addWidget(slider); + l.addWidget(label); + } + + public int value() { + return slider.value(); + } + + public void setValue(int value) { + slider.setValue(value); + } + + public void setRange(int minVal, int maxVal) { + if (minVal < 0 || maxVal > 99 || minVal > maxVal) { + qWarning("LCDRange::setRange("+minVal+","+maxVal+")\n"+ + "\tRange must be 0..99\n"+ + "\tand minVal must not be greater than maxVal"); + return; + } + slider.setRange(minVal, maxVal); + } + + public void setText(String s) { + label.setText(s); + } +} diff --git a/qtjava/javalib/tutorial/t14/Tut14.java b/qtjava/javalib/tutorial/t14/Tut14.java new file mode 100644 index 00000000..ace919c3 --- /dev/null +++ b/qtjava/javalib/tutorial/t14/Tut14.java @@ -0,0 +1,24 @@ +import org.kde.qt.*; + +public class Tut14 extends QObject { + public static void main(String[] args) { + QApplication.setColorSpec(QApplication.CustomColor); + QApplication a = new QApplication(args); + + GameBoard gb = new GameBoard(); + gb.setGeometry(100, 100, 500, 355); + a.setMainWidget(gb); + gb.show(); + a.exec(); + return; + } + + static { + try { + Class c = Class.forName("org.kde.qt.qtjava"); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Can't load qtjava class"); + } + } +} diff --git a/qtjava/javalib/tutorial/t2/Tut2.java b/qtjava/javalib/tutorial/t2/Tut2.java new file mode 100644 index 00000000..d9e0883a --- /dev/null +++ b/qtjava/javalib/tutorial/t2/Tut2.java @@ -0,0 +1,25 @@ +import org.kde.qt.*; + +public class Tut2 extends QObject { + public static void main(String[] args) { + QApplication a = new QApplication(args); + QPushButton quit = new QPushButton("Quit", null); + quit.resize( 75, 30 ); + quit.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(quit, SIGNAL("clicked()"), a, SLOT("quit()")); + + a.setMainWidget(quit); + quit.show(); + a.exec(); + } + + static { + try { + Class c = Class.forName("org.kde.qt.qtjava"); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Can't load qtjava class"); + } + } +} diff --git a/qtjava/javalib/tutorial/t3/Tut3.java b/qtjava/javalib/tutorial/t3/Tut3.java new file mode 100644 index 00000000..7a1e0a43 --- /dev/null +++ b/qtjava/javalib/tutorial/t3/Tut3.java @@ -0,0 +1,28 @@ +import org.kde.qt.*; + +public class Tut3 extends QObject { + public static void main(String[] args) { + QApplication a = new QApplication(args); + + QVBox box = new QVBox(); + box.resize(200, 120); + + QPushButton quit = new QPushButton("Quit", box); + quit.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(quit, SIGNAL("clicked()"), a, SLOT("quit()")); + + a.setMainWidget(box); + box.show(); + a.exec(); + } + + static { + try { + Class c = Class.forName("org.kde.qt.qtjava"); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Can't load qtjava class"); + } + } +} diff --git a/qtjava/javalib/tutorial/t4/Tut4.java b/qtjava/javalib/tutorial/t4/Tut4.java new file mode 100644 index 00000000..dd67e272 --- /dev/null +++ b/qtjava/javalib/tutorial/t4/Tut4.java @@ -0,0 +1,33 @@ +import org.kde.qt.*; + +public class Tut4 extends QWidget { + public Tut4() { + setMinimumSize(200,120); + setMaximumSize(200,120); + + QPushButton quit = new QPushButton("Quit", this, "quit"); + quit.setGeometry(62, 40, 75, 30); + quit.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(quit, SIGNAL("clicked()"), qApp(), SLOT("quit()")); + } + + public static void main(String[] args) { + QApplication a = new QApplication(args); + + Tut4 w = new Tut4(); + w.setGeometry(100, 100, 200, 120); + a.setMainWidget(w); + w.show(); + a.exec(); + } + + static { + try { + Class c = Class.forName("org.kde.qt.qtjava"); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Can't load qtjava class"); + } + } +} diff --git a/qtjava/javalib/tutorial/t5/Tut5.java b/qtjava/javalib/tutorial/t5/Tut5.java new file mode 100644 index 00000000..e0de9ac5 --- /dev/null +++ b/qtjava/javalib/tutorial/t5/Tut5.java @@ -0,0 +1,37 @@ +import org.kde.qt.*; + +public class Tut5 extends QVBox { + public Tut5() { + QPushButton quit = new QPushButton("Quit", this, "quit"); + quit.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(quit, SIGNAL("clicked()"), qApp(), SLOT("quit()")); + + QLCDNumber lcd = new QLCDNumber(2, this, "lcd"); + + QSlider slider = new QSlider(Horizontal, this, "slider"); + slider.setRange(0, 99); + slider.setValue(0); + + connect(slider, SIGNAL("valueChanged(int)"), lcd, SLOT("display(int)")); + } + + public static void main(String[] args) { + QApplication a = new QApplication(args); + + Tut5 w = new Tut5(); + a.setMainWidget(w); + w.show(); + a.exec(); + return; + } + + static { + try { + Class c = Class.forName("org.kde.qt.qtjava"); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Can't load qtjava class"); + } + } +} diff --git a/qtjava/javalib/tutorial/t6/LCDRange.java b/qtjava/javalib/tutorial/t6/LCDRange.java new file mode 100644 index 00000000..9db207c8 --- /dev/null +++ b/qtjava/javalib/tutorial/t6/LCDRange.java @@ -0,0 +1,15 @@ +import org.kde.qt.*; + +public class LCDRange extends QVBox { + public LCDRange(QWidget parent, String name) { + super(parent, name); + QLCDNumber lcd = new QLCDNumber(2, this, "lcd"); + QSlider slider = new QSlider(Horizontal, this, "slider"); + slider.setRange(0, 99); + slider.setValue(0); + connect(slider, SIGNAL("valueChanged(int)"), lcd, SLOT("display(int)")); + } + public LCDRange(QWidget parent) { + this(parent, null); + } +} diff --git a/qtjava/javalib/tutorial/t6/Tut6.java b/qtjava/javalib/tutorial/t6/Tut6.java new file mode 100644 index 00000000..8da2e736 --- /dev/null +++ b/qtjava/javalib/tutorial/t6/Tut6.java @@ -0,0 +1,35 @@ +import org.kde.qt.*; + +public class Tut6 extends QVBox { + public Tut6() { + QPushButton quit = new QPushButton("Quit", this, "quit"); + quit.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(quit, SIGNAL("clicked()"), qApp(), SLOT("quit()")); + + QGrid grid = new QGrid(4, this, null, 0); + + for(int c = 0; c < 4; c++) + for(int r = 0; r < 4; r++) + new LCDRange(grid); + } + + public static void main(String[] args) { + QApplication a = new QApplication(args); + Tut6 w = new Tut6(); + + a.setMainWidget(w); + w.show(); + a.exec(); + return; + } + + static { + try { + Class c = Class.forName("org.kde.qt.qtjava"); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Can't load qtjava class"); + } + } +} diff --git a/qtjava/javalib/tutorial/t7/LCDRange.java b/qtjava/javalib/tutorial/t7/LCDRange.java new file mode 100644 index 00000000..9208ae85 --- /dev/null +++ b/qtjava/javalib/tutorial/t7/LCDRange.java @@ -0,0 +1,29 @@ +import org.kde.qt.*; + +public class LCDRange extends QVBox { + private QSlider slider; + + public LCDRange(QWidget parent, String name) { + super(parent, name); + QLCDNumber lcd = new QLCDNumber(2, this, "lcd"); + slider = new QSlider(Horizontal, this, "slider"); + slider.setRange(0, 99); + slider.setValue(0); + + connect(slider, SIGNAL("valueChanged(int)"), + lcd, SLOT("display(int)")); + connect(slider, SIGNAL("valueChanged(int)"), + SIGNAL("valueChanged(int)")); + } + public LCDRange(QWidget parent) { + this(parent, null); + } + + public int value() { + return slider.value(); + } + + public void setValue(int value) { + slider.setValue(value); + } +} diff --git a/qtjava/javalib/tutorial/t7/Tut7.java b/qtjava/javalib/tutorial/t7/Tut7.java new file mode 100644 index 00000000..bed0243c --- /dev/null +++ b/qtjava/javalib/tutorial/t7/Tut7.java @@ -0,0 +1,42 @@ +import org.kde.qt.*; + +public class Tut7 extends QVBox { + public Tut7() { + QPushButton quit = new QPushButton("Quit", this, "quit"); + quit.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(quit, SIGNAL("clicked()"), qApp(), SLOT("quit()")); + + QGrid grid = new QGrid(4, this, null, 0); + + LCDRange previous = null; + for(int r = 0; r < 4; r++) { + for(int c = 0; c < 4; c++) { + LCDRange lr = new LCDRange(grid); + if (previous!=null) + connect(lr, SIGNAL("valueChanged(int)"), + previous, SLOT("setValue(int)")); + previous = lr; + } + } + } + + public static void main(String[] args) { + QApplication a = new QApplication(args); + Tut7 w = new Tut7(); + + a.setMainWidget(w); + w.show(); + a.exec(); + return; + } + + static { + try { + Class c = Class.forName("org.kde.qt.qtjava"); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Can't load qtjava class"); + } + } +} diff --git a/qtjava/javalib/tutorial/t8/CannonField.java b/qtjava/javalib/tutorial/t8/CannonField.java new file mode 100644 index 00000000..e9b77ccb --- /dev/null +++ b/qtjava/javalib/tutorial/t8/CannonField.java @@ -0,0 +1,37 @@ +import org.kde.qt.*; + +public class CannonField extends QWidget { + private int ang; + + public CannonField(QWidget parent, String name) { + super(parent, name); + ang = 45; + setPalette(new QPalette(new QColor(250, 250, 200))); + } + + public int angle() { + return ang; + } + + public void setAngle(int degrees) { + if (degrees < 5) + degrees = 5; + if (degrees > 70) + degrees = 70; + if (ang == degrees) + return; + ang = degrees; + repaint(); + emit("angleChanged", ang); + } + + public void paintEvent(QPaintEvent e) { + String s = "Angle = " + ang; + QPainter p = new QPainter(this); + p.drawText(200, 200, s); + } + + public QSizePolicy sizePolicy() { + return new QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding); + } +} diff --git a/qtjava/javalib/tutorial/t8/LCDRange.java b/qtjava/javalib/tutorial/t8/LCDRange.java new file mode 100644 index 00000000..7bbb9886 --- /dev/null +++ b/qtjava/javalib/tutorial/t8/LCDRange.java @@ -0,0 +1,38 @@ +import org.kde.qt.*; + +public class LCDRange extends QVBox { + private QSlider slider; + + public LCDRange(QWidget parent, String name) { + super(parent, name); + QLCDNumber lcd = new QLCDNumber(2, this, "lcd"); + slider = new QSlider(Horizontal, this, "slider"); + slider.setRange(0, 99); + slider.setValue(0); + + connect(slider, SIGNAL("valueChanged(int)"), + lcd, SLOT("display(int)")); + connect(slider, SIGNAL("valueChanged(int)"), + SIGNAL("valueChanged(int)")); + + setFocusProxy(slider); + } + + public int value() { + return slider.value(); + } + + public void setValue(int value) { + slider.setValue(value); + } + + public void setRange(int minVal, int maxVal) { + if (minVal < 0 || maxVal > 99 || minVal > maxVal) { + qWarning("LCDRange::setRange("+minVal+","+maxVal+")\n"+ + "\tRange must be 0..99\n"+ + "\tand minVal must not be greater than maxVal"); + return; + } + slider.setRange(minVal, maxVal); + } +} diff --git a/qtjava/javalib/tutorial/t8/Tut8.java b/qtjava/javalib/tutorial/t8/Tut8.java new file mode 100644 index 00000000..f0d31c1f --- /dev/null +++ b/qtjava/javalib/tutorial/t8/Tut8.java @@ -0,0 +1,51 @@ +import org.kde.qt.*; + +public class Tut8 extends QWidget { + public Tut8() { + QPushButton quit = new QPushButton("Quit", this, "quit"); + quit.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(quit, SIGNAL("clicked()"), qApp(), SLOT("quit()")); + + LCDRange angle = new LCDRange(this, "angle"); + angle.setRange(5, 70); + + CannonField cannonField = new CannonField(this, "cannonField"); + + connect(angle, SIGNAL("valueChanged(int)"), + cannonField, SLOT("setAngle(int)")); + connect(cannonField, SIGNAL("angleChanged(int)"), + angle, SLOT("setValue(int)")); + + QGridLayout grid = new QGridLayout(this, 2, 2, 10, -1, null); + //2x2, 10 pixel border + + grid.addWidget(quit, 0, 0); + grid.addWidget(angle, 1, 0, Qt.AlignTop); + grid.addWidget(cannonField, 1, 1); + grid.setColStretch(1, 10); + + angle.setValue(60); + angle.setFocus(); + } + + public static void main(String[] args) { + QApplication a = new QApplication(args); + Tut8 w = new Tut8(); + w.setGeometry( 100, 100, 500, 355 ); + + a.setMainWidget(w); + w.show(); + a.exec(); + return; + } + + static { + try { + Class c = Class.forName("org.kde.qt.qtjava"); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Can't load qtjava class"); + } + } +} diff --git a/qtjava/javalib/tutorial/t9/CannonField.java b/qtjava/javalib/tutorial/t9/CannonField.java new file mode 100644 index 00000000..e8bc506f --- /dev/null +++ b/qtjava/javalib/tutorial/t9/CannonField.java @@ -0,0 +1,43 @@ +import org.kde.qt.*; + +public class CannonField extends QWidget { + private int ang; + + public CannonField(QWidget parent, String name) { + super(parent, name); + ang = 45; + setPalette(new QPalette(new QColor(250, 250, 200))); + } + + public int angle() { + return ang; + } + + public void setAngle(int degrees) { + if (degrees < 5) + degrees = 5; + if (degrees > 70) + degrees = 70; + if (ang == degrees) + return; + ang = degrees; + repaint(); + emit("angleChanged", ang); + } + + public void paintEvent(QPaintEvent e) { + QPainter p = new QPainter(this); + + p.setBrush(blue()); + p.setPen(NoPen); + + p.translate(0, rect().bottom()); + p.drawPie(new QRect(-35, -35, 70, 70), 0, 90*16); + p.rotate(-ang); + p.drawRect(new QRect(33, -4, 15, 8)); + } + + public QSizePolicy sizePolicy() { + return new QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding); + } +} diff --git a/qtjava/javalib/tutorial/t9/LCDRange.java b/qtjava/javalib/tutorial/t9/LCDRange.java new file mode 100644 index 00000000..7bbb9886 --- /dev/null +++ b/qtjava/javalib/tutorial/t9/LCDRange.java @@ -0,0 +1,38 @@ +import org.kde.qt.*; + +public class LCDRange extends QVBox { + private QSlider slider; + + public LCDRange(QWidget parent, String name) { + super(parent, name); + QLCDNumber lcd = new QLCDNumber(2, this, "lcd"); + slider = new QSlider(Horizontal, this, "slider"); + slider.setRange(0, 99); + slider.setValue(0); + + connect(slider, SIGNAL("valueChanged(int)"), + lcd, SLOT("display(int)")); + connect(slider, SIGNAL("valueChanged(int)"), + SIGNAL("valueChanged(int)")); + + setFocusProxy(slider); + } + + public int value() { + return slider.value(); + } + + public void setValue(int value) { + slider.setValue(value); + } + + public void setRange(int minVal, int maxVal) { + if (minVal < 0 || maxVal > 99 || minVal > maxVal) { + qWarning("LCDRange::setRange("+minVal+","+maxVal+")\n"+ + "\tRange must be 0..99\n"+ + "\tand minVal must not be greater than maxVal"); + return; + } + slider.setRange(minVal, maxVal); + } +} diff --git a/qtjava/javalib/tutorial/t9/Tut9.java b/qtjava/javalib/tutorial/t9/Tut9.java new file mode 100644 index 00000000..f936c37a --- /dev/null +++ b/qtjava/javalib/tutorial/t9/Tut9.java @@ -0,0 +1,52 @@ +import org.kde.qt.*; + +public class Tut9 extends QWidget { + public Tut9() { + QPushButton quit = new QPushButton("Quit", this, "quit"); + quit.setFont(new QFont("Times", 18, QFont.Bold, false)); + + connect(quit, SIGNAL("clicked()"), qApp(), SLOT("quit()")); + + LCDRange angle = new LCDRange(this, "angle"); + angle.setRange(5, 70); + + CannonField cannonField = new CannonField(this, "cannonField"); + + connect(angle, SIGNAL("valueChanged(int)"), + cannonField, SLOT("setAngle(int)")); + connect(cannonField, SIGNAL("angleChanged(int)"), + angle, SLOT("setValue(int)")); + + QGridLayout grid = new QGridLayout(this, 2, 2, 10, -1, null); + //2x2, 10 pixel border + + grid.addWidget(quit, 0, 0); + grid.addWidget(angle, 1, 0, Qt.AlignTop); + grid.addWidget(cannonField, 1, 1); + grid.setColStretch(1, 10); + + angle.setValue(60); + angle.setFocus(); + } + + public static void main(String[] args) { + QApplication.setColorSpec(QApplication.CustomColor); + QApplication a = new QApplication(args); + Tut9 w = new Tut9(); + w.setGeometry( 100, 100, 500, 355 ); + + a.setMainWidget(w); + w.show(); + a.exec(); + return; + } + + static { + try { + Class c = Class.forName("org.kde.qt.qtjava"); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Can't load qtjava class"); + } + } +} |