X Tutup
Skip to content

Commit 3dbdd99

Browse files
committed
sVB 3.3
1 parent 91e13e9 commit 3dbdd99

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+1995
-492
lines changed

DiagramHelper/Designer.vb

Lines changed: 152 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
Imports System.Collections.ObjectModel
22
Imports System.ComponentModel
3+
Imports System.IO
4+
Imports System.Windows.Interop
35
Imports System.Windows.Markup
46
Imports System.Xml
57
Imports ItemPair = System.Tuple(Of System.Windows.Controls.ListBoxItem, DiagramHelper.DiagramPanel)
@@ -651,6 +653,8 @@ Public Class Designer
651653
diagram2.ClearValue(LayoutTransformProperty)
652654
End If
653655
End If
656+
657+
If TypeOf diagram2 Is ComboBox Then diagram2.ClearValue(StyleProperty)
654658
canvas.Children.Add(diagram2)
655659
Next
656660

@@ -785,6 +789,11 @@ Public Class Designer
785789

786790
Dim lt = diagram.LayoutTransform
787791
diagram.LayoutTransform = Nothing
792+
793+
If TypeOf diagram Is ComboBox Then
794+
diagram.Style = CType(Application.Current.Resources("ColoredComboBox"), Style)
795+
End If
796+
788797
Helper.UpdateControl(diagram)
789798
diagram.LayoutTransform = lt
790799
End Sub)
@@ -827,40 +836,50 @@ Public Class Designer
827836
Dim Pos = e.GetPosition(Me.DesignerCanvas)
828837
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
829838
Dim Files() As String = e.Data.GetData(DataFormats.FileDrop)
830-
Dim key = CurrentPage.PageKey
831-
For Each file In Files
832-
Select Case IO.Path.GetExtension(file).ToLower()
833-
Case ".xaml"
834-
SwitchTo(file)
835-
836-
Case ".bmp", ".jpg", ".jpeg", ".png", ".gif"
837-
SwitchTo(key)
838-
Dim label As New Label()
839-
label.Width = 200
840-
label.Height = 200
841-
842-
Dim newFile = IO.Path.Combine(IO.Path.GetDirectoryName(_codeFile), IO.Path.GetFileName(file))
843-
Try
844-
IO.File.Copy(file, newFile)
845-
file = newFile
846-
Catch ex As Exception
847-
End Try
848-
849-
label.Background = New ImageBrush(New BitmapImage(New Uri(file)))
850-
AddToForm(Pos, label, label.GetType(), "Label")
851-
SetControlText(label, "", False)
852-
Pos.X += 10
853-
Pos.Y += 10
854-
End Select
855-
Next
856-
839+
DropFiles(Pos, Files)
857840
Else
858841
Dim tbItem As ToolBoxItem = e.Data.GetData(GetType(ToolBoxItem))
859842
DarwDiagram(tbItem, Pos)
860843
End If
861844

862845
End Sub
863846

