/* Generated by the protocol buffer compiler. DO NOT EDIT! */
/* Generated from: CreateRequest.proto */
/* Do not generate deprecated warnings for self */
#ifndef PROTOBUF_C__NO_DEPRECATED
#define PROTOBUF_C__NO_DEPRECATED
#endif
#include "CreateRequest.pb-c.h"
void create_request__init
(CreateRequest *message)
{
static const CreateRequest init_value = CREATE_REQUEST__INIT;
*message = init_value;
}
size_t create_request__get_packed_size
(const CreateRequest *message)
{
assert(message->base.descriptor == &create_request__descriptor);
return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message));
}
size_t create_request__pack
(const CreateRequest *message,
uint8_t *out)
{
assert(message->base.descriptor == &create_request__descriptor);
return protobuf_c_message_pack ((const ProtobufCMessage*)message, out);
}
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Data;
using Tango.BL;
using Tango.BL.Entities;
using Tango.BL.Enumerations;
using Tango.Core.Commands;
using Tango.Core.DI;
using Tango.DragAndDrop;
using Tango.PPC.Common;
using Tango.PPC.Jobs.Messages;
using Tango.PPC.Jobs.Views;
namespace Tango.PPC.Jobs.ViewModels
{
/// <summary>
/// Represents the jobs view model.
/// </summary>
/// <seealso cref="Tango.PPC.Common.PPCViewModel" />
public class JobsViewVM : PPCViewModel
{
private ObservablesContext _db; //Holds the db context for the job list.
#region Properties
private ObservableCollection<Job> _jobs;
/// <summary>
/// Gets or sets the collection of jobs.
/// </summary>
public ObservableCollection<Job> Jobs
{
get { return _jobs; }
set { _jobs = value; RaisePropertyChangedAuto(); }
}
private ICollectionView _jobsCollectionView;
/// <summary>
/// Gets or sets the jobs collection view.
/// </summary>
public ICollectionView JobsCollectionView
{
get { return _jobsCollectionView; }
set
{
_jobsCollectionView = value;
RaisePropertyChangedAuto();
}
}
private ObservableCollection<Job> _selectedJobs;
/// <summary>
/// Gets or sets the selected jobs.
/// </summary>
public ObservableCollection<Job> SelectedJobs
{
get { return _selectedJobs; }
set { _selectedJobs = value; RaisePropertyChangedAuto(); }
}
private bool _isLoadingJobs;
/// <summary>
/// Gets or sets a value indicating whether this instance is loading jobs.
/// </summary>
public bool IsLoadingJobs
{
get { return _isLoadingJobs; }
set { _isLoadingJobs = value; RaisePropertyChangedAuto(); }
}
private bool _isMultiSelecting;
/// <summary>
/// Gets or sets a value indicating whether this the jobs list is in multi select mode.
/// </summary>
public bool IsMultiSelecting
{
get { return _isMultiSelecting; }
set { _isMultiSelecting = value; RaisePropertyChangedAuto(); }
}
private JobCategories _filterCategory;
/// <summary>
/// Gets or sets the filter category.
/// </summary>
public JobCategories FilterCategory
{
get { return _filterCategory; }
set
{
_filterCategory = value; RaisePropertyChangedAuto();
FilterJobCategory(value);
}
}
#endregion
#region Commands
/// <summary>
/// Gets or sets the job selected command.
/// </summary>
public RelayCommand<Object> JobSelectedCommand { get; set; }
/// <summary>
/// Gets or sets the job drag and drop command.
/// </summary>
public RelayCommand<DropEventArgs> JobDragedDroppedCommand { get; set; }
/// <summary>
/// Gets or sets the clear selection command.
/// </summary>
public RelayCommand ClearSelectionCommand { get; set; }
/// <summary>
/// Gets or sets the add job command.
/// </summary>
public RelayCommand AddJobCommand { get; set; }
/// <summary>
/// Gets or sets the delete jobs command.
/// </summary>
public RelayCommand DeleteJobsCommand { get; set; }
/// <summary>
/// Gets or sets the clone jobs command.
/// </summary>
public RelayCommand CloneJobsCommand { get; set; }
#endregion
#region Constructors
/// <summary>
/// Initializes a new instance of the <see cref="JobsViewVM"/> class.
/// </summary>
public JobsViewVM()
{
Jobs = new ObservableCollection<Job>();
SelectedJobs = new ObservableCollection<Job>();
JobSelectedCommand = new RelayCommand<Object>((x) => SelectJob(x as Job));
JobDragedDroppedCommand = new RelayCommand<DropEventArgs>((e) =>
{
Job draggedJob = e.Draggable.DataContext as Job;
Job droppedJob = e.Droppable.DataContext as Job;
DragAndDropJob(draggedJob, droppedJob);
});
ClearSelectionCommand = new RelayCommand(ClearSelection);
AddJobCommand = new RelayCommand(AddNewJob);
DeleteJobsCommand = new RelayCommand(() => DeleteJobs(SelectedJobs));
CloneJobsCommand = new RelayCommand(() => CloneJobs(SelectedJobs));
RegisterForMessage<JobRemovedMessage>(HandleJobRemovedMessage);
RegisterForMessage<JobSavedMessage>(HandleJobSavedMessage);
}
#endregion
#region Drag & Drop
/// <summary>
/// Called when a job has been dragged and dropped into another job.
/// </summary>
/// <param name="draggedJob">The dragged job.</param>
/// <param name="droppedJob">The dropped job.</param>
private void DragAndDropJob(Job draggedJob, Job droppedJob)
{
if (draggedJob.JobIndex > droppedJob.JobIndex)
{
draggedJob.JobIndex = droppedJob.JobIndex - 1;
}
else
{
draggedJob.JobIndex = droppedJob.JobIndex + 1;
}
int index = 1;
foreach (var job in Jobs.OrderBy(x => x.JobIndex))
{
job.JobIndex = index++;
}
JobsCollectionView.Refresh();
}
#endregion
#region Job Selection & Loading
/// <summary>
/// Selects the job.
/// </summary>
/// <param name="job">The job.</param>
public async void SelectJob(Job job)
{
await NavigationManager.NavigateTo<JobsModule>(nameof(JobSummeryView));
RaiseMessage(new JobSelectedMessage() { Job = job });
}
/// <summary>
/// Loads the jobs from database.
/// </summary>
public void LoadJobs()
{
Task.Factory.StartNew(() =>
{
IsLoadingJobs = true;
Thread.Sleep(500);
if (_db != null)
{
_db.Dispose();
}
_db = ObservablesContext.CreateDefault();
var jobs = _db.Jobs.Where(x => x.Machine.Guid == ApplicationManager.Machine.Guid).ToObservableCollection();
InvokeUI(() =>
{
Jobs = jobs.Where(x => x.Machine.Guid == ApplicationManager.Machine.Guid).ToObservableCollection();
JobsCollectionView = CollectionViewSource.GetDefaultView(Jobs);
JobsCollectionView.SortDescriptions.Add(new SortDescription(nameof(Job.LastUpdated), ListSortDirection.Descending));
FilterJobCategory(FilterCategory);
IsLoadingJobs = false;
});
});
}
/// <summary>
/// Clears the job selection.
/// </summary>
public void ClearSelection()
{
SelectedJobs.Clear();
IsMultiSelecting = false;
}
/// <summary>
/// Filters the jobs list by the specified <see cref="JobCategories">job category</see>.
/// </summary>
/// <param name="jobCategory">The job category.</param>
public void FilterJobCategory(JobCategories jobCategory)
{
JobsCollectionView.Filter = (job) =>
{
return (job as Job).JobCategories.Contains(jobCategory);
};
}
/// <summary>
/// Adds a new job.
/// </summary>
private async void AddNewJob()
{
Job job = new Job();
job.Name = "untitled";
job.CreationDate = DateTime.UtcNow;
job.JobStatus = JobStatuses.Draft;
job.JobType = JobTypes.Sewing;
job.ColorSpaceGuid = Adapter.ColorSpaces.FirstOrDefault(x => x.Code == ColorSpaces.RGB.ToInt32()).Guid;
job.MachineGuid = ApplicationManager.Machine.Guid;
job.UserGuid = AuthenticationProvider.CurrentUser.Guid;
job.RmlGuid = Adapter.Rmls.FirstOrDefault().Guid;
job.WindingMethodGuid = Adapter.WindingMethods.FirstOrDefault().Guid;
job.SpoolTypeGuid = Adapter.SpoolTypes.FirstOrDefault().Guid;
job.AddSolidSegment();
_db.Jobs.Add(job);
await _db.SaveChangesAsync();
Jobs.Add(job);
RaiseMessage(new JobSelectedMessage() { Job = job });
await Task.Delay(200);
await NavigationManager.NavigateTo<JobsModule>(nameof(JobView));
}
/// <summary>
/// Deletes the specified jobs from db.
/// </summary>
/// <param name="jobs">The jobs.</param>
private async void DeleteJobs(ObservableCollection<Job> jobs)
{
if (await NotificationProvider.ShowQuestion("Are you sure you want to delete the selected jobs"))
{
foreach (var job in jobs)
{
await job.DeleteCascadeAsync(_db);
Jobs.Remove(job);
}
await _db.SaveChangesAsync();
ClearSelection();
}
}
/// <summary>
/// Clones the specified jobs.
/// </summary>
/// <param name="jobs">The jobs.</param>
private async void CloneJobs(ObservableCollection<Job> jobs)
{
int index = Jobs.Max(x => x.JobIndex);
List<Job> clonedJobs = new List<Job>();
foreach (var job in SelectedJobs)
{
var cloned = job.Clone();
cloned.JobIndex = ++index;
_db.Jobs.Add(cloned);
clonedJobs.Add(cloned);
}
await _db.SaveChangesAsync();
foreach (var job in clonedJobs)
{
Jobs.Add(job);
}
ClearSelection();
}
#endregion
#region Message Handling
private void HandleJobRemovedMessage(JobRemovedMessage msg)
{
var job = Jobs.SingleOrDefault(x => x.Guid == msg.Job.Guid);
Jobs.Remove(job);
_db.Entry(job).State = System.Data.Entity.EntityState.Detached;
}
private void HandleJobSavedMessage(JobSavedMessage msg)
{
LoadJobs();
}
#endregion
#region Override Methods
/// <summary>
/// Called when the application has been started.
/// </summary>
public override void OnApplicationStarted()
{
LoadJobs();
}
/// <summary>
/// Called when the navigation system has navigated to this VM view.
/// </summary>
public override void OnNavigatedTo()
{
base.OnNavigatedTo();
}
public override void OnNavigatedFrom()
{
base.OnNavigatedFrom();
}
#endregion
}
}