From 716352928c7876f3123c56ae1bc0c2e70df3f625 Mon Sep 17 00:00:00 2001 From: vincents Date: Wed, 25 May 2005 08:33:34 +0000 Subject: [PATCH] =?UTF-8?q?added=20table=20editor=20=20=20=20from=20Luiz?= =?UTF-8?q?=20Am=EF=BF=BDrico?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: trunk@7201 - --- .gitattributes | 3 +- components/sqlite/sqlitedslaz.lpk | 44 +++-- components/sqlite/sqlitedslaz.pas | 12 +- components/sqlite/sqlitedsresources.pas | 17 -- components/sqlite/tableeditorform.lrs | 34 ++++ components/sqlite/tableeditorform.pas | 242 ++++++++++++++++++++++++ 6 files changed, 314 insertions(+), 38 deletions(-) delete mode 100644 components/sqlite/sqlitedsresources.pas create mode 100644 components/sqlite/tableeditorform.lrs create mode 100644 components/sqlite/tableeditorform.pas diff --git a/.gitattributes b/.gitattributes index dbb5f74f54..81366d77f8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -258,7 +258,8 @@ components/sqldb/tsqltransaction.xpm -text svneol=native#image/x-xpixmap components/sqlite/sqliteds.lrs svneol=native#text/pascal components/sqlite/sqlitedslaz.lpk svneol=native#text/pascal components/sqlite/sqlitedslaz.pas svneol=native#text/pascal -components/sqlite/sqlitedsresources.pas svneol=native#text/pascal +components/sqlite/tableeditorform.lrs svneol=native#text/pascal +components/sqlite/tableeditorform.pas svneol=native#text/pascal components/sqlite/tsqlitedataset.xpm -text svneol=native#image/x-xpixmap components/synedit/allsyneditunits.pp svneol=native#text/pascal components/synedit/design/tsynautocomplete.xpm -text svneol=native#image/x-xpixmap diff --git a/components/sqlite/sqlitedslaz.lpk b/components/sqlite/sqlitedslaz.lpk index 80d48d891c..719930dd4f 100644 --- a/components/sqlite/sqlitedslaz.lpk +++ b/components/sqlite/sqlitedslaz.lpk @@ -1,14 +1,14 @@ - + - - + - + + @@ -17,33 +17,49 @@ - - - - + + + + - - - + + + + + + + + + + + + + + + - + + + + - + - diff --git a/components/sqlite/sqlitedslaz.pas b/components/sqlite/sqlitedslaz.pas index 7da1d1ed4b..e813c7caa1 100644 --- a/components/sqlite/sqlitedslaz.pas +++ b/components/sqlite/sqlitedslaz.pas @@ -2,20 +2,20 @@ This source is only used to compile and install the package. } -unit sqlitedslaz; +unit sqlitedslaz; interface uses - sqliteds, sqlitedsresources, LazarusPackageIntf; + sqliteds, tableeditorform, LazarusPackageIntf; implementation -procedure Register; +procedure Register; begin - RegisterUnit('sqliteds', @sqliteds.Register); -end; + RegisterUnit('tableeditorform',@tableeditorform.Register); +end; initialization - RegisterPackage('sqlitedslaz', @Register); + RegisterPackage('sqlitedslaz',@Register); end. diff --git a/components/sqlite/sqlitedsresources.pas b/components/sqlite/sqlitedsresources.pas deleted file mode 100644 index bb5063db88..0000000000 --- a/components/sqlite/sqlitedsresources.pas +++ /dev/null @@ -1,17 +0,0 @@ -unit sqlitedsresources; - -{$mode objfpc} -{$H+} - -interface - -uses - Classes, SysUtils, LResources; - -implementation - -initialization - {$I sqliteds.lrs} - -end. - diff --git a/components/sqlite/tableeditorform.lrs b/components/sqlite/tableeditorform.lrs new file mode 100644 index 0000000000..0569842805 --- /dev/null +++ b/components/sqlite/tableeditorform.lrs @@ -0,0 +1,34 @@ +{ This is an automatically generated lazarus resource file } + +LazarusResources.Add('TSqliteTableEditorForm','FORMDATA',[ + 'TPF0'#22'TSqliteTableEditorForm'#21'SqliteTableEditorForm'#7'Caption'#6#19'S' + +'qlite Table Editor'#12'ClientHeight'#3#16#1#11'ClientWidth'#3''''#1#6'OnSho' + +'w'#7#25'SqliteTableEditorFormShow'#13'PixelsPerInch'#2'S'#18'HorzScrollBar.' + +'Page'#3'&'#1#18'VertScrollBar.Page'#3#15#1#4'Left'#3#180#1#6'Height'#3#16#1 + +#3'Top'#3#180#0#5'Width'#3''''#1#0#6'TLabel'#6'Label1'#7'Caption'#6#10'Field' + +' Name'#5'Color'#7#6'clNone'#4'Left'#3#147#0#6'Height'#2#12#3'Top'#2'@'#5'Wi' + +'dth'#2'@'#0#0#6'TLabel'#6'Label2'#7'Caption'#6#10'Field Type'#5'Color'#7#6 + +'clNone'#4'Left'#3#147#0#6'Height'#2#12#3'Top'#2'x'#5'Width'#2'<'#0#0#6'TLab' + +'el'#11'lblFilePath'#7'Caption'#6#11'lblFilePath'#5'Color'#7#6'clNone'#4'Lef' + +'t'#2#8#6'Height'#2#12#3'Top'#2#4#5'Width'#2';'#0#0#6'TLabel'#6'Label3'#7'Ca' + +'ption'#6#6'Label3'#5'Color'#7#6'clNone'#4'Left'#2#8#6'Height'#2#12#3'Top'#2 + +#20#5'Width'#2'&'#0#0#8'TListBox'#10'listFields'#17'OnSelectionChange'#7#25 + +'listFieldsSelectionChange'#8'TabOrder'#2#6#8'TopIndex'#2#255#4'Left'#2#8#6 + +'Height'#3#192#0#3'Top'#2'@'#5'Width'#2'|'#0#0#7'TButton'#9'butCreate'#7'Cap' + +'tion'#6#12'Create Table'#7'OnClick'#7#10'butOkClick'#8'TabOrder'#2#1#7'TabS' + +'top'#8#4'Left'#3#147#0#6'Height'#2#25#3'Top'#3#192#0#5'Width'#3#136#0#0#0#7 + +'TButton'#8'butClose'#7'Caption'#6#5'Close'#7'OnClick'#7#14'butCancelClick'#8 + +'TabOrder'#2#2#7'TabStop'#8#4'Left'#3#147#0#6'Height'#2#25#3'Top'#3#232#0#5 + +'Width'#3#136#0#0#0#5'TEdit'#13'editFieldName'#13'OnEditingDone'#7#24'editFi' + +'eldNameEditingDone'#8'TabOrder'#2#4#4'Left'#3#147#0#6'Height'#2#23#3'Top'#2 + +'P'#5'Width'#3#136#0#0#0#9'TComboBox'#14'comboFieldType'#13'DropDownCount'#2 + +#10#13'Items.Strings'#1#6#6'String'#6#7'Integer'#6#7'AutoInc'#6#4'Word'#6#5 + +'Float'#6#7'Boolean'#6#8'DateTime'#6#4'Date'#6#4'Time'#6#4'Memo'#0#9'ItemInd' + +'ex'#2#0#9'MaxLength'#2#0#8'OnChange'#7#20'comboFieldTypeChange'#5'Style'#7 + +#14'csDropDownList'#8'TabOrder'#2#5#4'Text'#6#6'String'#4'Left'#3#147#0#6'He' + +'ight'#2#21#3'Top'#3#136#0#5'Width'#3#136#0#0#0#7'TButton'#6'butAdd'#7'Capti' + +'on'#6#3'Add'#7'OnClick'#7#11'butAddClick'#8'TabOrder'#2#0#4'Left'#2#8#6'Hei' + +'ght'#2#25#3'Top'#2'('#5'Width'#2'@'#0#0#7'TButton'#9'butDelete'#7'Caption'#6 + +#6'Delete'#7'OnClick'#7#14'butDeleteClick'#8'TabOrder'#2#3#4'Left'#2'H'#6'He' + +'ight'#2#25#3'Top'#2'('#5'Width'#2'<'#0#0#0 +]); diff --git a/components/sqlite/tableeditorform.pas b/components/sqlite/tableeditorform.pas new file mode 100644 index 0000000000..08706e4761 --- /dev/null +++ b/components/sqlite/tableeditorform.pas @@ -0,0 +1,242 @@ +unit tableeditorform; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Dialogs, StdCtrls, + Buttons, sqliteds, ComponentEditors, LazarusPackageIntf, PropEdits, LazIdeIntf; + +type + + {TSqliteEditor} + + TSqliteEditor = class(TComponentEditor) + public + procedure ExecuteVerb(Index: Integer); override; + function GetVerb(Index: Integer): string; override; + function GetVerbCount: Integer; override; + procedure Edit; override; + end; + + { TSqliteTableEditorForm } + + TSqliteTableEditorForm = class(TForm) + butCreate: TButton; + butClose: TButton; + butAdd: TButton; + butDelete: TButton; + comboFieldType: TComboBox; + editFieldName: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + lblFilePath: TLabel; + listFields: TListBox; + DataSet: TSqliteDataSet; + procedure SqliteTableEditorFormShow(Sender: TObject); + procedure butAddClick(Sender: TObject); + procedure butCancelClick(Sender: TObject); + procedure butDeleteClick(Sender: TObject); + procedure butOkClick(Sender: TObject); + procedure comboFieldTypeChange(Sender: TObject); + procedure editFieldNameEditingDone(Sender: TObject); + procedure listFieldsSelectionChange(Sender: TObject; User: boolean); + private + { private declarations } + public + { public declarations } + end; + + procedure Register; + +var + SqliteTableEditorForm: TSqliteTableEditorForm; + +implementation + +procedure RegisterUnitSqliteds; +begin + RegisterComponents('Data Access',[TSqliteDataset]); +end; + +procedure Register; +begin + RegisterUnit('sqliteds',@RegisterUnitSqliteds); + RegisterComponentEditor(TSqliteDataset,TSqliteEditor) ; + RegisterPropertyEditor(TypeInfo(String),TSqliteDataset,'FileName', + TFileNamePropertyEditor); +end; + +function StringListHasDuplicates(const List:TStrings):boolean; +var + i,j:Integer; +begin + Result:=False; + for i := 0 to List.Count - 1 do + for j:= i+1 to List.Count - 1 do + if AnsiCompareText(List[i],List[j]) = 0 then + begin + Result:=True; + Exit; + end; +end; + +{TSqliteEditor} + +procedure TSqliteEditor.ExecuteVerb(Index: Integer); +begin + case Index of + 0:Edit; + end; +end; + +function TSqliteEditor.GetVerb(Index: Integer): string; +begin + case Index of + 0:Result:='Create Table'; + end; +end; + +function TSqliteEditor.GetVerbCount: Integer; +begin + Result:=1; +end; + +procedure TSqliteEditor.Edit; +var + ADataSet:TSqliteDataSet; + OldDir:String; +begin + ADataSet:=TSqliteDataSet(GetComponent); + if ADataSet.Filename = '' then + begin + ShowMessage('FileName not set: it''s not possible to create a table'); + exit; + end; + if ADataSet.TableName = '' then + begin + ShowMessage('TableName not set: it''s not possible to create a table'); + exit; + end; + + with TSqliteTableEditorForm.Create(Application) do + begin + try + // In case Filename is a relative one, change dir to project dir + // so the datafile will be created in the right place + OldDir:=GetCurrentDir; + if ExtractFilePath (LazarusIDE.ActiveProject.MainFile.FileName) <> '' then + ChDir(ExtractFilePath (LazarusIDE.ActiveProject.MainFile.FileName)); + Dataset:=ADataset; + ShowModal; + finally + chdir(OldDir); + Free; + end; + end; +end; + +{ TSqliteTableEditorForm } + +procedure TSqliteTableEditorForm.butAddClick(Sender: TObject); +begin + listFields.Items.AddObject('AFieldName',TObject(0)); + listFields.ItemIndex:=listFields.Items.Count-1; + comboFieldType.ItemIndex:=0; + editFieldName.Text:='AFieldName'; + editFieldName.SetFocus; +end; + +procedure TSqliteTableEditorForm.SqliteTableEditorFormShow(Sender: TObject); +begin + lblFilePath.Caption:='File Path: '+ExpandFileName(DataSet.FileName); + label3.caption:='Table Name: '+ DataSet.TableName; +end; + +procedure TSqliteTableEditorForm.butCancelClick(Sender: TObject); +begin + Close; +end; + +procedure TSqliteTableEditorForm.butDeleteClick(Sender: TObject); +begin + if listFields.ItemIndex <> -1 then + listFields.Items.Delete(listFields.ItemIndex); +end; + +procedure TSqliteTableEditorForm.butOkClick(Sender: TObject); +var + i:Integer; + ASql:String; +begin + if Dataset.TableExists then + begin + if MessageDlg('A Table named "'+Dataset.TableName+'"already exists. Are you sure you want to replace this table?'#13#10'All data stored will be lost', + mtWarning,[mbYes,MbNo],0) = mrNo then + exit + else + DataSet.ExecSQL('DROP TABLE '+DataSet.TableName+';'); + end; + + if listFields.Items.Count = 0 then + begin; + ShowMessage('No fields added'); + Exit; + end; + + if StringListHasDuplicates(listFields.Items) then + begin + ShowMessage('It''s not allowed fields with the same name'); + Exit; + end; + + ASql:='CREATE TABLE '+ DataSet.TableName + ' ('; + with listFields do + for i := 0 to Items.Count - 1 do + begin + ASql:=ASql+Items[i]+' '; + if comboFieldType.Items[longint(Items.Objects[i])] = 'String' then + ASql:=ASql+'VARCHAR' + else + ASql:=ASql+ Upcase(comboFieldType.Items[longint(Items.Objects[i])]); + if i <> Items.Count - 1 then + ASql:=ASql+ ' , '; + end; + ASql:=ASql+');'; + DataSet.ExecSQL(ASql); + if Dataset.TableExists then + ShowMessage('Table created successfully') + else + ShowMessage('It was not possible to create the table'); +end; + +procedure TSqliteTableEditorForm.comboFieldTypeChange(Sender: TObject); +begin + if listFields.ItemIndex <> -1 then + listFields.Items.Objects[listFields.ItemIndex]:=TObject(comboFieldType.ItemIndex); +end; + +procedure TSqliteTableEditorForm.editFieldNameEditingDone(Sender: TObject); +begin + if listFields.ItemIndex <> -1 then + listFields.Items[listFields.ItemIndex]:=editFieldName.Text; +end; + +procedure TSqliteTableEditorForm.listFieldsSelectionChange(Sender: TObject; + User: boolean); +begin + if listFields.ItemIndex <> -1 then + begin + editFieldName.Text:=listFields.Items[listFields.ItemIndex]; + comboFieldType.ItemIndex:=LongInt(listFields.Items.Objects[listFields.ItemIndex]); + end; +end; + +initialization + {$I tableeditorform.lrs} + {$i sqliteds.lrs} + +end. +