improvements and additional features to Database editor

This commit is contained in:
Michael Becker 2020-08-12 21:40:49 -04:00
parent e4919c3a09
commit 8c5836c95a
No known key found for this signature in database
GPG Key ID: 506F54899E2BFED7
11 changed files with 1239 additions and 34 deletions

View File

@ -0,0 +1,198 @@
<UniversalEditor Version="5.0">
<Editors>
<Editor ID="{2E873BD5-6F63-4ED8-9C33-C43A08919E29}" TypeName="UniversalEditor.Editors.Database.DatabaseEditor">
<Commands>
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Create_NewWindow" Title="New Query Editor _Window" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Create_File" Title="_File ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Create_Clipboard" Title="_Clipboard" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Create_Job" Title="Agent _Job ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Create" Title="_CREATE To">
<Items>
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Create_NewWindow" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Create_File" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Create_Clipboard" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Create_Job" />
</Items>
</Command>
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Alter_NewWindow" Title="New Query Editor _Window" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Alter_File" Title="_File ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Alter_Clipboard" Title="_Clipboard" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Alter_Job" Title="Agent _Job ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Alter" Title="_ALTER To">
<Items>
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Alter_NewWindow" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Alter_File" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Alter_Clipboard" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Alter_Job" />
</Items>
</Command>
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Drop_NewWindow" Title="New Query Editor _Window" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Drop_File" Title="_File ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Drop_Clipboard" Title="_Clipboard" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Drop_Job" Title="Agent _Job ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Drop" Title="D_ROP To">
<Items>
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Drop_NewWindow" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Drop_File" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Drop_Clipboard" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Drop_Job" />
</Items>
</Command>
<Command ID="DatabaseEditor_ContextMenu_Table_Script_DropCreate_NewWindow" Title="New Query Editor _Window" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_DropCreate_File" Title="_File ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_DropCreate_Clipboard" Title="_Clipboard" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_DropCreate_Job" Title="Agent _Job ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_DropCreate" Title="D_ROP And CREATE To">
<Items>
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_DropCreate_NewWindow" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_DropCreate_File" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_DropCreate_Clipboard" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_DropCreate_Job" />
</Items>
</Command>
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Select_NewWindow" Title="New Query Editor _Window" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Select_File" Title="_File ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Select_Clipboard" Title="_Clipboard" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Select_Job" Title="Agent _Job ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Select" Title="_SELECT To">
<Items>
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Select_NewWindow" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Select_File" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Select_Clipboard" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Select_Job" />
</Items>
</Command>
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Insert_NewWindow" Title="New Query Editor _Window" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Insert_File" Title="_File ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Insert_Clipboard" Title="_Clipboard" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Insert_Job" Title="Agent _Job ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Insert" Title="_INSERT To">
<Items>
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Insert_NewWindow" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Insert_File" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Insert_Clipboard" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Insert_Job" />
</Items>
</Command>
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Update_NewWindow" Title="New Query Editor _Window" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Update_File" Title="_File ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Update_Clipboard" Title="_Clipboard" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Update_Job" Title="Agent _Job ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Update" Title="_UPDATE To">
<Items>
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Update_NewWindow" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Update_File" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Update_Clipboard" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Update_Job" />
</Items>
</Command>
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Delete_NewWindow" Title="New Query Editor _Window" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Delete_File" Title="_File ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Delete_Clipboard" Title="_Clipboard" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Delete_Job" Title="Agent _Job ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Delete" Title="DE_LETE To">
<Items>
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Delete_NewWindow" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Delete_File" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Delete_Clipboard" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Delete_Job" />
</Items>
</Command>
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Execute_NewWindow" Title="New Query Editor _Window" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Execute_File" Title="_File ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Execute_Clipboard" Title="_Clipboard" />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Execute_Job" Title="Agent _Job ..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Script_Execute" Title="E_XECUTE To">
<Items>
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Execute_NewWindow" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Execute_File" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Execute_Clipboard" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Execute_Job" />
</Items>
</Command>
<Command ID="DatabaseEditor_ContextMenu_Table_Script" Title="_Script Table as">
<Items>
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Create" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Alter" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Drop" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_DropCreate" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Select" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Insert" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Update" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Delete" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script_Execute" />
</Items>
</Command>
<Command ID="DatabaseEditor_ContextMenu_Table_Encrypt" Title="E_ncrypt Columns..." />
<Command ID="DatabaseEditor_ContextMenu_Table_NewTable" Title="_New Table..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Import" Title="_Import Table..." />
<Command ID="DatabaseEditor_ContextMenu_Table_Design" Title="Desig_n" />
<Command ID="DatabaseEditor_ContextMenu_Table_Select" Title="_Select Top 1000 Rows" />
<Command ID="DatabaseEditor_ContextMenu_Table_Edit" Title="_Edit Top 200 Rows" />
<Command ID="DatabaseEditor_ContextMenu_Table_Rename" Title="Rena_me" />
<Command ID="DatabaseEditor_ContextMenu_Table_Delete" Title="_Delete" />
<Command ID="DatabaseEditor_ContextMenu_Table">
<Items>
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_NewTable" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Import" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Design" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Select" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Edit" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Script" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Encrypt" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Rename" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Table_Delete" />
</Items>
</Command>
<Command ID="DatabaseEditor_ContextMenu_Query_Snippet_Insert" Title="_Insert Snippet..." />
<Command ID="DatabaseEditor_ContextMenu_Query_Snippet_Surround" Title="_Surround With..." />
<Command ID="DatabaseEditor_ContextMenu_Query_Execute" Title="E_xecute" />
<Command ID="DatabaseEditor_ContextMenu_Query_Plan" Title="Display Estimated Execution Plan" />
<Command ID="DatabaseEditor_ContextMenu_Query_Trace" Title="Trace Query in Profiler" />
<Command ID="DatabaseEditor_ContextMenu_Query_Design" Title="_Design Query in Editor..." />
<Command ID="DatabaseEditor_ContextMenu_Query">
<Items>
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Query_Snippet_Insert" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Query_Snippet_Surround" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Query_Execute" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Query_Plan" />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Query_Trace" />
<Separator />
<CommandReference CommandID="DatabaseEditor_ContextMenu_Query_Design" />
</Items>
</Command>
</Commands>
</Editor>
</Editors>
</UniversalEditor>

