⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 palettemodel.pas

📁 DBDesigner 4 is a database design system that integrates database design, modelling, creation and ma
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit PaletteModel;

//----------------------------------------------------------------------------------------------------------------------
//
// 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 PaletteModel.pas
// ---------------------
// Version 1.0, 13.03.2003, Mike
// Description
//   Contains a the model palette form class
//
// Changes:
//   Version 1.0, 13.03.2003, Mike
//     initial version, Mike
//
//----------------------------------------------------------------------------------------------------------------------

interface

uses
  SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,
  QStdCtrls, QExtCtrls, QComCtrls, QImgList, QButtons, EERModel, QMenus,
  QTypes, Qt;

type
  TPaletteModelFrom = class(TForm)
    ModelImgList: TImageList;
    TablesPopupMenu: TPopupMenu;
    SelectObjectMI: TMenuItem;
    EditObjectMI: TMenuItem;
    RefreshMI: TMenuItem;
    DeleteMI: TMenuItem;
    PalettePopupMenu: TPopupMenu;
    RefreshPalMI: TMenuItem;
    MainPnl: TPanel;
    TabsPnl: TPanel;
    Tabs2Img: TImage;
    TabsImg: TImage;
    OptionsImg: TImage;
    PageControl: TPageControl;
    ModelSheet: TTabSheet;
    Shape1: TShape;
    ModelTV: TTreeView;
    Panel1: TPanel;
    TablesSheet: TTabSheet;
    TablesTreeView: TTreeView;
    TableSheetTopPnl: TPanel;
    TableTreeHeaderPnl: TPanel;
    AddBtn: TSpeedButton;
    DeleteBtn: TSpeedButton;
    Label1: TLabel;
    ScrolltoselectedObjectMI: TMenuItem;
    N1: TMenuItem;
    ShowLinkedModelsMI: TMenuItem;
    N2: TMenuItem;
    RefreshLinkedObjectsMI: TMenuItem;
    TablesPBox: TPaintBox;
    ModelPBox: TPaintBox;
    N3: TMenuItem;
    ReorderTablesbyNameMI: TMenuItem;
    ReorderTablesbyRegionMI: TMenuItem;
    procedure FormResize(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ModelTVCustomDrawItem(Sender: TCustomViewControl;
      Item: TCustomViewItem; Canvas: TCanvas; const Rect: TRect;
      State: TCustomDrawState; Stage: TCustomDrawStage;
      var DefaultDraw: Boolean);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

    procedure RefreshTablesTreeView(theModel: TEERModel);
    procedure TablesTreeViewDblClick(Sender: TObject);
    procedure SelectObjectMIClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure RefreshMIClick(Sender: TObject);
    procedure DeleteMIClick(Sender: TObject);
    procedure OptionsImgClick(Sender: TObject);
    procedure RefreshPalMIClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure AddBtnClick(Sender: TObject);
    procedure DeleteBtnClick(Sender: TObject);
    procedure FormDeactivate(Sender: TObject);
    procedure ScrolltoselectedObjectMIClick(Sender: TObject);
    procedure ShowLinkedModelsMIShow(Sender: TObject);
    procedure ShowLinkedModelsMIClick(Sender: TObject);
    procedure RefreshLinkedObjectsMIClick(Sender: TObject);
    procedure TablesPBoxPaint(Sender: TObject);
    procedure TablesPBoxClick(Sender: TObject);
    procedure ModelPBoxClick(Sender: TObject);
    procedure TablesTreeViewMouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure TablesTreeViewDragOver(Sender, Source: TObject; X,
      Y: Integer; State: TDragState; var Accept: Boolean);
    procedure TablesTreeViewDragDrop(Sender, Source: TObject; X,
      Y: Integer);
    procedure ReorderTablesbyNameMIClick(Sender: TObject);
    procedure ReorderTablesbyRegionMIClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    EERModel: TEERModel;
  end;

var
  PaletteModelFrom: TPaletteModelFrom;

implementation

uses EditorDatatype, Main, EditorTable, MainDM, EER, EERDM;

{$R *.xfm}

procedure TPaletteModelFrom.FormCreate(Sender: TObject);
var theSize: tSize;
begin
  DMMain.InitForm(self);
  
  PageControl.Style:=tsNoTabs;

  theSize:=Canvas.TextExtent('All Types');
  ModelTV.Left:=1;
  ModelTV.Top:=(theSize.cy+5)*-1;
  ModelTV.Height:=ModelSheet.Height-ModelTV.Top+21;
  ModelTV.Width:=ModelSheet.Width-2;
  ModelTV.Items.Clear;


  //TablesTreeView.Top:=ModelTV.Top;
  ModelTV.Left:=ModelTV.Left;
  //TablesTreeView.Height:=ModelTV.Height;
  //TablesTreeView.Width:=ModelTV.Width;
  TablesTreeView.Items.Clear;

  TablesPBoxClick(Self);
end;

procedure TPaletteModelFrom.FormResize(Sender: TObject);
begin
  OptionsImg.Left:=Width-OptionsImg.Width-1;
  OptionsImg.BringToFront;

  ModelTV.Height:=ModelSheet.Height+19;
  ModelTV.Width:=Width-10;

  //TablesTreeView.Width:=ModelTV.Width;
  //TablesTreeView.Height:=ModelTV.Height;
end;

procedure TPaletteModelFrom.ModelTVCustomDrawItem(
  Sender: TCustomViewControl; Item: TCustomViewItem; Canvas: TCanvas;
  const Rect: TRect; State: TCustomDrawState; Stage: TCustomDrawStage;
  var DefaultDraw: Boolean);
var theRegion: TEERRegion;
  s: string;
begin
  with Canvas do
  begin
    Pen.Color:=clDark;
    MoveTo(0, Rect.Bottom-1);
    LineTo(ModelTV.Width+30, Rect.Bottom-1);
  end;

  //If a table item is drawn, get bgcolor from region
  if(Item is TTreeNode)then
    if(TTreeNode(Item).Data<>nil)and(TTreeNode(Item).ImageIndex<>-1)then
      if(TObject(TTreeNode(Item).Data) is TEERTable)then
      begin
        theRegion:=TEERTable(TTreeNode(Item).Data).GetRegion;
        if(theRegion<>nil)then
        begin
          try
            s:=EERModel.RegionColors.ValueFromIndex[theRegion.RegionColor];

            Canvas.Brush.Color:=DMMain.RGB(DMMain.HexStringToInt(Copy(s, 2, 2)),
              DMMain.HexStringToInt(Copy(s, 4, 2)),
              DMMain.HexStringToInt(Copy(s, 6, 2)));

            Canvas.FillRect(Types.Rect(Rect.Left, Rect.Top,
              ModelTV.Width+30, Rect.Bottom-1));

            TablesTreeView.Images.Draw(Canvas, Rect.Left, Rect.Top,
              0, itImage, True);

            Canvas.TextOut(Rect.Left+16, Rect.Top+2, TTreeNode(Item).Text);

            if(TTreeNode(Item).Selected)then
            begin
              Canvas.Brush.Color:=clBlack;
              Canvas.FillRect(Types.Rect(Rect.Right-12, Rect.Top+6,
                Rect.Right-7, Rect.Top+11));
              Canvas.Brush.Color:=clWhite;
            end;
          except
          end;
        end;
      end;
end;

procedure TPaletteModelFrom.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  CanClose:=False;

  Hide;

  TMainForm(Application.MainForm).DBModelMI.Checked:=False;
end;

procedure TPaletteModelFrom.RefreshTablesTreeView(theModel: TEERModel);
var i, j: integer;
  theNode, theKindNode, theChildNode: TTreeNode;
  ExpandedNodes: TList;
  TableList: TList;
begin
  ExpandedNodes:=TList.Create;
  try
    if(EERModel=theModel)then
    begin
      //Store expanded nodes
      for i:=0 to TablesTreeView.Items.Count-1 do
      begin
        if(TablesTreeView.Items[i].Expanded)then
          ExpandedNodes.Add(TablesTreeView.Items[i].Data);
      end;
    end
    else
      EERModel:=theModel;

    TablesTreeView.Items.Clear;

    if(theModel=nil)then
      Exit;

    TableList:=TList.Create;
    try
      with EERModel do
      begin
        GetEERObjectList([EERTable], TableList);
        SortEERObjectListByOrderPos(TableList);

        //Add all Tables to Treeview
        for i:=0 to TableList.Count-1 do
        begin
          with TEERTable(TableList[i]) do
          begin
            theNode:=TablesTreeView.Items.AddObject(nil, ObjName, TableList[i]);
            theNode.ImageIndex:=0;

            //Add Colums
            if(Columns.Count>0)then
            begin
              //Store first Column with the Parent 'Columns' Node, so it can be re-expanded
              theKindNode:=TablesTreeView.Items.AddChildObject(theNode, 'Columns', Columns[0]);
              for j:=0 to Columns.Count-1 do
              begin
                theChildNode:=TablesTreeView.Items.AddChildObject(theKindNode,
                  TEERColumn(Columns[j]).ColName{+': '+
                  GetDataTypeName(TEERColumn(Columns[j]).Obj_id)}, Columns[j]);
                if(TEERColumn(Columns[j]).PrimaryKey)then
                  theChildNode.ImageIndex:=2
                else
                  theChildNode.ImageIndex:=1;
              end;
            end;

            //Add Relations
            if(RelStart.Count>0)or(RelEnd.Count>0)then
            begin
              //Store table with the Parent 'Relations' Node, so it can be re-expanded
              theKindNode:=TablesTreeView.Items.AddChildObject(theNode, 'Relations', EERModel.Components[I]);
              for j:=0 to RelStart.Count-1 do
              begin
                theChildNode:=TablesTreeView.Items.AddChildObject(theKindNode,
                  TEERRel(RelStart[j]).ObjName, RelStart[j]);
                theChildNode.ImageIndex:=3;
              end;
              for j:=0 to RelEnd.Count-1 do
              begin
                theChildNode:=TablesTreeView.Items.AddChildObject(theKindNode,
                  TEERRel(RelEnd[j]).ObjName, RelEnd[j]);
                theChildNode.ImageIndex:=3;
              end;
            end;
          end;
        end;
      end;
    finally
      TableList.Free;
    end;

    //Re-expand tree
    if(ExpandedNodes.Count>0)then
      for i:=0 to ExpandedNodes.Count-1 do
      begin
        for j:=0 to TablesTreeView.Items.Count-1 do
          if(ExpandedNodes[i]=TablesTreeView.Items[j].Data)and
            (Not(TablesTreeView.Items[j].Expanded))then
            begin
              TablesTreeView.Items[j].Expanded:=True;
              break;
            end;
      end;
  finally
    ExpandedNodes.Free;
  end;
end;

procedure TPaletteModelFrom.TablesTreeViewDblClick(Sender: TObject);
begin
  if(TablesTreeView.Selected<>nil)then
    if(Assigned(TablesTreeView.Selected.Data))then
      if(TObject(TablesTreeView.Selected.Data).ClassParent=TEERObj)then
        TEERObj(TablesTreeView.Selected.Data).ShowEditor(self);
end;

procedure TPaletteModelFrom.SelectObjectMIClick(Sender: TObject);
begin
  //Columns cannot be selected
  if(TablesTreeView.Selected<>nil)then
    if(Assigned(TablesTreeView.Selected.Data))and
      ((TablesTreeView.Selected.ImageIndex=0)or //Table
      (TablesTreeView.Selected.ImageIndex=3))then //Indices
    begin
      TEERObj(TablesTreeView.Selected.Data).SelectObj(self);
    end;
end;

procedure TPaletteModelFrom.FormDestroy(Sender: TObject);
begin
  DMMain.SaveWinPos(self, False);
end;

procedure TPaletteModelFrom.FormShow(Sender: TObject);
begin
  DMMain.RestoreWinPos(self, False);
end;

procedure TPaletteModelFrom.RefreshMIClick(Sender: TObject);
begin
  //Columns cannot be selected
  if(Assigned(TablesTreeView.Selected.Data))and
    (TablesTreeView.Selected.ImageIndex<>1)and
    (TablesTreeView.Selected.ImageIndex<>2)then
  begin
    TEERObj(TablesTreeView.Selected.Data).RefreshObj;
    TEERObj(TablesTreeView.Selected.Data).DoPaint(self);
  end;
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -