Hello,
ComboBox update in file qtcombobox.diff Any correction is welcome. -- http://luisdigital.com
Index: ide/revision.inc =================================================================== --- ide/revision.inc (revision 10003) +++ ide/revision.inc (working copy) @@ -1,2 +1,2 @@ // Created by Svn2RevisionInc -const RevisionStr = '9891'; +const RevisionStr = '10002M'; Index: lcl/interfaces/qt/qtobjects.pas =================================================================== --- lcl/interfaces/qt/qtobjects.pas (revision 10003) +++ lcl/interfaces/qt/qtobjects.pas (working copy) @@ -8,6 +8,38 @@ type + { TQtComboStrings } + + TQtComboStrings = class(TStrings) + private + FComboChanged: Boolean; // StringList and QtComboBox out of sync + FStringList: TStringList; // Holds the items to show + FQtComboBox: QComboBoxH; // Qt Widget + FOwner: TWinControl; // Lazarus Control Owning ListStrings + FUpdating: Boolean; // We're changing Qt Widget + procedure InternalUpdate; + procedure ExternalUpdate(var Astr: TStringList; Clear: Boolean = True); + procedure IsChanged; // OnChange triggered by program action + protected + function GetTextStr: string; override; + function GetCount: integer; override; + function Get(Index : Integer) : string; override; + //procedure SetSorted(Val : boolean); virtual; + public + constructor Create(ComboBoxH : QComboBoxH; TheOwner: TWinControl); + destructor Destroy; override; + procedure Assign(Source : TPersistent); override; + procedure Clear; override; + procedure Delete(Index : integer); override; + procedure Insert(Index : integer; const S: string); override; + procedure SetText(TheText: PChar); override; + //procedure Sort; virtual; + public + //property Sorted: boolean read FSorted write SetSorted; + property Owner: TWinControl read FOwner; + end; + + { TQtListStrings } TQtListStrings = class(TStrings) @@ -567,5 +599,129 @@ Result := QImage_numBytes(Handle); end; +{ TQtComboStrings } + +procedure TQtComboStrings.InternalUpdate; +begin + +end; + +procedure TQtComboStrings.ExternalUpdate(var Astr: TStringList; Clear: Boolean + ); +var + i: Integer; + data: QVariantH; +begin + + data := QVariant_create(10); //Creates dummy data + + FUpdating := True; + if Clear then + QComboBox_clear(FQtComboBox); + for i := 0 to AStr.Count -1 do + QComboBox_additem(FQtComboBox, @WideString(Astr[i]), data); + FUpdating := False; + IsChanged; + FUpdating := False; + + QVariant_destroy(data); // Clean up +end; + +procedure TQtComboStrings.IsChanged; +begin + +end; + +function TQtComboStrings.GetTextStr: string; +begin + Result:=inherited GetTextStr; +end; + +function TQtComboStrings.GetCount: integer; +begin + if FComboChanged then InternalUpdate; + Result := FStringList.Count; +end; + +function TQtComboStrings.Get(Index: Integer): string; +begin + if FComboChanged then InternalUpdate; + if Index < FStringList.Count then + Result := FStringList.Strings[Index] + else Result := ''; +end; + +constructor TQtComboStrings.Create(ComboBoxH: QComboBoxH; TheOwner: TWinControl + ); +var + Method: TMethod; + Hook : QComboBox_hookH; +// Astr: WideString; + i: Integer; +begin + inherited Create; + + {$ifdef VerboseQt} + if (ComboBoxH = nil) then WriteLn('TQtComboStrings.Create Unspecified ComboBoxH widget'); + if (TheOwner = nil) then WriteLn('TQtComboStrings.Create Unspecified owner'); + {$endif} + + FStringList := TStringList.Create; + FQtComboBox := ComboBoxH; + FStringList.Text := TCustomComboBox(TheOwner).Items.Text; + FOwner:=TheOwner; +end; + +destructor TQtComboStrings.Destroy; +begin + inherited Destroy; +end; + +procedure TQtComboStrings.Assign(Source: TPersistent); +begin + inherited Assign(Source); +end; + +procedure TQtComboStrings.Clear; +begin + FUpdating := True; + FStringList.Clear; + QComboBox_clear(FQtComboBox); + FComboChanged := False; + FUpdating := False; + IsChanged; +end; + +procedure TQtComboStrings.Delete(Index: integer); +begin + if FComboChanged then InternalUpdate; + + if Index < FStringList.Count then + begin + FStringList.Delete(Index); + ExternalUpdate(FStringList,True); + FComboChanged := False; + end; +end; + +procedure TQtComboStrings.Insert(Index: integer; const S: string); +begin + if FComboChanged then InternalUpdate; + + if Index < 0 then Index := 0; + + if Index <= FStringList.Count then + begin + FStringList.Insert(Index,S); + ExternalUpdate(FStringList,True); + FComboChanged := False; + end; +end; + +procedure TQtComboStrings.SetText(TheText: PChar); +begin + inherited SetText(TheText); +end; + end. Index: lcl/interfaces/qt/qtwsstdctrls.pp =================================================================== --- lcl/interfaces/qt/qtwsstdctrls.pp (revision 10003) +++ lcl/interfaces/qt/qtwsstdctrls.pp (working copy) @@ -1071,10 +1071,11 @@ Returns: The state of the control ------------------------------------------------------------------------------} class function TQtWSCustomComboBox.GetItems(const ACustomComboBox: TCustomComboBox): TStrings; +var + ComboBoxH: QComboBoxH; begin - Result := TStringList.Create; - - Result.Text := ACustomComboBox.Items.Text; + ComboBoxH := QComboBoxH((TQtWidget(ACustomComboBox.Handle).Widget)); + Result := TQtComboStrings.Create(ComboBoxH, ACustomComboBox); end; initialization