Skip to content
This repository was archived by the owner on Sep 11, 2023. It is now read-only.

Commit b3fbb95

Browse files
#25 Brackets Fix, #26 2 Windows bug fix, Object-Browser max width limitation.
1 parent ba7c337 commit b3fbb95

File tree

3 files changed

+93
-45
lines changed

3 files changed

+93
-45
lines changed

UI/Components/EditorFoldingStrategy.cs

Lines changed: 76 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -34,53 +34,95 @@ public IEnumerable<NewFolding> CreateNewFoldings(ITextSource document)
3434

3535
Stack<int> startOffsets = new Stack<int>();
3636
int lastNewLineOffset = 0;
37-
bool InCommentMode = false;
37+
int CommentMode = 0; // 0 = None, 1 = Single, 2 = Multi, 3 = String
3838
for (int i = 0; i < document.TextLength; ++i)
3939
{
4040
char c = document.GetCharAt(i);
4141
if (c == '\n' || c == '\r')
4242
{
4343
lastNewLineOffset = i + 1;
44+
if (CommentMode == 1)
45+
{
46+
CommentMode = 0;
47+
}
4448
}
45-
else if (InCommentMode)
49+
else
4650
{
47-
if (c == '/')
51+
switch (CommentMode)
4852
{
49-
if (i > 0)
50-
{
51-
if (document.GetCharAt(i - 1) == '*')
53+
case 0:
5254
{
53-
int startOffset = startOffsets.Pop();
54-
InCommentMode = false;
55-
if (startOffset < lastNewLineOffset)
55+
switch (c)
5656
{
57-
newFoldings.Add(new NewFolding(startOffset, i + 1));
57+
case '/':
58+
{
59+
if ((i + 1) < document.TextLength)
60+
{
61+
char oneCharAfter = document.GetCharAt(i + 1);
62+
if (oneCharAfter == '*')
63+
{
64+
CommentMode = 2;
65+
startOffsets.Push(i);
66+
}
67+
else if (oneCharAfter == '/')
68+
{
69+
CommentMode = 1;
70+
}
71+
}
72+
break;
73+
}
74+
case '{':
75+
{
76+
startOffsets.Push(i);
77+
break;
78+
}
79+
case '}':
80+
{
81+
if (startOffsets.Count > 0)
82+
{
83+
int startOffset = startOffsets.Pop();
84+
if (startOffset < lastNewLineOffset)
85+
{
86+
newFoldings.Add(new NewFolding(startOffset, i + 1));
87+
}
88+
}
89+
break;
90+
}
91+
case '\"':
92+
{
93+
CommentMode = 3;
94+
break;
95+
}
5896
}
97+
break;
98+
}
99+
case 2:
100+
{
101+
if (c == '/')
102+
{
103+
if (i > 0)
104+
{
105+
if (document.GetCharAt(i - 1) == '*')
106+
{
107+
int startOffset = startOffsets.Pop();
108+
CommentMode = 0;
109+
if (startOffset < lastNewLineOffset)
110+
{
111+
newFoldings.Add(new NewFolding(startOffset, i + 1));
112+
}
113+
}
114+
}
115+
}
116+
break;
117+
}
118+
case 3:
119+
{
120+
if (c == '\"')
121+
{
122+
CommentMode = 1;
123+
}
124+
break;
59125
}
60-
}
61-
}
62-
}
63-
else if (c == '/')
64-
{
65-
if ((i + 1) < document.TextLength)
66-
{
67-
if (document.GetCharAt(i + 1) == '*')
68-
{
69-
InCommentMode = true;
70-
startOffsets.Push(i);
71-
}
72-
}
73-
}
74-
else if (c == '{')
75-
{
76-
startOffsets.Push(i);
77-
}
78-
else if (c == '}' && startOffsets.Count > 0)
79-
{
80-
int startOffset = startOffsets.Pop();
81-
if (startOffset < lastNewLineOffset)
82-
{
83-
newFoldings.Add(new NewFolding(startOffset, i + 1));
84126
}
85127
}
86128
}

UI/MainWindow.xaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<controls:MetroWindow x:Class="SPCode.UI.MainWindow"
1+
<controls:MetroWindow x:Name="metroWindow" x:Class="SPCode.UI.MainWindow"
22
xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"
33
xmlns:dock="http://schemas.xceed.com/wpf/xaml/avalondock"
44
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
@@ -208,7 +208,7 @@
208208
<Grid Grid.Row="0" Name="EditorObjectBrowserGrid">
209209
<Grid.ColumnDefinitions>
210210
<ColumnDefinition Width="1*" />
211-
<ColumnDefinition Name="ObjectBrowserColumn" Width="300" MinWidth="3" />
211+
<ColumnDefinition Name="ObjectBrowserColumn" Width="300" MinWidth="3" MaxWidth="{Binding ActualHeight, ElementName=metroWindow, Mode=OneWay}"/>
212212
</Grid.ColumnDefinitions>
213213
<dock:DockingManager Grid.Column="0" x:Name="DockingManager" Margin="0,0,5,0" AllowMixedOrientation="True" Background="{DynamicResource WhiteColorBrush}" Foreground="{DynamicResource BlackColorBrush}"
214214
ActiveContentChanged="DockingManager_ActiveContentChanged" DocumentClosed="DockingManager_DocumentClosed" >
@@ -217,7 +217,7 @@
217217
</dock:DockingManager.Theme>
218218
<dock:LayoutRoot>
219219
<dock:LayoutPanel>
220-
<dock:LayoutDocumentPaneGroup x:Name="DockingPaneGroup">
220+
<dock:LayoutDocumentPaneGroup x:Name="DockingPaneGroup" ChildrenTreeChanged="DockingPaneGroup_ChildrenTreeChanged">
221221
<dock:LayoutDocumentPane x:Name="DockingPane" />
222222
</dock:LayoutDocumentPaneGroup>
223223
</dock:LayoutPanel>

UI/MainWindow.xaml.cs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -185,16 +185,22 @@ private void DockingManager_ActiveContentChanged(object sender, EventArgs e)
185185
private void DockingManager_DocumentClosed(object sender, DocumentClosedEventArgs e)
186186
{
187187
(e.Document.Content as EditorElement)?.Close();
188-
var new_ee = GetCurrentEditorElement();
189-
if (new_ee == null)
188+
UpdateWindowTitle();
189+
}
190+
191+
// Code taken from VisualPawn Editer (Not published yet)
192+
private void DockingPaneGroup_ChildrenTreeChanged(object sender, ChildrenTreeChangedEventArgs e)
193+
{
194+
// if the active LayoutDocumentPane gets closed
195+
// 1. it will not be in the LayoutDocumentPaneGroup.
196+
// 2. editor that get added to it will not be shown in the client.
197+
// Solution: Set the active LayoutDocumentPane to the first LayoutDocumentPaneGroup avilable child.
198+
if (e.Change == ChildrenTreeChange.DirectChildrenChanged
199+
&& !DockingPaneGroup.Children.Contains(DockingPane)
200+
&& DockingPaneGroup.Children[0] is LayoutDocumentPane)
190201
{
191-
var er = EditorsReferences;
192-
if (er.Count > 0)
193-
{
194-
e.Document.Content = er[0];
195-
}
202+
DockingPane = (LayoutDocumentPane)DockingPaneGroup.Children[0];
196203
}
197-
UpdateWindowTitle();
198204
}
199205

200206
private void MetroWindow_Closing(object sender, CancelEventArgs e)

0 commit comments

Comments
 (0)