View File

@ -0,0 +1,350 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.2 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkTreeStore" id="tsColumns">
<columns>
<!-- column-name colColumnName -->
<column type="gchararray"/>
<!-- column-name colColumnDataType -->
<column type="gchararray"/>
<!-- column-name colColumnNotNull -->
<column type="gchararray"/>
<!-- column-name colColumnIdentity -->
<column type="gchararray"/>
<!-- column-name colColumnDefaultValue -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkWindow">
<property name="can_focus">False</property>
<child type="titlebar">
<placeholder/>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">8</property>
<property name="margin_right">8</property>
<property name="margin_top">8</property>
<property name="margin_bottom">8</property>
<property name="row_spacing">8</property>
<property name="column_spacing">8</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Name</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Description </property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="txtName">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTextView" id="txtDescription">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">8</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkNotebook">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkToolbar" id="tbColumns">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkToolButton" id="tbColumnAdd">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Add</property>
<property name="label" translatable="yes">_Add</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-add</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="tbColumnEdit">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Edit</property>
<property name="label" translatable="yes">_Edit</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-edit</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="tbColumnRemove">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Remove</property>
<property name="label" translatable="yes">_Remove</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-remove</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkSeparatorToolItem">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="tbColumnMoveUp">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Move Up</property>
<property name="label" translatable="yes">Move _Up</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-go-up</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="tbColumnMoveDown">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Move Down</property>
<property name="label" translatable="yes">Move _Down</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-go-down</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView" id="tvColumns">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">tsColumns</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="tvcColumnName">
<property name="resizable">True</property>
<property name="title" translatable="yes">Name</property>
<property name="clickable">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">0</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="tvcColumnDataType">
<property name="resizable">True</property>
<property name="title" translatable="yes">Data type</property>
<property name="clickable">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">1</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="tvcColumnNotNull">
<property name="resizable">True</property>
<property name="title" translatable="yes">Not null</property>
<property name="clickable">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">2</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="tvcColumnIdentity">
<property name="resizable">True</property>
<property name="title" translatable="yes">Identity</property>
<property name="clickable">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">3</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="tvcColumnDefaultValue">
<property name="resizable">True</property>
<property name="title" translatable="yes">Default value</property>
<property name="clickable">True</property>
<property name="reorderable">True</property>
<property name="sort_column_id">4</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">4</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Columns</property>
</object>
<packing>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Constraints</property>
</object>
<packing>
<property name="position">1</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Indexes</property>
</object>
<packing>
<property name="position">2</property>
<property name="tab_fill">False</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>

