Browse Source

* merged ColorSel implementations of Marco van de Voort and Andreas Jakobsche

git-svn-id: trunk@12311 -
florian 16 years ago
parent
commit
ee1961fdf0
1 changed files with 88 additions and 55 deletions
  1. 88 55
      packages/fv/src/colorsel.pas

+ 88 - 55
packages/fv/src/colorsel.pas

@@ -3,7 +3,7 @@
    (Still unused) skeleton for Colorsel replacement, based on mostly the 
    (Still unused) skeleton for Colorsel replacement, based on mostly the 
      use by the fpmopts.inc file, to be added on as details emerge.
      use by the fpmopts.inc file, to be added on as details emerge.
 
 
-   Copyright 2008 by Marco van de Voort
+   Copyright 2008 by Marco van de Voort and Andreas Jakobsche
 
 
    This library is free software; you can redistribute it and/or
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    modify it under the terms of the GNU Library General Public
@@ -20,69 +20,52 @@
    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 
  ****************************************************************************}
  ****************************************************************************}
-
-unit Colorsel;
+}
+unit ColorSel;
 
 
 interface
 interface
 
 
-Uses Objects,Dialogs;
+uses Objects, Dialogs, Views;
 
 
-Type
-    PColorItem  = ^TColorItem;
-    TColorItem  = Record
-                    Next : PColorItem;
-                    Name : PString;
-            		    Index: Longint;
-                    end;
+type
 
 
-    PColorGroup = ^TColorGroup;
-    TColorGroup = Record
-            		    Next  : PColorGroup;
-            		    Name  : PString;
-            		    Index : Longint;
-            		    Items : PColorItem;
-                	  end;
+  PColorItem = ^TColorItem;
+  TColorItem = record
+    Name: PString;
+    Index: Byte;
+    Next: PColorItem;
+  end;
 
 
-    PColorDialog = ^TColorDialog;
-    TColorDialog = object(TDialog)
-                       constructor Init(APalette:integer;colGroup:PColorGroup);  //
-                       constructor Load(var S: TStream);
-                       procedure Store(var S: TStream);
-                      end;
+  PColorGroup = ^TColorGroup;
+  TColorGroup = record
+    Name: PString;
+    Index: Byte;
+    Items: PColorItem;
+    Next: PColorGroup;
+  end;
 
 
-function ColorItem(Name:String;Index:integer;Item:PColorItem):PColorItem;
-function ColorGroup(Name:String;item:PColorItem;Group:PColorGroup):PColorGroup;
+  PColorGroupList = ^TColorGroupList;
+  TColorGroupList = object(TListViewer)
+    Groups: PColorGroup;
+    constructor Init(var Bounds: TRect; AScrollBar: PScrollBar; AGroups: PColorGroup);
+  end;
 
 
-// function MenuColorItems(p:pointer):PColorItem; ??
+  PColorDialog = ^TColorDialog;
+  TColorDialog = object(TDialog)
+    Groups: PColorGroupList;
+    Pal: TPalette;
+    constructor Init(APalette: TPalette; AGroups: PColorGroup);
+    constructor Load(var S: TStream);
+    procedure Store(var S: TStream);
+  end;
 
 
-procedure RegisterColorSel;
+function ColorGroup(Name: string; Items: PColorItem; Next: PColorGroup): PColorGroup;
 
 
-implementation
+function ColorItem(Name: string; Index: Byte; Next: PColorItem): PColorItem;
 
 
-Uses fvconsts; // idcolordialog
+implementation
 
 
-function ColorItem(Name:String;index:integer;Item:PColorItem):PColorItem;
-
-var p : PColorItem;
-begin
-  new(p);
-  new(p^.Name);
-  p^.Name^:=Name;
-  p^.index:=index;
-  p^.next:=item;
-  ColorItem:=p;
-end;
-
-function ColorGroup(Name:String;item:PColorItem;Group:PColorGroup):PColorGroup;
-var p : PColorGroup;
-begin
-  new(p);
-  new(p^.Name);
-  p^.Name^:=Name;
-  p^.next:=group;
-  p^.items:=item;
-  ColorGroup:=p;
-end;
+uses App;
 
 
 const
 const
   RColorDialog: TStreamRec = (
   RColorDialog: TStreamRec = (
@@ -92,7 +75,6 @@ const
      Store:   @TColorDialog.Store
      Store:   @TColorDialog.Store
   );
   );
 
 
-
 procedure RegisterColorsel;
 procedure RegisterColorsel;
 begin
 begin
  // according to help should register TColorSelector,     TMonoSelector, TColorDisplay, TColorGroupList, TColorItemList,     TColorDialog
  // according to help should register TColorSelector,     TMonoSelector, TColorDisplay, TColorGroupList, TColorItemList,     TColorDialog
@@ -106,12 +88,63 @@ begin
 end ;
 end ;
 
 
 
 
-constructor TColorDialog.Init(APalette:integer;colGroup:PColorGroup);
+function ColorGroup(Name: string; Items: PColorItem; Next: PColorGroup): PColorGroup;
+var
+  R: PColorGroup;
+begin
+  New(R);
+  R^.Name := NewStr(Name);
+  R^.Items := Items;
+  R^.Next := Next;
+  ColorGroup := R;
+end;
+
+
+function ColorItem(Name: string; Index: Byte; Next: PColorItem): PColorItem;
+var R: PColorItem;
 begin
 begin
+  New(R);
+  R^.Name := NewStr(Name);
+  R^.Index := Index;
+  R^.Next := Next;
+  ColorItem := R
 end;
 end;
+
+
+constructor TColorGroupList.Init(var Bounds: TRect; AScrollBar: PScrollBar; AGroups: PColorGroup);
+var
+  x: PColorGroup;
+begin
+  inherited Init(Bounds, 1, nil, AScrollBar);
+  Range := 0;
+  Groups := AGroups;
+  x := AGroups;
+  while Assigned(x) do begin
+    x^.Index := Range;
+    Inc(Range);
+    x := x^.Next
+  end;
+end;
+
+
+constructor TColorDialog.Init(APalette: TPalette; AGroups: PColorGroup);
+var
+  Bounds: TRect;
+begin
+  Bounds.Assign(0, 0, 62, 19);
+  inherited Init(Bounds, 'Colors');
+  Options := Options or ofCentered;
+  Pal := APalette;
+  Bounds.Grow(-1, -1);
+  Groups := New(PColorGroupList, Init(Bounds, nil, AGroups));
+end;
+
+
 constructor TColorDialog.Load(var S: TStream);
 constructor TColorDialog.Load(var S: TStream);
 begin
 begin
 end;
 end;
+
+
 procedure TColorDialog.Store(var S: TStream);
 procedure TColorDialog.Store(var S: TStream);
 begin
 begin
 end;
 end;
@@ -201,4 +234,4 @@ end;
 fvconsts.pas:  idColorSelector = 92;
 fvconsts.pas:  idColorSelector = 92;
 fvconsts.pas:  idMonoSelector = 93;
 fvconsts.pas:  idMonoSelector = 93;
 
 
-}
+}