From: Marcel B. <jed...@us...> - 2003-09-21 18:09:14
|
Update of /cvsroot/jvcl/dev/JVCL3/run In directory sc8-pr-cvs1:/tmp/cvs-serv14404/dev/JVCL3/run Modified Files: JvColorProvider.pas Log Message: Committing so the JvColorProvider works again; note that some of the new stuff has not been tested, but most is not accesible from a consumer anyway. Index: JvColorProvider.pas =================================================================== RCS file: /cvsroot/jvcl/dev/JVCL3/run/JvColorProvider.pas,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** JvColorProvider.pas 20 Sep 2003 16:59:36 -0000 1.8 --- JvColorProvider.pas 21 Sep 2003 18:09:11 -0000 1.9 *************** *** 38,44 **** type TColorItem = record Value: TColor; ! // Names: TDynStringArray; end; TColorItems = array of TColorItem; --- 38,45 ---- type + TColorType = (ctStandard, ctSystem, ctCustom); TColorItem = record Value: TColor; ! Names: TDynStringArray; end; TColorItems = array of TColorItem; *************** *** 49,59 **** FSysColors: TColorItems; FCstColors: TColorItems; ! private procedure AddColorStr(const S: string); protected procedure AddColor(var List: TColorItems; Color: TColor); procedure DeleteColor(var List: TColorItems; Index: Integer); class function ItemsClass: TJvDataItemsClass; override; function ConsumerClasses: TClassArray; override; property StdColors: TColorItems read FStdColors write FStdColors; --- 50,63 ---- FSysColors: TColorItems; FCstColors: TColorItems; ! FCtxList: TDynIntegerArray; procedure AddColorStr(const S: string); protected procedure AddColor(var List: TColorItems; Color: TColor); procedure DeleteColor(var List: TColorItems; Index: Integer); + procedure RemoveContextList(Index: Integer); virtual; class function ItemsClass: TJvDataItemsClass; override; function ConsumerClasses: TClassArray; override; + procedure ContextDestroying(Context: IJvDataContext); override; + function GetColor(List, Index: Integer; out Value: TColor; out Name: string): Boolean; property StdColors: TColorItems read FStdColors write FStdColors; *************** *** 62,66 **** public constructor Create(AOwner: TComponent); override; ! destructor Destroy; override; end; --- 66,73 ---- public constructor Create(AOwner: TComponent); override; ! function GetStandardColor(Index: Integer; out Value: TColor; out Name: string): Boolean; ! function GetSystemColor(Index: Integer; out Value: TColor; out Name: string): Boolean; ! function GetCustomColor(Index: Integer; out Value: TColor; out Name: string): Boolean; ! function FindColor(Value: TColor; out ColorType: TColorType; out Index: Integer): Boolean; end; *************** *** 858,862 **** inherited InitImplementers; {$WARNINGS OFF} ! TJvColorItemsList.CreateParent(Self); {$WARNINGS ON} end; --- 865,869 ---- inherited InitImplementers; {$WARNINGS OFF} ! TJvColorItemsList.Create(Self); {$WARNINGS ON} end; *************** *** 899,902 **** --- 906,919 ---- end; + procedure TJvColorProvider.RemoveContextList(Index: Integer); + begin + if (Index > -1) and (Index < Length(FCtxList)) then + begin + if Index < High(FCtxList) then + Move(FCtxList[Index + 1], FCtxList[Index], SizeOf(Integer) * (High(FCtxList) - Index)); + SetLength(FCtxList, High(FCtxList)); + end; + end; + class function TJvColorProvider.ItemsClass: TJvDataItemsClass; begin *************** *** 910,913 **** --- 927,970 ---- end; + procedure TJvColorProvider.ContextDestroying(Context: IJvDataContext); + var + CtxIdx: Integer; + begin + CtxIdx := Context.Contexts.IndexOf(Context); + if CtxIdx > -1 then + RemoveContextList(CtxIdx); + end; + + function TJvColorProvider.GetColor(List, Index: Integer; out Value: TColor; + out Name: string): Boolean; + var + ColorArray: TColorItems; + CtxIdx: Integer; + begin + case List of + 0: + ColorArray := FStdColors; + 1: + ColorArray := FSysColors; + 2: + ColorArray := FCstColors; + else + begin + Result := False; + Exit; + end; + end; + Result := (Index >= 0) and (Index < Length(ColorArray)); + if Result then + begin + Value := ColorArray[Index].Value; + CtxIdx := (DataContextsImpl as IJvDataContexts).IndexOf(SelectedContext); + if CtxIdx >= 0 then + Name := ColorArray[Index].Names[CtxIdx] + else + Name := ''; + end; + end; + constructor TJvColorProvider.Create(AOwner: TComponent); begin *************** *** 916,923 **** end; ! destructor TJvColorProvider.Destroy; begin ! // TJvColorItems(DataItemsImpl).ProviderComp := nil; ! inherited Destroy; end; --- 973,1015 ---- end; ! function TJvColorProvider.GetStandardColor(Index: Integer; out Value: TColor; out Name: string): Boolean; begin ! Result := GetColor(0, Index, Value, Name); ! end; ! ! function TJvColorProvider.GetSystemColor(Index: Integer; out Value: TColor; out Name: string): Boolean; ! begin ! Result := GetColor(1, Index, Value, Name); ! end; ! ! function TJvColorProvider.GetCustomColor(Index: Integer; out Value: TColor; out Name: string): Boolean; ! begin ! Result := GetColor(2, Index, Value, Name); ! end; ! ! function TJvColorProvider.FindColor(Value: TColor; out ColorType: TColorType; out Index: Integer): Boolean; ! begin ! Index := High(FStdColors); ! while (Index >= 0) and (FStdColors[Index].Value <> Value) do ! Dec(Index); ! if Index >= 0 then ! ColorType := ctStandard ! else ! begin ! Index := High(FSysColors); ! while (Index >= 0) and (FSysColors[Index].Value <> Value) do ! Dec(Index); ! if Index >= 0 then ! ColorType := ctSystem ! else ! begin ! Index := High(FCstColors); ! while (Index >= 0) and (FCstColors[Index].Value <> Value) do ! Dec(Index); ! if Index >= 0 then ! ColorType := ctCustom; ! end; ! end; ! Result := Index >= 0; end; |