View File

@ -723,7 +723,6 @@
<Content Include="Editors\RIFF\Dialogs\RIFFChunkPropertiesDialog.glade" />
<Content Include="Editors\Binary\Dialogs\FieldDefinitionPropertiesDialog.glade" />
<Content Include="Editors\Binary\BinaryEditor.glade" />
<Content Include="Editors\Database\DatabaseEditor.glade" />
<Content Include="Editors\Multimedia\Synthesized\Dialogs\NotePropertiesDialog.glade" />
<Content Include="Extensions\AudioWorkstation\Extensions\Vocaloid\Associations\Voicebank\Vocaloid.uexml" />
<Content Include="Extensions\AudioWorkstation\Extensions\Vocaloid\Associations\SynthesizedAudio\VSQ.uexml" />
@ -750,6 +749,9 @@
<Content Include="Extensions\Microsoft\Associations\OLE1.uexml" />
<Content Include="Extensions\FileSystem\Associations\Microsoft\NTFS.uexml" />
<Content Include="Editors\Setup\BootstrapScript\BootstrapScriptEditor.glade" />
<Content Include="Editors\Database\Commands.uexml" />
<Content Include="Editors\Database\Views\ScriptView.glade" />
<Content Include="Editors\Database\Views\DesignView.glade" />
</ItemGroup>
<ItemGroup>
<Content Include="Configuration\Application.upl" />
@ -818,6 +820,7 @@
<Folder Include="Extensions\Office\Associations\Presentation\" />
<Folder Include="Editors\Setup\" />
<Folder Include="Editors\Setup\BootstrapScript\" />
<Folder Include="Editors\Database\Views\" />
</ItemGroup>
<ItemGroup>
<Content Include="Extensions\SoftwareDeveloper\Templates\Project\Software Development\Arduino\Images\Blink.xcf" />

View File

@ -24,7 +24,8 @@ using System.Collections.Generic;
using MBS.Framework.UserInterface;
using MBS.Framework.UserInterface.Controls;
using MBS.Framework.UserInterface.Dialogs;
using MBS.Framework.UserInterface.Layouts;
using UniversalEditor.ObjectModels.Database;
using UniversalEditor.UserInterface;
@ -33,23 +34,61 @@ namespace UniversalEditor.Editors.Database
/// <summary>
/// Provides a UWT-based <see cref="Editor" /> for manipulating database files.
/// </summary>
[ContainerLayout("~/Editors/Database/DatabaseEditor.glade")]
public class DatabaseEditor : Editor
{
private SyntaxTextBox txtQuery;
private ListView lvResults;
private static EditorReference _er = null;
public override EditorReference MakeReference()
{
if (_er == null)
{
_er = base.MakeReference();
_er.Views.Add("Design");
_er.Views.Add("Script");
_er.SupportedObjectModels.Add(typeof(DatabaseObjectModel));
}
return _er;
}
public DatabaseEditor()
{
Layout = new BoxLayout(Orientation.Vertical);
DesignView = new Views.DesignView();
Controls.Add(DesignView, new BoxLayout.Constraints(true, true));
ScriptView = new Views.ScriptView();
Controls.Add(ScriptView, new BoxLayout.Constraints(true, true));
DesignView.Editor = this;
ScriptView.Editor = this;
ScriptView.Visible = false;
}
protected override void OnViewChanged(EditorViewChangedEventArgs e)
{
base.OnViewChanged(e);
switch (e.NewView.Title)
{
case "Design":
{
DesignView.Visible = true;
ScriptView.Visible = false;
break;
}
case "Script":
{
DesignView.Visible = false;
ScriptView.Visible = true;
break;
}
}
}
private Views.DesignView DesignView = null;
private Views.ScriptView ScriptView = null;
public override void UpdateSelections()
{
throw new NotImplementedException();
@ -60,10 +99,14 @@ namespace UniversalEditor.Editors.Database
throw new NotImplementedException();
}
protected override void OnCreated(EventArgs e)
private string ToString(object value)
{
base.OnCreated(e);
OnObjectModelChanged(EventArgs.Empty);
if (value == null) return "NULL";
if (value is string)
{
return String.Format("'{0}'", value);
}
return value.ToString();
}
protected override void OnObjectModelChanged(EventArgs e)
@ -72,9 +115,12 @@ namespace UniversalEditor.Editors.Database
if (!IsCreated) return;
// eww
DesignView.ObjectModel = ObjectModel;
ScriptView.ObjectModel = ObjectModel;
DatabaseObjectModel db = (ObjectModel as DatabaseObjectModel);
if (db == null)
return;
if (db == null) return;
EditorDocumentExplorerNode nodeTables = new EditorDocumentExplorerNode("Tables");
@ -86,7 +132,7 @@ namespace UniversalEditor.Editors.Database
EditorDocumentExplorerNode nodeColumns = new EditorDocumentExplorerNode("Columns");
foreach (DatabaseField field in table.Fields)
{
EditorDocumentExplorerNode nodeColumn = new EditorDocumentExplorerNode(String.Format("{0} ({1}, default {2})", field.Name, field.Value == null ? (field.DataType != null ? field.DataType.Name : String.Empty) : field.Value.GetType().Name, field.Value == null ? "NULL" : field.Value.ToString()));
EditorDocumentExplorerNode nodeColumn = new EditorDocumentExplorerNode(String.Format("{0} ({1}, default {2})", field.Name, field.Value == null ? (field.DataType != null ? field.DataType.Name : String.Empty) : field.Value.GetType().Name, ToString(field.Value)));
nodeColumn.SetExtraData<DatabaseField>("column", field);
nodeColumns.Nodes.Add(nodeColumn);
@ -97,31 +143,87 @@ namespace UniversalEditor.Editors.Database
}
DocumentExplorer.Nodes.Add(nodeTables);
}
if (db.Tables.Count > 0)
protected internal override void OnDocumentExplorerSelectionChanged(EditorDocumentExplorerSelectionChangedEventArgs e)
{
base.OnDocumentExplorerSelectionChanged(e);
if (e.Node == null) return;
DatabaseTable table = e.Node.GetExtraData<DatabaseTable>("table");
if (table != null)
{
List<Type> list = new List<Type>();
for (int i = 0; i < db.Tables[0].Fields.Count; i++)
{
list.Add(db.Tables[0].Fields[i].DataType == null ? typeof(string) : db.Tables[0].Fields[i].DataType);
}
DefaultTreeModel tmResults = new DefaultTreeModel(list.ToArray());
for (int i = 0; i < db.Tables[0].Fields.Count; i++)
{
lvResults.Columns.Add(new ListViewColumnText(tmResults.Columns[i], db.Tables[0].Fields[i].Name));
}
foreach (DatabaseRecord rec in db.Tables[0].Records)
{
TreeModelRow row = new TreeModelRow();
for (int c = 0; c < rec.Fields.Count; c++)
{
row.RowColumns.Add(new TreeModelRowColumn(tmResults.Columns[c], rec.Fields[c].Value == null ? "NULL" : rec.Fields[c].Value));
}
tmResults.Rows.Add(row);
}
lvResults.Model = tmResults;
this.txtQuery.Text = "SELECT * FROM '" + db.Tables[0].Name + "'";
DesignView.Table = table;
}
}
protected override void OnCreated(EventArgs e)
{
base.OnCreated(e);
DocumentExplorer.BeforeContextMenu += DocumentExplorer_BeforeContextMenu;
OnObjectModelChanged(EventArgs.Empty);
Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_NewTable", delegate (object sender, EventArgs ee)
{
DatabaseObjectModel db = (ObjectModel as DatabaseObjectModel);
if (db != null)
{
int newTableCount = 0;
for (int i = 0; i < db.Tables.Count; i++)
{
if (db.Tables[i].Name.StartsWith("New Table ") && Int32.TryParse(db.Tables[i].Name.Substring("New Table ".Length), out int dummy))
{
newTableCount++;
}
}
newTableCount++;
BeginEdit();
DatabaseTable dt = new DatabaseTable();
dt.Name = "New Table " + newTableCount.ToString();
db.Tables.Add(dt);
EndEdit();
EditorDocumentExplorerNode node = new EditorDocumentExplorerNode(dt.Name);
node.SetExtraData<DatabaseTable>("table", dt);
DocumentExplorer.Nodes[0].Nodes.Add(node);
}
});
Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Design", delegate (object sender, EventArgs ee)
{
ScriptView.Visible = false;
DesignView.Visible = true;
});
Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Select", delegate (object sender, EventArgs ee)
{
DesignView.Visible = false;
ScriptView.Visible = true;
});
Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Edit", delegate (object sender, EventArgs ee)
{
});
Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Encrypt", delegate (object sender, EventArgs ee)
{
});
Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Rename", delegate (object sender, EventArgs ee)
{
});
Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Delete", delegate (object sender, EventArgs ee)
{
});
}
void DocumentExplorer_BeforeContextMenu(object sender, EditorDocumentExplorerBeforeContextMenuEventArgs e)
{
e.ContextMenuCommandID = "DatabaseEditor_ContextMenu_Table";
}
}
}

