diff options
Diffstat (limited to 'src/gui/colordialog.inc')
-rw-r--r-- | src/gui/colordialog.inc | 316 |
1 files changed, 316 insertions, 0 deletions
diff --git a/src/gui/colordialog.inc b/src/gui/colordialog.inc new file mode 100644 index 00000000..6914257e --- /dev/null +++ b/src/gui/colordialog.inc @@ -0,0 +1,316 @@ +{ + fpGUI - Free Pascal GUI Toolkit + + Copyright (C) 2006 - 2010 See the file AUTHORS.txt, included in this + distribution, for details of the copyright. + + See the file COPYING.modifiedLGPL, included in this distribution, + for details about redistributing fpGUI. + + 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. + + Description: + This unit contains the Color Selection dialog. +} + + +{%mainunit fpg_dialogs.pas} + +{$IFDEF read_interface} + +type + + TfpgColorSelectDialog = class(TfpgBaseDialog) + private + {@VFD_HEAD_BEGIN: ColorSelectDialog} + PageControl1: TfpgPageControl; + TabSheet1: TfpgTabSheet; + TabSheet2: TfpgTabSheet; + ComboBox1: TfpgComboBox; + ColorListBox1: TfpgColorListBox; + Label1: TfpgLabel; + Label2: TfpgLabel; + ColorWheel: TfpgColorWheel; + ValueBar: TfpgValueBar; + edR: TfpgSpinEdit; + edG: TfpgSpinEdit; + edB: TfpgSpinEdit; + Label3: TfpgLabel; + Label4: TfpgLabel; + Label5: TfpgLabel; + pnlColorPreview: TfpgBevel; + {@VFD_HEAD_END: ColorSelectDialog} + FViaRGB: Boolean; // to prevent recursive changes + function GetSelectedColor: TfpgColor; + procedure SetSelectedColor(const AValue: TfpgColor); + procedure ColorChanged(Sender: TObject); + procedure RGBChanged(Sender: TObject); + procedure UpdateRGBComponents; + public + constructor Create(AOwner: TComponent); override; + procedure AfterCreate; override; + property SelectedColor: TfpgColor read GetSelectedColor write SetSelectedColor; + end; + + +{$ENDIF read_interface} + + + +{$IFDEF read_implementation} + + +function fpgSelectColorDialog(APresetColor: TfpgColor): TfpgColor; +var + frm: TfpgColorSelectDialog; +begin + Result := APresetColor; + frm := TfpgColorSelectDialog.Create(nil); + try + frm.ColorWheel.SetSelectedColor(APresetColor); + if frm.ShowModal = mrOK then + Result := frm.ValueBar.SelectedColor; + finally + frm.Free; + end; +end; + +{ TfpgColorSelectDialog } + +function TfpgColorSelectDialog.GetSelectedColor: TfpgColor; +begin + // +end; + +procedure TfpgColorSelectDialog.SetSelectedColor(const AValue: TfpgColor); +begin + // +end; + +procedure TfpgColorSelectDialog.ColorChanged(Sender: TObject); +begin +// UpdateHSVComponents; + if not FViaRGB then + UpdateRGBComponents; + pnlColorPreview.BackgroundColor := ValueBar.SelectedColor; +end; + +procedure TfpgColorSelectDialog.RGBChanged(Sender: TObject); +var + rgb: TFPColor; + c: TfpgColor; +begin + FViaRGB := True; // prevent recursive updates + rgb.Red := edR.Value; + rgb.Green := edG.Value; + rgb.Blue := edB.Value; + c := FPColorTofpgColor(rgb); + ColorWheel.SetSelectedColor(c); // This will trigger ColorWheel and ValueBar OnChange event + FViaRGB := False; +end; + +procedure TfpgColorSelectDialog.UpdateRGBComponents; +var + rgb: TFPColor; + c: TfpgColor; +begin + c := ValueBar.SelectedColor; + rgb := fpgColorToFPColor(c); + edR.Value := rgb.Red; + edG.Value := rgb.Green; + edB.Value := rgb.Blue; +end; + +constructor TfpgColorSelectDialog.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FViaRGB := false; +end; + + +procedure TfpgColorSelectDialog.AfterCreate; +begin + {%region 'Auto-generated GUI code' -fold} + {@VFD_BODY_BEGIN: ColorSelectDialog} + Name := 'ColorSelectDialog'; + SetPosition(316, 186, 328, 375); + WindowTitle := 'Color Select Dialog'; + Hint := ''; + WindowPosition := wpOneThirdDown; + + PageControl1 := TfpgPageControl.Create(self); + with PageControl1 do + begin + Name := 'PageControl1'; + SetPosition(4, 4, 320, 332); + Anchors := [anLeft,anRight,anTop,anBottom]; + ActivePageIndex := 0; + Hint := ''; + TabOrder := 1; + end; + + TabSheet1 := TfpgTabSheet.Create(PageControl1); + with TabSheet1 do + begin + Name := 'TabSheet1'; + SetPosition(3, 24, 314, 305); + Text := 'Color Wheel'; + end; + + TabSheet2 := TfpgTabSheet.Create(PageControl1); + with TabSheet2 do + begin + Name := 'TabSheet2'; + SetPosition(3, 24, 314, 305); + Text := 'Predefined'; + end; + + ComboBox1 := TfpgComboBox.Create(TabSheet2); + with ComboBox1 do + begin + Name := 'ComboBox1'; + SetPosition(8, 24, 299, 22); + Anchors := [anLeft,anRight,anTop]; + FontDesc := '#List'; + Hint := ''; + TabOrder := 1; + end; + + ColorListBox1 := TfpgColorListBox.Create(TabSheet2); + with ColorListBox1 do + begin + Name := 'ColorListBox1'; + SetPosition(8, 72, 299, 224); + Anchors := [anLeft,anRight,anTop,anBottom]; + ColorPalette := cpStandardColors; + FontDesc := '#List'; + Hint := ''; + HotTrack := False; + PopupFrame := False; + TabOrder := 2; + end; + + Label1 := TfpgLabel.Create(TabSheet2); + with Label1 do + begin + Name := 'Label1'; + SetPosition(8, 6, 328, 16); + FontDesc := '#Label1'; + Hint := ''; + Text := 'Select a color palette'; + end; + + Label2 := TfpgLabel.Create(TabSheet2); + with Label2 do + begin + Name := 'Label2'; + SetPosition(8, 54, 328, 16); + FontDesc := '#Label1'; + Hint := ''; + Text := 'Available colors:'; + end; + + ColorWheel := TfpgColorWheel.Create(TabSheet1); + with ColorWheel do + begin + Name := 'ColorWheel'; + SetPosition(8, 8, 204, 204); + end; + + ValueBar := TfpgValueBar.Create(TabSheet1); + with ValueBar do + begin + Name := 'ValueBar'; + SetPosition(240, 8, 64, 204); + OnChange := @ColorChanged; + end; + + edR := TfpgSpinEdit.Create(TabSheet1); + with edR do + begin + Name := 'edR'; + SetPosition(92, 216, 52, 24); + MaxValue := 255; + MinValue := 0; + OnChange := @RGBChanged; + end; + + edG := TfpgSpinEdit.Create(TabSheet1); + with edG do + begin + Name := 'edG'; + SetPosition(92, 244, 52, 24); + MaxValue := 255; + MinValue := 0; + OnChange := @RGBChanged; + end; + + edB := TfpgSpinEdit.Create(TabSheet1); + with edB do + begin + Name := 'edB'; + SetPosition(92, 272, 52, 24); + MaxValue := 255; + MinValue := 0; + OnChange := @RGBChanged; + end; + + Label3 := TfpgLabel.Create(TabSheet1); + with Label3 do + begin + Name := 'Label3'; + SetPosition(8, 220, 80, 16); + Alignment := taRightJustify; + FontDesc := '#Label1'; + Hint := ''; + Text := 'Red'; + end; + + Label4 := TfpgLabel.Create(TabSheet1); + with Label4 do + begin + Name := 'Label4'; + SetPosition(8, 248, 80, 16); + Alignment := taRightJustify; + FontDesc := '#Label1'; + Hint := ''; + Text := 'Green'; + end; + + Label5 := TfpgLabel.Create(TabSheet1); + with Label5 do + begin + Name := 'Label5'; + SetPosition(8, 276, 80, 16); + Alignment := taRightJustify; + FontDesc := '#Label1'; + Hint := ''; + Text := 'Blue'; + end; + + pnlColorPreview := TfpgBevel.Create(TabSheet1); + with pnlColorPreview do + begin + Name := 'pnlColorPreview'; + SetPosition(248, 232, 52, 52); + Hint := ''; + end; + + {@VFD_BODY_END: ColorSelectDialog} + {%endregion} + + // link colorwheel and valuebar + ColorWheel.ValueBar := ValueBar; + + // position standard dialog buttons + btnCancel.Left := Width - FDefaultButtonWidth - FSpacing; + btnCancel.Top := Height - btnCancel.Height - FSpacing; + btnOK.Left := btnCancel.Left - FDefaultButtonWidth - 6; + btnOK.Top := btnCancel.Top; +end; + + +{$ENDIF read_implementation} + |