match form

This commit is contained in:
Jonathan Jenne 2019-07-11 14:32:54 +02:00
parent 9bc269147c
commit e78546ebbd
4 changed files with 191 additions and 115 deletions

View File

@ -1,6 +1,6 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmProfileMatch
Inherits System.Windows.Forms.Form
Inherits DevExpress.XtraEditors.XtraForm
'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
<System.Diagnostics.DebuggerNonUserCode()> _
@ -22,99 +22,106 @@ Partial Class frmProfileMatch
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Dim TileItemElement3 As DevExpress.XtraEditors.TileItemElement = New DevExpress.XtraEditors.TileItemElement()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmProfileMatch))
Me.Label1 = New System.Windows.Forms.Label()
Me.GridControl1 = New DevExpress.XtraGrid.GridControl()
Me.TileView1 = New DevExpress.XtraGrid.Views.Tile.TileView()
Me.Button2 = New System.Windows.Forms.Button()
Me.Button1 = New System.Windows.Forms.Button()
CType(Me.GridControl1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.TileView1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.TileControl1 = New DevExpress.XtraEditors.TileControl()
Me.TileGroup2 = New DevExpress.XtraEditors.TileGroup()
Me.TileItem1 = New DevExpress.XtraEditors.TileItem()
Me.TileGroupProfiles = New DevExpress.XtraEditors.TileGroup()
Me.SimpleButton1 = New DevExpress.XtraEditors.SimpleButton()
Me.SuspendLayout()
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.BackColor = System.Drawing.Color.FromArgb(CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer))
Me.Label1.Font = New System.Drawing.Font("Calibri", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Label1.Location = New System.Drawing.Point(39, 15)
Me.Label1.ForeColor = System.Drawing.Color.White
Me.Label1.Location = New System.Drawing.Point(12, 9)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(489, 19)
Me.Label1.TabIndex = 2
Me.Label1.Text = "Clipboard Watcher hat mehr als einen Match für Ihre Suche gefunden:"
'
'GridControl1
'TileControl1
'
Me.GridControl1.Location = New System.Drawing.Point(27, 48)
Me.GridControl1.MainView = Me.TileView1
Me.GridControl1.Name = "GridControl1"
Me.GridControl1.Size = New System.Drawing.Size(621, 208)
Me.GridControl1.TabIndex = 3
Me.GridControl1.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.TileView1})
Me.TileControl1.AppearanceItem.Normal.BackColor = System.Drawing.Color.FromArgb(CType(CType(165, Byte), Integer), CType(CType(36, Byte), Integer), CType(CType(49, Byte), Integer))
Me.TileControl1.AppearanceItem.Normal.BorderColor = System.Drawing.Color.FromArgb(CType(CType(165, Byte), Integer), CType(CType(36, Byte), Integer), CType(CType(49, Byte), Integer))
Me.TileControl1.AppearanceItem.Normal.Font = New System.Drawing.Font("Tahoma", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.TileControl1.AppearanceItem.Normal.ForeColor = System.Drawing.Color.White
Me.TileControl1.AppearanceItem.Normal.Options.UseBackColor = True
Me.TileControl1.AppearanceItem.Normal.Options.UseBorderColor = True
Me.TileControl1.AppearanceItem.Normal.Options.UseFont = True
Me.TileControl1.AppearanceItem.Normal.Options.UseForeColor = True
Me.TileControl1.BackColor = System.Drawing.Color.FromArgb(CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer))
Me.TileControl1.Dock = System.Windows.Forms.DockStyle.Top
Me.TileControl1.Groups.Add(Me.TileGroup2)
Me.TileControl1.Groups.Add(Me.TileGroupProfiles)
Me.TileControl1.ItemSize = 135
Me.TileControl1.Location = New System.Drawing.Point(0, 0)
Me.TileControl1.MaxId = 4
Me.TileControl1.Name = "TileControl1"
Me.TileControl1.Size = New System.Drawing.Size(713, 384)
Me.TileControl1.TabIndex = 6
Me.TileControl1.Text = "TileControl1"
'
'TileView1
'TileGroup2
'
Me.TileView1.Appearance.ItemPressed.BackColor = System.Drawing.Color.Silver
Me.TileView1.Appearance.ItemPressed.Options.UseBackColor = True
Me.TileView1.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.UltraFlat
Me.TileView1.GridControl = Me.GridControl1
Me.TileView1.Name = "TileView1"
Me.TileView1.OptionsTiles.ItemSize = New System.Drawing.Size(200, 80)
Me.TileView1.OptionsTiles.LayoutMode = DevExpress.XtraGrid.Views.Tile.TileViewLayoutMode.List
Me.TileView1.OptionsView.BackgroundColorMode = DevExpress.XtraGrid.Views.Tile.BackgroundColorMode.Skin
Me.TileView1.ViewCaption = "Clipboard Watcher hat mehr als einen Match für Ihre Suche gefunden:"
Me.TileGroup2.Items.Add(Me.TileItem1)
Me.TileGroup2.Name = "TileGroup2"
Me.TileGroup2.Text = "Allgemein"
'
'Button2
'TileItem1
'
Me.Button2.Font = New System.Drawing.Font("Calibri", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Button2.Image = Global.DD_Clipboard_Watcher.My.Resources.Resources.cancel
Me.Button2.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft
Me.Button2.Location = New System.Drawing.Point(347, 271)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(301, 53)
Me.Button2.TabIndex = 4
Me.Button2.Text = "Abbruch"
Me.Button2.UseVisualStyleBackColor = True
TileItemElement3.ImageOptions.Image = CType(resources.GetObject("resource.Image"), System.Drawing.Image)
TileItemElement3.Text = "Alle"
Me.TileItem1.Elements.Add(TileItemElement3)
Me.TileItem1.Id = 1
Me.TileItem1.ItemSize = DevExpress.XtraEditors.TileItemSize.Medium
Me.TileItem1.Name = "TileItem1"
'
'Button1
'TileGroupProfiles
'
Me.Button1.BackColor = System.Drawing.SystemColors.Control
Me.Button1.Font = New System.Drawing.Font("Calibri", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Button1.Image = Global.DD_Clipboard_Watcher.My.Resources.Resources.ID_SITE_PUBLISH_ALL
Me.Button1.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft
Me.Button1.Location = New System.Drawing.Point(27, 271)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(300, 53)
Me.Button1.TabIndex = 5
Me.Button1.Text = "Alle Ergebnisse anzeigen"
Me.Button1.UseVisualStyleBackColor = False
Me.TileGroupProfiles.Name = "TileGroupProfiles"
'
'SimpleButton1
'
Me.SimpleButton1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.SimpleButton1.ButtonStyle = DevExpress.XtraEditors.Controls.BorderStyles.UltraFlat
Me.SimpleButton1.ImageOptions.Image = CType(resources.GetObject("SimpleButton1.ImageOptions.Image"), System.Drawing.Image)
Me.SimpleButton1.Location = New System.Drawing.Point(564, 390)
Me.SimpleButton1.Name = "SimpleButton1"
Me.SimpleButton1.Size = New System.Drawing.Size(137, 45)
Me.SimpleButton1.TabIndex = 7
Me.SimpleButton1.Text = "Abbruch"
'
'frmProfileMatch
'
Me.Appearance.Options.UseFont = True
Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 15.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.SystemColors.Control
Me.ClientSize = New System.Drawing.Size(675, 344)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.GridControl1)
Me.ClientSize = New System.Drawing.Size(713, 447)
Me.Controls.Add(Me.SimpleButton1)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.TileControl1)
Me.Font = New System.Drawing.Font("Calibri", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.MinimumSize = New System.Drawing.Size(729, 486)
Me.Name = "frmProfileMatch"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "Profile Match"
Me.TopMost = True
CType(Me.GridControl1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.TileView1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents Label1 As Label
Friend WithEvents GridControl1 As DevExpress.XtraGrid.GridControl
Friend WithEvents Button2 As Button
Friend WithEvents TileView1 As DevExpress.XtraGrid.Views.Tile.TileView
Friend WithEvents Button1 As Button
Friend WithEvents TileControl1 As DevExpress.XtraEditors.TileControl
Friend WithEvents TileGroup2 As DevExpress.XtraEditors.TileGroup
Friend WithEvents TileItem1 As DevExpress.XtraEditors.TileItem
Friend WithEvents TileGroupProfiles As DevExpress.XtraEditors.TileGroup
Friend WithEvents SimpleButton1 As DevExpress.XtraEditors.SimpleButton
End Class

View File

@ -118,6 +118,33 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="resource.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAhdEVYdFRpdGxlAEFwcGx5O09LO0NoZWNrO0JhcnM7
UmliYm9uO2RjyGgAAAGcSURBVFhHxZcxcsIwEEU5AVWO4z4dZ8gBcgZm6LhNWsrcIh0dV6B19nm0Hln5
sleG4OINRvq7+7FXktn1fb8pcvCVjBdd1y2xNw7G2bgYV+Oe4Jox5tCgVTlGWgy8GZ/Gt9EHQUsMsSpn
2MC78WWoIhGIJcef3BEDH8aPoRK3QA5yTfIvGSDgZqiEayDXxMScAW7ZM355CTnHx1EzQNM88syXIPfQ
mDUDdK4KXMNJjAE1pAHWbstSm+OUcqo5auyVATYQFdDKUDzlVPNwcE1ugF1MiVsYi6ecSgNn1+RitlIl
jjIpnnIqHVxck4vZz5UYag3lqOLHQpNzdV0ewKGixDY9zNdMtBaHu2vzoFkDSVOaWFMcpIHqI3BN0rmJ
tcVBPoJqE7om0z5SHGQTzi3Do+sUzBf6JeQyXNqIpAnGC10EuRFFtuKJCb4X8xGqWzFEDqPBBJ/FeJTq
YQTR43ht8cXjGDZ9IXE2fSVzCHjGnSDHpDhEDAC37JFXNGLH254TNQA0DZ3b8raElpih4RQtBpz//Wu2
FXLwdfS7XxGwk2isBZLIAAAAAElFTkSuQmCC
</value>
</data>
<data name="SimpleButton1.ImageOptions.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAjdEVYdFRpdGxlAENhbmNlbDtTdG9wO0V4aXQ7QmFy
cztSaWJib247TJaWsgAAAW5JREFUWEfFlk1KBDEUhGfmAg56JTcuHEGP4FFFFMVZz1VcxaomD57pek1e
hLj4FilSP9Dd0LtSyr8ixZlIcSZSnIkUL8+3f6LJOvhzixRr0BV4AXf13I3LuQev4OjzPVKEgeUfoIBv
kBpRM1hOLzM+gRyxEnDxALiaRiM7wpcbzNy3fb8OBi4+gTagd4Qq5/lBda0EgsvksRrboK0RqXIiRRiM
zIh0OZEiTJ6eEUPlRIowtmyNGC4nUoRZEY0YLidSRECEGuFJlRMpImSLaMRSDmRmhBQZsoF65jZgeTFV
ZoQUGRIQlRvLCJUZIUWEKKK3XWndI6SIgN5yPvPwE1XZLVKEubfc7gyPkCKMmXJjaIQUYSJR+Qn4Yk96
hBRhGCk3UiNWAi7uwVs1+oCeckONeAfdPyTX4Ksas+WW4UecwU3bQ1YCwWXCEVydKicuhyOYIcuJFC0I
8P/Qn7tosvK/5TOR4kykOBMpzqPsfgBphQ1j4i+mWAAAAABJRU5ErkJggg==
</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAA

View File

@ -7,56 +7,70 @@ Public Class frmProfileMatch
CreateTiles()
CurrSearch2Load = Nothing
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Me.Close()
End Sub
Sub CreateTiles()
Try
Dim ImageIndex As Integer = -1
Dim i As Integer = 0
Dim j As Integer = 0
Dim PrimaryFont As New Font("Segoe UI", 12, FontStyle.Bold)
Dim oPrimaryFont As New Font("Segoe UI", 12, FontStyle.Bold)
Dim SecondaryFont As New Font("Segoe UI", 10)
Dim WhiteBackground As Color = System.Drawing.Color.FromArgb(230, Color.White)
Dim oGroup = TileControl1.Groups.Item("TileGroupProfiles")
For Each oRow As DataRow In CurrDT_PROFILE_MATCH.Rows
Dim oItem As New TileItem() With {.Tag = oRow.Item("GUID")}
oItem.Elements.Clear()
Dim oNameElement = New TileItemElement()
oNameElement.Text = oRow.Item("NAME")
oNameElement.TextAlignment = TileItemContentAlignment.TopLeft
oNameElement.Appearance.Normal.Font = oPrimaryFont
oItem.Elements.Add(oNameElement)
Dim oCommentElement = New TileItemElement()
oCommentElement.Text = oRow.Item("COMMENT")
oCommentElement.TextAlignment = TileItemContentAlignment.BottomLeft
oCommentElement.Appearance.Normal.Font = SecondaryFont
oItem.Elements.Add(oCommentElement)
oGroup.Items.Add(oItem)
Next
' Datatable laden
GridControl1.DataSource = CurrDT_PROFILE_MATCH
'GridControl1.DataSource = CurrDT_PROFILE_MATCH
TileView1.TileTemplate.Clear()
'TileView1.TileTemplate.Clear()
'Dim ImageColumn As TileViewItemElement
'Dim HeadlineColumn As TileViewItemElement
'Dim IDColumn As TileViewItemElement
'Dim TextColumn As TileViewItemElement
'Dim TextHeaderColumn As TileViewItemElement
'HeadlineColumn = New TileViewItemElement()
'With HeadlineColumn
' .Column = TileView1.Columns(1)
' .TextAlignment = TileItemContentAlignment.TopRight
' .Appearance.Normal.Font = PrimaryFont
' .Appearance.Normal.ForeColor = Color.DodgerBlue
' .Column.OptionsFilter.AllowFilter = True
'End With
'TileView1.TileTemplate.Add(HeadlineColumn)
'IDColumn = New TileViewItemElement()
'With IDColumn
' .Column = TileView1.Columns(0)
' .Column.OptionsFilter.AllowFilter = True
' .TextAlignment = TileItemContentAlignment.TopLeft
'End With
'TileView1.TileTemplate.Add(IDColumn)
'ImageColumn = New TileViewItemElement()
'With ImageColumn
' .Image = My.Resources.build_Selection_32xLG
' '
' ' '.ImageSize = New Size(186, 90)
' .ImageSize = New Size(186, 118)
' .ImageScaleMode = TileItemImageScaleMode.ZoomInside
' .ImageAlignment = TileItemContentAlignment.BottomLeft
' ' .ImageLocation = New Point(-10, -10)
'End With
Dim ImageColumn As TileViewItemElement
Dim HeadlineColumn As TileViewItemElement
Dim IDColumn As TileViewItemElement
Dim TextColumn As TileViewItemElement
Dim TextHeaderColumn As TileViewItemElement
HeadlineColumn = New TileViewItemElement()
With HeadlineColumn
.Column = TileView1.Columns(1)
.TextAlignment = TileItemContentAlignment.TopRight
.Appearance.Normal.Font = PrimaryFont
.Appearance.Normal.ForeColor = Color.DodgerBlue
.Column.OptionsFilter.AllowFilter = True
End With
TileView1.TileTemplate.Add(HeadlineColumn)
IDColumn = New TileViewItemElement()
With IDColumn
.Column = TileView1.Columns(0)
.Column.OptionsFilter.AllowFilter = True
.TextAlignment = TileItemContentAlignment.TopLeft
End With
TileView1.TileTemplate.Add(IDColumn)
ImageColumn = New TileViewItemElement()
With ImageColumn
.Image = My.Resources.build_Selection_32xLG
'
' '.ImageSize = New Size(186, 90)
.ImageSize = New Size(186, 118)
.ImageScaleMode = TileItemImageScaleMode.ZoomInside
.ImageAlignment = TileItemContentAlignment.BottomLeft
' .ImageLocation = New Point(-10, -10)
End With
' TileView1.TileTemplate.Add(ImageColumn)
'For Each oProfileColumn As DataColumn In CurrDT_PROFILE_MATCH.Columns
' Dim index As Integer = CurrDT_PROFILE_MATCH.Columns.IndexOf(oProfileColumn)
@ -133,27 +147,27 @@ Public Class frmProfileMatch
End Sub
Private Sub TileView1_ItemClick(sender As Object, e As TileViewItemClickEventArgs) Handles TileView1.ItemClick
Dim oPROFILE_ID = TileView1.GetFocusedRowCellValue(TileView1.Columns("GUID"))
CurrSearch2Load = oPROFILE_ID
Dim view As TileView = TryCast(sender, TileView)
Dim pt As Point = view.GridControl.PointToClient(Control.MousePosition)
Dim hitInfo As TileViewHitInfo = view.CalcHitInfo(pt)
If hitInfo.ItemInfo IsNot Nothing Then
Dim elementInfo As TileItemElementViewInfo = hitInfo.ItemInfo.Elements.FirstOrDefault(Function(t) t.EntireElementBounds.Contains(pt))
If elementInfo IsNot Nothing Then
Dim text As String = elementInfo.Element.Text
End If
End If
OpenResults_Doc
End Sub
'Private Sub TileView1_ItemClick(sender As Object, e As TileViewItemClickEventArgs)
' Dim oPROFILE_ID = TileView1.GetFocusedRowCellValue(TileView1.Columns("GUID"))
' CurrSearch2Load = oPROFILE_ID
' Dim view As TileView = TryCast(sender, TileView)
' Dim pt As Point = view.GridControl.PointToClient(Control.MousePosition)
' Dim hitInfo As TileViewHitInfo = view.CalcHitInfo(pt)
' If hitInfo.ItemInfo IsNot Nothing Then
' Dim elementInfo As TileItemElementViewInfo = hitInfo.ItemInfo.Elements.FirstOrDefault(Function(t) t.EntireElementBounds.Contains(pt))
' If elementInfo IsNot Nothing Then
' Dim text As String = elementInfo.Element.Text
' End If
' End If
' OpenResults_Doc()
'End Sub
Sub OpenResults_Doc()
Me.Hide()
Dim ofrmresult As Form = New frmResultDoc
ofrmresult.ShowDialog()
Me.Show()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Private Sub Button1_Click(sender As Object, e As EventArgs)
Dim oResult As String = ""
For Each oRow As DataRow In CurrDT_PROFILE_MATCH.Rows
If oResult = "" Then
@ -166,4 +180,29 @@ Public Class frmProfileMatch
OpenResults_Doc()
End Sub
Private Sub TileControl1_ItemClick(sender As Object, e As TileItemEventArgs) Handles TileControl1.ItemClick
Dim oItem As TileItem = e.Item
Dim oProfileId = oItem.Tag
If oProfileId Is Nothing Then
Dim oResult As String = ""
For Each oRow As DataRow In CurrDT_PROFILE_MATCH.Rows
If oResult = "" Then
oResult = oRow.Item("GUID")
Else
oResult &= "," & oRow.Item("GUID")
End If
Next
CurrSearch2Load = oResult
Else
CurrSearch2Load = oProfileId
End If
OpenResults_Doc()
End Sub
Private Sub SimpleButton1_Click(sender As Object, e As EventArgs) Handles SimpleButton1.Click
Close()
End Sub
End Class

View File

@ -44,6 +44,8 @@ Public Class frmStart
Dim oDTMatchProfiles As DataTable = New DataTable
oDTMatchProfiles.Columns.Add("GUID")
oDTMatchProfiles.Columns.Add("NAME")
oDTMatchProfiles.Columns.Add("COMMENT")
For Each oProfileRow As DataRow In DT_USER_PROFILES.Rows
'If found = True Then Exit For
If CurrPROC_Name.ToUpper = oProfileRow.Item("PROC_NAME").ToString.ToUpper Then
@ -60,6 +62,7 @@ Public Class frmStart
Dim onewMatchRow As DataRow = oDTMatchProfiles.NewRow
onewMatchRow("GUID") = oProfileRow.Item("GUID")
onewMatchRow("NAME") = oProfileRow.Item("NAME")
onewMatchRow("COMMENT") = oProfileRow.Item("COMMENT")
oDTMatchProfiles.Rows.Add(onewMatchRow)
found = True