View File

@ -0,0 +1,38 @@
//
// ScriptTableMode.cs
//
// Author:
// Michael Becker <alcexhim@gmail.com>
//
// Copyright (c) 2020 Mike Becker's Software
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using System;
namespace UniversalEditor.Editors.Database
{
public enum ScriptTableMode
{
Create,
Alter,
Drop,
DropCreate,
Select,
Insert,
Update,
Delete,
Execute
}
}

View File

@ -0,0 +1,31 @@
//
// ScriptTableTo.cs
//
// Author:
// Michael Becker <alcexhim@gmail.com>
//
// Copyright (c) 2020 Mike Becker's Software
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using System;
namespace UniversalEditor.Editors.Database
{
public enum ScriptTableTo
{
Window,
File,
Clipboard,
Job
}
}

View File

@ -0,0 +1,89 @@
//
// DesignView.cs
//
// Author:
// Michael Becker <alcexhim@gmail.com>
//
// Copyright (c) 2020 Mike Becker's Software
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using System;
using MBS.Framework.UserInterface;
using MBS.Framework.UserInterface.Controls;
using UniversalEditor.ObjectModels.Database;
using UniversalEditor.UserInterface;
namespace UniversalEditor.Editors.Database.Views
{
[ContainerLayout("~/Editors/Database/Views/DesignView.glade")]
public class DesignView : View
{
private TextBox txtName;
private TextBox txtDescription;
private Toolbar tbColumns;
private ListView tvColumns;
private DatabaseTable _Table = null;
public DatabaseTable Table { get { return _Table; } set { _Table = value; Update(); } }
private bool _InhibitEditing = false;
[EventHandler(nameof(txtName), "Changed")]
private void txtName_Changed(object sender, EventArgs e)
{
if (_InhibitEditing) return;
if (Table == null) return;
Editor.BeginEdit();
Table.Name = txtName.Text;
Editor.EndEdit();
}
protected override void OnObjectModelChanged(EventArgs e)
{
base.OnObjectModelChanged(e);
DatabaseObjectModel db = (ObjectModel as DatabaseObjectModel);
if (db == null) return;
Update();
}
private void Update()
{
if (Table != null)
{
_InhibitEditing = true;
txtName.Text = Table.Name;
_InhibitEditing = false;
tvColumns.Model.Rows.Clear();
for (int i = 0; i < Table.Fields.Count; i++)
{
TreeModelRow row = new TreeModelRow(new TreeModelRowColumn[]
{
new TreeModelRowColumn(tvColumns.Model.Columns[0], Table.Fields[i].Name),
new TreeModelRowColumn(tvColumns.Model.Columns[1], Table.Fields[i].DataType),
new TreeModelRowColumn(tvColumns.Model.Columns[2], Table.Fields[i].Value == null ? "NULL" : "NOT NULL"),
new TreeModelRowColumn(tvColumns.Model.Columns[3], String.Empty),
new TreeModelRowColumn(tvColumns.Model.Columns[4], Table.Fields[i].Value)
});
tvColumns.Model.Rows.Add(row);
}
}
}
}
}

