tvplanit: Add hint support for dayview. Use localized strings in event hints. Add HintMode (event hints or component hints).

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5157 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2016-09-12 22:25:34 +00:00
parent 29e9841d1b
commit 75ccd9a393
22 changed files with 676 additions and 473 deletions

View File

@ -77,8 +77,10 @@ object MainForm: TMainForm
Height = 197 Height = 197
Top = 331 Top = 331
Width = 333 Width = 333
ShowHint = True
ControlLink = VpControlLink1 ControlLink = VpControlLink1
Color = clWindow Color = clWindow
ParentShowHint = False
Align = alBottom Align = alBottom
TabStop = True TabStop = True
TabOrder = 0 TabOrder = 0
@ -117,6 +119,7 @@ object MainForm: TMainForm
Height = 284 Height = 284
Top = 42 Top = 42
Width = 333 Width = 333
ShowHint = True
ControlLink = VpControlLink1 ControlLink = VpControlLink1
Color = clWindow Color = clWindow
Font.Height = -12 Font.Height = -12
@ -572,6 +575,17 @@ object MainForm: TMainForm
OnChange = CbDragDropTransparentChange OnChange = CbDragDropTransparentChange
TabOrder = 7 TabOrder = 7
end end
object CbShowEventHints: TCheckBox
Left = 349
Height = 19
Top = 117
Width = 110
Caption = 'Show event hints'
Checked = True
OnChange = CbShowEventHintsChange
State = cbChecked
TabOrder = 8
end
end end
end end
end end

View File

@ -12,7 +12,7 @@ uses
ExtCtrls, StdCtrls, ComCtrls, LCLTranslator, Menus, Types, LCLVersion, ExtCtrls, StdCtrls, ComCtrls, LCLTranslator, Menus, Types, LCLVersion,
VpBaseDS, VpDayView, VpWeekView, VpTaskList, VpAbout, VpContactGrid, VpBaseDS, VpDayView, VpWeekView, VpTaskList, VpAbout, VpContactGrid,
VpMonthView, VpResEditDlg, VpContactButtons, VpNavBar, VpData, VpMonthView, VpResEditDlg, VpContactButtons, VpNavBar, VpData,
VpPrtPrvDlg, VpPrtFmtDlg, VpBase, VpCalendar; VpPrtPrvDlg, VpPrtFmtDlg, VpBase;
type type
@ -31,6 +31,7 @@ type
CbDrawingStyle: TComboBox; CbDrawingStyle: TComboBox;
CbAllowDragAndDrop: TCheckBox; CbAllowDragAndDrop: TCheckBox;
CbDragDropTransparent: TCheckBox; CbDragDropTransparent: TCheckBox;
CbShowEventHints: TCheckBox;
Img: TImage; Img: TImage;
ImageList1: TImageList; ImageList1: TImageList;
LblDrawingStyle: TLabel; LblDrawingStyle: TLabel;
@ -98,6 +99,7 @@ type
procedure CbFirstDayOfWeekChange(Sender: TObject); procedure CbFirstDayOfWeekChange(Sender: TObject);
procedure CbGranularityChange(Sender: TObject); procedure CbGranularityChange(Sender: TObject);
procedure CbLanguagesChange(Sender: TObject); procedure CbLanguagesChange(Sender: TObject);
procedure CbShowEventHintsChange(Sender: TObject);
procedure CbTimeFormatChange(Sender: TObject); procedure CbTimeFormatChange(Sender: TObject);
procedure DaysTrackBarChange(Sender: TObject); procedure DaysTrackBarChange(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
@ -396,6 +398,17 @@ begin
SetLanguage(CbLanguages.ItemIndex); SetLanguage(CbLanguages.ItemIndex);
end; end;
procedure TMainForm.CbShowEventHintsChange(Sender: TObject);
begin
VpDayView1.HintMode := hmEventHint;
VpWeekView1.HintMode := hmEventHint;
VpMonthView1.HintMode := hmEventHint;
VpDayView1.ShowHint := CbShowEventHints.Checked;
VpWeekView1.ShowHint := CbShowEventHints.Checked;
VpMonthView1.ShowHint := CbShowEventHints.Checked;
end;
procedure TMainForm.CbTimeFormatChange(Sender: TObject); procedure TMainForm.CbTimeFormatChange(Sender: TObject);
begin begin
VpDayView1.TimeFormat := TVpTimeFormat(CbTimeFormat.ItemIndex); VpDayView1.TimeFormat := TVpTimeFormat(CbTimeFormat.ItemIndex);
@ -702,7 +715,7 @@ begin
CbAllowInplaceEditing.Left := CbLanguages.Left + CbLanguages.Width + 32; CbAllowInplaceEditing.Left := CbLanguages.Left + CbLanguages.Width + 32;
CbAllowDragAndDrop.Left := CbAllowInplaceEditing.Left; CbAllowDragAndDrop.Left := CbAllowInplaceEditing.Left;
CbDragDropTransparent.Left := CbAllowInplaceEditing.Left; CbDragDropTransparent.Left := CbAllowInplaceEditing.Left;
w := GetLabelWidth(LblDrawingStyle); CbShowEventHints.Left := CbAllowInplaceEditing.Left;
// Planner pages // Planner pages
DaysTrackbar.Left := GetLabelWidth(LblVisibleDays) + LblVisibleDays.Left + 8; DaysTrackbar.Left := GetLabelWidth(LblVisibleDays) + LblVisibleDays.Left + 8;
@ -799,6 +812,10 @@ begin
CbDragDropTransparent.Checked); CbDragDropTransparent.Checked);
CbDragDropTransparentChange(nil); CbDragDropTransparentChange(nil);
CbShowEventHints.Checked := ini.ReadBool('Settings', 'ShowEventHints',
CbShowEventHints.Checked);
CbShowEventHintsChange(nil);
FResID := ini.ReadInteger('Data', 'ResourceID', -1); FResID := ini.ReadInteger('Data', 'ResourceID', -1);
finally finally
ini.Free; ini.Free;
@ -834,6 +851,7 @@ begin
ini.WriteBool('Settings', 'AllowInplaceEditing', CbAllowInplaceEditing.Checked); ini.WriteBool('Settings', 'AllowInplaceEditing', CbAllowInplaceEditing.Checked);
ini.WriteBool('Settings', 'AllowDragAndDrop', CbAllowDragAndDrop.Checked); ini.WriteBool('Settings', 'AllowDragAndDrop', CbAllowDragAndDrop.Checked);
ini.WriteBool('Settings', 'DragAndDropTransparent', CbDragDropTransparent.Checked); ini.WriteBool('Settings', 'DragAndDropTransparent', CbDragDropTransparent.Checked);
ini.WriteBool('Settings', 'ShowEventHints', CbShowEventHints.Checked);
ini.WriteInteger('Data', 'ResourceID', VpControlLink1.Datastore.ResourceID); ini.WriteInteger('Data', 'ResourceID', VpControlLink1.Datastore.ResourceID);
finally finally

View File

@ -8,7 +8,7 @@ msgstr ""
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.8\n" "X-Generator: Poedit 1.8.9\n"
"Language: de\n" "Language: de\n"
#: demomain.rs10min #: demomain.rs10min
@ -210,6 +210,10 @@ msgstr "\"Ziehen und Fallenlassen\" (Drag&&Drop) mit transparentem Hintergrund"
msgid "30 Min" msgid "30 Min"
msgstr "30 Min" msgstr "30 Min"
#: tmainform.cbshoweventhints.caption
msgid "Show event hints"
msgstr "Ereignis-Hinweise anzeigen"
#: tmainform.lbladdressbuilder.caption #: tmainform.lbladdressbuilder.caption
msgid "Address builder" msgid "Address builder"
msgstr "Aufbau der Adresse:" msgstr "Aufbau der Adresse:"

View File

@ -204,6 +204,10 @@ msgstr ""
msgid "30 Min" msgid "30 Min"
msgstr "30 Min" msgstr "30 Min"
#: tmainform.cbshoweventhints.caption
msgid "Show event hints"
msgstr ""
#: tmainform.lbladdressbuilder.caption #: tmainform.lbladdressbuilder.caption
msgid "Address builder" msgid "Address builder"
msgstr "Adres bouwer" msgstr "Adres bouwer"

View File

@ -199,6 +199,10 @@ msgstr ""
msgid "30 Min" msgid "30 Min"
msgstr "" msgstr ""
#: tmainform.cbshoweventhints.caption
msgid "Show event hints"
msgstr ""
#: tmainform.lbladdressbuilder.caption #: tmainform.lbladdressbuilder.caption
msgid "Address builder" msgid "Address builder"
msgstr "" msgstr ""

View File

@ -213,6 +213,10 @@ msgstr ""
msgid "30 Min" msgid "30 Min"
msgstr "30 минут" msgstr "30 минут"
#: tmainform.cbshoweventhints.caption
msgid "Show event hints"
msgstr ""
#: tmainform.lbladdressbuilder.caption #: tmainform.lbladdressbuilder.caption
msgid "Address builder" msgid "Address builder"
msgstr "Конструктор адреса" msgstr "Конструктор адреса"

View File

@ -45,7 +45,7 @@ msgstr "E&rinnerung"
#: vpsr.rsallday #: vpsr.rsallday
msgid "All day" msgid "All day"
msgstr "" msgstr "Ganztags"
#: vpsr.rsalldayevent #: vpsr.rsalldayevent
msgid "&All Day Event" msgid "&All Day Event"
@ -283,25 +283,6 @@ msgstr "Täglich"
msgid "Error: Day is required." msgid "Error: Day is required."
msgstr "Fehler: Tag wird benötigt" msgstr "Fehler: Tag wird benötigt"
#: vpsr.rsdaypopupadd
msgctxt "vpsr.rsdaypopupadd"
msgid "Add event..."
msgstr "Ereignis hinzufügen..."
#: vpsr.rsdaypopupdelete
msgid "Delete event..."
msgstr "Ereignis löschen..."
#: vpsr.rsdaypopupedit
msgctxt "vpsr.rsdaypopupedit"
msgid "Edit event..."
msgstr "Ereignis bearbeiten..."
#: vpsr.rsdaypopupnav
msgctxt "vpsr.rsdaypopupnav"
msgid "Change date"
msgstr "Datum ändern"
#: vpsr.rsdays #: vpsr.rsdays
msgid "Days" msgid "Days"
msgstr "Tage" msgstr "Tage"
@ -347,6 +328,7 @@ msgid "Contact"
msgstr "Kontakt" msgstr "Kontakt"
#: vpsr.rsdlgeventedit #: vpsr.rsdlgeventedit
msgctxt "vpsr.rsdlgeventedit"
msgid "Event" msgid "Event"
msgstr "Ereignis" msgstr "Ereignis"
@ -423,6 +405,11 @@ msgstr "E-Mail"
msgid "End time:" msgid "End time:"
msgstr "Ende-Zeit:" msgstr "Ende-Zeit:"
#: vpsr.rsevent
msgctxt "vpsr.rsevent"
msgid "Event"
msgstr "Ereignis"
#: vpsr.rsexclusiveeventconflict #: vpsr.rsexclusiveeventconflict
msgid "Conflicts with another exclusive event." msgid "Conflicts with another exclusive event."
msgstr "Konflikte mit einem anderen ausschließenden Ereignis" msgstr "Konflikte mit einem anderen ausschließenden Ereignis"
@ -541,6 +528,10 @@ msgstr "M"
msgid "Load file..." msgid "Load file..."
msgstr "Datei laden..." msgstr "Datei laden..."
#: vpsr.rslocation
msgid "Location"
msgstr "Ort"
#: vpsr.rslocationlbl #: vpsr.rslocationlbl
msgid "Location:" msgid "Location:"
msgstr "Ort:" msgstr "Ort:"
@ -733,9 +724,13 @@ msgstr "Außerhalb des zulässigen Bereichs"
msgid "OVERDUE!" msgid "OVERDUE!"
msgstr "ABGELAUFEN!" msgstr "ABGELAUFEN!"
#: vpsr.rsoverlayed
msgid "Overlayed"
msgstr "Überlagert"
#: vpsr.rsoverlayedevent #: vpsr.rsoverlayedevent
msgid "overlayed" msgid "overlayed"
msgstr "" msgstr "überlagert"
#: vpsr.rsownernotwinctrl #: vpsr.rsownernotwinctrl
msgid "Owner must be a TWinControl descendent" msgid "Owner must be a TWinControl descendent"
@ -827,6 +822,26 @@ msgstr "Andere"
msgid "Pixels" msgid "Pixels"
msgstr "Pixel" msgstr "Pixel"
#: vpsr.rspopupaddevent
msgctxt "vpsr.rspopupaddevent"
msgid "Add event..."
msgstr "Ereignis hinzufügen..."
#: vpsr.rspopupchangedate
msgctxt "vpsr.rspopupchangedate"
msgid "Change date"
msgstr "Datum ändern"
#: vpsr.rspopupdeleteevent
msgctxt "vpsr.rspopupdeleteevent"
msgid "&Delete event..."
msgstr "Ereignis löschen..."
#: vpsr.rspopupeditevent
msgctxt "vpsr.rspopupeditevent"
msgid "Edit event..."
msgstr "Ereignis bearbeiten..."
#: vpsr.rspopupresourcegroups #: vpsr.rspopupresourcegroups
msgid "Overlay events" msgid "Overlay events"
msgstr "Ereignisse überlagern" msgstr "Ereignisse überlagern"
@ -1143,25 +1158,6 @@ msgstr "Wöchentlich"
msgid "Week of" msgid "Week of"
msgstr "Woche mit" msgstr "Woche mit"
#: vpsr.rsweekpopupadd
msgctxt "vpsr.rsweekpopupadd"
msgid "Add event..."
msgstr "Ereignis hinzufügen..."
#: vpsr.rsweekpopupdelete
msgid "&Delete event..."
msgstr "Ereignis löschen..."
#: vpsr.rsweekpopupedit
msgctxt "vpsr.rsweekpopupedit"
msgid "Edit event..."
msgstr "Ereignis bearbeiten..."
#: vpsr.rsweekpopupnav
msgctxt "vpsr.rsweekpopupnav"
msgid "Change date"
msgstr "Datum ändern"
#: vpsr.rsweeks #: vpsr.rsweeks
msgid "Weeks" msgid "Weeks"
msgstr "Wochen" msgstr "Wochen"
@ -1502,4 +1498,3 @@ msgstr "Unbekannte Achsen-Spezifikation: %s"
#: vpsr.sxmldecnotatbeg #: vpsr.sxmldecnotatbeg
msgid "The XML declaration must appear before the first element" msgid "The XML declaration must appear before the first element"
msgstr "Die XML-Deklaration muss vor dem ersten Element erscheinen." msgstr "Die XML-Deklaration muss vor dem ersten Element erscheinen."

View File

@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n" "POT-Creation-Date: \n"
"PO-Revision-Date: 2016-09-10 21:58+0200\n" "PO-Revision-Date: 2016-09-12 22:32+0200\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"Language: fr_FR\n" "Language: fr_FR\n"
@ -289,25 +289,6 @@ msgstr "Quotidien"
msgid "Error: Day is required." msgid "Error: Day is required."
msgstr "Erreur: Il faut choisir un jour" msgstr "Erreur: Il faut choisir un jour"
#: vpsr.rsdaypopupadd
msgctxt "vpsr.rsdaypopupadd"
msgid "Add event..."
msgstr "Ajouter un événement..."
#: vpsr.rsdaypopupdelete
msgid "Delete event..."
msgstr "Supprimer un événement..."
#: vpsr.rsdaypopupedit
msgctxt "vpsr.rsdaypopupedit"
msgid "Edit event..."
msgstr "Modifier un événement"
#: vpsr.rsdaypopupnav
msgctxt "vpsr.rsdaypopupnav"
msgid "Change date"
msgstr "Changez la date"
#: vpsr.rsdays #: vpsr.rsdays
msgid "Days" msgid "Days"
msgstr "Jours" msgstr "Jours"
@ -353,6 +334,7 @@ msgid "Contact"
msgstr "Contact" msgstr "Contact"
#: vpsr.rsdlgeventedit #: vpsr.rsdlgeventedit
msgctxt "vpsr.rsdlgeventedit"
msgid "Event" msgid "Event"
msgstr "Événement" msgstr "Événement"
@ -429,6 +411,11 @@ msgstr "E-mail"
msgid "End time:" msgid "End time:"
msgstr "Fin:" msgstr "Fin:"
#: vpsr.rsevent
msgctxt "vpsr.rsevent"
msgid "Event"
msgstr "Événement"
#: vpsr.rsexclusiveeventconflict #: vpsr.rsexclusiveeventconflict
msgid "Conflicts with another exclusive event." msgid "Conflicts with another exclusive event."
msgstr "Cette événement est en conflit avec une autre événement exclusif" msgstr "Cette événement est en conflit avec une autre événement exclusif"
@ -547,6 +534,10 @@ msgstr ""
msgid "Load file..." msgid "Load file..."
msgstr "" msgstr ""
#: vpsr.rslocation
msgid "Location"
msgstr ""
#: vpsr.rslocationlbl #: vpsr.rslocationlbl
msgid "Location:" msgid "Location:"
msgstr "Lieu:" msgstr "Lieu:"
@ -739,6 +730,10 @@ msgstr "Hors de portée"
msgid "OVERDUE!" msgid "OVERDUE!"
msgstr "EN RETARD!" msgstr "EN RETARD!"
#: vpsr.rsoverlayed
msgid "Overlayed"
msgstr ""
#: vpsr.rsoverlayedevent #: vpsr.rsoverlayedevent
msgid "overlayed" msgid "overlayed"
msgstr "" msgstr ""
@ -833,6 +828,26 @@ msgstr "Autre"
msgid "Pixels" msgid "Pixels"
msgstr "" msgstr ""
#: vpsr.rspopupaddevent
msgctxt "vpsr.rspopupaddevent"
msgid "Add event..."
msgstr "Ajouter un événement..."
#: vpsr.rspopupchangedate
msgctxt "vpsr.rspopupchangedate"
msgid "Change date"
msgstr "Changer la date"
#: vpsr.rspopupdeleteevent
msgctxt "vpsr.rspopupdeleteevent"
msgid "&Delete event..."
msgstr "&Supprimer un événement..."
#: vpsr.rspopupeditevent
msgctxt "vpsr.rspopupeditevent"
msgid "Edit event..."
msgstr "Modifier un événement"
#: vpsr.rspopupresourcegroups #: vpsr.rspopupresourcegroups
msgid "Overlay events" msgid "Overlay events"
msgstr "" msgstr ""
@ -1149,25 +1164,6 @@ msgstr "Hebdomadaire"
msgid "Week of" msgid "Week of"
msgstr "Semaine du" msgstr "Semaine du"
#: vpsr.rsweekpopupadd
msgctxt "vpsr.rsweekpopupadd"
msgid "Add event..."
msgstr "Ajouter un événement..."
#: vpsr.rsweekpopupdelete
msgid "&Delete event..."
msgstr "&Supprimer un événement..."
#: vpsr.rsweekpopupedit
msgctxt "vpsr.rsweekpopupedit"
msgid "Edit event..."
msgstr "Modifier un événement..."
#: vpsr.rsweekpopupnav
msgctxt "vpsr.rsweekpopupnav"
msgid "Change date"
msgstr "Changer la date"
#: vpsr.rsweeks #: vpsr.rsweeks
msgid "Weeks" msgid "Weeks"
msgstr "" msgstr ""

View File

@ -283,25 +283,6 @@ msgstr "Dagelijks"
msgid "Error: Day is required." msgid "Error: Day is required."
msgstr "Fout: Dag is verplicht" msgstr "Fout: Dag is verplicht"
#: vpsr.rsdaypopupadd
msgctxt "vpsr.rsdaypopupadd"
msgid "Add event..."
msgstr "Gebeurtenis toevoegen..."
#: vpsr.rsdaypopupdelete
msgid "Delete event..."
msgstr "Gebeurtenis wissen..."
#: vpsr.rsdaypopupedit
msgctxt "vpsr.rsdaypopupedit"
msgid "Edit event..."
msgstr "Gebeurtenis bewerken..."
#: vpsr.rsdaypopupnav
msgctxt "vpsr.rsdaypopupnav"
msgid "Change date"
msgstr "Datum wijzigen"
#: vpsr.rsdays #: vpsr.rsdays
msgid "Days" msgid "Days"
msgstr "Dagen" msgstr "Dagen"
@ -347,6 +328,7 @@ msgid "Contact"
msgstr "Contact" msgstr "Contact"
#: vpsr.rsdlgeventedit #: vpsr.rsdlgeventedit
msgctxt "vpsr.rsdlgeventedit"
msgid "Event" msgid "Event"
msgstr "Gebeurtenis" msgstr "Gebeurtenis"
@ -423,6 +405,11 @@ msgstr "E-Mail"
msgid "End time:" msgid "End time:"
msgstr "Eind tijd:" msgstr "Eind tijd:"
#: vpsr.rsevent
msgctxt "vpsr.rsevent"
msgid "Event"
msgstr "Gebeurtenis"
#: vpsr.rsexclusiveeventconflict #: vpsr.rsexclusiveeventconflict
msgid "Conflicts with another exclusive event." msgid "Conflicts with another exclusive event."
msgstr "Conflict met een andere gebeurtenis." msgstr "Conflict met een andere gebeurtenis."
@ -541,6 +528,10 @@ msgstr "M"
msgid "Load file..." msgid "Load file..."
msgstr "" msgstr ""
#: vpsr.rslocation
msgid "Location"
msgstr ""
#: vpsr.rslocationlbl #: vpsr.rslocationlbl
msgid "Location:" msgid "Location:"
msgstr "Plaats:" msgstr "Plaats:"
@ -733,6 +724,10 @@ msgstr "Buiten geldig bereik"
msgid "OVERDUE!" msgid "OVERDUE!"
msgstr "OVER TIJD!" msgstr "OVER TIJD!"
#: vpsr.rsoverlayed
msgid "Overlayed"
msgstr ""
#: vpsr.rsoverlayedevent #: vpsr.rsoverlayedevent
msgid "overlayed" msgid "overlayed"
msgstr "" msgstr ""
@ -827,6 +822,26 @@ msgstr "Andere"
msgid "Pixels" msgid "Pixels"
msgstr "" msgstr ""
#: vpsr.rspopupaddevent
msgctxt "vpsr.rspopupaddevent"
msgid "Add event..."
msgstr "Gebeurtenis toevoegen..."
#: vpsr.rspopupchangedate
msgctxt "vpsr.rspopupchangedate"
msgid "Change date"
msgstr "Datum wijzigen"
#: vpsr.rspopupdeleteevent
msgctxt "vpsr.rspopupdeleteevent"
msgid "&Delete event..."
msgstr "Gebeurtenis wissen..."
#: vpsr.rspopupeditevent
msgctxt "vpsr.rspopupeditevent"
msgid "Edit event..."
msgstr "Gebeurtenis bewerken..."
#: vpsr.rspopupresourcegroups #: vpsr.rspopupresourcegroups
msgid "Overlay events" msgid "Overlay events"
msgstr "" msgstr ""
@ -1143,25 +1158,6 @@ msgstr "Wekelijks"
msgid "Week of" msgid "Week of"
msgstr "Week van" msgstr "Week van"
#: vpsr.rsweekpopupadd
msgctxt "vpsr.rsweekpopupadd"
msgid "Add event..."
msgstr "Gebeurtenis toevoegen..."
#: vpsr.rsweekpopupdelete
msgid "&Delete event..."
msgstr "Gebeurtenis wissen..."
#: vpsr.rsweekpopupedit
msgctxt "vpsr.rsweekpopupedit"
msgid "Edit event..."
msgstr "Gebeurtenis bewerken..."
#: vpsr.rsweekpopupnav
msgctxt "vpsr.rsweekpopupnav"
msgid "Change date"
msgstr "Datum wijzigen"
#: vpsr.rsweeks #: vpsr.rsweeks
msgid "Weeks" msgid "Weeks"
msgstr "" msgstr ""

View File

@ -273,25 +273,6 @@ msgstr ""
msgid "Error: Day is required." msgid "Error: Day is required."
msgstr "" msgstr ""
#: vpsr.rsdaypopupadd
msgctxt "vpsr.rsdaypopupadd"
msgid "Add event..."
msgstr ""
#: vpsr.rsdaypopupdelete
msgid "Delete event..."
msgstr ""
#: vpsr.rsdaypopupedit
msgctxt "vpsr.rsdaypopupedit"
msgid "Edit event..."
msgstr ""
#: vpsr.rsdaypopupnav
msgctxt "vpsr.rsdaypopupnav"
msgid "Change date"
msgstr ""
#: vpsr.rsdays #: vpsr.rsdays
msgid "Days" msgid "Days"
msgstr "" msgstr ""
@ -337,6 +318,7 @@ msgid "Contact"
msgstr "" msgstr ""
#: vpsr.rsdlgeventedit #: vpsr.rsdlgeventedit
msgctxt "vpsr.rsdlgeventedit"
msgid "Event" msgid "Event"
msgstr "" msgstr ""
@ -413,6 +395,11 @@ msgstr ""
msgid "End time:" msgid "End time:"
msgstr "" msgstr ""
#: vpsr.rsevent
msgctxt "vpsr.rsevent"
msgid "Event"
msgstr ""
#: vpsr.rsexclusiveeventconflict #: vpsr.rsexclusiveeventconflict
msgid "Conflicts with another exclusive event." msgid "Conflicts with another exclusive event."
msgstr "" msgstr ""
@ -531,6 +518,10 @@ msgstr ""
msgid "Load file..." msgid "Load file..."
msgstr "" msgstr ""
#: vpsr.rslocation
msgid "Location"
msgstr ""
#: vpsr.rslocationlbl #: vpsr.rslocationlbl
msgid "Location:" msgid "Location:"
msgstr "" msgstr ""
@ -723,6 +714,10 @@ msgstr ""
msgid "OVERDUE!" msgid "OVERDUE!"
msgstr "" msgstr ""
#: vpsr.rsoverlayed
msgid "Overlayed"
msgstr ""
#: vpsr.rsoverlayedevent #: vpsr.rsoverlayedevent
msgid "overlayed" msgid "overlayed"
msgstr "" msgstr ""
@ -817,6 +812,26 @@ msgstr ""
msgid "Pixels" msgid "Pixels"
msgstr "" msgstr ""
#: vpsr.rspopupaddevent
msgctxt "vpsr.rspopupaddevent"
msgid "Add event..."
msgstr ""
#: vpsr.rspopupchangedate
msgctxt "vpsr.rspopupchangedate"
msgid "Change date"
msgstr ""
#: vpsr.rspopupdeleteevent
msgctxt "vpsr.rspopupdeleteevent"
msgid "&Delete event..."
msgstr ""
#: vpsr.rspopupeditevent
msgctxt "vpsr.rspopupeditevent"
msgid "Edit event..."
msgstr ""
#: vpsr.rspopupresourcegroups #: vpsr.rspopupresourcegroups
msgid "Overlay events" msgid "Overlay events"
msgstr "" msgstr ""
@ -1133,25 +1148,6 @@ msgstr ""
msgid "Week of" msgid "Week of"
msgstr "" msgstr ""
#: vpsr.rsweekpopupadd
msgctxt "vpsr.rsweekpopupadd"
msgid "Add event..."
msgstr ""
#: vpsr.rsweekpopupdelete
msgid "&Delete event..."
msgstr ""
#: vpsr.rsweekpopupedit
msgctxt "vpsr.rsweekpopupedit"
msgid "Edit event..."
msgstr ""
#: vpsr.rsweekpopupnav
msgctxt "vpsr.rsweekpopupnav"
msgid "Change date"
msgstr ""
#: vpsr.rsweeks #: vpsr.rsweeks
msgid "Weeks" msgid "Weeks"
msgstr "" msgstr ""

View File

@ -283,25 +283,6 @@ msgstr "Ежедневное"
msgid "Error: Day is required." msgid "Error: Day is required."
msgstr "Ошибка: Необходимо указать день" msgstr "Ошибка: Необходимо указать день"
#: vpsr.rsdaypopupadd
msgctxt "vpsr.rsdaypopupadd"
msgid "Add event..."
msgstr "Добавить событие..."
#: vpsr.rsdaypopupdelete
msgid "Delete event..."
msgstr "Удалить событие..."
#: vpsr.rsdaypopupedit
msgctxt "vpsr.rsdaypopupedit"
msgid "Edit event..."
msgstr "Изменить событие..."
#: vpsr.rsdaypopupnav
msgctxt "vpsr.rsdaypopupnav"
msgid "Change date"
msgstr "Изменить дату"
#: vpsr.rsdays #: vpsr.rsdays
msgid "Days" msgid "Days"
msgstr "Дни" msgstr "Дни"
@ -347,6 +328,7 @@ msgid "Contact"
msgstr "Контакт" msgstr "Контакт"
#: vpsr.rsdlgeventedit #: vpsr.rsdlgeventedit
msgctxt "vpsr.rsdlgeventedit"
msgid "Event" msgid "Event"
msgstr "Событие" msgstr "Событие"
@ -423,6 +405,11 @@ msgstr "Электронная почта"
msgid "End time:" msgid "End time:"
msgstr "Время окончания:" msgstr "Время окончания:"
#: vpsr.rsevent
msgctxt "vpsr.rsevent"
msgid "Event"
msgstr "Событие"
#: vpsr.rsexclusiveeventconflict #: vpsr.rsexclusiveeventconflict
msgid "Conflicts with another exclusive event." msgid "Conflicts with another exclusive event."
msgstr "Конфликт с другим важным событием." msgstr "Конфликт с другим важным событием."
@ -541,6 +528,10 @@ msgstr ""
msgid "Load file..." msgid "Load file..."
msgstr "Загрузить файл..." msgstr "Загрузить файл..."
#: vpsr.rslocation
msgid "Location"
msgstr ""
#: vpsr.rslocationlbl #: vpsr.rslocationlbl
msgid "Location:" msgid "Location:"
msgstr "Расположение:" msgstr "Расположение:"
@ -733,6 +724,10 @@ msgstr "За пределами диапазона"
msgid "OVERDUE!" msgid "OVERDUE!"
msgstr "ПРОСРОЧЕНО!" msgstr "ПРОСРОЧЕНО!"
#: vpsr.rsoverlayed
msgid "Overlayed"
msgstr ""
#: vpsr.rsoverlayedevent #: vpsr.rsoverlayedevent
msgid "overlayed" msgid "overlayed"
msgstr "" msgstr ""
@ -827,6 +822,26 @@ msgstr "Другой"
msgid "Pixels" msgid "Pixels"
msgstr "" msgstr ""
#: vpsr.rspopupaddevent
msgctxt "vpsr.rspopupaddevent"
msgid "Add event..."
msgstr "Добавить событие..."
#: vpsr.rspopupchangedate
msgctxt "vpsr.rspopupchangedate"
msgid "Change date"
msgstr "Изменить дату"
#: vpsr.rspopupdeleteevent
msgctxt "vpsr.rspopupdeleteevent"
msgid "&Delete event..."
msgstr "Удалить событие..."
#: vpsr.rspopupeditevent
msgctxt "vpsr.rspopupeditevent"
msgid "Edit event..."
msgstr "Изменить событие..."
#: vpsr.rspopupresourcegroups #: vpsr.rspopupresourcegroups
msgid "Overlay events" msgid "Overlay events"
msgstr "" msgstr ""
@ -1143,25 +1158,6 @@ msgstr "Еженедельно"
msgid "Week of" msgid "Week of"
msgstr "Неделя" msgstr "Неделя"
#: vpsr.rsweekpopupadd
msgctxt "vpsr.rsweekpopupadd"
msgid "Add event..."
msgstr "Добавить событие..."
#: vpsr.rsweekpopupdelete
msgid "&Delete event..."
msgstr "Удалить событие..."
#: vpsr.rsweekpopupedit
msgctxt "vpsr.rsweekpopupedit"
msgid "Edit event..."
msgstr "Изменить событие..."
#: vpsr.rsweekpopupnav
msgctxt "vpsr.rsweekpopupnav"
msgid "Change date"
msgstr "Изменить дату"
#: vpsr.rsweeks #: vpsr.rsweeks
msgid "Weeks" msgid "Weeks"
msgstr "" msgstr ""

