private void saveDate()
        {
            if (!this.hasTimeEntry())
            {
                Console.WriteLine("Cannot apply date change: No time entry.");
                return;
            }
            if (!this.startDatePicker.SelectedDate.HasValue)
            {
                this.startDatePicker.SelectedDate = Toggl.DateTimeFromUnix(this.timeEntry.Started);
                return;
            }

            DateTime currentDate = Toggl.DateTimeFromUnix(timeEntry.Started);

            try {
                DateTime selected = Convert.ToDateTime(this.startDatePicker.Text);

                if (!currentDate.Date.Equals(selected.Date))
                {
                    currentDate = selected;
                    Toggl.SetTimeEntryDate(this.timeEntry.GUID, selected);
                }
            }
            catch (Exception e)
            {
                System.Console.WriteLine("Catched error: " + e.Message);
            }
        }
 private void applyDateChangeOrReset()
 {
     if (!this.hasTimeEntry())
     {
         Console.WriteLine("Cannot apply date change: No time entry.");
         return;
     }
     if (!this.startDatePicker.SelectedDate.HasValue)
     {
         this.startDatePicker.SelectedDate = Toggl.DateTimeFromUnix(this.timeEntry.Started);
         return;
     }
     Toggl.SetTimeEntryDate(this.timeEntry.GUID, this.startDatePicker.SelectedDate.Value);
 }
        private void saveDate()
        {
            if (!this.hasTimeEntry())
            {
                Console.WriteLine("Cannot apply date change: No time entry.");
                return;
            }
            if (!this.startDatePicker.SelectedDate.HasValue)
            {
                this.startDatePicker.SelectedDate = Toggl.DateTimeFromUnix(this.timeEntry.Started);
                return;
            }

            DateTime currentDate = Toggl.DateTimeFromUnix(timeEntry.Started);

            if (!currentDate.Equals(this.startDatePicker.SelectedDate.Value))
            {
                currentDate = this.startDatePicker.SelectedDate.Value;
                Toggl.SetTimeEntryDate(this.timeEntry.GUID, currentDate);
            }
        }
Exemple #4
0
        public void Display(List <Toggl.TogglTimeEntryView> items, Action <string, TimeEntryCell> registerCellByGUID)
        {
            var item = items[0];

            if (!item.IsHeader)
            {
                throw new InvalidDataException("Can only create day header from header time entry view.");
            }

            this.date = Toggl.DateTimeFromUnix(item.Started);

            if (this.labelFormattedDate.Text != item.DateHeader)
            {
                this.panel.Visibility = Visibility.Visible;
            }

            this.labelFormattedDate.Text = item.DateHeader;
            this.labelDateDuration.Text  = item.DateDuration;

            this.fillCells(items, registerCellByGUID);
        }
 public static DateTime EndTime(this Toggl.TimelineChunkView chunk) => Toggl.DateTimeFromUnix(chunk.Ended);
 public static DateTime StartTime(this Toggl.TimelineChunkView chunk) => Toggl.DateTimeFromUnix(chunk.Started);
 public static DateTime EndTime(this Toggl.TogglTimeEntryView te) => Toggl.DateTimeFromUnix(te.Ended);
 public static DateTime StartTime(this Toggl.TogglTimeEntryView te) => Toggl.DateTimeFromUnix(te.Started);
        private void onTimeEntryEditor(bool open, Toggl.TogglTimeEntryView timeEntry, string focusedFieldName)
        {
            if (this.TryBeginInvoke(this.onTimeEntryEditor, open, timeEntry, focusedFieldName))
            {
                return;
            }

            using (Performance.Measure("filling edit view from OnTimeEntryEditor"))
            {
                this.dateSet = false;
                if (timeEntry.Locked)
                {
                    open = true;
                    this.contentGrid.IsEnabled = false;
                    this.contentGrid.Opacity   = 0.75;
                }
                else
                {
                    this.contentGrid.IsEnabled = true;
                    this.contentGrid.Opacity   = 1;
                }

                var keepNewProjectModeOpen =
                    !open &&
                    this.isInNewProjectMode &&
                    this.hasTimeEntry() &&
                    this.timeEntry.GUID == timeEntry.GUID &&
                    this.timeEntry.PID == timeEntry.PID &&
                    this.timeEntry.WID == timeEntry.WID &&
                    timeEntry.CanAddProjects;

                if (!keepNewProjectModeOpen && this.hasTimeEntry() && this.isInNewProjectMode)
                {
                    this.confirmNewProject();
                }

                var isDifferentTimeEntry = this.timeEntry.GUID != timeEntry.GUID;

                this.timeEntry = timeEntry;

                var isCurrentlyRunning = timeEntry.DurationInSeconds < 0;

                this.endTimeTextBox.IsEnabled  = !isCurrentlyRunning;
                this.startDatePicker.IsEnabled = !isCurrentlyRunning;

                var startDateTime = Toggl.DateTimeFromUnix(timeEntry.Started);
                var endDateTime   = Toggl.DateTimeFromUnix(timeEntry.Ended);

                setText(this.descriptionTextBox, timeEntry.Description, open);
                setTime(this.durationTextBox, timeEntry.Duration, open);
                setTime(this.startTimeTextBox, timeEntry.StartTimeString, open);
                this.startTimeTextBox.ToolTip = startDateTime.ToString("T", CultureInfo.CurrentCulture);
                setTime(this.endTimeTextBox, timeEntry.EndTimeString, open);
                this.endTimeTextBox.ToolTip       = endDateTime.ToString("T", CultureInfo.CurrentCulture);
                this.startDatePicker.SelectedDate = startDateTime;
                if (isDifferentTimeEntry)
                {
                    this.clearUndoHistory();
                }

                if (isCurrentlyRunning)
                {
                    this.endTimeTextBox.Text = "";
                }

                this.billableCheckBox.ShowOnlyIf(timeEntry.CanSeeBillable);
                this.billableCheckBox.IsChecked = timeEntry.Billable;

                if (open || !this.tagList.IsKeyboardFocusWithin)
                {
                    this.tagList.Clear(open);
                    if (timeEntry.Tags != null)
                    {
                        this.tagList.AddTags(timeEntry.Tags.Split(new[] { Toggl.TagSeparator },
                                                                  StringSplitOptions.RemoveEmptyEntries));
                    }
                }

                if (!keepNewProjectModeOpen)
                {
                    if (this.isInNewProjectMode)
                    {
                        this.createProjectPopup.IsOpen = false;
                        this.disableNewProjectMode();
                    }

                    this.selectedProjectColorCircle.Background = Utils.AdaptedProjectColorBrushFromString(timeEntry.Color);

                    setText(this.projectTextBox, timeEntry.ProjectLabel, timeEntry.TaskLabel, open);
                    projectTextBox.DataContext = timeEntry.ToProjectLabelViewModel();

                    setText(this.clientTextBox, timeEntry.ClientLabel, open);

                    this.selectedWorkspaceId = timeEntry.WID;
                    this.reloadWorkspaceClients(timeEntry.WID);

                    this.projectAutoComplete.ActionButtonText =
                        timeEntry.CanAddProjects
                            ? "Create a new project"
                            : string.Empty;
                }
                this.dateSet = true;
            }
        }
        private void onTimeEntryEditor(bool open, Toggl.TogglTimeEntryView timeEntry, string focusedFieldName)
        {
            if (this.TryBeginInvoke(this.onTimeEntryEditor, open, timeEntry, focusedFieldName))
            {
                return;
            }

            using (Performance.Measure("filling edit view from OnTimeEntryEditor"))
            {
                this.dateSet = false;
                if (timeEntry.Locked)
                {
                    open = true;
                    this.contentGrid.IsEnabled = false;
                    this.contentGrid.Opacity   = 0.75;
                }
                else
                {
                    this.contentGrid.IsEnabled = true;
                    this.contentGrid.Opacity   = 1;
                }

                var keepNewProjectModeOpen =
                    !open &&
                    this.isInNewProjectMode &&
                    this.hasTimeEntry() &&
                    this.timeEntry.GUID == timeEntry.GUID &&
                    this.timeEntry.PID == timeEntry.PID &&
                    this.timeEntry.WID == timeEntry.WID &&
                    timeEntry.CanAddProjects;

                if (!keepNewProjectModeOpen && this.hasTimeEntry() && this.isInNewProjectMode)
                {
                    this.confirmNewProject();
                }

                var isDifferentTimeEntry = this.timeEntry.GUID != timeEntry.GUID;

                this.timeEntry = timeEntry;

                var isCurrentlyRunning = timeEntry.DurationInSeconds < 0;

                this.endTimeTextBox.IsEnabled  = !isCurrentlyRunning;
                this.startDatePicker.IsEnabled = !isCurrentlyRunning;

                setText(this.descriptionTextBox, timeEntry.Description, open);
                setTime(this.durationTextBox, timeEntry.Duration, open);
                setTime(this.startTimeTextBox, timeEntry.StartTimeString, open);
                setTime(this.endTimeTextBox, timeEntry.EndTimeString, open);
                this.startDatePicker.SelectedDate = Toggl.DateTimeFromUnix(timeEntry.Started);
                if (isDifferentTimeEntry)
                {
                    this.clearUndoHistory();
                }

                if (isCurrentlyRunning)
                {
                    this.endTimeTextBox.Text = "";
                }

                this.billableCheckBox.ShowOnlyIf(timeEntry.CanSeeBillable);
                this.billableCheckBox.IsChecked = timeEntry.Billable;

                if (timeEntry.UpdatedAt > 0)
                {
                    var updatedAt = Toggl.DateTimeFromUnix(timeEntry.UpdatedAt);
                    this.lastUpdatedText.Text = "Last update " + updatedAt.ToShortDateString() + " at " +
                                                updatedAt.ToLongTimeString();
                    this.lastUpdatedText.Visibility = Visibility.Visible;
                }
                else
                {
                    this.lastUpdatedText.Visibility = Visibility.Collapsed;
                }

                if (open || !this.tagList.IsKeyboardFocusWithin)
                {
                    this.tagList.Clear(open);
                    if (timeEntry.Tags != null)
                    {
                        this.tagList.AddTags(timeEntry.Tags.Split(new[] { Toggl.TagSeparator },
                                                                  StringSplitOptions.RemoveEmptyEntries));
                    }
                    this.updateTagListEmptyText();
                }

                if (!keepNewProjectModeOpen)
                {
                    if (this.isInNewProjectMode)
                    {
                        this.disableNewProjectMode();
                    }

                    this.projectColorSelector.SelectedColor = timeEntry.Color;

                    setText(this.projectTextBox, timeEntry.ProjectLabel, timeEntry.TaskLabel, open);
                    setText(this.clientTextBox, timeEntry.ClientLabel, open);

                    this.selectedWorkspaceId   = timeEntry.WID;
                    this.selectedWorkspaceName = timeEntry.WorkspaceName;
                    this.reloadWorkspaceClients(timeEntry.WID);

                    if (timeEntry.CanAddProjects)
                    {
                        this.newProjectButton.Visibility            = Visibility.Visible;
                        this.projectAddButtonColumn.Width           = GridLength.Auto;
                        this.projectAddButtonColumn.SharedSizeGroup = "AddButtons";
                    }
                    else
                    {
                        this.newProjectButton.Visibility            = Visibility.Hidden;
                        this.projectAddButtonColumn.Width           = new GridLength(0);
                        this.projectAddButtonColumn.SharedSizeGroup = null;
                    }
                }
                this.dateSet = true;
            }
        }
        void OnTimeEntryEditor(
            bool open,
            Toggl.TimeEntry te,
            string focused_field_name)
        {
            if (InvokeRequired)
            {
                Invoke((MethodInvoker) delegate { OnTimeEntryEditor(open, te, focused_field_name); });
                return;
            }
            //
            // Custom Combobox Buttons
            //
            projectButton.Height  = projectButton.Width = descriptionButton.Height = descriptionButton.Width = comboBoxDescription.Height;
            projectButton.Left    = descriptionButton.Left = comboBoxProject.Left + comboBoxProject.Width - 1;
            descriptionButton.Top = comboBoxDescription.Top;
            projectButton.Top     = comboBoxProject.Top;

            timeEntry = te;

            panelBillable.Visible = te.CanSeeBillable;

            checkBoxBillable.Tag = this;
            try
            {
                checkBoxBillable.Checked = te.Billable;
            }
            finally
            {
                checkBoxBillable.Tag = null;
            }

            if (!te.CanAddProjects)
            {
                linkAddProject.Visible = !te.CanAddProjects;
            }

            if (open)
            {
                comboBoxDescription.ResetListBox();
                comboBoxProject.ResetListBox();
                comboBoxDescription.Text = te.Description;
                comboBoxProject.Text     = te.ProjectAndTaskLabel;
                textBoxDuration.Text     = te.Duration;
                setTimeValue(textBoxStartTime, te.StartTimeString);
                setTimeValue(textBoxEndTime, te.EndTimeString);
                dateTimePickerStartDate.Value = Toggl.DateTimeFromUnix(te.Started);
                resetTagFilter();
            }
            else
            {
                if (!comboBoxDescription.Focused)
                {
                    comboBoxDescription.Text = te.Description;
                }
                if (!comboBoxProject.Focused)
                {
                    comboBoxProject.Text = te.ProjectAndTaskLabel;
                }
                if (!textBoxDuration.Focused)
                {
                    textBoxDuration.Text = te.Duration;
                }
                if (!textBoxStartTime.Focused)
                {
                    setTimeValue(textBoxStartTime, te.StartTimeString);
                }
                if (!textBoxEndTime.Focused)
                {
                    setTimeValue(textBoxEndTime, te.EndTimeString);
                }
                if (!dateTimePickerStartDate.Focused)
                {
                    dateTimePickerStartDate.Value = Toggl.DateTimeFromUnix(te.Started);
                }
            }

            panelStartEndTime.Visible = !timeEntry.DurOnly;

            if (timeEntry.DurOnly)
            {
                panelDateTag.Top = panelDuration.Top + panelDuration.Height;
            }
            else
            {
                panelDateTag.Top = panelStartEndTime.Top + panelStartEndTime.Height;
            }
            panelDateTag.Height = panelBottom.Height - panelDateTag.Top;

            if (te.UpdatedAt > 0)
            {
                DateTime updatedAt = Toggl.DateTimeFromUnix(te.UpdatedAt);
                toolStripStatusLabelLastUpdate.Text    = "Last update: " + updatedAt.ToString();
                toolStripStatusLabelLastUpdate.Visible = true;
            }
            else
            {
                toolStripStatusLabelLastUpdate.Visible = false;
            }
            textBoxEndTime.Enabled = (te.DurationInSeconds >= 0);

            if (!checkedListBoxTags.Focused || open)
            {
                for (int i = 0; i < checkedListBoxTags.Items.Count; i++)
                {
                    checkedListBoxTags.SetItemChecked(i, false);
                }
                setCheckedTags(te);
            }

            workspaceNameLabel.Text = te.WorkspaceName;
        }