View File

@ -0,0 +1,370 @@
//
// ScriptView.cs
//
// Author:
// Michael Becker <alcexhim@gmail.com>
//
// Copyright (c) 2020 Mike Becker's Software
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Collections.Generic;
using MBS.Framework.UserInterface;
using MBS.Framework.UserInterface.Controls;
using MBS.Framework.UserInterface.Dialogs;
using UniversalEditor.ObjectModels.Database;
using UniversalEditor.UserInterface;
namespace UniversalEditor.Editors.Database.Views
{
[ContainerLayout("~/Editors/Database/Views/ScriptView.glade")]
public class ScriptView : View
{
private SyntaxTextBox txtQuery;
private ListView lvResults;
private string ScriptTable(DatabaseTable dt, ScriptTableMode mode)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
switch (mode)
{
case ScriptTableMode.Create:
{
sb.Append("CREATE");
break;
}
case ScriptTableMode.Delete:
{
sb.Append("DELETE ");
break;
}
case ScriptTableMode.Alter:
{
sb.Append("ALTER");
break;
}
case ScriptTableMode.Drop:
{
sb.Append("DROP");
break;
}
case ScriptTableMode.DropCreate:
{
sb.Append("DROP");
break;
}
case ScriptTableMode.Select:
{
sb.Append("SELECT");
break;
}
case ScriptTableMode.Insert:
{
sb.Append("INSERT INTO");
break;
}
}
switch (mode)
{
case ScriptTableMode.Create:
case ScriptTableMode.Alter:
case ScriptTableMode.Drop:
case ScriptTableMode.DropCreate:
{
sb.Append(" TABLE [");
sb.Append(dt.Name);
sb.Append("]");
break;
}
case ScriptTableMode.Select:
case ScriptTableMode.Delete:
{
if (mode == ScriptTableMode.Select)
{
sb.Append("* ");
}
sb.Append("FROM '");
sb.Append(dt.Name);
sb.Append("'");
break;
}
case ScriptTableMode.Insert:
{
sb.Append(' ');
sb.Append(dt.Name);
sb.Append(" (");
for (int i = 0; i < dt.Fields.Count; i++)
{
sb.Append(dt.Fields[i].Name);
if (i < dt.Fields.Count - 1)
{
sb.Append(", ");
}
}
sb.Append(") VALUES (");
for (int i = 0; i < dt.Fields.Count; i++)
{
if (dt.Fields[i].Value == null)
{
sb.Append("NULL");
}
else
{
if (dt.Fields[i].Value is string)
{
sb.Append("'");
}
sb.Append(dt.Fields[i].Value);
if (dt.Fields[i].Value is string)
{
sb.Append("'");
}
}
if (i < dt.Fields.Count - 1)
{
sb.Append(", ");
}
}
sb.Append(')');
break;
}
}
switch (mode)
{
case ScriptTableMode.Create:
{
sb.Append("\n(\n");
for (int i = 0; i < dt.Fields.Count; i++)
{
sb.Append('\t');
sb.Append('[');
sb.Append(dt.Fields[i].Name);
sb.Append(']');
sb.Append(' ');
sb.Append('[');
sb.Append(TypeToSQL(dt.Fields[i].DataType));
sb.Append(']');
sb.Append(' ');
sb.Append("DEFAULT ");
if (dt.Fields[i].Value != null)
{
if (dt.Fields[i].Value is string) sb.Append('\'');
sb.Append(dt.Fields[i].Value.ToString());
if (dt.Fields[i].Value is string) sb.Append('\'');
}
else
{
sb.Append("NULL");
}
if (i < dt.Fields.Count - 1)
sb.AppendLine(", ");
}
sb.Append("\n)");
break;
}
}
sb.Append(';');
return sb.ToString();
}
private void ScriptTable(DatabaseTable dt, ScriptTableMode mode, ScriptTableTo where)
{
string tableText = ScriptTable(dt, mode);
if (mode == ScriptTableMode.DropCreate)
{
tableText = ScriptTable(dt, ScriptTableMode.Drop) + "\r\n\r\n" + ScriptTable(dt, ScriptTableMode.Create);
}
switch (where)
{
case ScriptTableTo.Window:
{
ObjectModels.Text.Plain.PlainTextObjectModel text = new ObjectModels.Text.Plain.PlainTextObjectModel();
text.Text = tableText;
Document d = new Document(text, new DataFormats.Text.Plain.PlainTextDataFormat(), null);
d.IsSaved = false;
d.IsChanged = true;
d.Title = "New Query";
HostApplication.CurrentWindow.OpenFile(new Document[]
{
d
});
break;
}
case ScriptTableTo.File:
{
FileDialog dlg = new FileDialog();
dlg.Mode = FileDialogMode.Save;
dlg.FileNameFilters.Add("SQL script", "*.sql");
dlg.Text = "Script Table to File";
if (dlg.ShowDialog() == DialogResult.OK)
{
System.IO.File.WriteAllText(dlg.SelectedFileName, tableText);
}
break;
}
case ScriptTableTo.Clipboard:
{
Clipboard.Default.SetText(tableText);
break;
}
case ScriptTableTo.Job:
{
Clipboard.Default.SetText(tableText);
break;
}
}
}
private void DatabaseEditor_ContextMenu_Table_Script(object sender, EventArgs ee)
{
CommandEventArgs cea = (ee as CommandEventArgs);
string wpcmdid = cea.Command.ID.Substring("DatabaseEditor_ContextMenu_Table_Script_".Length);
string wpcmd_type = wpcmdid.Substring(0, wpcmdid.IndexOf('_'));
string wpcmd_dest = wpcmdid.Substring(wpcmdid.IndexOf('_') + 1);
ScriptTableMode mode = ScriptTableMode.Create;
ScriptTableTo dest = ScriptTableTo.Window;
switch (wpcmd_type.ToLower())
{
case "alter": mode = ScriptTableMode.Alter; break;
case "create": mode = ScriptTableMode.Create; break;
case "delete": mode = ScriptTableMode.Delete; break;
case "drop": mode = ScriptTableMode.Drop; break;
case "dropcreate": mode = ScriptTableMode.DropCreate; break;
case "execute": mode = ScriptTableMode.Execute; break;
case "insert": mode = ScriptTableMode.Insert; break;
case "select": mode = ScriptTableMode.Select; break;
case "update": mode = ScriptTableMode.Update; break;
}
switch (wpcmd_dest.ToLower())
{
case "newwindow": dest = ScriptTableTo.Window; break;
case "clipboard": dest = ScriptTableTo.Clipboard; break;
case "file": dest = ScriptTableTo.File; break;
case "job": dest = ScriptTableTo.Job; break;
}
DatabaseTable dt = Editor.DocumentExplorer.SelectedNode?.GetExtraData<DatabaseTable>("table");
if (dt != null)
{
ScriptTable(dt, mode, dest);
}
}
protected override void OnCreated(EventArgs e)
{
base.OnCreated(e);
txtQuery.ContextMenuCommandID = "DatabaseEditor_ContextMenu_Query";
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Create_NewWindow", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Create_File", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Create_Clipboard", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Create_Job", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Alter_NewWindow", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Alter_File", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Alter_Clipboard", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Alter_Job", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Drop_NewWindow", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Drop_File", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Drop_Clipboard", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Drop_Job", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_DropCreate_NewWindow", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_DropCreate_File", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_DropCreate_Clipboard", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_DropCreate_Job", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Select_NewWindow", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Select_File", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Select_Clipboard", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Select_Job", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Insert_NewWindow", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Insert_File", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Insert_Clipboard", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Insert_Job", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Update_NewWindow", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Update_File", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Update_Clipboard", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Update_Job", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Delete_NewWindow", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Delete_File", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Delete_Clipboard", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Delete_Job", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Execute_NewWindow", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Execute_File", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Execute_Clipboard", DatabaseEditor_ContextMenu_Table_Script);
Editor.Context.AttachCommandEventHandler("DatabaseEditor_ContextMenu_Table_Script_Execute_Job", DatabaseEditor_ContextMenu_Table_Script);
OnObjectModelChanged(EventArgs.Empty);
}
private static string TypeToSQL(Type dataType)
{
if (dataType == typeof(string))
{
return "TEXT";
}
else if (dataType == typeof(short))
{
return "SMALLINT";
}
else if (dataType == typeof(int))
{
return "INT";
}
return "ANY";
}
protected override void OnObjectModelChanged(EventArgs e)
{
DatabaseObjectModel db = (ObjectModel as DatabaseObjectModel);
if (db == null)
return;
if (db.Tables.Count > 0)
{
List<Type> list = new List<Type>();
for (int i = 0; i < db.Tables[0].Fields.Count; i++)
{
list.Add(db.Tables[0].Fields[i].DataType == null ? typeof(string) : db.Tables[0].Fields[i].DataType);
}
DefaultTreeModel tmResults = new DefaultTreeModel(list.ToArray());
for (int i = 0; i < db.Tables[0].Fields.Count; i++)
{
lvResults.Columns.Add(new ListViewColumnText(tmResults.Columns[i], db.Tables[0].Fields[i].Name));
}
foreach (DatabaseRecord rec in db.Tables[0].Records)
{
TreeModelRow row = new TreeModelRow();
for (int c = 0; c < rec.Fields.Count; c++)
{
row.RowColumns.Add(new TreeModelRowColumn(tmResults.Columns[c], rec.Fields[c].Value == null ? "NULL" : rec.Fields[c].Value));
}
tmResults.Rows.Add(row);
}
lvResults.Model = tmResults;
this.txtQuery.Text = "SELECT * FROM '" + db.Tables[0].Name + "'";
}
}
}
}