847+
Private Sub DropFiles(Pos As Point, Files() As String)
848+
Dim key = CurrentPage.PageKey
849+
For Each file In Files
850+
Select Case IO.Path.GetExtension(file).ToLower()
851+
Case ".xaml"
852+
SwitchTo(file)
853+
854+
Case ".bmp", ".jpg", ".jpeg", ".png", ".gif"
855+
SwitchTo(key)
856+
Dim label As New Label()
857+
label.Width = 200
858+
label.Height = 200
859+
860+
Dim newFile = IO.Path.Combine(IO.Path.GetDirectoryName(_codeFile), IO.Path.GetFileName(file))
861+
Try
862+
IO.File.Copy(file, newFile)
863+
file = newFile
864+
Catch ex As Exception
865+
End Try
866+
867+
Dim img As New BitmapImage(New Uri(file))
868+
If img.Width > img.Height Then
869+
label.Width = label.Height * img.Width / img.Height
870+
Else
871+
label.Height = label.Width * img.Height / img.Width
872+
End If
873+
874+
label.Background = New ImageBrush(img)
875+
AddToForm(Pos, label, label.GetType(), "Label")
876+
SetControlText(label, "", False)
877+
Pos.X += 10
878+
Pos.Y += 10
879+
End Select
880+
Next
881+
End Sub
882+
864883
Private Sub DarwDiagram(
865884
tbItem As ToolBoxItem,
866885
pos As Point,
@@ -1040,51 +1059,112 @@ Public Class Designer
10401059
Me.Focus()
10411060
End Sub
10421061

1043-
Public Sub Paste()
1062+
Public Sub Paste(Pos As Point?)
10441063
Try
1045-
Dim xaml As String = Clipboard.GetData(DataFormats.Xaml)
1046-
Dim Lst As ArrayList = XamlReader.Load(XmlReader.Create(New IO.StringReader(xaml)))
1047-
Me.SelectedItems.Clear()
1048-
Dim OldState = New CollectionState(AddressOf AfterRestoreAction, Me.Items)
1049-
AddHandler OldState.BeforeRemoveItem, AddressOf UndoRedo_BeforeRemoveItem
1050-
AddHandler OldState.AfterInsertItem, AddressOf UndoRedo_AfterInsertItem
1051-
1052-
For Each Diagram As UIElement In Lst
1053-
Dim left = Designer.GetLeft(Diagram)
1054-
Dim top = Designer.GetTop(Diagram)
1055-
Designer.SetLeft(Diagram, left + 10)
1056-
Designer.SetTop(Diagram, top + 10)
1057-
Dim name = GetControlName(Diagram)
1058-
SetControlName(Diagram, GetNextName(name))
1059-
Dim control = TryCast(Diagram, Control)
1060-
If control IsNot Nothing Then
1061-
Commands.FixImageBrush(control.Background)
1062-
Commands.FixImageBrush(control.Foreground)
1063-
Commands.FixImageBrush(control.BorderBrush)
1064+
If Clipboard.ContainsData(DataFormats.FileDrop) Then
1065+
Dim Files() As String = Clipboard.GetData(DataFormats.FileDrop)
1066+
DropFiles(If(Pos, New Point(0, 0)), Files)
1067+
1068+
ElseIf Clipboard.ContainsData(DataFormats.Bitmap) Then
1069+
PasteImage(If(Pos, New Point(0, 0)))
1070+
1071+
ElseIf Clipboard.ContainsData(DataFormats.Xaml) Then
1072+
Dim xaml As String = Clipboard.GetData(DataFormats.Xaml)
1073+
Dim Lst As ArrayList = XamlReader.Load(XmlReader.Create(New IO.StringReader(xaml)))
1074+
Me.SelectedItems.Clear()
1075+
Dim OldState = New CollectionState(AddressOf AfterRestoreAction, Me.Items)
1076+
AddHandler OldState.BeforeRemoveItem, AddressOf UndoRedo_BeforeRemoveItem
1077+
AddHandler OldState.AfterInsertItem, AddressOf UndoRedo_AfterInsertItem
1078+
1079+
Dim xOffset = 10
1080+
Dim yOffset = 10
1081+
1082+
If Pos IsNot Nothing Then
1083+
Dim minX = Double.MaxValue
1084+
Dim minY = Double.MaxValue
1085+
1086+
For Each Diagram As UIElement In Lst
1087+
minX = Math.Min(minX, Designer.GetLeft(Diagram))
1088+
minY = Math.Min(minY, Designer.GetTop(Diagram))
1089+
Next
1090+
1091+
xOffset = Pos.Value.X - minX
1092+
yOffset = Pos.Value.Y - minY
10641093
End If
10651094

1066-
OldState.Add(Diagram)
1067-
Me.Items.Add(Diagram)
1068-
OldState.SetNewValues()
1069-
Next
1095+
For Each Diagram As UIElement In Lst
1096+
Dim left = Designer.GetLeft(Diagram) + xOffset
1097+
Dim top = Designer.GetTop(Diagram) + yOffset
1098+
Designer.SetLeft(Diagram, left)
1099+
Designer.SetTop(Diagram, top)
1100+
Dim name = GetControlName(Diagram)
1101+
SetControlName(Diagram, GetNextName(name))
1102+
Dim control = TryCast(Diagram, Control)
1103+
If control IsNot Nothing Then
1104+
Commands.FixImageBrush(control.Background)
1105+
Commands.FixImageBrush(control.Foreground)
1106+
Commands.FixImageBrush(control.BorderBrush)
1107+
End If
10701108

1071-
UndoStack.ReportChanges(New UndoRedoUnit(OldState))
1072-
Helper.UpdateControl(Me)
1109+
OldState.Add(Diagram)
1110+
Me.Items.Add(Diagram)
1111+
OldState.SetNewValues()
1112+
Next
10731113

1074-
For Each Diagram As UIElement In Lst
1075-
Dim Item = Helper.GetListBoxItem(Diagram)
1076-
Item?.Focus()
1077-
Me.ScrollIntoView(Diagram)
1078-
Next
1114+
UndoStack.ReportChanges(New UndoRedoUnit(OldState))
1115+
Helper.UpdateControl(Me)
10791116

1080-
xaml = XamlWriter.Save(Lst)
1081-
Clipboard.SetData(DataFormats.Xaml, xaml)
1117+
For Each Diagram As UIElement In Lst
1118+
Dim Item = Helper.GetListBoxItem(Diagram)
1119+
Item?.Focus()
1120+
Me.ScrollIntoView(Diagram)
1121+
Next
1122+
1123+
xaml = XamlWriter.Save(Lst)
1124+
Clipboard.SetData(DataFormats.Xaml, xaml)
1125+
1126+
ElseIf Clipboard.ContainsData(DataFormats.Text) Then
1127+
Dim txt = Clipboard.GetData(DataFormats.Text)
1128+
Dim label As New Label()
1129+
label.Visibility = Visibility.Hidden
1130+
AddToForm(If(Pos, New Point(10, 10)), label, label.GetType(), "Label")
1131+
SetControlText(label, txt)
1132+
Dim tb As TextBlock = label.Content
1133+
tb.TextWrapping = TextWrapping.NoWrap
1134+
label.Visibility = Visibility.Visible
1135+
Dim pnl = Helper.GetDiagramPanel(label)
1136+
Me.Dispatcher.BeginInvoke(
1137+
Threading.DispatcherPriority.Background,
1138+
Sub()
1139+
pnl.Width = tb.ActualWidth + 15
1140+
pnl.Height = tb.ActualHeight + 15
1141+
tb.TextWrapping = TextWrapping.Wrap
1142+
End Sub
1143+
)
1144+
End If
10821145

10831146
Catch ex As Exception
10841147

10851148
End Try
10861149
End Sub
10871150

1151+
Private Sub PasteImage(pos As Point)
1152+
Dim files = IO.Directory.GetFiles(IO.Path.GetDirectoryName(_codeFile), "svb_gen_image*.jpg")
1153+
Dim n = 1
1154+
For Each file In files
1155+
Dim i = CInt(IO.Path.GetFileNameWithoutExtension(file).Substring(13))
1156+
If i >= n Then n = i + 1
1157+
Next
1158+
1159+
Dim imageName = $"svb_gen_image{n}.jpg"
1160+
Using fileStream As New FileStream(imageName, FileMode.Create)
1161+
Dim encoder As New JpegBitmapEncoder()
1162+
encoder.Frames.Add(BitmapFrame.Create(Clipboard.GetImage()))
1163+
encoder.Save(fileStream)
1164+
End Using
1165+
DropFiles(pos, {imageName})
1166+
End Sub
1167+
10881168
Private Function GetNextName(name As String) As String
10891169
Dim baseName As String
10901170
Dim num As Integer
@@ -1117,11 +1197,15 @@ Public Class Designer
11171197
End Function
11181198

11191199
Public Function CanPaste() As Boolean
1120-
If Not Clipboard.ContainsData(DataFormats.Xaml) Then Return False
1121-
Dim xaml As String = Clipboard.GetData(DataFormats.Xaml)
1122-
Dim Lst = TryCast(XamlReader.Load(XmlReader.Create(New IO.StringReader(xaml))), ArrayList)
1123-
If Lst Is Nothing Then Return False
1124-
Return True
1200+
If Clipboard.ContainsData(DataFormats.Bitmap) Then Return True
1201+
If Clipboard.ContainsData(DataFormats.FileDrop) Then Return True
1202+
If Clipboard.ContainsData(DataFormats.Xaml) Then
1203+
Dim xaml As String = Clipboard.GetData(DataFormats.Xaml)
1204+
Dim Lst = TryCast(XamlReader.Load(XmlReader.Create(New IO.StringReader(xaml))), ArrayList)
1205+
If Lst Is Nothing Then Return False
1206+
Return True
1207+
End If
1208+
If Clipboard.ContainsData(DataFormats.Text) Then Return True
11251209
End Function
11261210

11271211

@@ -1507,7 +1591,7 @@ Public Class Designer
15071591
e.Handled = True
15081592
Return
15091593
Case Key.V
1510-
Me.Paste()
1594+
Me.Paste(Nothing)
15111595
e.Handled = True
15121596
Return
15131597
Case Key.S
@@ -2451,6 +2535,8 @@ Public Class Designer
24512535
#End Region
24522536

24532537
Dim _mustSaveDesign As Boolean
2538+
Friend LastMouseDownPos As Point
2539+
24542540
Public ReadOnly Property MustSaveDesign As Boolean
24552541
Get
24562542
Return _mustSaveDesign OrElse HasChanges

DiagramHelper/Diagram.vb

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -67,25 +67,50 @@ Public Class DiagramObject
6767
Dsn.LocationVisibility = Windows.Visibility.Collapsed
6868
End Sub
6969

70-
Friend Function GetLeftTopPoint(Optional RelativeTo As FrameworkElement = Nothing, Optional InCm As Boolean = True) As Point
71-
Dim P As Point
70+
Friend Function GetLeftTopPoint(Optional relativeTo As FrameworkElement = Nothing, Optional inCm As Boolean = True) As Point
71+
Dim p As Point
7272
Dim Lt = Pnl.FocusRectangle.LayoutTransform
73-
If Lt IsNot Nothing Then P = Lt.Transform(New Point(0, 0))
74-
Dim Rt = DesignerItem.RenderTransform
75-
If Rt IsNot Nothing Then P = Rt.Transform(P)
76-
If RelativeTo Is Nothing Then
77-
P = Pnl.FocusRectangle.TransformToVisual(Canv).Transform(P)
73+
If Lt IsNot Nothing Then p = Lt.Transform(New Point(0, 0))
74+
75+
Dim rt = DesignerItem.RenderTransform
76+
If rt IsNot Nothing Then p = rt.Transform(p)
77+
78+
If relativeTo Is Nothing Then
79+
p = Pnl.FocusRectangle.TransformToVisual(Canv).Transform(p)
7880
Else
79-
P = Pnl.FocusRectangle.TransformToVisual(RelativeTo).Transform(P)
81+
p = Pnl.FocusRectangle.TransformToVisual(relativeTo).Transform(p)
8082
End If
8183

82-
If InCm Then
83-
P.X = Math.Round(P.X * Helper.PxToCm, 2)
84-
P.Y = Math.Round(P.Y * Helper.PxToCm, 2)
84+
If inCm Then
85+
p.X = Math.Round(p.X * Helper.PxToCm, 2)
86+
p.Y = Math.Round(p.Y * Helper.PxToCm, 2)
8587
End If
86-
Return P
88+
89+
Return p
8790
End Function
8891

92+
Friend Function GetOriginalPos(transformedPoint As Point, Optional relativeTo As FrameworkElement = Nothing) As Point
93+
Dim p As Point = transformedPoint
94+
95+
' Reverse TransformToVisual
96+
If relativeTo Is Nothing Then
97+
p = Pnl.FocusRectangle.TransformToVisual(Canv).Inverse.Transform(p)
98+
Else
99+
p = Pnl.FocusRectangle.TransformToVisual(relativeTo).Inverse.Transform(p)
100+
End If
101+
102+
' Reverse RenderTransform
103+
Dim rt = DesignerItem.RenderTransform
104+
If rt IsNot Nothing Then p = rt.Inverse.Transform(p)
105+
106+
' Reverse LayoutTransform
107+
Dim Lt = Pnl.FocusRectangle.LayoutTransform
108+
If Lt IsNot Nothing Then p = Lt.Inverse.Transform(p)
109+
110+
Return p
111+
End Function
112+
113+
89114
Private Sub Diagram_MouseLeave(sender As Object, e As MouseEventArgs) Handles Diagram.MouseLeave
90115
If DraggingDiagram Then Diagram_PreviewMouseLeftButtonUp(Nothing, Nothing)
91116
Mouse.OverrideCursor = Nothing

DiagramHelper/DiagramPanel.xaml.vb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,6 @@ Public Class DiagramPanel
630630
Dim y = P.Y * Helper.CmToPx * Dsn.Scale - 5
631631
Dsn.TbLeftLocation.Margin = New Thickness(x - Dsn.TbLeftLocation.ActualWidth * Dsn.Scale, y + 2, 0, 0)
632632
Dsn.TbTopLocation.Margin = New Thickness(x + 2, y - Dsn.TbTopLocation.ActualHeight * Dsn.Scale, 0, 0)
633-
634633
End Sub
635634

636635
Private Sub BringToFrontMenuItem_Click(sender As Object, e As RoutedEventArgs)

DiagramHelper/Resources/DesignerDecorator.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<MenuItem Header="Grid Lines Brush" InputGestureText="Ctrl+L" Click="GridBrushMenuItem_Click"/>
5050
</MenuItem>
5151
<MenuItem Header="Page Background" Click="PageBackgroundMenuItem_Click"/>
52-
<MenuItem Name="AllowTransparencyMenuItem" Header="Allow Transoarency" InputGestureText="Ctrl+T" IsCheckable="True" Checked="AllowTransparencyMenuItem_Checked" Unchecked="AllowTransparencyMenuItem_Checked"/>
52+
<MenuItem Name="AllowTransparencyMenuItem" Header="Allow Transparency" InputGestureText="Ctrl+T" IsCheckable="True" Checked="AllowTransparencyMenuItem_Checked" Unchecked="AllowTransparencyMenuItem_Checked"/>
5353
<Separator/>
5454
<MenuItem Header="Menu Designer" Click="MenuDesignerMenuItem_Click"/>
5555
<MenuItem Header="Properties" InputGestureText="F4" Click="PropertiesMenuItem_Click"/>

0 commit comments

Comments
 (0)
X Tutup