📄 palettedatatypes.pas
字号:
unit PaletteDatatypes;
//----------------------------------------------------------------------------------------------------------------------
//
// 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 PaletteDatatypes.pas
// -------------------------
// Version 1.0, 13.03.2003, Mike
// Description
// Contains the datatype palette form class
//
// Changes:
// Version 1.0, 13.03.2003, Mike
// initial version
//
//----------------------------------------------------------------------------------------------------------------------
interface
uses
SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,
QStdCtrls, QExtCtrls, QComCtrls, QImgList, EERModel, StrUtils, QButtons,
QMenus, QTypes, Qt, EERDM;
type
TPaletteDataTypesForm = class(TForm)
DatatypesImgList: TImageList;
DatatypesPopupMenu: TPopupMenu;
AddDatatypetoCommonMI: TMenuItem;
DeleteDatatypeMI: TMenuItem;
EditDatatypeMI: TMenuItem;
N1: TMenuItem;
AddnewDatatype1: TMenuItem;
N2: TMenuItem;
DelDatatypefromCommonDatatypesMI: TMenuItem;
N3: TMenuItem;
ReinitialMI: TMenuItem;
ReplaceDatatypeMI: TMenuItem;
MainPnl: TPanel;
PageControl: TPageControl;
CommonDatatypesSheet: TTabSheet;
CommonDataTypesListView: TListView;
AllDataTypesSheet: TTabSheet;
Shape1: TShape;
AllDataTypesTV: TTreeView;
TabsPnl: TPanel;
Tabs2Img: TImage;
TabsImg: TImage;
OptionsImg: TImage;
CommonDatatypesPBox: TPaintBox;
AllDatatypesPBox: TPaintBox;
procedure FormResize(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure AllDataTypesTVCustomDrawItem(Sender: TCustomViewControl;
Item: TCustomViewItem; Canvas: TCanvas; const Rect: TRect;
State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
procedure DisplayDataTypes(theModel: TEERModel);
procedure CommonDataTypesListViewCustomDrawItem(
Sender: TCustomViewControl; Item: TCustomViewItem; Canvas: TCanvas;
const Rect: TRect; State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
procedure CommonDataTypesListViewDblClick(Sender: TObject);
procedure CommonDataTypesListViewMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure DelSBtnClick(Sender: TObject);
procedure AddSBtnClick(Sender: TObject);
procedure OptionsImgClick(Sender: TObject);
procedure CommonDataTypesListViewDragDrop(Sender, Source: TObject; X,
Y: Integer);
procedure CommonDataTypesListViewDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
procedure AddDatatypetoCommonMIShow(Sender: TObject);
procedure DelDatatypefromCommonDatatypesMIShow(Sender: TObject);
procedure EditDatatypeMIShow(Sender: TObject);
procedure DelDatatypefromCommonDatatypesMIClick(Sender: TObject);
function GetActiveDatatype: TEERDatatype;
procedure DeleteDatatypeMIClick(Sender: TObject);
procedure AddDatatypetoCommonMIClick(Sender: TObject);
procedure ReinitialMIClick(Sender: TObject);
procedure ReplaceDatatypeMIClick(Sender: TObject);
procedure FormDeactivate(Sender: TObject);
procedure PageControlResize(Sender: TObject);
procedure CommonDataTypesListViewMouseEnter(Sender: TObject);
procedure AllDataTypesTVMouseEnter(Sender: TObject);
procedure AllDataTypesTVMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure CommonDatatypesPBoxPaint(Sender: TObject);
procedure CommonDatatypesPBoxClick(Sender: TObject);
procedure AllDatatypesPBoxClick(Sender: TObject);
private
{ Private declarations }
CommonDataTypesListViewRowHeight: integer;
public
{ Public declarations }
EERModel: TEERModel;
end;
var
PaletteDataTypesForm: TPaletteDataTypesForm;
implementation
uses EditorDatatype, Main, MainDM, PaletteDataTypesReplace;
{$R *.xfm}
procedure TPaletteDataTypesForm.FormCreate(Sender: TObject);
var theSize: TSize;
begin
DMMain.InitForm(self);
CommonDataTypesListViewRowHeight:=-1;
PageControl.Style:=tsNoTabs;
CommonDatatypesPBoxClick(self);
theSize:=Canvas.TextExtent('All Types');
AllDataTypesTV.Top:=(theSize.cy+6)*-1;
AllDataTypesTV.Height:=Height+19;
end;
procedure TPaletteDataTypesForm.FormResize(Sender: TObject);
begin
OptionsImg.Left:=Width-OptionsImg.Width-1;
OptionsImg.BringToFront;
AllDataTypesTV.Height:=AllDataTypesSheet.Height+19;
AllDataTypesTV.Width:=Width-10;
end;
procedure TPaletteDataTypesForm.DisplayDataTypes(theModel: TEERModel);
var i, j: integer;
TheGroupNode, TheTypeNode: TTreeNode;
TheListItem: TListItem;
theDatatype: TEERDatatype;
ExpandedNodes: TStringList;
begin
ExpandedNodes:=TStringList.Create;
try
if(EERModel=theModel)then
begin
//Store expanded nodes
for i:=0 to AllDataTypesTV.Items.Count-1 do
begin
if(AllDataTypesTV.Items[i].Expanded)then
ExpandedNodes.Add(AllDataTypesTV.Items[i].Text);
end;
end
else
EERModel:=theModel;
AllDataTypesTV.Items.Clear;
CommonDataTypesListView.Items.Clear;
if(theModel=nil)then
begin
{AddSBtn.Enabled:=False;
DelSBtn.Enabled:=False;}
Exit;
end
else
begin
{AddSBtn.Enabled:=True;
DelSBtn.Enabled:=True;}
end;
//Display Common DataTypes
for i:=0 to theModel.CommonDataType.Count-1 do
begin
theDatatype:=theModel.GetDataType(StrToInt(theModel.CommonDataType[i]));
if(Assigned(theDatatype))then
begin
TheListItem:=CommonDataTypesListView.Items.Add;
TheListItem.Caption:=theDatatype.TypeName;
TheListItem.ImageIndex:=theDatatype.group;
TheListItem.Data:=theDatatype;
end;
end;
//Display all Datatypes
for i:=0 to theModel.DatatypeGroups.Count-1 do
begin
TheGroupNode:=AllDataTypesTV.Items.Add(nil, TEERDatatypeGroup(theModel.DatatypeGroups[i]).GroupName);
TheGroupNode.ImageIndex:=TEERDatatypeGroup(theModel.DatatypeGroups[i]).IconNr-1;
TheGroupNode.SelectedIndex:=TEERDatatypeGroup(theModel.DatatypeGroups[i]).IconNr-1;
TheGroupNode.Data:=nil;
for j:=0 to theModel.Datatypes.Count-1 do
begin
if(TEERDatatype(theModel.Datatypes[j]).group=i)then
begin
TheTypeNode:=AllDataTypesTV.Items.AddChild(TheGroupNode, TEERDatatype(theModel.Datatypes[j]).TypeName);
TheTypeNode.ImageIndex:=TheGroupNode.ImageIndex;
TheTypeNode.SelectedIndex:=TheGroupNode.SelectedIndex;
TheTypeNode.Data:=theModel.Datatypes[j];
end;
end;
end;
//Re-expand tree
if(ExpandedNodes.Count>0)then
for i:=0 to ExpandedNodes.Count-1 do
begin
for j:=0 to AllDataTypesTV.Items.Count-1 do
if(ExpandedNodes[i]=AllDataTypesTV.Items[j].Text)and
(Not(AllDataTypesTV.Items[j].Expanded))then
begin
AllDataTypesTV.Items[j].Expanded:=True;
break;
end;
end;
finally
ExpandedNodes.Free;
end;
end;
procedure TPaletteDataTypesForm.AllDataTypesTVCustomDrawItem(
Sender: TCustomViewControl; Item: TCustomViewItem; Canvas: TCanvas;
const Rect: TRect; State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
var theSize: TSize;
theNode: TTreeNode;
s: string;
i: integer;
begin
{with TTreeNode(Item) do begin
Offset := (Rect.Right - Rect.Left - Canvas.TextWidth(Text)) div 2;
Canvas.Ellipse(Rect);
Canvas.TextOut(Offset, 0, Text);
end;}
with Canvas do
begin
Pen.Color:=clWhite;
MoveTo(0, Rect.Top);
LineTo(Rect.Right, Rect.Top);
Pen.Color:=clDark;
MoveTo(0, Rect.Bottom-1);
LineTo(AllDataTypesTV.Width+30, Rect.Bottom-1);
theNode:=AllDataTypesTV.Items[AllDataTypesTV.Items.IndexOf(Item)];
if(Assigned(theNode.Data))then
begin
if(TEERDatatype(theNode.Data).ParamCount>0)then
begin
theSize:=TextExtent(TEERDatatype(theNode.Data).TypeName);
s:='(';
for i:=0 to TEERDatatype(theNode.Data).ParamCount-1 do
begin
s:=s+LeftStr(TEERDatatype(theNode.Data).Param[i], 3);
if(i<>TEERDatatype(theNode.Data).ParamCount-1)then
s:=s+', ';
end;
s:=s+')';
if(Not(cdsSelected in State))then
begin
if(TEERDatatype(theNode.Data).ParamRequired)then
Font.Color:=clBlack
else
Font.Color:=clGray;
end
else
Font.Color:=clWhite;
TextOut(theSize.cx+22, 2, s);
end;
end;
end;
DefaultDraw := True; //item already complete
end;
procedure TPaletteDataTypesForm.CommonDataTypesListViewCustomDrawItem(
Sender: TCustomViewControl; Item: TCustomViewItem; Canvas: TCanvas;
const Rect: TRect; State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
begin
if(CommonDataTypesListViewRowHeight=-1)then
CommonDataTypesListViewRowHeight:=Rect.Bottom-Rect.Top;
with Canvas do
begin
Pen.Color:=clWhite;
MoveTo(0, Rect.Top);
LineTo(Rect.Right, Rect.Top);
Pen.Color:=clDark;
MoveTo(0, Rect.Bottom-1);
LineTo(AllDataTypesTV.Width+30, Rect.Bottom-1);
end;
end;
procedure TPaletteDataTypesForm.CommonDataTypesListViewDblClick(
Sender: TObject);
begin
if(GetActiveDatatype<>nil)then
begin
EditorDatatypeForm:=TEditorDatatypeForm.Create(Application.Mainform);
try
//Call the Datatype Editor
EditorDatatypeForm.SetDataType(EERModel, GetActiveDatatype);
EditorDatatypeForm.ShowModal;
DisplayDataTypes(EERModel);
finally
EditorDatatypeForm.Free;
end;
Application.MainForm.SetFocus;
end;
end;
procedure TPaletteDataTypesForm.CommonDataTypesListViewMouseDown(
Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
var theItem: TListItem;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -