tvplanit: Add editing of events to TVpMonthView by double-click

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5990 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2017-08-02 17:20:03 +00:00
parent c774cc8a2f
commit 219e3830e8
4 changed files with 103 additions and 35 deletions

View File

@@ -1749,7 +1749,7 @@ begin
Invalidate;
end;
{$IF VP_LCL_SCALING}
{$IF VP_LCL_SCALING=1}
procedure TVpContactGrid.ScaleFontsPPI(const AProportion: Double);
begin
inherited;

View File

@@ -646,7 +646,7 @@ var
cont: TVpContact;
task: TvpTask;
i, j: Integer;
// s: String;
s: String;
stream: TStream;
begin
if FFilename = '' then
@@ -710,9 +710,12 @@ begin
stream := TFileStream.Create(FFilename, fmCreate);
try
{$IF FPC_FULLVERSION < 030000}
s := json.FormatJSON;
stream.Write(s[1], Length(s));
{$ELSE}
json.DumpJSON(stream);
// s := json.FormatJSON;
// stream.Write(s[1], Length(s));
{$ENDIF}
finally
stream.Free;
end;

View File

@@ -172,7 +172,9 @@ type
FMouseDate: TDateTime;
{ event variables }
FOnAddEvent: TVpOnAddNewEvent;
FOwnerDrawCells: TVpOwnerDrawDayEvent;
FOwnerEditEvent: TVpEditEvent;
FOnEventClick: TVpOnEventClick;
FOnEventDblClick: TVpOnEventClick;
@@ -207,6 +209,7 @@ type
{ internal methods }
function GetDateAtCoord(APoint: TPoint): TDateTime;
procedure mvPopulate;
procedure mvSpawnEventEditDialog(NewEvent: Boolean);
procedure mvSpinButtonClick(Sender: TObject; Button: TUDBtnType);
procedure mvSetDateByCoord(APoint: TPoint);
procedure mvHookUp;
@@ -308,9 +311,11 @@ type
property WeekendAttributes: TVpMvWeekendAttr read FWeekendAttr write FWeekendAttr;
property WeekStartsOn: TVpDayType read FWeekStartsOn write SetWeekStartsOn;
{events}
property OnAddEvent: TVpOnAddNewEvent read FOnAddEvent write FOnAddEvent;
property OnEventClick: TVpOnEventClick read FOnEventClick write FOnEventClick;
property OnEventDblClick: TVpOnEventClick read FOnEventDblClick write FOnEventDblClick;
property OnHoliday: TVpHolidayEvent read FOnHoliday write FOnHoliday;
property OnOwnerEditEvent: TVpEditEvent read FOwnerEditEvent write FOwnerEditEvent;
end;
@@ -321,7 +326,7 @@ uses
DateUtils,
{$ENDIF}
SysUtils, LazUTF8, Dialogs, StrUtils,
VpMonthViewPainter;
VpMonthViewPainter, VpEvntEditDlg;
(*****************************************************************************)
{ TVpMonthViewAttr }
@@ -653,6 +658,48 @@ begin
end;
{=====}
procedure TVpMonthView.mvSpawnEventEditDialog(NewEvent: Boolean);
var
AllowIt: Boolean;
EventDlg : TVpEventEditDialog;
begin
if DataStore = nil then Exit;
if (not NewEvent) and (not mvActiveEvent.CanEdit) then begin
MessageDlg(RSCannotEditOverlayedEvent, mtInformation, [mbOk], 0);
exit;
end;
AllowIt := false;
if Assigned(FOwnerEditEvent) then
FOwnerEditEvent(self, mvActiveEvent, DataStore.Resource, AllowIt)
else begin
EventDlg := TVpEventEditDialog.Create(nil);
try
EventDlg.DataStore := DataStore;
EventDlg.TimeFormat := FTimeFormat;
AllowIt := EventDlg.Execute(mvActiveEvent);
finally
EventDlg.Free;
end;
end;
if AllowIt then begin
mvActiveEvent.Changed := true;
DataStore.PostEvents;
if Assigned(FOnAddEvent) then
FOnAddEvent(self, mvActiveEvent);
Invalidate;
end else begin
if NewEvent then begin
DataStore.Resource.Schedule.DeleteEvent(mvActiveEvent);
mvActiveEvent := nil;
end;
DataStore.PostEvents;
Invalidate;
end;
end;
procedure TVpMonthView.mvSpinButtonClick(Sender: TObject; Button: TUDBtnType);
var
M, D, Y: Word;
@@ -875,20 +922,38 @@ procedure TVpMonthView.WMLButtonDblClick(var Msg: TWMLButtonDblClk);
{$ELSE}
procedure TVpMonthView.WMLButtonDblClick(var Msg: TLMLButtonDblClk);
{$ENDIF}
var
startTime, endTime: TDateTime;
begin
inherited;
// if the mouse was pressed down in the client area, then select the
// cell.
// if the mouse was pressed down in the client area, then select the cell.
if not focused then SetFocus;
if (Msg.YPos > mvDayHeadHeight) then
begin
{ The mouse click landed inside the client area }
MvSetDateByCoord(Point(Msg.XPos, Msg.YPos));
{ Did the mouse click land on an event? }
if SelectEventAtCoord(Point(Msg.XPos, Msg.YPos))
and (Assigned(FOnEventDblClick)) then
FOnEventDblClick(self, mvActiveEvent);
if Assigned(FOnEventDblClick) then begin
if SelectEventAtCoord(Point(Msg.XPos, Msg.YPos)) then
FOnEventDblClick(self, mvActiveEvent);
end else
if mvActiveEvent <> nil then
mvSpawnEventEditDialog(SelectEventAtCoord(Point(Msg.XPos, Msg.YPos)))
else
if (DataStore.Resource <> nil) then begin
{ otherwise, we must want to create a new event }
startTime := trunc(Date) + 0.5; { default to 12:00 noon }
endTime := startTime + 30 / MinutesInDay; { StartTime + 30 minutes }
mvActiveEvent := DataStore.Resource.Schedule.AddEvent(
DataStore.GetNextID('Events'),
startTime,
endTime
);
{ edit this new event }
mvSpawnEventEditDialog(True); // true = new event
end;
end;
end;
{=====}

View File

@@ -1248,7 +1248,7 @@ begin
end;
end;
{$IF VP_LCL_SCALING}
{$IF VP_LCL_SCALING=1}
procedure TVpTaskList.ScaleFontsPPI(const AProportion: Double);
begin
inherited;