From 4f83704448bda4d8d6365689fdb7ddb0b01538ce Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Wed, 29 Jun 2016 22:24:10 +0000 Subject: [PATCH] tvplanit: Fix Event Editor if start and end times are in reverse order. Some cosmetic changes git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4871 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/tvplanit/languages/vpsr.de.po | 4 + components/tvplanit/languages/vpsr.po | 4 + components/tvplanit/languages/vpsr.ru.po | 4 + components/tvplanit/source/vpbase.pas | 12 - components/tvplanit/source/vpevnteditdlg.lfm | 2 - components/tvplanit/source/vpevnteditdlg.pas | 222 +++---------------- components/tvplanit/source/vpsr.inc | 2 + 7 files changed, 43 insertions(+), 207 deletions(-) diff --git a/components/tvplanit/languages/vpsr.de.po b/components/tvplanit/languages/vpsr.de.po index a339ac305..d34c5d057 100644 --- a/components/tvplanit/languages/vpsr.de.po +++ b/components/tvplanit/languages/vpsr.de.po @@ -921,6 +921,10 @@ msgstr "Klang-Suche" msgid "Error: Unable to update " msgstr "Fehler: Kann nicht updaten" +#: vpsr.rsstartendtimeerror +msgid "Incorrect order of start and end times. Do you want to flip them?" +msgstr "Falsche Reihenfolge der Start- und Ende-Zeit. Wollen Sie die beiden vertauschen?" + #: vpsr.rsstarttimelbl msgid "Start time:" msgstr "Start-Zeit:" diff --git a/components/tvplanit/languages/vpsr.po b/components/tvplanit/languages/vpsr.po index ee971f996..dfa3cdda0 100644 --- a/components/tvplanit/languages/vpsr.po +++ b/components/tvplanit/languages/vpsr.po @@ -911,6 +911,10 @@ msgstr "" msgid "Error: Unable to update " msgstr "" +#: vpsr.rsstartendtimeerror +msgid "Incorrect order of start and end times. Do you want to flip them?" +msgstr "" + #: vpsr.rsstarttimelbl msgid "Start time:" msgstr "" diff --git a/components/tvplanit/languages/vpsr.ru.po b/components/tvplanit/languages/vpsr.ru.po index be3da2d5b..2170ec765 100644 --- a/components/tvplanit/languages/vpsr.ru.po +++ b/components/tvplanit/languages/vpsr.ru.po @@ -937,6 +937,10 @@ msgstr "" msgid "Error: Unable to update " msgstr "Ошибка обновления" +#: vpsr.rsstartendtimeerror +msgid "Incorrect order of start and end times. Do you want to flip them?" +msgstr "" + #: vpsr.rsstarttimelbl #, fuzzy #| msgid "Start Time:" diff --git a/components/tvplanit/source/vpbase.pas b/components/tvplanit/source/vpbase.pas index e6985de83..7d921b174 100644 --- a/components/tvplanit/source/vpbase.pas +++ b/components/tvplanit/source/vpbase.pas @@ -214,18 +214,6 @@ type protected FCat: array[0..9] of TVpCategoryInfo; procedure SetCat(AIndex: Integer; AValue: TVpCategoryInfo); - { - FCat0: TVpCategoryInfo; - FCat1: TVpCategoryInfo; - FCat2: TVpCategoryInfo; - FCat3: TVpCategoryInfo; - FCat4: TVpCategoryInfo; - FCat5: TVpCategoryInfo; - FCat6: TVpCategoryInfo; - FCat7: TVpCategoryInfo; - FCat8: TVpCategoryInfo; - FCat9: TVpCategoryInfo; - } public constructor Create; destructor Destroy; override; diff --git a/components/tvplanit/source/vpevnteditdlg.lfm b/components/tvplanit/source/vpevnteditdlg.lfm index 9e8f27f96..94acb14e3 100644 --- a/components/tvplanit/source/vpevnteditdlg.lfm +++ b/components/tvplanit/source/vpevnteditdlg.lfm @@ -406,7 +406,6 @@ object DlgEventEdit: TDlgEventEdit } NumGlyphs = 1 MaxLength = 0 - OnChangeBounds = StartDateChange TabOrder = 4 end object EndDate: TDateEdit @@ -457,7 +456,6 @@ object DlgEventEdit: TDlgEventEdit } NumGlyphs = 1 MaxLength = 0 - OnChangeBounds = EndDateChange TabOrder = 5 end object RepeatUntil: TDateEdit diff --git a/components/tvplanit/source/vpevnteditdlg.pas b/components/tvplanit/source/vpevnteditdlg.pas index 4bc760bc0..c0a1357d0 100644 --- a/components/tvplanit/source/vpevnteditdlg.pas +++ b/components/tvplanit/source/vpevnteditdlg.pas @@ -101,21 +101,15 @@ type procedure OKBtnClick(Sender: TObject); procedure CancelBtnClick(Sender: TObject); procedure FormCreate(Sender: TObject); - procedure StartDateChange(Sender: TObject); - procedure StartTimeChange(Sender: TObject); - procedure EndTimeChange(Sender: TObject); procedure AlarmAdvanceChange(Sender: TObject); procedure AdvanceUpDownClick(Sender: TObject; Button: TUDBtnType); procedure CustomIntervalChange(Sender: TObject); procedure IntervalUpDownClick(Sender: TObject; Button: TUDBtnType); procedure RecurringTypeChange(Sender: TObject); procedure AlarmSetClick(Sender: TObject); - procedure EndDateChange(Sender: TObject); procedure CBAllDayClick(Sender: TObject); procedure SoundFinderBtnClick(Sender: TObject); procedure FormShow(Sender: TObject); - procedure StartTimeExit(Sender: TObject); - procedure EndTimeExit(Sender: TObject); private { Private declarations } {$IFDEF LCL} @@ -181,6 +175,7 @@ uses {$R *.dfm} {$ENDIF} + { TVpRightAlignedEdit } constructor TVpRightAlignedEdit.Create(AOwner: TComponent); @@ -256,22 +251,19 @@ end; procedure TDlgEventEdit.OKBtnClick(Sender: TObject); var res: Integer; - tStart, tEnd, t: TDateTime; + tStart, tEnd: TDateTime; begin - tStart := StartDate.Date + StartTime.Time; - tEnd := EndDate.Date + EndTime.Time; + tStart := trunc(StartDate.Date) + frac(StartTime.Time); + tEnd := trunc(EndDate.Date) + frac(EndTime.Time); if (tStart > tEnd) then begin - res := MessageDlg('Incorrect order of start and end times. Do you want to flip them?', + res := MessageDlg(RSStartEndTimeError, mtConfirmation, [mbYes, mbNo], 0); if res = mrYes then begin - t := tStart; - tStart := tEnd; - tEnd := t; - StartDate.Date := trunc(tStart); - StartTime.Time := frac(tStart); - EndDate.Date := trunc(tEnd); - EndTime.Time := frac(tEnd); + StartDate.Date := trunc(tEnd); + StartTime.Time := frac(tEnd); + EndDate.Date := trunc(tStart); + EndTime.Time := frac(tStart); end else exit; end; @@ -288,49 +280,9 @@ var ColorRect: TRect; begin Category.Canvas.FillRect(ARect); - Color := clBlack; - case Index of - 0: begin - Color := CatColorMap.Category0.Color; - Name := CatColorMap.Category0.Description; - end; - 1: begin - Color := CatColorMap.Category1.Color; - Name := CatColorMap.Category1.Description; - end; - 2: begin - Color := CatColorMap.Category2.Color; - Name := CatColorMap.Category2.Description; - end; - 3: begin - Color := CatColorMap.Category3.Color; - Name := CatColorMap.Category3.Description; - end; - 4: begin - Color := CatColorMap.Category4.Color; - Name := CatColorMap.Category4.Description; - end; - 5: begin - Color := CatColorMap.Category5.Color; - Name := CatColorMap.Category5.Description; - end; - 6: begin - Color := CatColorMap.Category6.Color; - Name := CatColorMap.Category6.Description; - end; - 7: begin - Color := CatColorMap.Category7.Color; - Name := CatColorMap.Category7.Description; - end; - 8: begin - Color := CatColorMap.Category8.Color; - Name := CatColorMap.Category8.Description; - end; - 9: begin - Color := CatColorMap.Category9.Color; - Name := CatColorMap.Category9.Description; - end; - end; {Case} + + Color := CatColorMap.GetCategory(Index).Color; + Name := CatColorMap.GetCategory(Index).Description; SaveColor := Category.Canvas.Brush.Color; Category.Canvas.Brush.Color := Color; @@ -351,13 +303,10 @@ begin Category.Canvas.TextOut(ARect.Left, ARect.Top, Name); end; -{=====} - procedure TDlgEventEdit.CancelBtnClick(Sender: TObject); begin Close; end; -{=====} procedure TDlgEventEdit.PopulateDialog; var @@ -367,13 +316,17 @@ begin ResourceNameLbl.Caption := Resource.Description; { Events } - StartDate.Date := Event.StartTime; - EndDate.Date := Event.EndTime; - RepeatUntil.Date := Event.RepeatRangeEnd; + StartDate.Date := trunc(Event.StartTime); + EndDate.Date := trunc(Event.EndTime); + RepeatUntil.Date := trunc(Event.RepeatRangeEnd); + {$IFDEF LCL} + StartTime.Time := frac(Event.StartTime); + EndTime.Time := frac(Event.EndTime); + {$ELSE} StartTime.Text := FormatDateTime('hh:nn',Event.StartTime); EndTime.Text := FormatDateTime('hh:nn',Event.EndTime); + {$ENDIF} - StartTimeChange(Self); CBAllDay.Checked := Event.AllDayEvent; AlarmWavPath := Event.DingPath; @@ -406,13 +359,17 @@ begin FLastEndTime := Event.EndTime; end; -{=====} procedure TDlgEventEdit.DePopulateDialog; begin { Events } + {$IFDEF LCL} + Event.StartTime := StartDate.Date + StartTime.Time; + Event.EndTime := EndDate.Date + EndTime.Time; + {$ELSE} Event.StartTime := StartDate.Date + StrToTime(StartTime.Text); Event.EndTime := EndDate.Date + StrToTime(EndTime.Text); + {$ENDIF} Event.RepeatRangeEnd := RepeatUntil.Date; Event.Description := DescriptionEdit.Text; Event.Location := LocationEdit.Text; @@ -426,86 +383,6 @@ begin Event.AllDayEvent := CBAllDay.Checked; Event.DingPath := AlarmWavPath; end; -{=====} - -procedure TDlgEventEdit.StartDateChange(Sender: TObject); -begin - if StartDate.Date > EndDate.Date then - EndDate.Date := StartDate.Date; -end; -{=====} - -procedure TDlgEventEdit.EndDateChange(Sender: TObject); -begin - if StartDate.Date > EndDate.Date then - StartDate.Date := EndDate.Date; -end; -{=====} - -procedure TDlgEventEdit.StartTimeChange(Sender: TObject); -var - ST: TDateTime; -begin - { Verify the value is valid } - try - ST := StrToTime(StartTime.Text); - except - StartTime.Color := clRed; - if Visible then - StartTime.SetFocus; - Exit; - end; - StartTime.Color := clWindow; - - (* - { if the end time is less than the start time then change the end time to } - { follow the start time by 30 minutes } - if ST > StrToTime(EndTime.Text) then begin - if TimeFormat = tf24Hour then - EndTime.Text := FormatDateTime('h:nn', ST + 30 / MinutesInDay) - else - EndTime.Text := FormatDateTime('hh:nn AM/PM', ST + 30 / MinutesInDay); - end; - *) - -end; -{=====} - -procedure TDlgEventEdit.EndTimeChange(Sender: TObject); - - function IsMidnight(ATime: TDateTime) : Boolean; - begin - Result := ATime = Trunc(ATime); - end; - -var - ET: TDateTime; -begin - { Verify the value is valid } - try - ET := StrToTime(EndTime.Text); - if (IsMidnight(ET)) and (not IsMidnight(FLastEndTime)) then - EndDate.Date := EndDate.Date + 1 - else if (not IsMidnight(ET)) and (IsMidnight(FLastEndTime)) then - EndDate.Date := EndDate.Date - 1; - FLastEndTime := ET; - except - EndTime.Color := clRed; - EndTime.SetFocus; - Exit; - end; - EndTime.Color := clWindow; - - { if the end time is less than the start time then change the start time to } - { precede the end time by 30 minutes } - if ET < StrToTime(StartTime.Text) then begin - if TimeFormat = tf24Hour then - StartTime.Text := FormatDateTime('h:mm', ET - 30 / MinutesInDay) - else - StartTime.Text := FormatDateTime('h:mm AM/PM', ET - 30 / MinutesInDay); - end; -end; -{=====} procedure TDlgEventEdit.PopLists; {$IFDEF DELPHI} @@ -591,11 +468,12 @@ var Str: string; begin if AAVerifying then exit; + AAVerifying := true; { Don't allow non numeric values. } Str := AlarmAdvance.Text; I := Length(Str); - if (Str[I] > #57) or (Str[I] < #48) then + if (Str[I] > '9') or (Str[I] < '0') then Delete(Str, I, 1); AlarmAdvance.Text := Str; AAVerifying := false; @@ -628,7 +506,7 @@ begin CIVerifying := true; Str := FCustomInterval.Text; for I := 1 to Length(Str) do - if (Ord(Str[I]) in [48..57]) then + if (Str[I] in ['0'..'9']) then Continue else Delete(Str, I, 1); @@ -788,6 +666,7 @@ begin CategoryLbl.Left := Category.Left - DELTA - GetLabelWidth(CategoryLbl); end; + { TVpEventEditDialog } constructor TVpEventEditDialog.Create(AOwner: TComponent); @@ -842,49 +721,6 @@ begin end; end; end; -{=====} - -procedure TDlgEventEdit.StartTimeExit(Sender: TObject); -var - ST : TDateTime; -begin - { Verify the value is valid } - try - ST := StartDate.Date + StrToTime(StartTime.Text); - except - StartTime.Color := clRed; - StartTime.SetFocus; - Exit; - end; - StartTime.Color := clWindow; - - { If the end time is less than the start time then change the end } - { time to follow the start time by 30 minutes } - - if ST > EndDate.Date + StrToTime (EndTime.Text) then - EndTime.Text := FormatDateTime('hh:nn', ST + 30 / MinutesInDay); -end; - -procedure TDlgEventEdit.EndTimeExit(Sender: TObject); -var - ET: TDateTime; -begin - { Verify the value is valid } - try - ET := EndDate.Date + StrToTime(EndTime.Text); - except - EndTime.Color := clRed; - EndTime.SetFocus; - Exit; - end; - EndTime.Color := clWindow; - - { If the end time is less than the start time then change the } - { start time to precede the end time by 30 minutes } - - if ET < StartDate.Date + StrToTime (StartTime.Text) then - StartTime.Text := FormatDateTime('hh:nn', ET - 30 / MinutesInDay); -end; end. diff --git a/components/tvplanit/source/vpsr.inc b/components/tvplanit/source/vpsr.inc index c523e1c74..e563cea4a 100644 --- a/components/tvplanit/source/vpsr.inc +++ b/components/tvplanit/source/vpsr.inc @@ -137,6 +137,8 @@ resourcestring {Event Specific} RSFromSchedule = 'from your schedule?'; RSConfirmDeleteEvent = 'Delete event from schedule?'; + RSStartEndTimeError = 'Incorrect order of start and end times. ' + + 'Do you want to flip them?'; {Task Specific} RSConfirmDeleteTask = 'Delete this task from your list?';