View File

@ -133,6 +133,10 @@
<Compile Include="EditorDocumentExplorerSelectionChangedEvent.cs" />
<Compile Include="Editors\Markup\MarkupEditor.cs" />
<Compile Include="EditorDocumentExplorerBeforeContextMenuEvent.cs" />
<Compile Include="Editors\Database\ScriptTableTo.cs" />
<Compile Include="Editors\Database\ScriptTableMode.cs" />
<Compile Include="Editors\Database\Views\ScriptView.cs" />
<Compile Include="Editors\Database\Views\DesignView.cs" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
@ -188,6 +192,7 @@
<Folder Include="Editors\RIFF\" />
<Folder Include="Editors\RIFF\Dialogs\" />
<Folder Include="Editors\Markup\" />
<Folder Include="Editors\Database\Views\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View File

@ -25,5 +25,24 @@ namespace UniversalEditor.UserInterface
{
public abstract class View : Container
{
public Editor Editor { get; set; }
private ObjectModel _ObjectModel = null;
public ObjectModel ObjectModel
{
get { return _ObjectModel; }
set
{
if (_ObjectModel == value) return;
_ObjectModel = value;
OnObjectModelChanged(EventArgs.Empty);
}
}
protected virtual void OnObjectModelChanged(EventArgs e)
{
}
}
}