diff --git a/components/jujiboutils/changes.txt b/components/jujiboutils/changes.txt index 3de15a8a9..907e11c7d 100644 --- a/components/jujiboutils/changes.txt +++ b/components/jujiboutils/changes.txt @@ -5,6 +5,7 @@ Note: Lazarus Trunk required Version pre-1.1 -------------------------------------------------- +2013-01-03 Added: TJDbEnumCombo, like TDbComboBox but, uses itemindex instead of text 2012-09-20 Added: TJLabeledIntegerEdit and TJLabeledFloatEdit property CurrentValue 2012-06-12 Fixed: TJDbGridTimeCtrl, store time value 2012-03-14 Fixed: Prevent double updates (QT widgetset) in edit widgets diff --git a/components/jujiboutils/jujiboutils.lpk b/components/jujiboutils/jujiboutils.lpk index 2743e1280..ed667d27a 100644 --- a/components/jujiboutils/jujiboutils.lpk +++ b/components/jujiboutils/jujiboutils.lpk @@ -4,17 +4,11 @@ - + - - - - - - @@ -27,7 +21,7 @@ different kinds of data, floats, dates, etc. while working with db and non db controls."/> - + @@ -110,6 +104,11 @@ db and non db controls."/> + + + + + diff --git a/components/jujiboutils/jujiboutils.pas b/components/jujiboutils/jujiboutils.pas index 088910847..cc7207a5a 100644 --- a/components/jujiboutils/jujiboutils.pas +++ b/components/jujiboutils/jujiboutils.pas @@ -2,7 +2,7 @@ This source is only used to compile and install the package. } -unit jujiboutils; +unit jujiboutils; interface @@ -11,29 +11,30 @@ uses jdblabeledcurrencyedit, jdblabeleddateedit, jcontrolutils, JLabeledIntegerEdit, JLabeledFloatEdit, JLabeledCurrencyEdit, JLabeledDateEdit, jdbgridutils, JLabeledTimeEdit, JDBLabeledTimeEdit, - JLabeledDateTimeEdit, JDBLabeledDateTimeEdit, jinputconsts, + JLabeledDateTimeEdit, JDBLabeledDateTimeEdit, jinputconsts, JDbEnumCombo, LazarusPackageIntf; implementation -procedure Register; +procedure Register; begin - RegisterUnit('JDBGridControl', @JDBGridControl.Register); - RegisterUnit('JDBLabeledEdit', @JDBLabeledEdit.Register); - RegisterUnit('jdblabeledintegeredit', @jdblabeledintegeredit.Register); - RegisterUnit('JDBLabeledFloatEdit', @JDBLabeledFloatEdit.Register); - RegisterUnit('jdblabeledcurrencyedit', @jdblabeledcurrencyedit.Register); - RegisterUnit('jdblabeleddateedit', @jdblabeleddateedit.Register); - RegisterUnit('JLabeledIntegerEdit', @JLabeledIntegerEdit.Register); - RegisterUnit('JLabeledFloatEdit', @JLabeledFloatEdit.Register); - RegisterUnit('JLabeledCurrencyEdit', @JLabeledCurrencyEdit.Register); - RegisterUnit('JLabeledDateEdit', @JLabeledDateEdit.Register); - RegisterUnit('JLabeledTimeEdit', @JLabeledTimeEdit.Register); - RegisterUnit('JDBLabeledTimeEdit', @JDBLabeledTimeEdit.Register); - RegisterUnit('JLabeledDateTimeEdit', @JLabeledDateTimeEdit.Register); - RegisterUnit('JDBLabeledDateTimeEdit', @JDBLabeledDateTimeEdit.Register); -end; + RegisterUnit('JDBGridControl', @JDBGridControl.Register); + RegisterUnit('JDBLabeledEdit', @JDBLabeledEdit.Register); + RegisterUnit('jdblabeledintegeredit', @jdblabeledintegeredit.Register); + RegisterUnit('JDBLabeledFloatEdit', @JDBLabeledFloatEdit.Register); + RegisterUnit('jdblabeledcurrencyedit', @jdblabeledcurrencyedit.Register); + RegisterUnit('jdblabeleddateedit', @jdblabeleddateedit.Register); + RegisterUnit('JLabeledIntegerEdit', @JLabeledIntegerEdit.Register); + RegisterUnit('JLabeledFloatEdit', @JLabeledFloatEdit.Register); + RegisterUnit('JLabeledCurrencyEdit', @JLabeledCurrencyEdit.Register); + RegisterUnit('JLabeledDateEdit', @JLabeledDateEdit.Register); + RegisterUnit('JLabeledTimeEdit', @JLabeledTimeEdit.Register); + RegisterUnit('JDBLabeledTimeEdit', @JDBLabeledTimeEdit.Register); + RegisterUnit('JLabeledDateTimeEdit', @JLabeledDateTimeEdit.Register); + RegisterUnit('JDBLabeledDateTimeEdit', @JDBLabeledDateTimeEdit.Register); + RegisterUnit('JDbEnumCombo', @JDbEnumCombo.Register); +end; initialization - RegisterPackage('jujiboutils', @Register); + RegisterPackage('jujiboutils', @Register); end. diff --git a/components/jujiboutils/src/jdbenumcombo.pas b/components/jujiboutils/src/jdbenumcombo.pas new file mode 100644 index 000000000..04b5c73cf --- /dev/null +++ b/components/jujiboutils/src/jdbenumcombo.pas @@ -0,0 +1,235 @@ +{ JDbEnumcombo + + Copyright (C) 2013 Julio Jiménez Borreguero + Contact: jujibo at gmail dot com + + This library is free software; you can redistribute it and/or modify it + under the same terms as the Lazarus Component Library (LCL) + + See the file license-jujiboutils.txt and COPYING.LGPL, included in this distribution, + for details about the license. + + 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. + +} + + +unit JDbEnumCombo; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, StdCtrls, Graphics, Dialogs, + DBCtrls, DB, LCLType, LMessages; + +type + + { TJDbEnumCombo } + + TJDbEnumCombo = class(TCustomComboBox) + private + FDataLink: TFieldDataLink; + function GetDataField: string; + function GetDataSource: TDataSource; + function GetField: TField; + function GetReadOnly: boolean; + procedure SetDataField(const AValue: string); + procedure SetDataSource(const AValue: TDataSource); + procedure SetReadOnly(const AValue: boolean); + procedure CMGetDataLink(var Message: TLMessage); message CM_GETDATALINK; + protected + { Protected declarations } + procedure DataChange(Sender: TObject); + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + procedure Change; override; + procedure DropDown; override; + procedure UpdateData(Sender: TObject); + public + { Public declarations } + constructor Create(TheOwner: TComponent); override; + destructor Destroy; override; + procedure EditingDone; override; + property Field: TField read GetField; + property Text; + property ItemIndex; + published + { Published declarations } + property Anchors; + property ArrowKeysTraverseList; + property AutoDropDown; + property AutoComplete; + property AutoSize; + property BiDiMode; + property BorderSpacing; + property BorderStyle; + property CharCase; + property Color; + property DataField: string read GetDataField write SetDataField; + property DataSource: TDataSource read GetDataSource write SetDataSource; + property DragCursor; + property DragMode; + property DropDownCount; + property Enabled; + property Font; + property ItemHeight; + property Items; + property ItemWidth; + property MaxLength default -1; + property OnChange; + property OnChangeBounds; + property OnClick; + property OnCloseUp; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnDrawItem; + property OnDropDown; + property OnEditingDone; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnSelect; + property OnStartDrag; + property OnUTF8KeyPress; + property ParentBiDiMode; + property ParentColor; + property ParentFont; + property ParentShowHint; + property ReadOnly: boolean read GetReadOnly write SetReadOnly default False; + property ShowHint; + property TabOrder; + property TabStop; + property Visible; + end; + +procedure Register; + +implementation + +procedure Register; +begin + {$I jdbenumcombo_icon.lrs} + RegisterComponents('Data Controls', [TJDbEnumCombo]); +end; + +{ TJDbEnumCombo } + +function TJDbEnumCombo.GetDataField: string; +begin + Result := FDataLink.FieldName; +end; + +function TJDbEnumCombo.GetDataSource: TDataSource; +begin + Result := FDataLink.DataSource; +end; + +function TJDbEnumCombo.GetField: TField; +begin + Result := FDataLink.Field; +end; + +function TJDbEnumCombo.GetReadOnly: boolean; +begin + Result := FDataLink.ReadOnly; +end; + +procedure TJDbEnumCombo.SetDataField(const AValue: string); +begin + FDataLink.FieldName := AValue; +end; + +procedure TJDbEnumCombo.SetDataSource(const AValue: TDataSource); +begin + if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then + ChangeDataSource(Self, FDataLink, AValue); +end; + +procedure TJDbEnumCombo.SetReadOnly(const AValue: boolean); +begin + FDataLink.ReadOnly := AValue; +end; + +procedure TJDbEnumCombo.CMGetDataLink(var Message: TLMessage); +begin + Message.Result := PtrUInt(FDataLink); +end; + +procedure TJDbEnumCombo.DataChange(Sender: TObject); +var + DataLinkField: TField; +begin + DataLinkField := FDataLink.Field; + if Assigned(DataLinkField) then + ItemIndex := DataLinkField.AsInteger + else + ItemIndex:= -1; +end; + +procedure TJDbEnumCombo.Notification(AComponent: TComponent; Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if (Operation = opRemove) then + begin + if (FDataLink <> nil) and (AComponent = DataSource) then + DataSource := nil; + end; +end; + +procedure TJDbEnumCombo.Change; +begin + FDataLink.Edit; + FDataLink.Modified; + FDataLink.UpdateRecord; + inherited Change; +end; + +procedure TJDbEnumCombo.DropDown; +begin + FDataLink.Edit; + inherited DropDown; +end; + +procedure TJDbEnumCombo.UpdateData(Sender: TObject); +begin + FDataLink.Field.AsInteger := ItemIndex; +end; + +constructor TJDbEnumCombo.Create(TheOwner: TComponent); +begin + inherited Create(TheOwner); + ControlStyle := ControlStyle + [csReplicatable]; + FDataLink := TFieldDataLink.Create; + FDataLink.Control := Self; + FDataLink.OnDataChange := @DataChange; + FDataLink.OnUpdateData := @UpdateData; + Style:= csDropDownList; +end; + +destructor TJDbEnumCombo.Destroy; +begin + FDataLink.Destroy; + inherited Destroy; +end; + +procedure TJDbEnumCombo.EditingDone; +begin + FDataLink.UpdateRecord; + inherited EditingDone; +end; + +{ TJDbEnumCombo } + + + +end. diff --git a/components/jujiboutils/src/jdbenumcombo_icon.lrs b/components/jujiboutils/src/jdbenumcombo_icon.lrs new file mode 100644 index 000000000..c4e1101cb --- /dev/null +++ b/components/jujiboutils/src/jdbenumcombo_icon.lrs @@ -0,0 +1,30 @@ +LazarusResources.Add('TJDbEnumCombo','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167#147#0#0#0#9'pHYs'#0#0#11#19#0#0#11 + +#19#1#0#154#156#24#0#0#0#7'tIME'#7#220#12#30#20#27#31#227#15'v'#154#0#0#2'XI' + +'DATH'#199#181#150'_HSQ'#28#199'?g'#14#165#160'9'#140'6#D'#20#6'>'#148#129'$' + +'$3'#138#213#131#244#162'='#8#130'oA'#143#129#15#177'F>'#11'&='#8#246'&'#244 + +'&'#10#6#17'X'#15#225#159')'#243'Eb'#148'Z'#4#3'e'#193'D'#134#216'd'#5'Mv' + +#239#175#7#187#135#221'y'#231#254#128'_'#184#220's'#206'='#231#251#189#191 + +#239#239'w'#14'G'#137#8#231#9'7'#128'a'#158#136#204#175#239#203#244#194#206 + +#169'I'#203#19#189#186#157'7LU'#231'R'#0'('#165'DD'#148#245'M)'#165#255'V' + +#143#139#8#179'k{'#18#10#199'$'#20#142#201'V2+""['#201#172',}='#144#217#181 + +'='#1'$'#20#142#233'w'#222'0'#201#27#230#255#229'B'#241'S8'#238#6#152'^'#216 + +#161'3'#208'D'#155#255#2#233'L'#142'm '#157#201#145'>:&'#157#201#1#208#25'hb' + +#25'ho'#241#148#180#163'0'#2#155'E'#237'-'#30'6'#19#135'l&'#192#231'm'#7#208 + +#228#233#163'c'#0'6'#19#135#21'y^h'#153#22#0#232#185'q'#5'_c=N9('#206#131#187 + +#206'%y'#195#180'yo'#17'[QX}7@2'#149#197#239'm'#0'`t'#184#131'P'#231'e'#182 + +#127#254#214#17#244#247#238#146'>:'#230#207'_'#195#22'I'#241#223#22#247#1#148 + +#136#240#228#245#150'$SY'#12'S'#180'@$2UsiF"'#195#247#188#222#166'U'#155#128 + +#223#219#128#175#177#158#247#177#20#0#221'*'#206#248#248#211#10#9#167#24#25 + +'y'#164#251#147#147#239#180'HI'#139'"'#145'8'#0']]'#183#206'$'#143#199'?'#235 + +#246#208#208'0ss3'#0'DW7'#162#3#253'}'#202#13#208'z'#237#18#27#223#14'0L'#225 + +'zkGI'#130'r'#176#200#29's'#224'd'#145#5#151#235#23'J'#229'J'#18#155#166#7 + +#145#139#182#177#219'='#1't'#4#206'UtSW'#209#151#15'o+'#206#135#149#19#219'>' + +'x'#252#176#141'7'#31'w'#29'-*D'#185'|8Y'#234#6#24#12'6'#171#193'`3'#243#235 + +#251'26'#243#131#177'"+'#187'U'#245#249#176#9'X'#167#227#208#157#171'j0'#216 + +'|j'#210#232#139#184',/.'#213'~\'#23#194#18's'#194#179#240#243#178#132#175'&' + +'^'#158'-P'#205#226#154'"('#133#208#131#251#21#147'~Z'#252'^['#4'5WQ'#165#168 + +#185#138#170#221'<'#213'@Uz'#171#200'd'#14#239#174#172'lD'#245'BW'#249'5'#3 + +#253'}J'#157#247#181#229#31'~A@C'#28#210#245#9#0#0#0#0'IEND'#174'B`'#130 +]);