View File

@ -71,6 +71,8 @@ type
TVpPlaySoundMode = (psmSync, psmAsync, psmStop); TVpPlaySoundMode = (psmSync, psmAsync, psmStop);
TVpHintMode = (hmEventHint, hmComponentHint);
{ XML definitions } { XML definitions }
DOMString = WideString; DOMString = WideString;

View File

@ -259,9 +259,12 @@ const
{ Defaults } { Defaults }
{ MonthView } { MonthView }
vpDefWVRClickChangeDate = True; vpDefWVRClickChangeDate = True;
{ Hint support }
MAX_HINT_WIDTH = 400;
implementation implementation
initialization initialization

View File

@ -63,8 +63,8 @@ uses
{$ELSE} {$ELSE}
Windows, Messages, Windows, Messages,
{$ENDIF} {$ENDIF}
Classes, Graphics, Controls, ExtCtrls, StdCtrls, Classes, Graphics, Controls, ExtCtrls, StdCtrls, Buttons, Forms,
Buttons, VpBase, VpBaseDS, VpMisc, VpData, VpSR, VpConst, VpBase, VpBaseDS, VpMisc, VpData, VpSR, VpConst,
VpCanvasUtils, Menus; VpCanvasUtils, Menus;
type type
@ -222,6 +222,11 @@ type
{ TVpDayView } { TVpDayView }
TVpDayView = class(TVpLinkableControl) TVpDayView = class(TVpLinkableControl)
private
FHintMode: TVpHintMode;
FHintWindow: THintWindow;
FMouseEvent: TVpEvent;
protected{ private } protected{ private }
FGranularity: TVpGranularity; FGranularity: TVpGranularity;
FColumnWidth: Integer; FColumnWidth: Integer;
@ -324,11 +329,17 @@ type
procedure SetWrapStyle(const v: TVpDVWrapStyle); procedure SetWrapStyle(const v: TVpDVWrapStyle);
procedure SetDotDotDotColor(const v: TColor); procedure SetDotDotDotColor(const v: TColor);
procedure SetShowEventTimes(Value: Boolean); procedure SetShowEventTimes(Value: Boolean);
{ drag-drop methods } { drag-drop methods }
procedure DoStartDrag(var DragObject: TDragObject); override; procedure DoStartDrag(var DragObject: TDragObject); override;
procedure DoEndDrag(Target: TObject; X, Y: Integer); override; procedure DoEndDrag(Target: TObject; X, Y: Integer); override;
procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState; procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState;
var Accept: Boolean); override; var Accept: Boolean); override;
{ Hints }
procedure ShowHintWindow(APoint: TPoint; AEvent: TVpEvent);
procedure HideHintWindow;
{ internal methods } { internal methods }
function dvCalcRowHeight(Scale: Extended; UseGran: TVpGranularity): Integer; function dvCalcRowHeight(Scale: Extended; UseGran: TVpGranularity): Integer;
function dvCalcVisibleLines(RenderHeight, ColHeadHeight, RowHeight: Integer; function dvCalcVisibleLines(RenderHeight, ColHeadHeight, RowHeight: Integer;
@ -363,16 +374,20 @@ type
procedure dvScrollVertical(Lines: Integer); procedure dvScrollVertical(Lines: Integer);
procedure CreateParams(var Params: TCreateParams); override; procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override; procedure CreateWnd; override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); override; procedure MouseEnter; override;
procedure MouseLeave; override;
procedure MouseMove(Shift: TShiftState; X,Y: Integer); override; procedure MouseMove(Shift: TShiftState; X,Y: Integer); override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); override;
procedure SetActiveEventByCoord(APoint: TPoint); procedure SetActiveEventByCoord(APoint: TPoint);
function EditEventAtCoord(Point: TPoint): Boolean; function EditEventAtCoord(APoint: TPoint): Boolean;
function GetEventAtCoord(Point: TPoint): TVpEvent; function GetEventAtCoord(APoint: TPoint): TVpEvent;
function GetEventRect(AEvent: TVpEvent): TRect;
procedure EditEvent; procedure EditEvent;
procedure EndEdit(Sender: TObject); procedure EndEdit(Sender: TObject);
procedure KeyDown(var Key: Word; Shift: TShiftState); override; procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure SetTimeIntervals(UseGran: TVpGranularity); procedure SetTimeIntervals(UseGran: TVpGranularity);
{ message handlers } { message handlers }
procedure VpDayViewInit(var Msg: {$IFDEF DELPHI}TMessage{$ELSE}TLMessage{$ENDIF}); message Vp_DayViewInit; procedure VpDayViewInit(var Msg: {$IFDEF DELPHI}TMessage{$ELSE}TLMessage{$ENDIF}); message Vp_DayViewInit;
{$IFNDEF LCL} {$IFNDEF LCL}
@ -396,6 +411,8 @@ type
public public
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
function BuildEventString(AEvent: TVpEvent; UseAsHint: Boolean): String;
procedure LoadLanguage; procedure LoadLanguage;
procedure DeleteActiveEvent(Verify: Boolean); procedure DeleteActiveEvent(Verify: Boolean);
@ -459,6 +476,7 @@ type
property IncludeWeekends: Boolean read FIncludeWeekends write SetIncludeWeekends default True; property IncludeWeekends: Boolean read FIncludeWeekends write SetIncludeWeekends default True;
property NumDays: Integer read FNumDays write SetNumDays default 1; property NumDays: Integer read FNumDays write SetNumDays default 1;
property WrapStyle: TVpDVWrapStyle read FWrapStyle Write SetWrapStyle default wsIconFlow; property WrapStyle: TVpDVWrapStyle read FWrapStyle Write SetWrapStyle default wsIconFlow;
property HintMode: TVpHintMode read FHintMode write FHintMode default hmEventHint;
{events} {events}
property AfterEdit: TVpAfterEditEvent read FAfterEdit write FAfterEdit; property AfterEdit: TVpAfterEditEvent read FAfterEdit write FAfterEdit;
property BeforeEdit: TVpBeforeEditEvent read FBeforeEdit write FBeforeEdit; property BeforeEdit: TVpBeforeEditEvent read FBeforeEdit write FBeforeEdit;
@ -473,7 +491,7 @@ type
implementation implementation
uses uses
SysUtils, Math, Forms, Dialogs, SysUtils, StrUtils, Math, Dialogs,
VpEvntEditDlg, VpDayViewPainter; VpEvntEditDlg, VpDayViewPainter;
(*****************************************************************************) (*****************************************************************************)
@ -746,6 +764,7 @@ begin
FDotDotDotColor := clBlack; FDotDotDotColor := clBlack;
FIncludeWeekends := True; FIncludeWeekends := True;
FAllowInplaceEdit := true; FAllowInplaceEdit := true;
FShowEventTimes := true;
{ set up fonts and colors } { set up fonts and colors }
FHeadAttr.Font.Size := 10; FHeadAttr.Font.Size := 10;
@ -789,6 +808,7 @@ end;
destructor TVpDayView.Destroy; destructor TVpDayView.Destroy;
begin begin
FreeAndNil(dvInplaceEditor); FreeAndNil(dvInplaceEditor);
FreeAndNil(FHintWindow);
FTimeSlotColors.Free; FTimeSlotColors.Free;
FHeadAttr.Free; FHeadAttr.Free;
@ -807,6 +827,97 @@ begin
inherited; inherited;
end; end;
function TVpDayView.BuildEventString(AEvent: TVpEvent;
UseAsHint: Boolean): String;
var
timeFmt: String;
timeStr: String;
s: String;
res: TVpResource;
grp: TVpResourceGroup;
isOverlayed: Boolean;
showDetails: Boolean;
begin
Result := '';
if (AEvent = nil) or (Datastore = nil) or (Datastore.Resource = nil) then
exit;
grp := Datastore.Resource.Group;
showDetails := (grp <> nil) and (odEventDescription in grp.ShowDetails);
isOverlayed := AEvent.IsOverlayed;
timefmt := GetTimeFormatStr(TimeFormat);
if UseAsHint then begin
{ Usage as hint }
if isOverlayed then begin
grp := Datastore.Resource.Group;
if (odResource in grp.ShowDetails) then begin
res := Datastore.Resources.GetResource(AEvent.ResourceID);
Result := RSOverlayed + ': ' + res.Description;
end else
Result := RSOverlayed;
end else
showDetails := true;
timeStr := IfThen(AEvent.AllDayEvent,
RSAllDay,
FormatDateTime(timeFmt, AEvent.StartTime) + ' - ' + FormatDateTime(timeFmt, AEvent.EndTime)
);
Result := IfThen(Result = '',
timeStr,
Result + LineEnding + timeStr
);
if showDetails then begin
// Event description
Result := Result + LineEnding + LineEnding +
RSEvent + ':' + LineEnding + AEvent.Description;
// Event notes
if (AEvent.Notes <> '') then begin
s := WrapText(AEvent.Notes, MAX_HINT_WIDTH);
s := StripLastLineEnding(s);
Result := Result + LineEnding + LineEnding +
RSNotes + ':' + LineEnding + s;
end;
// Event location
if (AEvent.Location <> '') then
Result := Result + LineEnding + LineEnding +
RSLocation + ':' + LineEnding + AEvent.Location;
end;
end
else
begin
{ Usage as cell text }
if isOverlayed then begin
Result := '[' + RSOverlayedEvent + '] ';
if showDetails then begin
res := Datastore.Resources.GetResource(AEvent.ResourceID);
if res <> nil then
Result := '[' + res.Description + '] '
end;
end else
showDetails := true;
timeStr := IfThen(ShowEventTimes, Format('%s - %s: ', [
FormatDateTime(timeFmt, AEvent.StartTime),
FormatDateTime(timeFmt, AEvent.EndTime)
]));
if showDetails then
Result := IfThen(Result = '',
timeStr + AEvent.Description,
Result + timeStr + AEvent.Description)
else
Result := IfThen(Result = '',
timeStr,
Result + timeStr);
end;
end;
procedure TVpDayView.LoadLanguage; procedure TVpDayView.LoadLanguage;
begin begin
dvDayUpBtn.Hint := RSNextDay; dvDayUpBtn.Hint := RSNextDay;
@ -884,7 +995,60 @@ begin
end; end;
end; end;
end; end;
{=====}
{ Hint support }
procedure TVpDayView.ShowHintWindow(APoint: TPoint; AEvent: TVpEvent);
var
txt: String;
R, eventR: TRect;
begin
if FHintMode = hmEventHint then
begin
if (AEvent = nil) or
((Datastore = nil) or (Datastore.Resource = nil)) then
begin
HideHintWindow;
exit;
end;
txt := BuildEventString(AEvent, true);
if (txt <> '') and
not ((dvInPlaceEditor <> nil) and dvInplaceEditor.Visible) and
not (csDesigning in ComponentState) then
begin
if FHintWindow = nil then
FHintWindow := THintWindow.Create(nil);
eventR := GetEventRect(AEvent);
eventR.TopLeft := ClientToScreen(eventR.TopLeft);
eventR.BottomRight := ClientToScreen(eventR.BottomRight);
APoint := ClientToScreen(APoint);
R := FHintWindow.CalcHintRect(MAX_HINT_WIDTH, txt, nil);
OffsetRect(R, APoint.X - WidthOf(R), eventR.Bottom);
FHintWindow.ActivateHint(R, txt);
end else
HideHintWindow;
end
else
if FHintMode = hmComponentHint then
begin
Application.Hint := Hint;
Application.ActivateHint(ClientToScreen(APoint), true);
end;
end;
procedure TVpDayView.HideHintWindow;
begin
case FHintMode of
hmEventHint:
FreeAndNil(FHintWindow);
hmComponentHint:
Application.CancelHint;
end;
end;
{ Popup menu }
procedure TVpDayView.InitializeDefaultPopup; procedure TVpDayView.InitializeDefaultPopup;
var var
@ -895,26 +1059,26 @@ begin
canEdit := (FActiveEvent <> nil) and FActiveEvent.CanEdit; canEdit := (FActiveEvent <> nil) and FActiveEvent.CanEdit;
FDefaultPopup.Items.Clear; FDefaultPopup.Items.Clear;
if RSDayPopupAdd <> '' then begin if RSPopupAddEvent <> '' then begin
NewItem := TMenuItem.Create(Self); NewItem := TMenuItem.Create(Self);
NewItem.Caption := RSDayPopupAdd; NewItem.Caption := RSPopupAddEvent;
NewItem.OnClick := PopupAddEvent; NewItem.OnClick := PopupAddEvent;
NewItem.Tag := 0; NewItem.Tag := 0;
FDefaultPopup.Items.Add(NewItem); FDefaultPopup.Items.Add(NewItem);
end; end;
if RSDayPopupEdit <> '' then begin if RSPopupEditEvent <> '' then begin
NewItem := TMenuItem.Create(Self); NewItem := TMenuItem.Create(Self);
NewItem.Caption := RSDayPopupEdit; NewItem.Caption := RSPopupEditEvent;
NewItem.Enabled := canEdit; NewItem.Enabled := canEdit;
NewItem.OnClick := PopupEditEvent; NewItem.OnClick := PopupEditEvent;
NewItem.Tag := 1; NewItem.Tag := 1;
FDefaultPopup.Items.Add(NewItem); FDefaultPopup.Items.Add(NewItem);
end; end;
if RSDayPopupDelete <> '' then begin if RSPopupDeleteEvent <> '' then begin
NewItem := TMenuItem.Create(Self); NewItem := TMenuItem.Create(Self);
NewItem.Caption := RSDayPopupDelete; NewItem.Caption := RSPopupDeleteEvent;
NewItem.Enabled := canEdit; NewItem.Enabled := canEdit;
NewItem.OnClick := PopupDeleteEvent; NewItem.OnClick := PopupDeleteEvent;
NewItem.Tag := 1; NewItem.Tag := 1;
@ -925,9 +1089,9 @@ begin
NewItem.Caption := '-'; NewItem.Caption := '-';
FDefaultPopup.Items.Add(NewItem); FDefaultPopup.Items.Add(NewItem);
if RSDayPopupNav <> '' then begin if RSPopupChangeDate <> '' then begin
NewItem := TMenuItem.Create(Self); NewItem := TMenuItem.Create(Self);
NewItem.Caption := RSDayPopupNav; NewItem.Caption := RSPopupChangeDate;
NewItem.Tag := 0; NewItem.Tag := 0;
FDefaultPopup.Items.Add(NewItem); FDefaultPopup.Items.Add(NewItem);
@ -1644,6 +1808,16 @@ begin
end; end;
procedure TVpDayView.MouseEnter;
begin
FMouseEvent := nil;
end;
procedure TVpDayView.MouseLeave;
begin
HideHintWindow;
end;
procedure TVpDayView.MouseUp(Button: TMouseButton; Shift: TShiftState; procedure TVpDayView.MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); X, Y: Integer);
begin begin
@ -1660,6 +1834,8 @@ begin
end; end;
procedure TVpDayView.MouseMove(Shift: TShiftState; X, Y: Integer); procedure TVpDayView.MouseMove(Shift: TShiftState; X, Y: Integer);
var
event: TVpEvent;
begin begin
inherited MouseMove(Shift, X, Y); inherited MouseMove(Shift, X, Y);
if (FActiveEvent <> nil) and (not ReadOnly) then begin if (FActiveEvent <> nil) and (not ReadOnly) then begin
@ -1672,6 +1848,16 @@ begin
BeginDrag(true); BeginDrag(true);
end; end;
end; end;
if ShowHint then
begin
event := GetEventAtCoord(Point(X, Y));
if FMouseEvent <> event then begin
Application.CancelHint;
ShowHintWindow(Point(X, Y), event);
FMouseEvent := event;
end;
end;
end; end;
procedure TVpDayView.MouseDown(Button: TMouseButton; Shift: TShiftState; procedure TVpDayView.MouseDown(Button: TMouseButton; Shift: TShiftState;
@ -1916,7 +2102,7 @@ begin
end; end;
end; end;
function TVpDayView.EditEventAtCoord(Point: TPoint): Boolean; function TVpDayView.EditEventAtCoord(APoint: TPoint): Boolean;
var var
I: Integer; I: Integer;
begin begin
@ -1930,7 +2116,7 @@ begin
if dvEventArray[I].Event = nil then if dvEventArray[I].Event = nil then
{ we've hit the end of visible events without finding a match } { we've hit the end of visible events without finding a match }
Exit; Exit;
if PointInRect(Point, dvEventArray[I].Rec) then if PointInRect(APoint, dvEventArray[I].Rec) then
begin begin
FActiveEvent := TVpEvent(dvEventArray[I].Event); FActiveEvent := TVpEvent(dvEventArray[I].Event);
dvActiveEventRec := dvEventArray[I].Rec; dvActiveEventRec := dvEventArray[I].Rec;
@ -1943,7 +2129,7 @@ begin
end; end;
{=====} {=====}
function TVpDayView.GetEventAtCoord(Point: TPoint): TVpEvent; function TVpDayView.GetEventAtCoord(APoint: TPoint): TVpEvent;
var var
I: Integer; I: Integer;
begin begin
@ -1951,14 +2137,24 @@ begin
for I := 0 to pred(Length(dvEventArray)) do begin for I := 0 to pred(Length(dvEventArray)) do begin
if dvEventArray[I].Event = nil then if dvEventArray[I].Event = nil then
Exit; Exit;
if PointInRect(Point, dvEventArray[I].Rec) then if PointInRect(APoint, dvEventArray[I].Rec) then
begin begin
result := TVpEvent(dvEventArray[I].Event); result := TVpEvent(dvEventArray[I].Event);
Exit; Exit;
end; end;
end; end;
end; end;
{=====}
function TVpDayView.GetEventRect(AEvent: TVpEvent): TRect;
var
i: Integer;
begin
for i:=0 to High(dvEventArray) do
if dvEventArray[i].Event = AEvent then begin
Result := dvEventArray[i].Rec;
exit;
end;
end;
procedure TVpDayView.dvEditInPlace(Sender: TObject); procedure TVpDayView.dvEditInPlace(Sender: TObject);
begin begin

View File

@ -76,7 +76,6 @@ type
OldFont: TFont; OldFont: TFont;
protected protected
function BuildEventString(AEvent: TVpEvent): String;
procedure CalcRowHeadRect(out ARect: TRect); procedure CalcRowHeadRect(out ARect: TRect);
function CalcRowHeadWidth: Integer; function CalcRowHeadWidth: Integer;
function CountOverlappingEvents(Event: TVpEvent; const EArray: TVpDvEventArray): Integer; function CountOverlappingEvents(Event: TVpEvent; const EArray: TVpDvEventArray): Integer;
@ -145,44 +144,6 @@ begin
FDayView := ADayView; FDayView := ADayView;
end; end;
function TVpDayViewPainter.BuildEventString(AEvent: TVpEvent): String;
var
maxW: Integer;
timeFmt: String;
res: TVpResource;
grp: TVpResourceGroup;
isOverlayed: Boolean;
begin
Result := '';
grp := FDayView.Datastore.Resource.Group;
isOverlayed := AEvent.IsOverlayed;
if isOverlayed then begin
if (grp <> nil) and (odResource in grp.ShowDetails) then begin
res := FDayView.Datastore.Resources.GetResource(AEvent.ResourceID);
if res <> nil then
Result := '[' + res.Description + '] ';
end else
Result := '[' + RSOverlayedEvent + '] ';
end;
if (not isOverlayed) or ((grp <> nil) and (odEventDescription in grp.ShowDetails)) then
begin
if Result <> '' then
Result := Result + ' ';
if FDayView.ShowEventTimes then begin
timeFmt := IfThen(FDayView.TimeFormat = tf24Hour, 'h:nn', 'h:nnam/pm');
Result := Result + Format('%s - %s: %s', [
FormatDateTime(timeFmt, AEvent.StartTime),
FormatDateTime(timeFmt, AEvent.EndTime),
AEvent.Description
]);
end else
Result := Result + AEvent.Description;
end;
end;
{ returns the number of events which overlap the specified event } { returns the number of events which overlap the specified event }
function TVpDayViewPainter.CountOverlappingEvents(Event: TVpEvent; function TVpDayViewPainter.CountOverlappingEvents(Event: TVpEvent;
const EArray: TVpDvEventArray): Integer; const EArray: TVpDvEventArray): Integer;
@ -942,7 +903,7 @@ begin
DrawIcons(IconRect); DrawIcons(IconRect);
{ Build the event string } { Build the event string }
EventString := BuildEventString(AEvent); EventString := FDayView.BuildEventString(AEvent, false);
{ If the string is longer than the availble space then chop off the end { If the string is longer than the availble space then chop off the end
and place those little '...'s at the end } and place those little '...'s at the end }

View File

@ -123,6 +123,7 @@ function DateInRange(ADate, StartDate, EndDate: TDateTime; IncludeLimits: Boolea
function TimeInRange(ATime, StartTime, EndTime: TDateTime; IncludeLimits: Boolean): Boolean; function TimeInRange(ATime, StartTime, EndTime: TDateTime; IncludeLimits: Boolean): Boolean;
function GetTimeFormat: TVpTimeFormat; function GetTimeFormat: TVpTimeFormat;
function GetTimeFormatStr(ATimeFormat: TVpTimeFormat): String;
function GranularityToStr(Gran: TVpGranularity): string; function GranularityToStr(Gran: TVpGranularity): string;
function HourToAMPM(Hour: TVpHours): string; function HourToAMPM(Hour: TVpHours): string;
function HourToStr(Hour: TVpHours; Mil: Boolean): string; function HourToStr(Hour: TVpHours; Mil: Boolean): string;
@ -496,13 +497,24 @@ end;
function GetTimeFormat: TVpTimeFormat; function GetTimeFormat: TVpTimeFormat;
var var
s: String; s: String;
p: Integer;
begin begin
s := lowercase(FormatDateTime('hh:nn ampm', 0.25)); s := lowercase(FormatDateTime('hh:nn ampm', 0.25));
if pos(lowercase(FormatSettings.TimeAMString), s) = Length(s) - Length(FormatSettings.TimeAMString) then p := pos(lowercase(FormatSettings.TimeAMString), s);
Result := tf12Hour else if p = Length(s) - Length(FormatSettings.TimeAMString) then
Result := tf12Hour
else
Result := tf24Hour; Result := tf24Hour;
end; end;
function GetTimeFormatStr(ATimeFormat: TVpTimeFormat): String;
begin
case ATimeFormat of
tf12Hour: Result := 'hh:nn am/pm';
tf24Hour: Result := 'hh:nn';
end;
end;
function GranularityToStr(Gran: TVpGranularity): string; function GranularityToStr(Gran: TVpGranularity): string;
begin begin
Result := IntToStr(GranularityMinutes[Gran]); Result := IntToStr(GranularityMinutes[Gran]);

View File

@ -112,6 +112,8 @@ type
{ TVpMonthView } { TVpMonthView }
TVpMonthView = class(TVpLinkableControl) TVpMonthView = class(TVpLinkableControl)
private
FHintMode: TVpHintMode;
protected{ private } protected{ private }
FKBNavigate: Boolean; FKBNavigate: Boolean;
FColumnWidth: Integer; FColumnWidth: Integer;
@ -263,6 +265,7 @@ type
property EventDayStyle: TFontStyles read FEventDayStyle write SetEventDayStyle; property EventDayStyle: TFontStyles read FEventDayStyle write SetEventDayStyle;
property EventFont: TVpFont read FEventFont write SetEventFont; property EventFont: TVpFont read FEventFont write SetEventFont;
property HeadAttributes: TVpMvHeadAttr read FHeadAttr write FHeadAttr; property HeadAttributes: TVpMvHeadAttr read FHeadAttr write FHeadAttr;
property HintMode: TVpHintMode read FHintMode write FHintMode default hmEventHint;
property LineColor: TColor read FLineColor write SetLineColor; property LineColor: TColor read FLineColor write SetLineColor;
property TimeFormat: TVpTimeFormat read FTimeFormat write SetTimeFormat; property TimeFormat: TVpTimeFormat read FTimeFormat write SetTimeFormat;
property TodayAttributes: TVpMvTodayAttr read FTodayAttr write FTodayAttr; property TodayAttributes: TVpMvTodayAttr read FTodayAttr write FTodayAttr;
@ -477,13 +480,13 @@ end;
destructor TVpMonthView.Destroy; destructor TVpMonthView.Destroy;
begin begin
FreeAndNil(FHintWindow);
FHeadAttr.Free; FHeadAttr.Free;
FTodayAttr.Free; FTodayAttr.Free;
FDayHeadAttr.Free; FDayHeadAttr.Free;
FDayNumberFont.Free; FDayNumberFont.Free;
FEventFont.Free; FEventFont.Free;
mvSpinButtons.Free; mvSpinButtons.Free;
// mvEventList.Free;
FDefaultPopup.Free; FDefaultPopup.Free;
inherited; inherited;
end; end;
@ -508,7 +511,7 @@ begin
if AEvent.AllDayEvent then if AEvent.AllDayEvent then
timeStr := RSAllDay timeStr := RSAllDay
else begin else begin
timefmt := IfThen(TimeFormat = tf24Hour, 'hh:nn', 'hh:nn AM/PM'); timeFmt := GetTimeFormatStr(TimeFormat);
timeStr := FormatDateTime(timefmt, AEvent.StartTime); timeStr := FormatDateTime(timefmt, AEvent.StartTime);
if not AStartTimeOnly then if not AStartTimeOnly then
timeStr := timeStr + ' - ' + FormatDateTime(timeFmt, AEvent.EndTime); timeStr := timeStr + ' - ' + FormatDateTime(timeFmt, AEvent.EndTime);
@ -919,6 +922,8 @@ var
event: TVpEvent; event: TVpEvent;
list: TList; list: TList;
R: TRect; R: TRect;
begin
if FHintMode = hmEventHint then
begin begin
if (ADate = 0) or ((Datastore = nil) or (Datastore.Resource = nil)) then if (ADate = 0) or ((Datastore = nil) or (Datastore.Resource = nil)) then
begin begin
@ -960,11 +965,21 @@ begin
end else end else
// Hide the hint window // Hide the hint window
HideHintWindow; HideHintWindow;
end
else
if FHintMode = hmComponentHint then
begin
Application.Hint := Hint;
Application.ActivateHint(ClientToScreen(APoint), true);
end;
end; end;
procedure TVpMonthView.HideHintWindow; procedure TVpMonthView.HideHintWindow;
begin begin
FreeAndNil(FHintWindow); case FHintMode of
hmEventHint: FreeAndNil(FHintWindow);
hmComponentHint: Application.CancelHint;
end;
end; end;
procedure TVpMonthView.InitializeDefaultPopup; procedure TVpMonthView.InitializeDefaultPopup;
@ -1195,13 +1210,15 @@ var
day: TDateTime; day: TDateTime;
begin begin
inherited MouseMove(Shift, X, Y); inherited MouseMove(Shift, X, Y);
if ShowHint then
begin
day := GetDateAtCoord(Point(X, Y)); day := GetDateAtCoord(Point(X, Y));
if FMouseDate <> day then begin if FMouseDate <> day then begin
Application.CancelHint;
ShowHintWindow(Point(X, Y), day); ShowHintWindow(Point(X, Y), day);
FMouseDate := day; FMouseDate := day;
end; end;
end; end;
end;
procedure TVpMonthView.SetRightClickChangeDate(const v: Boolean); procedure TVpMonthView.SetRightClickChangeDate(const v: Boolean);
begin begin

View File

@ -37,7 +37,6 @@ type
mvRowHeight: Integer; mvRowHeight: Integer;
mvColWidth: Integer; mvColWidth: Integer;
mvLineHeight: Integer; mvLineHeight: Integer;
mvVisibleEvents: Integer;
protected protected
procedure Clear; procedure Clear;
@ -63,7 +62,7 @@ type
implementation implementation
uses uses
LazUtf8, StrUtils, LazUtf8, StrUtils, Math,
VpCanvasUtils, VpMisc; VpCanvasUtils, VpMisc;
type type
@ -477,6 +476,7 @@ var
Str: String; Str: String;
StrLen: Integer; StrLen: Integer;
P: TPoint; P: TPoint;
visibleEvents: Integer;
begin begin
RenderCanvas.Pen.Color := RealLineColor; RenderCanvas.Pen.Color := RealLineColor;
RenderCanvas.Pen.Style := psSolid; RenderCanvas.Pen.Style := psSolid;
@ -487,6 +487,7 @@ begin
(FMonthView.DataStore.Resource <> nil) and (FMonthView.DataStore.Resource <> nil) and
(FMonthView.DataStore.Resource.Schedule.EventCount <> 0) (FMonthView.DataStore.Resource.Schedule.EventCount <> 0)
then begin then begin
visibleEvents := 0;
EventList := TList.Create; EventList := TList.Create;
try try
for I := 0 to 43 do begin for I := 0 to 43 do begin
@ -547,9 +548,9 @@ begin
{ Store TextRect and Event in EventArray } { Store TextRect and Event in EventArray }
with TVpMonthViewOpener(FMonthView) do begin with TVpMonthViewOpener(FMonthView) do begin
Inc(mvVisibleEvents); Inc(visibleEvents);
mvEventArray[mvVisibleEvents - 1].Rec := TextRect; mvEventArray[visibleEvents - 1].Rec := TextRect;
mvEventArray[mvVisibleEvents - 1].Event := TVpEvent(EventList.List^[j]); mvEventArray[visibleEvents - 1].Event := TVpEvent(EventList.List^[j]);
end; end;
{ Move TextRect down one line for the next item... } { Move TextRect down one line for the next item... }
@ -735,7 +736,6 @@ begin
DrawDayHead; DrawDayHead;
{ draw days } { draw days }
mvVisibleEvents := 0;
DrawDays; DrawDays;
{ draw the borders } { draw the borders }
@ -754,10 +754,7 @@ procedure TVpMonthViewPainter.SetMeasurements;
begin begin
inherited; inherited;
if RenderDate = 0 then DisplayDate := IfThen(RenderDate = 0, Date, RenderDate);
DisplayDate := Date
else
DisplayDate := RenderDate;
{ we use the VpProductName because is is a good representation of some } { we use the VpProductName because is is a good representation of some }
{ generic text } { generic text }

View File

@ -151,6 +151,7 @@ resourcestring
RSConfirmDeleteContact = 'Delete contact %s?'; RSConfirmDeleteContact = 'Delete contact %s?';
{Event Specific} {Event Specific}
RSEvent = 'Event';
RSFromSchedule = 'from your schedule?'; RSFromSchedule = 'from your schedule?';
RSConfirmDeleteEvent = 'Delete event from schedule?'; RSConfirmDeleteEvent = 'Delete event from schedule?';
RSStartEndTimeError = 'Incorrect order of start and end times. ' + RSStartEndTimeError = 'Incorrect order of start and end times. ' +
@ -158,6 +159,7 @@ resourcestring
RSCannotEditOverlayedEvent= 'Cannot edit this overlayed event.'; RSCannotEditOverlayedEvent= 'Cannot edit this overlayed event.';
RSNoOverlayedEvents = 'none'; RSNoOverlayedEvents = 'none';
RSOverlayedEvent = 'overlayed'; RSOverlayedEvent = 'overlayed';
RSOverlayed = 'Overlayed';
{Task Specific} {Task Specific}
RSConfirmDeleteTask = 'Delete this task from your list?'; RSConfirmDeleteTask = 'Delete this task from your list?';
@ -167,27 +169,12 @@ resourcestring
RSTaskTitleResource = 'Task list - '; {!!.01} RSTaskTitleResource = 'Task list - '; {!!.01}
RSTaskTitleNoResource = 'Task list'; {!!.01} RSTaskTitleNoResource = 'Task list'; {!!.01}
{MonthView Specific} { Popup specific }
(* RSPopupAddEvent = 'Add event...';
RSMonthPopupToday = 'Today'; RSPopupEditEvent = 'Edit event...';
RSMonthPopupNextMonth = 'Next month'; RSPopupDeleteEvent = '&Delete event...';
RSMonthPopupPrevMonth = 'Previous month'; RSPopupChangeDate = 'Change date';
RSMonthPopupNextYear = 'Next year'; RSPopupResourceGroups = 'Overlay events';
RSMonthPopupPrevYear = 'Previous year'; *)
{WeekView Specific}
RSWeekPopupAdd = 'Add event...';
RSWeekPopupEdit = 'Edit event...';
RSWeekPopupDelete = '&Delete event...';
RSWeekPopupNav = 'Change date';
(*
RSWeekPopupNavToday = 'Today';
RSWeekPopupNavNextWeek = 'Next week';
RSWeekPopupNavPrevWeek = 'Previous week';
RSWeekPopupNavNextMonth = 'Next month';
RSWeekPopupNavPrevMonth = 'Previous month';
RSWeekPopupNavNextYear = 'Next year';
RSWeekPopupNavPrevYear = 'Previous year';*)
{ Print Preview Specific } { Print Preview Specific }
RSPrintPrvPrint = '&Print'; RSPrintPrvPrint = '&Print';
@ -203,33 +190,6 @@ resourcestring
RSPrintPrvCancel = 'Cancel'; RSPrintPrvCancel = 'Cancel';
RSPrintPrvCancelHint = 'Cancel preview'; RSPrintPrvCancelHint = 'Cancel preview';
{ DayView Specific }
RSDayPopupAdd = 'Add event...';
RSDayPopupEdit = 'Edit event...';
RSDayPopupDelete = 'Delete event...';
RSDayPopupNav = 'Change date';
(*
RSDayPopupNavToday = 'Today';
RSDayPopupNavTomorrow = 'Tomorrow';
RSDayPopupNavYesterday = 'Yesterday';
RSDayPopupNavNextDay = 'Next day';
RSDayPopupNavPrevDay = 'Previous day';
RSDayPopupNavNextWeek = 'Next week';
RSDayPopupNavPrevWeek = 'Previous week';
RSDayPopupNavNextMonth = 'Next month';
RSDayPopupNavPrevMonth = 'Previous month';
RSDayPopupNavNextYear = 'Next year';
RSDayPopupNavPrevYear = 'Previous year';
RSHintToday = 'Today'; {!!.01}
RSHintTomorrow = 'Tomorrow'; {!!.01}
RSHintYesterday = 'Yesterday'; {!!.01}
RSHintNextWeek = 'Next week'; {!!.01}
RSHintPrevWeek = 'Previous week'; {!!.01}
RSHintPrevDay = 'Previous day';
RsHintNextDay = 'Next day';
*)
RSPopupResourceGroups = 'Overlay events';
{ field names } { field names }
RSPosition = 'Position'; RSPosition = 'Position';
RSCompany = 'Company'; RSCompany = 'Company';
@ -238,6 +198,7 @@ resourcestring
RSCountry = 'Country'; RSCountry = 'Country';
RSCategory = 'Category'; RSCategory = 'Category';
RSNotes = 'Notes'; RSNotes = 'Notes';
RSLocation = 'Location';
RSCustom1 = 'Custom 1'; RSCustom1 = 'Custom 1';
RSCustom2 = 'Custom 2'; RSCustom2 = 'Custom 2';
@ -321,19 +282,6 @@ resourcestring
RS1Week = '1 week'; RS1Week = '1 week';
{ Calendar } { Calendar }
(*
RSCalendarPrevMonth = 'Previous Month';
RSCalendarNextMonth = 'Next Month';
RSCalendarPrevYear = 'Previous Year';
RSCalendarNextYear = 'Next Year';
RSCalendarToday = 'Today';
RSCalendarPopupToday = 'Today';
RSCalendarPopupNextMonth = 'Next Month';
RSCalendarPopupPrevMonth = 'Previous Month';
RSCalendarPopupNextYear = 'Next Year';
RSCalendarPopupPrevYear = 'Previous Year';
*)
RSCalendarRevert = 'Revert'; RSCalendarRevert = 'Revert';
RSCalendarPopupRevert = 'Revert'; RSCalendarPopupRevert = 'Revert';

View File

@ -118,6 +118,9 @@ type
TVpWeekView = class(TVpLinkableControl) TVpWeekView = class(TVpLinkableControl)
private private
FHintMode: TVpHintMode;
FMouseEvent: TVpEvent;
FHintWindow: THintWindow;
procedure SetActiveEvent(AValue: TVpEvent); procedure SetActiveEvent(AValue: TVpEvent);
protected{ private } protected{ private }
FActiveDate: TDateTime; FActiveDate: TDateTime;
@ -140,8 +143,6 @@ type
FAllowInplaceEdit: Boolean; FAllowInplaceEdit: Boolean;
FAllowDragAndDrop: Boolean; FAllowDragAndDrop: Boolean;
FDragDropTransparent: Boolean; FDragDropTransparent: Boolean;
FMouseEvent: TVpEvent;
FHintWindow: THintWindow;
{ event variables } { event variables }
FBeforeEdit: TVpBeforeEditEvent; FBeforeEdit: TVpBeforeEditEvent;
FAfterEdit: TVpAfterEditEvent; FAfterEdit: TVpAfterEditEvent;
@ -209,6 +210,8 @@ type
procedure EditEvent; procedure EditEvent;
procedure EndEdit(Sender: TObject); procedure EndEdit(Sender: TObject);
procedure KeyDown(var Key: Word; Shift: TShiftState); override; procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure MouseEnter; override;
procedure MouseLeave; override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); override;
@ -238,7 +241,8 @@ type
public public
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
function BuildEventString(AEvent: TVpEvent; AStartTime, AEndTime: TDateTime): String; function BuildEventString(AEvent: TVpEvent; AStartTime, AEndTime: TDateTime;
UseAsHint: Boolean): String;
procedure LoadLanguage; procedure LoadLanguage;
procedure DeleteActiveEvent(Verify: Boolean); procedure DeleteActiveEvent(Verify: Boolean);
procedure DragDrop(Source: TObject; X, Y: Integer); override; procedure DragDrop(Source: TObject; X, Y: Integer); override;
@ -269,6 +273,7 @@ type
property DrawingStyle: TVpDrawingStyle read FDrawingStyle write SetDrawingStyle stored True; property DrawingStyle: TVpDrawingStyle read FDrawingStyle write SetDrawingStyle stored True;
property EventFont: TVpFont read FEventFont write SetEventFont; property EventFont: TVpFont read FEventFont write SetEventFont;
property HeadAttributes: TVpWvHeadAttributes read FHeadAttr write FHeadAttr; property HeadAttributes: TVpWvHeadAttributes read FHeadAttr write FHeadAttr;
property HintMode: TVpHintMode read FHintMode write FHintMode default hmEventHint;
property LineColor: TColor read FLineColor write SetLineColor; property LineColor: TColor read FLineColor write SetLineColor;
property TimeFormat: TVpTimeFormat read FTimeFormat write SetTimeFormat; property TimeFormat: TVpTimeFormat read FTimeFormat write SetTimeFormat;
property ShowEventTime: Boolean read FShowEventTime write SetShowEventTime; property ShowEventTime: Boolean read FShowEventTime write SetShowEventTime;
@ -294,7 +299,6 @@ uses
SysUtils, StrUtils, LazUTF8, Dialogs, SysUtils, StrUtils, LazUTF8, Dialogs,
VpEvntEditDlg, VpWeekViewPainter; VpEvntEditDlg, VpWeekViewPainter;
(*****************************************************************************) (*****************************************************************************)
{ TVpTGInPlaceEdit } { TVpTGInPlaceEdit }
(*****************************************************************************) (*****************************************************************************)
@ -488,10 +492,10 @@ begin
wvHookUp; wvHookUp;
SetActiveDate(Now); SetActiveDate(Now);
end; end;
{=====}
destructor TVpWeekView.Destroy; destructor TVpWeekView.Destroy;
begin begin
FreeAndNil(FHintWindow);
FreeAndNil(wvInplaceEditor); FreeAndNil(wvInplaceEditor);
FDayHeadAttributes.Free; FDayHeadAttributes.Free;
FAllDayEventAttr.Free; FAllDayEventAttr.Free;
@ -505,12 +509,15 @@ begin
end; end;
function TVpWeekView.BuildEventString(AEvent: TVpEvent; function TVpWeekView.BuildEventString(AEvent: TVpEvent;
AStartTime, AEndTime: TDateTime): String; AStartTime, AEndTime: TDateTime; UseAsHint: Boolean): String;
var var
timeFmt: String; timeFmt: String;
timeStr: String;
s: String;
res: TVpResource; res: TVpResource;
grp: TVpResourceGroup; grp: TVpResourceGroup;
isOverlayed: Boolean; isOverlayed: Boolean;
showDetails: Boolean;
begin begin
Result := ''; Result := '';
@ -518,17 +525,59 @@ begin
exit; exit;
grp := Datastore.Resource.Group; grp := Datastore.Resource.Group;
showDetails := (grp <> nil) and (odEventDescription in grp.ShowDetails);
isOverlayed := AEvent.IsOverlayed; isOverlayed := AEvent.IsOverlayed;
timefmt := GetTimeFormatStr(TimeFormat);
if ShowEventTime then if UseAsHint then begin
{ Usage as hint }
if isOverlayed then begin
grp := Datastore.Resource.Group;
if (odResource in grp.ShowDetails) then begin
res := Datastore.Resources.GetResource(AEvent.ResourceID);
Result := RSOverlayed + ': ' + res.Description;
end else
Result := RSOverlayed;
end else
showDetails := true;
timeStr := IfThen(AEvent.AllDayEvent,
RSAllDay,
FormatDateTime(timeFmt, AEvent.StartTime) + ' - ' + FormatDateTime(timeFmt, AEvent.EndTime)
);
Result := IfThen(Result = '',
timeStr,
Result + LineEnding + timeStr
);
if showDetails then begin
// Event description
Result := Result + LineEnding + LineEnding +
RSEvent + ':' + LineEnding + AEvent.Description;
// Event notes
if (AEvent.Notes <> '') then begin
s := WrapText(AEvent.Notes, MAX_HINT_WIDTH);
s := StripLastLineEnding(s);
Result := Result + LineEnding + LineEnding +
RSNotes + ':' + LineEnding + s;
end;
// Event location
if (AEvent.Location <> '') then
Result := Result + LineEnding + LineEnding +
RSLocation + ':' + LineEnding + AEvent.Location;
end;
end
else
begin begin
timefmt := IfThen(TimeFormat = tf24Hour, 'hh:nn', 'hh:nn AM/PM'); { Usage as cell text }
Result := Result + Format('%s - %s: ', [ timeStr := IfThen(ShowEventTime, Format('%s - %s: ', [
FormatDateTime(timeFmt, AStartTime), FormatDateTime(timeFmt, AStartTime),
FormatDateTime(timeFmt, AEndTime) FormatDateTime(timeFmt, AEndTime)
]); ]));
end else Result := timeStr;
Result := '';
if isOverlayed then if isOverlayed then
begin begin
@ -539,11 +588,13 @@ begin
Result := Result + '[' + res.Description + '] '; Result := Result + '[' + res.Description + '] ';
end else end else
Result := Result + '[' + RSOverlayedEvent + '] '; Result := Result + '[' + RSOverlayedEvent + '] ';
end; end else
showDetails := True;
if (not isOverlayed) or ((grp <> nil) and (odEventDescription in grp.ShowDetails)) then if showDetails then
Result := Result + AEvent.Description; Result := Result + AEvent.Description;
end; end;
end;
procedure TVpWeekView.LoadLanguage; procedure TVpWeekView.LoadLanguage;
@ -957,14 +1008,11 @@ end;
{ Hints } { Hints }
procedure TVpWeekView.ShowHintWindow(APoint: TPoint; AEvent: TVpEvent); procedure TVpWeekView.ShowHintWindow(APoint: TPoint; AEvent: TVpEvent);
const
MaxWidth = 400;
var var
txt, s: String; txt: String;
grp: TVpResourceGroup; R, eventR: TRect;
showDetails: Boolean; begin
res: TVpResource; if FHintMode = hmEventHint then
R, REv: TRect;
begin begin
if (AEvent = nil) or if (AEvent = nil) or
((Datastore = nil) or (Datastore.Resource = nil)) then ((Datastore = nil) or (Datastore.Resource = nil)) then
@ -973,39 +1021,7 @@ begin
exit; exit;
end; end;
if AEvent.IsOverlayed then begin txt := BuildEventString(AEvent, AEvent.StartTime, AEvent.EndTime, true);
grp := Datastore.Resource.Group;
showDetails := (odEventDescription in grp.ShowDetails);
if (odResource in grp.ShowDetails) then begin
res := Datastore.Resources.GetResource(AEvent.ResourceID);
txt := 'Overlayed resource: ' + res.Description;
end else
txt := 'Overlayed resource';
end else begin
showDetails := true;
txt := '';
end;
if txt <> '' then
txt := txt + LineEnding;
if AEvent.AllDayEvent then
txt := txt + 'All day'
else
txt := txt + Format('%s - %s', [
FormatDateTime('hh:nn', AEvent.StartTime),
FormatDateTime('hh:nn', AEvent.EndTime)]);
if showDetails then begin
txt := txt + LineEnding + LineEnding + 'Event:' + LineEnding + AEvent.Description;
if (AEvent.Notes <> '') then begin
s := WrapText(AEvent.Notes, MaxWidth);
s := StripLastLineEnding(s);
txt := txt + LineEnding + LineEnding + 'Notes:' + LineEnding + s;
end;
if AEvent.Location <> '' then
txt := txt + LineEnding + LineEnding + 'Location:' + LineEnding + AEvent.Location;
end;
if (txt <> '') and if (txt <> '') and
not ((wvInPlaceEditor <> nil) and wvInplaceEditor.Visible) and not ((wvInPlaceEditor <> nil) and wvInplaceEditor.Visible) and
@ -1013,20 +1029,32 @@ begin
begin begin
if FHintWindow = nil then if FHintWindow = nil then
FHintWindow := THintWindow.Create(nil); FHintWindow := THintWindow.Create(nil);
REv := GetEventRect(AEvent); eventR := GetEventRect(AEvent);
REv.TopLeft := ClientToScreen(REv.TopLeft); eventR.TopLeft := ClientToScreen(eventR.TopLeft);
REv.BottomRight := ClientToScreen(REv.BottomRight); eventR.BottomRight := ClientToScreen(eventR.BottomRight);
APoint := ClientToScreen(APoint); APoint := ClientToScreen(APoint);
R := FHintWindow.CalcHintRect(MaxWidth, txt, nil); R := FHintWindow.CalcHintRect(MAX_HINT_WIDTH, txt, nil);
OffsetRect(R, APoint.X - WidthOf(R), REv.Bottom); OffsetRect(R, APoint.X - WidthOf(R), eventR.Bottom);
FHintWindow.ActivateHint(R, txt); FHintWindow.ActivateHint(R, txt);
end else end else
HideHintWindow; HideHintWindow;
end
else
if FHintMode = hmComponentHint then
begin
Application.Hint := Hint;
Application.ActivateHint(ClientToScreen(APoint), true);
end;
end; end;
procedure TVpWeekView.HideHintWindow; procedure TVpWeekView.HideHintWindow;
begin begin
case FHintMode of
hmEventHint:
FreeAndNil(FHintWindow); FreeAndNil(FHintWindow);
hmComponentHint:
Application.CancelHint;
end;
end; end;
@ -1041,26 +1069,26 @@ begin
canEdit := (FActiveEvent <> nil) and FActiveEvent.CanEdit; canEdit := (FActiveEvent <> nil) and FActiveEvent.CanEdit;
FDefaultPopup.Items.Clear; FDefaultPopup.Items.Clear;
if RSWeekPopupAdd <> '' then begin if RSPopupAddEvent <> '' then begin
NewItem := TMenuItem.Create(Self); NewItem := TMenuItem.Create(Self);
NewItem.Caption := RSWeekPopupAdd; NewItem.Caption := RSPopupAddEvent;
NewItem.OnClick := PopupAddEvent; NewItem.OnClick := PopupAddEvent;
NewItem.Tag := 0; NewItem.Tag := 0;
FDefaultPopup.Items.Add(NewItem); FDefaultPopup.Items.Add(NewItem);
end; end;
if RSWeekPopupEdit <> '' then begin if RSPopupEditEvent <> '' then begin
NewItem := TMenuItem.Create(Self); NewItem := TMenuItem.Create(Self);
NewItem.Caption := RSWeekPopupEdit; NewItem.Caption := RSPopupEditEvent;
NewItem.Enabled := canEdit; NewItem.Enabled := canEdit;
NewItem.OnClick := PopupEditEvent; NewItem.OnClick := PopupEditEvent;
NewItem.Tag := 1; NewItem.Tag := 1;
FDefaultPopup.Items.Add(NewItem); FDefaultPopup.Items.Add(NewItem);
end; end;
if RSWeekPopupDelete <> '' then begin if RSPopupDeleteEvent <> '' then begin
NewItem := TMenuItem.Create(Self); NewItem := TMenuItem.Create(Self);
NewItem.Caption := RSWeekPopupDelete; NewItem.Caption := RSPopupDeleteEvent;
NewItem.Enabled := canEdit; NewItem.Enabled := canEdit;
NewItem.OnClick := PopupDeleteEvent; NewItem.OnClick := PopupDeleteEvent;
NewItem.Tag := 1; NewItem.Tag := 1;
@ -1071,9 +1099,9 @@ begin
NewItem.Caption := '-'; NewItem.Caption := '-';
FDefaultPopup.Items.Add(NewItem); FDefaultPopup.Items.Add(NewItem);
if RSWeekPopupNav <> '' then begin if RSPopupChangeDate <> '' then begin
NewItem := TMenuItem.Create(Self); NewItem := TMenuItem.Create(Self);
NewItem.Caption := RSWeekPopupNav; NewItem.Caption := RSPopupChangeDate;
NewItem.Tag := 0; NewItem.Tag := 0;
FDefaultPopup.Items.Add(NewItem); FDefaultPopup.Items.Add(NewItem);
@ -1570,7 +1598,16 @@ begin
// SetFocus; // SetFocus;
end; end;
end; end;
{=====}
procedure TVpWeekView.MouseEnter;
begin
FMouseEvent := nil;
end;
procedure TVpWeekView.MouseLeave;
begin
HideHintWindow;
end;
procedure TVpWeekView.MouseDown(Button: TMouseButton; Shift: TShiftState; procedure TVpWeekView.MouseDown(Button: TMouseButton; Shift: TShiftState;
X,Y: Integer); X,Y: Integer);
@ -1650,6 +1687,8 @@ begin
end; end;
end; end;
if ShowHint then
begin
event := GetEventAtCoord(Point(X, Y)); event := GetEventAtCoord(Point(X, Y));
if FMouseEvent <> event then begin if FMouseEvent <> event then begin
Application.CancelHint; Application.CancelHint;
@ -1657,6 +1696,7 @@ begin
FMouseEvent := event; FMouseEvent := event;
end; end;
end; end;
end;
procedure TVpWeekView.MouseUp(Button: TMouseButton; Shift: TShiftState; procedure TVpWeekView.MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); X, Y: Integer);

View File

@ -513,7 +513,7 @@ begin
RenderCanvas.Brush.Color := RealColor; RenderCanvas.Brush.Color := RealColor;
{ Build the event text } { Build the event text }
dayStr := FWeekView.BuildEventString(AEvent, todayStartTime, todayEndTime); dayStr := FWeekView.BuildEventString(AEvent, todayStartTime, todayEndTime, false);
strLen := RenderCanvas.TextWidth(dayStr); strLen := RenderCanvas.TextWidth(dayStr);
if (strLen > WidthOf(TextRect) - TextMargin) then // wp: shouldn't this be 2*TextMargin ? if (strLen > WidthOf(TextRect) - TextMargin) then // wp: shouldn't this be 2*TextMargin ?
dayStr := GetDisplayString(RenderCanvas, dayStr, 0, WidthOf(TextRect) - TextMargin * 2); dayStr := GetDisplayString(RenderCanvas, dayStr, 0, WidthOf(TextRect) - TextMargin * 2);