'Copyright (C) 2000 Microsoft Corporation. All rights reserved.
'This source code is intended only as a supplement to Microsoft
'Development Tools and/or on-line documentation. See these other
'materials for detailed information regarding Microsoft code samples.
'THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
'KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
'IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
'PARTICULAR PURPOSE.
Imports System
Imports System.IO
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.Windows.Forms
Imports Softelvdm.Controls
Imports Softelvdm.SftTabsNET
Public Class ScribbleView
Inherits System.Windows.Forms.Form
Private MainDoc As ScribbleDoc
Private MainWin As MainWindow
Public PreviousPoint As Point ' the last mouse pt in the stroke in progress
Public CurrentStroke As Stroke
#Region " Windows Form Designer generated code "
Private Components As System.ComponentModel.Container
' the stroke in progress
Public Sub New(ByVal Doc As ScribbleDoc, ByVal Parent As MainWindow)
InitializeComponent()
Me.MainDoc = Doc
Me.MdiParent = Parent 'Make this view Mdi child of the main window
MainWin = Parent
' Add a new tab
Dim t As TabClass = Parent.sftTabs1.TabCollection.Add() ' create a new tab
t.Tag1 = Me ' save reference of view associated with this tab
t.BackColorStart = Color.FromArgb(&HDD, &HEC, &HFE)
t.BackColorEnd = Color.FromArgb(&H81, &HA9, &HE2)
t.BackColor = Color.FromArgb(&H81, &HA9, &HE2)
t.BackColorSelectedStart = Color.FromArgb(&HDD, &HEC, &HFE)
t.BackColorSelectedEnd = Color.FromArgb(&H81, &HA9, &HE2)
t.BackColorActive = Color.FromArgb(&H81, &HA9, &HE2)
SetTitle("")
End Sub 'New
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (Components Is Nothing) Then
Components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
Private Sub InitializeComponent()
'
'ScribbleView
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.BackColor = System.Drawing.Color.White
Me.ClientSize = New System.Drawing.Size(312, 301)
Me.Name = "ScribbleView"
Me.Text = "ScribbleDoc"
End Sub 'InitializeComponent
#End Region
Public Sub SetTitle(ByVal fileName As String)
If fileName = "" Then
' empty, new document
If MainDoc.ViewList.Count <= 1 Then
Me.Text = "New Document" + MainDoc.DocID.ToString()
Else
Me.Text = "New Document" + MainDoc.DocID.ToString() + ":" + MainDoc.ViewList.Count.ToString()
End If
fileName = "New Document"
Else
' existing file
If (MainDoc.ViewList.Count <= 1) Then
Me.Text = Path.GetFileName(fileName)
Else
Me.Text = Path.GetFileName(fileName) + ":" + MainDoc.ViewList.Count.ToString()
End If
End If
Dim t As TabClass
For Each t In MainWin.sftTabs1.TabCollection
If t.Tag1 Is Me Then
t.Text = Me.Text
t.ToolTip = fileName
Exit Sub
End If
Next
End Sub
Private Sub MouseDownHandler(ByVal Sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
If Not Me.Capture Then
Return
End If
Try
Dim NewPoint As New Point(e.X, e.Y)
CurrentStroke = MainDoc.NewStroke()
CurrentStroke.PointArray.Add(NewPoint) ' Add first point to the new stroke
PreviousPoint = NewPoint
Me.Capture = True ' Capture the mouse until button up
Catch Ex As Exception
MessageBox.Show(Ex.ToString())
End Try
End Sub 'MouseDownHandler
Private Sub MouseMoveHandler(ByVal Sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
If Not Me.Capture Then
Return
End If
Try
Dim NewPoint As New Point(e.X, e.Y)
CurrentStroke.PointArray.Add(NewPoint)
Dim NewGraphic As Graphics = Me.CreateGraphics()
NewGraphic.DrawLine(MainDoc.GetCurrentPen(), PreviousPoint, NewPoint)
PreviousPoint = NewPoint
Catch Ex As Exception
MessageBox.Show(Ex.ToString())
End Try
End Sub 'MouseMoveHandler
Private Sub MouseUpHandler(ByVal Sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
'If the current stroke is null, ignore this event
If CurrentStroke Is Nothing Then
Return
End If
Try
Dim NewPoint As New Point(e.X, e.Y)
CurrentStroke.PointArray.Add(NewPoint)
Dim NewGraphic As Graphics = Me.CreateGraphics()
NewGraphic.DrawLine(MainDoc.GetCurrentPen(), PreviousPoint, NewPoint)
PreviousPoint = NewPoint
' Tell the stroke item that we're done adding points to it.
' This is so it can finish computing its bounding rectangle.
CurrentStroke.FinishStroke()
' Now that a stoke is added, inform all the views of the document about this
MainDoc.UpdateAllViews(Me, CurrentStroke)
Me.Capture = False
Catch Ex As Exception
MessageBox.Show(Ex.ToString())
End Try
End Sub 'MouseUpHandler
Private Sub PaintHandler(ByVal Sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Dim RectClip As Rectangle = e.ClipRectangle
RectClip.Inflate(1, 1)
Dim RectStroke As Rectangle
Dim i As Integer
For i = 0 To MainDoc.StrokeList.Count - 1
Dim St As Stroke = CType(MainDoc.StrokeList(i), Stroke)
RectStroke = St.GetBoundingRectangle()
RectStroke.Inflate(1, 1) ' avoid rounding to nothing
If RectStroke.IntersectsWith(RectClip) Then
St.DrawStroke(e.Graphics)
End If
Next i
End Sub 'PaintHandler
Public Sub ClosingHandler(ByVal Sender As [Object], ByVal e As CancelEventArgs) Handles MyBase.Closing
If MainDoc.IsDirty And MainDoc.ViewList.Count = 1 Then
Dim Save As DialogResult = MessageBox.Show("Do you want to Save changes ?", "Scribble", MessageBoxButtons.YesNoCancel)
If Save = System.Windows.Forms.DialogResult.Yes Then
Dim SaveDialog As New SaveFileDialog()
SaveDialog.Filter = "Scribble Files (*.scb)|*.scb|All Files (*.*)|*.*"
SaveDialog.DefaultExt = ".scb"
Dim ResultDialog As DialogResult = SaveDialog.ShowDialog()
If ResultDialog = System.Windows.Forms.DialogResult.OK Then
MainDoc.SaveDocument(SaveDialog.FileName)
MainDoc.ViewList.Remove(Me)
Me.MdiParent = Nothing ' remove this view(child) from the parent list
Else
If ResultDialog = System.Windows.Forms.DialogResult.Cancel Then
e.Cancel = True
End If
End If
Else
If Save = System.Windows.Forms.DialogResult.Cancel Then
e.Cancel = True 'If user selected 'Cancel',don't close the form
Else
If Save = System.Windows.Forms.DialogResult.No Then
MainDoc.ViewList.Remove(Me)
Me.MdiParent = Nothing
End If
End If
End If
Else
MainDoc.ViewList.Remove(Me)
Me.MdiParent = Nothing
End If
End Sub 'ClosingHandler
Public Function GetDocument() As ScribbleDoc
Return MainDoc
End Function 'GetDocument
Private Sub ScribbleView_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
Dim parent As MainWindow = MdiParent
' remove the tab representing this form
If Not MainWindow.sftTabs1 Is Nothing Then
Dim t As TabClass
For Each t In MainWindow.sftTabs1.TabCollection
If t.Tag1 Is Me Then
MainWindow.sftTabs1.TabCollection.RemoveAt(t.Index)
Exit Sub
End If
Next
End If
'If there are no child views, then disable menu and toolbar items
If MainWin.MdiChildren.Length <= 1 Then
MainWin.DisableItems()
End If
End Sub
End Class 'ScribbleView