📄 editortable.pas
字号:
unit EditorTable;
//----------------------------------------------------------------------------------------------------------------------
//
// This file is part of fabFORCE DBDesigner4.
// Copyright (C) 2002 Michael G. Zinner, www.fabFORCE.net
//
// DBDesigner4 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 2 of the License, or
// (at your option) any later version.
//
// DBDesigner4 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 DBDesigner4; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
//----------------------------------------------------------------------------------------------------------------------
//
// Unit EditorString.pas
// ---------------------
// Version 1.2, 21.03.2003, Mike
// Description
// Editor for the tables
//
// Changes:
// Version 1.2, 21.03.2003, Mike
// Get only one GlobalID for the index in NewIndexBtnClick
// Version 1.1, 20.03.2003, Mike
// added popupmenu to IndexColumns to change length parameter
// and EditIndexColumnLengthMIClick procedure
// Version 1.0, 13.03.2003, Mike
// initial version
//
//----------------------------------------------------------------------------------------------------------------------
interface
uses
SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,
QStdCtrls, QImgList, QComCtrls, QGrids, Qt, EERModel, QExtCtrls,
QCheckLst, QButtons, Math, QMenus, QTypes, StrUtils, QClipbrd,
EditorTableFieldDatatypeInplace, QMask;
type
TEditorTableForm = class(TForm)
DatatypesImgList: TImageList;
ColPopupMenu: TPopupMenu;
DeleteColumnMI: TMenuItem;
OptionsPnl: TPanel;
TablePageControl: TPageControl;
IndexSheet: TTabSheet;
NewIndexBtn: TSpeedButton;
DelIndexBtn: TSpeedButton;
IndexGroupbox: TGroupBox;
DeleteColFromIndexBtn: TSpeedButton;
IndexTypeCBox: TComboBox;
Label11: TLabel;
IndexNameEd: TEdit;
IndexColListBox: TListBox;
IndexListBox: TListBox;
StdInsertsSheet: TTabSheet;
StdInsertMemo: TMemo;
TblOptionsSheet: TTabSheet;
Label4: TLabel;
NextAutoIncEd: TEdit;
Label5: TLabel;
TblPasswordEd: TEdit;
PackKeysCBox: TCheckBox;
GroupBox1: TGroupBox;
Label7: TLabel;
AverageRowLengthEd: TEdit;
RowChecksumCBox: TCheckBox;
Label9: TLabel;
MaxRowNumberEd: TEdit;
Label8: TLabel;
MinRowNumberEd: TEdit;
RowFormatLU: TComboBox;
Label14: TLabel;
DelayKeyTblUpdatesCBox: TCheckBox;
Label16: TLabel;
TabSheet1: TTabSheet;
RaidPnl: TGroupBox;
RaidTypeLU: TComboBox;
ChunksEd: TEdit;
ChunkSizeEd: TEdit;
ChunksLbl: TLabel;
ChunksizeLbl: TLabel;
UseRaidCBox: TCheckBox;
Label15: TLabel;
Label18: TLabel;
Label6: TLabel;
TblDataDirEd: TEdit;
Label10: TLabel;
TblIndexDirEd: TEdit;
StdInsertsPopupMenu: TPopupMenu;
PasteSQLInsertMI: TMenuItem;
TopPnl: TPanel;
Label1: TLabel;
TableNameEd: TEdit;
MidPnl: TPanel;
MidLeftPnl: TPanel;
Panel5: TPanel;
ColumnGrid: TDrawGrid;
MouseEditTmr: TTimer;
CommentsSheet: TTabSheet;
CommentsMemo: TMemo;
TemporaryCBox: TCheckBox;
IndexColumnsPopupMenu: TPopupMenu;
EditIndexColumnLengthMI: TMenuItem;
N1: TMenuItem;
DeleteColumnFromIndexMI: TMenuItem;
BottomPnl: TPanel;
PageControlTreeView: TTreeView;
PageControlTitlePnl: TPanel;
PageControlTitleLbl: TLabel;
IndexColumnsLbl: TLabel;
IndexDragHintLbl: TLabel;
BottomRightPnl: TPanel;
SubmitBtn: TSpeedButton;
AbortBtn: TSpeedButton;
N2: TMenuItem;
ClearAllSQLInsertsMI: TMenuItem;
TopRightPnl: TPanel;
Label3: TLabel;
TableTypeCBox: TComboBox;
Label17: TLabel;
TablePrefixComboBox: TComboBox;
nmTableCBox: TCheckBox;
Label19: TLabel;
OptionSplitter: TSplitter;
PageControlTitleShape: TShape;
N3: TMenuItem;
AddColPrefixMI: TMenuItem;
AddColPostfixMI: TMenuItem;
N4: TMenuItem;
AddColumnstoSelectedIndexMI: TMenuItem;
MoveRowupMI: TMenuItem;
MoveRowdownMI: TMenuItem;
N5: TMenuItem;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ApplyChanges;
procedure FormCreate(Sender: TObject);
procedure ColumnGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure ColumnGridDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure ColumnGridSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure ColumnGridDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure ColumnGridKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ColumnGridMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SetTable(theTable: TEERTable);
procedure TableNameEdKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure TableNameEdExit(Sender: TObject);
procedure TablePageCBoxCloseUp(Sender: TObject);
procedure ColumnGridMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure DeleteColumnMIClick(Sender: TObject);
procedure NewIndexBtnClick(Sender: TObject);
procedure CheckPrimaryIndex;
procedure ShowIndex(index_id: integer);
procedure IndexColListBoxDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
procedure IndexColListBoxDragDrop(Sender, Source: TObject; X,
Y: Integer);
procedure DeleteColFromIndexBtnClick(Sender: TObject);
procedure RefreshCurrentIndex;
procedure IndexListBoxClick(Sender: TObject);
procedure IndexListBoxDblClick(Sender: TObject);
procedure IndexTypeCBoxCloseUp(Sender: TObject);
procedure IndexColListBoxMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure DelIndexBtnClick(Sender: TObject);
procedure EditDatatype;
procedure EditCellStr(NewName: string = '');
procedure ColumnGridDblClick(Sender: TObject);
procedure PasteSQLInsertMIClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure MouseEditTmrTimer(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormDeactivate(Sender: TObject);
procedure EditIndexColumnLengthMIClick(Sender: TObject);
procedure SubmitBtnClick(Sender: TObject);
procedure AbortBtnClick(Sender: TObject);
procedure SubmitBtnMouseEnter(Sender: TObject);
procedure SubmitBtnMouseLeave(Sender: TObject);
procedure PageControlTreeViewChange(Sender: TObject; Node: TTreeNode);
procedure FormResize(Sender: TObject);
procedure ClearAllSQLInsertsMIClick(Sender: TObject);
procedure OptionSplitterMoved(Sender: TObject);
procedure OptionSplitterCanResize(Sender: TObject;
var NewSize: Integer; var Accept: Boolean);
procedure GetTranslations;
procedure AddColPrefixMIClick(Sender: TObject);
procedure AddColumnstoSelectedIndexMIClick(Sender: TObject);
procedure InsertColumn;
procedure MoveRowupMIClick(Sender: TObject);
procedure MoveRowdownMIClick(Sender: TObject);
private
{ Private declarations }
DiscardChanges: Boolean;
DragStartRow: integer;
LastClickedCol: integer;
//DragShiftState: TShiftState;
UndoXML: string;
ColumnGridColumnCaptions: TStringList;
public
{ Public declarations }
EERModel: TEERModel;
EERTable, SourceEERTable: TEERTable;
EditorTableFieldEdit: TEdit;
EditorTableFieldDatatypeInplaceEditor: TEditorTableFieldDatatypeInplaceEditor;
DoCellEdit: Boolean;
end;
var
EditorTableForm: TEditorTableForm;
implementation
uses MainDM, EERDM, GUIDM, EditorTableField;
{$R *.xfm}
procedure TEditorTableForm.FormCreate(Sender: TObject);
begin
DMMain.InitForm(self, True);
DiscardChanges:=False;
EERModel:=nil;
EERTable:=nil;
SourceEERTable:=nil;
EditorTableFieldEdit:=TEditorTableFieldEdit.Create(self);
EditorTableFieldDatatypeInplaceEditor:=TEditorTableFieldDatatypeInplaceEditor.Create(self);
{EditorTableFieldEdit.Parent:=self;
EditorTableFieldEdit.Visible:=False;}
{Left:=(Screen.Width-Width) div 2-40;
Top:=(Screen.Height-Height) div 2;}
//DMMain.RestoreWinPos(self, True);
ColumnGrid.Font.Name:=Font.Name;
ColumnGrid.Font.Size:=Font.Size;
ColumnGrid.Canvas.Font.Name:=Font.Name;
ColumnGrid.Canvas.Font.Size:=Font.Size;
ColumnGrid.ColCount:=9;
//Column Icon
ColumnGrid.ColWidths[0]:=20;
//Column Name
ColumnGrid.ColWidths[1]:=104;
//Datatype Icon
ColumnGrid.ColWidths[2]:=20;
//Datatype
ColumnGrid.ColWidths[3]:=115;
//Not Null
ColumnGrid.ColWidths[4]:=20;
//Auto Inc
ColumnGrid.ColWidths[5]:=20;
//Options
ColumnGrid.ColWidths[6]:=160;
//Default Val
ColumnGrid.ColWidths[7]:=80;
//Comments
ColumnGrid.ColWidths[8]:=100;
ColumnGrid.Col:=1;
ColumnGrid.Row:=1;
ColumnGrid.RowCount:=2;
PageControlTreeView.FullExpand;
TablePageControl.ActivePageIndex:=0;
IndexListBox.Clear;
DoCellEdit:=False;
IndexDragHintLbl.Font.Color:=clGray;
PageControlTitleLbl.Font.Style:=[fsBold];
ColumnGridColumnCaptions:=TStringList.Create;
//Get translated strings
GetTranslations;
StdInsertMemo.Font.Name:=DMGUI.SQLTextFont;
StdInsertMemo.Font.Size:=DMGUI.SQLTextFontSize;
OptionsPnl.Height:=DMEER.TableSplitterPos;
OptionSplitterMoved(self);
BottomPnl.Top:=1000;
end;
procedure TEditorTableForm.FormDestroy(Sender: TObject);
begin
DMMain.SaveWinPos(self, True);
if(Assigned(EERTable))then
EERTable.Free;
ColumnGridColumnCaptions.Free;
end;
procedure TEditorTableForm.GetTranslations;
var theStrings: TStringList;
i: integer;
begin
//Translate ColumnGridColumn Captions
ColumnGridColumnCaptions.Clear;
DMMain.GetFormResourceStrings(self, 'ColumnGrid', ColumnGridColumnCaptions);
if(ColumnGridColumnCaptions.Count=0)then
begin
ColumnGridColumnCaptions.Add('Column Name');
ColumnGridColumnCaptions.Add('DataType');
ColumnGridColumnCaptions.Add('NN');
ColumnGridColumnCaptions.Add('AI');
ColumnGridColumnCaptions.Add('Flags');
ColumnGridColumnCaptions.Add('Default Value');
ColumnGridColumnCaptions.Add('Comments');
end;
theStrings:=TStringList.Create;
try
//-------------------------------------
//Translate PageControlTreeView Items
DMMain.GetFormResourceStrings(self, 'PageControlTreeView', theStrings);
for i:=0 to PageControlTreeView.Items.Count-1 do
if(i<theStrings.Count)then
PageControlTreeView.Items[i].Text:=theStrings[i];
//-------------------------------------
//Translate TableTypeCBox Items
DMMain.GetFormResourceStrings(self, 'TableTypeCBox', theStrings);
for i:=0 to TableTypeCBox.Items.Count-1 do
if(i<theStrings.Count)then
TableTypeCBox.Items[i]:=theStrings[i];
finally
theStrings.Free;
end;
//Translate PageControlTreeView Items
PageControlTreeView.Items[0].Text:=DMMain.GetTranslatedMessage('Indices', 257);
PageControlTreeView.Items[1].Text:=DMMain.GetTranslatedMessage('Table Options', 258);
PageControlTreeView.Items[2].Text:=DMMain.GetTranslatedMessage('Advanced', 259);
PageControlTreeView.Items[3].Text:=DMMain.GetTranslatedMessage('Standard Inserts', 260);
PageControlTreeView.Items[4].Text:=DMMain.GetTranslatedMessage('Comments', 261);
end;
procedure TEditorTableForm.SetTable(theTable: TEERTable);
var i: integer;
begin
SourceEERTable:=theTable;
EERModel:=theTable.ParentEERModel;
if(Assigned(EERTable))then
EERTable.Free;
EERTable:=TEERTable.Create(self, SourceEERTable.ObjName,
EERModel.DefModelFont, EERModel.DefaultTableType,
EERModel.DefaultTablePrefix, nil);
//copy to temporary EERTable
EERTable.Assign(SourceEERTable);
//EERTable.Parent:=EERModel;
EditorTableForm.TableNameEd.Text:=EERTable.ObjName;
TablePrefixComboBox.Items.Assign(EERModel.TablePrefix);
TablePrefixComboBox.ItemIndex:=EERModel.DefaultTablePrefix;
PageControlTreeView.Selected:=PageControlTreeView.Items[EERModel.LastTableEditorPage];
TablePageControl.ActivePageIndex:=EERModel.LastTableEditorPage;
ColumnGrid.RowCount:=EERTable.Columns.Count+2;
if(EERTable.Columns.Count=0)then
TableNameEd.SelectAll;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -