summaryrefslogtreecommitdiffstats
path: root/qtsharp/src/examples/samples/scribblewindow.cs
diff options
context:
space:
mode:
Diffstat (limited to 'qtsharp/src/examples/samples/scribblewindow.cs')
-rw-r--r--qtsharp/src/examples/samples/scribblewindow.cs212
1 files changed, 212 insertions, 0 deletions
diff --git a/qtsharp/src/examples/samples/scribblewindow.cs b/qtsharp/src/examples/samples/scribblewindow.cs
new file mode 100644
index 00000000..6b594eb8
--- /dev/null
+++ b/qtsharp/src/examples/samples/scribblewindow.cs
@@ -0,0 +1,212 @@
+// scribblewindow.cs - Qt# scribblewindow
+//
+// Author: Adam Treat <manyoso@yahoo.com>
+// (c) 2002 Adam Treat
+// Licensed under the terms of the GNU GPL
+
+namespace QtSamples {
+
+ using Qt;
+ using System;
+
+ [DeclareQtSignal ("colorChanged(QColor)")]
+ [DeclareQtSignal ("load(QString)")]
+ [DeclareQtSignal ("save(QString)")]
+ public class ScribbleWindow : QMainWindow {
+
+ private QMenuBar menubar;
+ private QPopupMenu filemenu;
+ private QPopupMenu aboutmenu;
+ private QScrollView scrollview;
+ public ScribbleArea scribblearea;
+
+ enum Color {Black, Red, Blue, Green, Yellow};
+
+ public static int Main (String[] args)
+ {
+ QApplication app = new QApplication (args);
+ ScribbleWindow demo = new ScribbleWindow ();
+ demo.SetGeometry (50, 500, 400, 400);
+ app.SetMainWidget (demo);
+ demo.SetCaption ("Qt# 0.7!");
+ demo.Show ();
+ return app.Exec ();
+ }
+
+ ScribbleWindow () : base (null, null)
+ {
+ filemenu = new QPopupMenu (null, "filemenu");
+ filemenu.InsertItem ("&Load", this, SLOT ("SlotLoad()") );
+ filemenu.InsertItem ("&Save", this, SLOT ("SlotSave()") );
+ filemenu.InsertSeparator ();
+ filemenu.InsertItem ("&Quit", qApp, SLOT ("quit()"));
+
+ aboutmenu = new QPopupMenu (null, "helpmenu");
+ aboutmenu.InsertItem ("&About Qt-Sharp", this, SLOT ("SlotAboutQtSharp()"));
+ aboutmenu.InsertItem ("&About Qt", this, SLOT ("SlotAboutQt()"));
+
+ menubar = new QMenuBar (this, "");
+ menubar.InsertItem ("&File", filemenu);
+ menubar.InsertItem ("&Color", this, SLOT("SlotColorChooser()"));
+ menubar.InsertItem ("&About", aboutmenu);
+
+ scrollview = new QScrollView (this);
+ scrollview.SetGeometry (0, menubar.Height (), Width (), Height () - menubar.Height ());
+ scribblearea = new ScribbleArea (this);
+ scribblearea.SetGeometry (0, 0, 1000, 1000);
+ scrollview.AddChild (scribblearea);
+ this.SetCentralWidget (scrollview);
+ SetMaximumSize (Width (), Height () - menubar.Height ());
+
+ QObject.Connect (this, SIGNAL ("colorChanged(QColor)"),
+ scribblearea, SLOT ("SlotSetColor(QColor)") );
+ QObject.Connect (this, SIGNAL ("load(QString)"),
+ scribblearea, SLOT ("PerformLoad(QString)") );
+ QObject.Connect (this, SIGNAL ("save(QString)"),
+ scribblearea, SLOT ("PerformSave(QString)") );
+ }
+
+ public void SlotLoad ()
+ {
+ string filename = QFileDialog.GetOpenFileName (".", "*.bmp", this,
+ null, "Load File", QString.Null, true);
+
+ if ( filename != null )
+ Emit ("load(QString)", (QString) filename);
+ }
+
+ public void SlotSave ()
+ {
+ string filename = QFileDialog.GetSaveFileName (".", "*.bmp", this,
+ null, "Save File", QString.Null, true);
+
+ if ( filename != null )
+ {
+ if ( ! filename.ToLower().EndsWith(".bmp") )
+ filename += ".bmp";
+ Emit ("save(QString)", (QString) filename);
+ }
+ }
+
+ public void SlotAboutQtSharp ()
+ {
+ QMessageBox.Information (this, "About Qt# 0.7",
+ "A Qt (http://www.trolltech.com) to C# language binding. \n" +
+ "Qt# is compatible with Mono (http://go-mono.org) and\n" +
+ "Portable.NET (http://www.southern-storm.com.au/portable_net.html)\n" +
+ "(c) 2002 Adam Treat. Licensed under the terms of the GNU GPL.\n"
+ );
+ }
+
+ public void SlotAboutQt ()
+ {
+ QMessageBox.AboutQt (this, "About Qt");
+ }
+
+ public void SlotColorChooser ()
+ {
+ QColor chosenColor = QColorDialog.GetColor();
+ if (chosenColor.IsValid())
+ Emit ("colorChanged(QColor)", chosenColor);
+ }
+
+ public class ScribbleArea : QFrame {
+ private QPoint last;
+ private QPixmap buffer;
+ private QColor currentcolor = new QColor("Black");
+ private QPopupMenu popupmenu;
+
+ public ScribbleArea (QWidget parent) : base (parent)
+ {
+ buffer = new QPixmap ();
+ last = new QPoint ();
+ SetBackgroundMode (Qt.BackgroundMode.NoBackground);
+
+ popupmenu = new QPopupMenu();
+ popupmenu.InsertItem ("&Clear", this, SLOT ("SlotClearArea()") );
+
+ mouseMoveEvent += new MouseMoveEvent (MouseMoved);
+ mousePressEvent += new MousePressEvent (MousePressed);
+ paintEvent += new PaintEvent (PerformPaint);
+ resizeEvent += new ResizeEvent (PerformResize);
+ }
+
+ public void PerformLoad (QString filename)
+ {
+ if ( ! buffer.Load(filename) )
+ QMessageBox.Warning (null, "Load error", "Could not load file");
+ Repaint();
+ }
+
+ public void PerformSave (QString filename)
+ {
+ if ( ! buffer.Save (filename, "BMP") )
+ QMessageBox.Warning( null, "Save error", "Could not save file");
+ }
+
+ public void SlotClearArea ()
+ {
+ buffer.Fill( new QColor ("white") );
+ BitBlt (this, 0, 0, buffer, 0, 0, -1, -1, Qt.RasterOp.CopyROP, false);
+ }
+
+
+ public void SlotSetColor (QColor color)
+ {
+ currentcolor = color;
+ }
+
+ // Note, Dispose() is called on QPoints here to increase performance
+ // of the UI. Otherwise, the GC would let dead QPoint instances pile
+ // up and delete them all at once, causing the UI to pause while it frees
+ // memory. (This happens because the GC runs in the same thread as the
+ // application.)
+
+ protected void MousePressed (QMouseEvent e)
+ {
+ if (e.Button() == ButtonState.RightButton )
+ popupmenu.Exec (QCursor.Pos ());
+ else {
+ last.Dispose ();
+ last = e.Pos();
+ }
+ }
+
+ protected void MouseMoved (QMouseEvent e)
+ {
+ QPainter windowPainter = new QPainter ();
+ QPainter bufferPainter = new QPainter ();
+
+ windowPainter.Begin (this);
+ bufferPainter.Begin (buffer);
+
+ windowPainter.SetPen (currentcolor);
+ bufferPainter.SetPen (currentcolor);
+
+ windowPainter.DrawLine (last, e.Pos());
+ bufferPainter.DrawLine (last, e.Pos());
+
+ windowPainter.End ();
+ bufferPainter.End ();
+
+ last.Dispose ();
+ last = e.Pos ();
+ }
+
+ protected void PerformPaint (QPaintEvent e)
+ {
+ BitBlt(this, 0, 0, buffer,
+ 0, 0, -1, -1, RasterOp.CopyROP, false);
+ }
+
+ protected void PerformResize (QResizeEvent e)
+ {
+ QPixmap save = new QPixmap (buffer);
+ buffer.Resize (e.Size());
+ buffer.Fill (new QColor("white"));
+ BitBlt (buffer, 0, 0, save,
+ 0, 0, -1, -1, RasterOp.CopyROP, false);
+ }
+ }
+ }
+}