Height="Fit";
MinimumSize="200,100";
}
+Table {
+ Spacing="1";
+ Foreground="Grey";
+}
TableRow {
Width="Stretched";
}
/// <param name="iface">Iface.</param>
public static void Save(Interface iface, string dbgLogFilePath = "debug.log") {
#if DEBUG_LOG
- using (Stream stream = new FileStream (dbgLogFilePath, FileMode.Create, FileAccess.Write))
- Save (iface, stream);
+ using (Stream stream = new FileStream (dbgLogFilePath, FileMode.Create, FileAccess.Write))
+ Save (iface, stream);
Console.WriteLine ($"Crow Debug Log saved to: {System.IO.Path.GetFullPath(dbgLogFilePath)}");
#endif
}
if (startingWidgetsIndex >= 0)
writer.WriteLine ("[Events]");
saveEventList (writer, events);
+ startedEvents.Clear ();
+ events.Clear ();
}
- if (startedEvents.Count > 0)
- Console.WriteLine ($"[DebugLogger]Warning: Started events not null when events saved!");
- startedEvents.Clear ();
- events.Clear ();
chrono.Start();
}
}
ListAdd.Raise (this, new ListChangedEventArg (this.Count - 1, elem));
SelectedIndex = this.Count - 1;
}
+ public new void Insert (int index, T elem) {
+ base.Insert (index, elem);
+ ListAdd.Raise (this, new ListChangedEventArg (index, elem));
+ SelectedIndex = index;
+ }
public new void Remove (T elem) {
int idx = IndexOf (elem);
if (idx < 0)
{
DbgLogger.StartEvent (DbgEvtType.GOSearchLargestChild, this);
- //childrenRWLock.EnterReadLock ();
+ childrenRWLock.EnterReadLock ();
largestChild = null;
contentSize.Width = 0;
if (largestChild == null && !forceMeasure)
searchLargestChild (true);
- //childrenRWLock.ExitReadLock ();
+ childrenRWLock.ExitReadLock ();
DbgLogger.EndEvent (DbgEvtType.GOSearchLargestChild);
}
{
DbgLogger.StartEvent (DbgEvtType.GOSearchTallestChild, this);
- //childrenRWLock.EnterReadLock ();
+ childrenRWLock.EnterReadLock ();
tallestChild = null;
contentSize.Height = 0;
if (tallestChild == null && !forceMeasure)
searchTallestChild (true);
- //childrenRWLock.ExitReadLock ();
+ childrenRWLock.ExitReadLock ();
DbgLogger.EndEvent (DbgEvtType.GOSearchTallestChild);
}
public override void OnDataSourceChanged (object sender, DataSourceChangeEventArgs e)
{
base.OnDataSourceChanged (this, e);
-
- childrenRWLock.EnterReadLock ();
- foreach (Widget g in Children) {
- if (g.localDataSourceIsNull & g.localLogicalParentIsNull)
- g.OnDataSourceChanged (g, e);
+ try {
+ childrenRWLock.EnterReadLock ();
+ foreach (Widget g in Children) {
+ if (g.localDataSourceIsNull & g.localLogicalParentIsNull)
+ g.OnDataSourceChanged (g, e);
+ }
+ childrenRWLock.ExitReadLock ();
+ } catch (Exception) {
+ childrenRWLock.ExitReadLock ();
+ throw;
}
- childrenRWLock.ExitReadLock ();
}
public void putWidgetOnTop(Widget w)
gr.Clip ();
}
- childrenRWLock.EnterReadLock ();
+ try
+ {
+ childrenRWLock.EnterReadLock ();
- for (int i = 0; i < Children.Count; i++)
- Children[i].Paint (gr);
+ for (int i = 0; i < Children.Count; i++)
+ Children[i].Paint (gr);
- childrenRWLock.ExitReadLock ();
+ childrenRWLock.ExitReadLock ();
+ }
+ catch (System.Exception)
+ {
+ childrenRWLock.ExitReadLock ();
+ throw;
+ }
if (ClipToClientRect)
gr.Restore ();
public override void InsertChild (int idx, Widget g) {
g.Width = Measure.Stretched;
g.Margin = RowsMargin;
- base.InsertChild (idx, g);
+ base.InsertChild (idx, g);
+ if (HeaderRow == null || idx == 0)
+ return;
+ TableRow row = g as TableRow;
+ for (int i = 0; i < HeaderRow.Children.Count; i++) {
+ if (row.Children.Count <= i)
+ continue;
+ setRowCellWidth (row.Children[i], HeaderRow.Children[i].Slot.Width);
+ row.Children[i].Slot.X = HeaderRow.Children[i].Slot.X;
+ }
}
- [DefaultValue (2)]
+ [DefaultValue (1)]
public int ColumnSpacing {
get => columnSpacing;
set {
if (row.Children.Count <= cIdx)
continue;
row.Children[cIdx].Slot.X = g.Slot.X;
- row.RegisterForRedraw();
}
childrenRWLock.ExitReadLock ();
RegisterForRedraw ();
}
protected void setRowCellWidth (Widget w, int newW) {
if (newW == w.Slot.Width)
- return;
-
+ return;
w.Slot.Width = newW;
w.IsDirty = true;
w.OnLayoutChanges (LayoutingType.Width);
if (!localDataSourceIsNull)
DataSource = null;
- parentRWLock.EnterWriteLock ();
+ //parentRWLock.EnterWriteLock ();
parent = null;
- parentRWLock.ExitWriteLock ();
+ //parentRWLock.ExitWriteLock ();
} else {
DbgLogger.AddEvent (DbgEvtType.DisposedByGC, this);
}
public CommandGroup LoggerCommands =>
new CommandGroup(
new Command("Get logs", () => getLog ()),
- new Command("Reset logs", () => delResetDebugger ())
+ new Command("Reset logs", () => delResetDebugger ()),
+ new Command("Save to file", () => saveLogToDebugLogFilePath ()),
+ new Command("Load from file", () => loadLogFromDebugLogFilePath ())
);
public string IMLSource {
get => imlSource;
NotifyValueChangedAuto (DebugLogToFile);
}
}
+ public string DebugLogFilePath {
+ get => Configuration.Global.Get<string> ("DebugLogFilePath");
+ set {
+ if (DebugLogFilePath == value)
+ return;
+ Configuration.Global.Set ("DebugLogFilePath", value);
+ NotifyValueChangedAuto (value);
+ }
+ }
+ int firstWidgetIndexToSave, lastWidgetIndexToSave;
+ public int FirstWidgetIndexToSave {
+ get => firstWidgetIndexToSave;
+ set {
+ if (firstWidgetIndexToSave == value)
+ return;
+ if (value > lastWidgetIndexToSave)
+ firstWidgetIndexToSave = lastWidgetIndexToSave;
+ else
+ firstWidgetIndexToSave = value;
+ NotifyValueChangedAuto (firstWidgetIndexToSave);
+ }
+ }
+ public int LastWidgetIndexToSave {
+ get => lastWidgetIndexToSave;
+ set {
+ if (lastWidgetIndexToSave == value)
+ return;
+ if (lastWidgetIndexToSave > widgets.Count)
+ lastWidgetIndexToSave = widgets.Count;
+ else
+ lastWidgetIndexToSave = value;
+
+ NotifyValueChangedAuto (lastWidgetIndexToSave);
+ }
+ }
protected override void onInitialized(object sender, EventArgs e)
{
widgets = new List<DbgWidgetRecord>();
events = new List<DbgEvent>();
miSave.Invoke(null, new object[] {dbgIFace, stream, firstWidgetIndexToGet, true});
- //debuggerType.GetMethod("Save", new Type[] {dbgIfaceType, typeof(string)}).Invoke(null, new object[] {dbgIFace, "debug.log"});
- //delSaveDebugLog(dbgIFace, "debug.log");
stream.Seek(0, SeekOrigin.Begin);
DbgLogger.Load (stream, events, widgets);
foreach (DbgEvent e in evt.Events)
updateWidgetEvents (widgets, e);
}
+ void saveLogToDebugLogFilePath () {
+
+ }
+ void loadLogFromDebugLogFilePath () {
+
+ }
public virtual object GetScreenCoordinates () => ScreenCoordinates(Slot).TopLeft;
}
}
-
-
-
-
public string CrowDbgAssemblyLocation {
get => Configuration.Global.Get<string>("CrowDbgAssemblyLocation");
set {
NotifyValueChanged (nameof (Widgets), widgets);
}
}
- /*IEnumerable<DbgWidgetEvent> widgetEvents (DbgWidgetRecord wr, DbgEvent evt) {
- if (evt is DbgWidgetEvent we && we.InstanceIndex == wr.InstanceIndex)
- yield return we;
- if (evt.Events != null) {
- foreach (DbgEvent e in evt.Events)
- foreach (DbgWidgetEvent ye in widgetEvents (wr, e))
- yield return ye;
- }
- }
- IEnumerable<DbgWidgetEvent> currentWidgetEvents;
-
- public IEnumerable<DbgWidgetEvent> CurrentWidgetEvents {
- get => currentWidgetEvents;
- set {
- currentWidgetEvents = value;
- NotifyValueChanged (currentWidgetEvents);
- curWidget.Events = new List<DbgEvent> (currentWidgetEvents);
- }
- }
- IEnumerable<DbgWidgetEvent> getCurrentWidgetEvents () {
- if (CurrentWidget == null)
- yield return null;
- else {
- foreach (DbgEvent evt in Events)
- foreach (DbgWidgetEvent dwe in widgetEvents (CurrentWidget, evt))
- yield return dwe;
- }
- }*/
-
public DbgEvent CurrentEvent {
get => curEvent;
NotifyValueChanged(DebugLogToFile);
}
}
- public string DebugLogFilePath {
+ /*public string DebugLogFilePath {
get => Configuration.Global.Get<string> (nameof (DebugLogFilePath));
set {
if (CurrentFile == value)
Configuration.Global.Set (nameof (DebugLogFilePath), value);
NotifyValueChanged (DebugLogFilePath);
}
- }
+ }*/
public bool DebugLogRecording {
get => debugLogRecording;
set {
<?xml version="1.0"?>
<VerticalStack Background="DarkGrey">
<HorizontalStack >
- <HorizontalStack Width="25%" >
- <VerticalStack Width="50%" Name="Explorer" Background="Onyx">
+ <TabView Width="25%" >
+ <VerticalStack Name="Explorer" Background="Onyx">
<HorizontalStack Height="Fit" Margin="2" >
<Image Margin="2" Width="16" Height="16" Path="#Crow.Icons.level-up.svg" MouseClick="goUpDirClick"
Background="Jet" MouseEnter="{Background=Grey}" MouseLeave="{Background=Jet}" />
</Template>
</DirectoryView>
</VerticalStack>
- <Splitter/>
- <VerticalStack Name="DebugLogger" Margin="5" IsVisible="true" Background="Onyx">
+ <VerticalStack Name="DebugLogger" Margin="5" IsVisible="false" Background="Onyx">
<HorizontalStack Height="Fit">
<Image Width="30" Height="20" Path="#Crow.Icons.IconAlerte.svg" Visible="{../../../../dbgIfaceWidget.CrowDebuggerNOK}"/>
<Label Fit="true" Text="Crow debug assembly path:"/>
</HorizontalStack>
<Label Background="Red" Foreground="White" Margin="5" Width="Stretched" Text="{../../../dbgIfaceWidget.CrowDebuggerErrorMessage}"
IsVisible="{../../../dbgIfaceWidget.CrowDebuggerNOK}"/>
- <CheckBox Name="cbFile" Caption="Record to file" IsChecked="{²DebugLogToFile}" Background="Onyx"/>
+ <!--<CheckBox Name="cbFile" Caption="Record to file" IsChecked="{²DebugLogToFile}" Background="Onyx"/>-->
<HorizontalStack Height="Fit" Width="Stretched" IsEnabled="{../cbFile.IsChecked}" Background="Onyx" Margin="5">
<Label Text="Debug log output file:" Fit="true"/>
- <TextBox Text="{²DebugLogFilePath}" />
+ <TextBox Text="{²../../../../dbgIfaceWidget.DebugLogFilePath}" />
</HorizontalStack>
<EnumSelector RadioButtonStyle="CheckBox2" Template="#Dbg.EnumSelector.template"
Background="Grey"
</Menu>
</HorizontalStack>
</VerticalStack>
- </HorizontalStack>
+ </TabView>
<Splitter Width="6" />
<VerticalStack>
<DebugInterfaceWidget Name="dbgIfaceWidget" Height="60%" Background="Black" Focusable="true"
--- /dev/null
+<ListBox Data="{TestList}" >
+ <Template>
+ <Table Name="ItemsContainer" Columns="name,Stretched;color,100"/>
+ </Template>
+ <ItemTemplate>
+ <TableRow>
+ <Label Text="{}" Margin="5" />
+ <Widget Background="{}" Width="50" Height="10"/>
+ </TableRow>
+ </ItemTemplate>
+
+</ListBox>
\ No newline at end of file
-<Table Foreground="White" Columns="test,Fit;test,Fit" Background="White" Width="Fit" Height="Fit" Margin="1" Spacing="1" >
- <TableRow Height="Fit" Spacing="1" Margin="0"
- MouseEnter="{Background=RoyalBlue}"
- MouseLeave="{Background=Transparent}">
- <Label Text="col1qsf" Margin="5" Background="0.3,0.3,0.3,0.8"/>
- <Label Text="col1qsf" Margin="5" Background="0.3,0.3,0.3,0.8"/>
- <Label Text="col1qsf" Margin="5" Background="0.3,0.3,0.3,0.8"/>
- </TableRow>
- <TableRow Height="Fit" Spacing="0" Margin="0"
- MouseEnter="{Background=RoyalBlue}"
- MouseLeave="{Background=Transparent}">
- <Label Text="col1qsf" Margin="5" Background="0.3,0.3,0.3,0.8"/>
- <Label Text="col1qsf" Margin="5" Background="0.3,0.3,0.3,0.8"/>
- <Label Text="col1qsf" Margin="5" Background="0.3,0.3,0.3,0.8"/>
- </TableRow>
-
-
-</Table>
\ No newline at end of file
+<List Data="{TestList}">
+ <Table Foreground="White" Columns="test,Fit;test,Fit" Width="Fit" Height="Fit"
+ Spacing="1" ColumnSpacing="1"
+ VerticalLineWidth="1" Margin="0" RowsMargin="0">
+ <TableRow
+ MouseEnter="{Background=RoyalBlue}"
+ MouseLeave="{Background=Transparent}">
+ <Label Text="col1qsf" Margin="5" />
+ <Label Text="col1qsf" Margin="5" />
+ <Label Text="col1qsf" Margin="5" />
+ </TableRow>
+ <TableRow
+ MouseEnter="{Background=RoyalBlue}"
+ MouseLeave="{Background=Transparent}">
+ <Label Text="col1qsf" Margin="5"/>
+ <Label Text="col1qsfsdqfdqsfdqsfdqsf" Margin="5"/>
+ <Label Text="col1qsfdsqfdqsf" Margin="5"/>
+ </TableRow>
+ </Table>
+</List>
\ No newline at end of file