improvements and additional features to Database editor
This commit is contained in:
parent
e4919c3a09
commit
8c5836c95a
@ -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>
|
||||
@ -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>
|
||||
@ -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" />
|
||||
|
||||
@ -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";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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 + "'";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -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.
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user