YATISH
Yet Another TIme SHeet
/home/nicolas/sources/yatish/yatishDlgTimeslot.cpp
Go to the documentation of this file.
1 #include "wx_pch.h"
2 #include "yatishDlgTimeslot.h"
3 
13 class DateValidator : public wxValidator {
14  public:
15  DateValidator () { pdt = nullptr; }
16  DateValidator (wxDateTime * p) { pdt = p; }
17  DateValidator ( const DateValidator& v ) : wxValidator() { pdt = v.pdt; }
18  wxObject * Clone () const { return new DateValidator (*this); }
19  bool TransferFromWindow ();
20  bool TransferToWindow ();
21  bool Validate (wxWindow *) { return true; }
22  private:
23  wxDateTime * pdt;
24  };
26  wxDatePickerCtrl * date = (wxDatePickerCtrl *) m_validatorWindow;
27  *pdt = date->GetValue();
28  return true;
29 }
31  wxDatePickerCtrl * date = (wxDatePickerCtrl *) m_validatorWindow;
32  date->SetValue (*pdt);
33  return true;
34 }
37 class TimeValidator : public wxValidator {
38  public:
39  TimeValidator () { pdt = nullptr; }
40  TimeValidator (wxDateTime * p) { pdt = p; }
41  TimeValidator ( const TimeValidator& v ) : wxValidator() { pdt = v.pdt; }
42  wxObject * Clone () const { return new TimeValidator (*this); }
43  bool TransferFromWindow ();
44  bool TransferToWindow ();
45  bool Validate (wxWindow *) { return true; }
46  private:
47  wxDateTime * pdt;
48  };
50  wxTimePickerCtrl * date = (wxTimePickerCtrl *) m_validatorWindow;
51  *pdt = date->GetValue();
52  return true;
53 }
55  wxTimePickerCtrl * date = (wxTimePickerCtrl *) m_validatorWindow;
56  date->SetValue (*pdt);
57  return true;
58 }
59 
60 #ifndef WX_PRECOMP
61  //(*InternalHeadersPCH(yatishDlgTimeslot)
62  #include <wx/string.h>
63  #include <wx/intl.h>
64  //*)
65 #endif
66 //(*InternalHeaders(yatishDlgTimeslot)
67 //*)
68 
69 //(*IdInit(yatishDlgTimeslot)
70 const long yatishDlgTimeslot::idDatePicker1 = wxNewId();
71 const long yatishDlgTimeslot::idTimePicker1 = wxNewId();
72 const long yatishDlgTimeslot::idDatePicker2 = wxNewId();
73 const long yatishDlgTimeslot::idTimePicker2 = wxNewId();
74 const long yatishDlgTimeslot::idChoiceProject = wxNewId();
75 const long yatishDlgTimeslot::idChoiceTask = wxNewId();
76 const long yatishDlgTimeslot::idChoiceTool = wxNewId();
77 //*)
78 
79 BEGIN_EVENT_TABLE (yatishDlgTimeslot, wxDialog)
80  //(*EventTable(yatishDlgTimeslot)
81  //*)
82 END_EVENT_TABLE()
83 
84 
86  BuildContent();
87  pdb = p_db;
88  id = sql_id;
89  bool choiceOK;
90  choiceOK = pdb->FillChoice (choiceProject, project_tid);
91  choiceOK = pdb->FillChoice (choiceTask, task_tid);
92  choiceOK = pdb->FillChoice (choiceTool, tool_tid);
93  if (!choiceOK) wxLogError ("Initialization of choices failed (yatishDlgTimeslot)");
94  long activity_id = pdb->Activity (id);
95  project = pdb->ChoiceSelector (project_tid, activity_id);
96  task = pdb->ChoiceSelector (task_tid, activity_id);
97  tool = pdb->ChoiceSelector (tool_tid, activity_id);
98  choiceProject->SetValidator ( wxGenericValidator (&project) );
99  choiceTask ->SetValidator ( wxGenericValidator (&task) );
100  choiceTool ->SetValidator ( wxGenericValidator (&tool) );
101  if ( pdb->ReadDates (id, date1, date2) ) {
102  datePicker1->SetValidator ( DateValidator (&date1) );
103  datePicker2->SetValidator ( DateValidator (&date2) );
104  time1 = date1; time2 = date2; // date part not used
105  timePicker1->SetValidator ( TimeValidator (&time1) );
106  timePicker2->SetValidator ( TimeValidator (&time2) );
107  } else
108  wxLogError ("Initialization of dates failed (yatishDlgTimeslot)");
109  Fit(); SetMaxSize ( GetSize() ); // Fit() really needed here !
111 }
112 
115  BuildContent();
116  staticBoxSizer->GetStaticBox()->SetLabel (_("New row") );
117  pdb = p_db;
118  buttonSave->Disable();
119  bool choiceOK;
120  choiceOK = pdb->FillChoice (choiceProject, project_tid);
121  choiceOK = pdb->FillChoice (choiceTask, task_tid);
122  choiceOK = pdb->FillChoice (choiceTool, tool_tid);
123  if (!choiceOK) wxLogError ("Initialization of choices failed (yatishDlgTimeslot)");
124  project = 0;
125  task = 0;
126  tool = 0;
127  choiceProject->SetValidator ( wxGenericValidator (&project) );
128  choiceTask ->SetValidator ( wxGenericValidator (&task) );
129  choiceTool ->SetValidator ( wxGenericValidator (&tool) );
130  date1 = wxDateTime::Now(); date2 = date1;
131  datePicker1->SetValidator ( DateValidator (&date1) );
132  datePicker2->SetValidator ( DateValidator (&date2) );
133  time1 = date1; time2 = date2;
134  timePicker1->SetValidator ( TimeValidator (&time1) );
135  timePicker2->SetValidator ( TimeValidator (&time2) );
136  Fit(); SetMaxSize ( GetSize() );
137  if ( choiceProject->IsEmpty() || choiceTask->IsEmpty() || choiceTool->IsEmpty() )
138  buttonNew->Disable(); // in case we get here while some tables are still empty
139 }
140 
142  //(*Initialize(yatishDlgTimeslot)
143  wxFlexGridSizer* FlexGridSizer1;
144  wxBoxSizer* BoxSizer2;
145  wxStaticText* StaticText1;
146  wxBoxSizer* BoxSizer1;
147  wxButton* buttonCancel;
148  wxStaticText* StaticText2;
149 
150  Create(0, wxID_ANY, _("Table: yatish_timeslot"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, _T("wxID_ANY"));
151  BoxSizer1 = new wxBoxSizer(wxVERTICAL);
152  staticBoxSizer = new wxStaticBoxSizer(wxHORIZONTAL, this, _("(previously selected row)"));
153  FlexGridSizer1 = new wxFlexGridSizer(3, 3, 0, 0);
154  StaticText1 = new wxStaticText(this, wxID_ANY, _("Start:"), wxDefaultPosition, wxDefaultSize, 0, _T("wxID_ANY"));
155  FlexGridSizer1->Add(StaticText1, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
156  datePicker1 = new wxDatePickerCtrl(this, idDatePicker1, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxDP_DEFAULT|wxDP_SHOWCENTURY, wxDefaultValidator, _T("idDatePicker1"));
157  FlexGridSizer1->Add(datePicker1, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
158  timePicker1 = new wxTimePickerCtrl(this,idTimePicker1,wxDefaultDateTime,wxDefaultPosition,wxDefaultSize,wxDP_DEFAULT,wxDefaultValidator,_T("idTimePicker1"));
159  FlexGridSizer1->Add(timePicker1, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
160  StaticText2 = new wxStaticText(this, wxID_ANY, _("Stop:"), wxDefaultPosition, wxDefaultSize, 0, _T("wxID_ANY"));
161  FlexGridSizer1->Add(StaticText2, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
162  datePicker2 = new wxDatePickerCtrl(this, idDatePicker2, wxDefaultDateTime, wxDefaultPosition, wxDefaultSize, wxDP_DEFAULT|wxDP_SHOWCENTURY, wxDefaultValidator, _T("idDatePicker2"));
163  FlexGridSizer1->Add(datePicker2, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
164  timePicker2 = new wxTimePickerCtrl(this,idTimePicker2,wxDefaultDateTime,wxDefaultPosition,wxDefaultSize,wxDP_DEFAULT,wxDefaultValidator,_T("idTimePicker2"));
165  FlexGridSizer1->Add(timePicker2, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
166  choiceProject = new wxChoice(this, idChoiceProject, wxDefaultPosition, wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("idChoiceProject"));
167  FlexGridSizer1->Add(choiceProject, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
168  choiceTask = new wxChoice(this, idChoiceTask, wxDefaultPosition, wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("idChoiceTask"));
169  FlexGridSizer1->Add(choiceTask, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
170  choiceTool = new wxChoice(this, idChoiceTool, wxDefaultPosition, wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("idChoiceTool"));
171  FlexGridSizer1->Add(choiceTool, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
172  staticBoxSizer->Add(FlexGridSizer1, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
173  BoxSizer1->Add(staticBoxSizer, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
174  BoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
175  buttonCancel = new wxButton(this, wxID_CANCEL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("wxID_CANCEL"));
176  BoxSizer2->Add(buttonCancel, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
177  buttonSave = new wxButton(this, wxID_SAVE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("wxID_SAVE"));
178  BoxSizer2->Add(buttonSave, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
179  buttonNew = new wxButton(this, wxID_NEW, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("wxID_NEW"));
180  BoxSizer2->Add(buttonNew, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
181  BoxSizer1->Add(BoxSizer2, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
182  SetSizer(BoxSizer1);
183  BoxSizer1->Fit(this);
184  BoxSizer1->SetSizeHints(this);
185 
186  Connect(wxID_SAVE,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&yatishDlgTimeslot::OnButtonSaveClick);
187  Connect(wxID_NEW,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&yatishDlgTimeslot::OnButtonNewClick);
188  //*)
189 }
190 
192  //(*Destroy(yatishDlgTimeslot)
193  //*)
194 }
195 
196 void yatishDlgTimeslot::OnButtonSaveClick (wxCommandEvent& event) {
197  TransferDataFromWindow();
198  wxDateTime dt1 = date1 + ( time1 - time1.GetDateOnly() ); // The date of the wxDateTime returned by a
199  wxDateTime dt2 = date2 + ( time2 - time2.GetDateOnly() ); // wxTimePickerCtrl is Jan 1st, current year!
200  if ( pdb->RecordTimeslot (id, dt1, dt2, project, task, tool) )
201  EndModal (wxID_SAVE);
202  else
203  EndModal (wxID_CANCEL);
204 }
205 
206 void yatishDlgTimeslot::OnButtonNewClick (wxCommandEvent& event) {
207  TransferDataFromWindow();
208  wxDateTime dt1 = date1 + ( time1 - time1.GetDateOnly() );
209  wxDateTime dt2 = date2 + ( time2 - time2.GetDateOnly() );
210  if ( pdb->RecordTimeslot (wxNOT_FOUND, dt1, dt2, project, task, tool) )
211  EndModal (wxID_NEW);
212  else
213  EndModal (wxID_CANCEL);
214 }
DateValidator(wxDateTime *p)
static const long idDatePicker1
DateValidator(const DateValidator &v)
void OnButtonSaveClick(wxCommandEvent &event)
wxObject * Clone() const
static const long idDatePicker2
void OnButtonNewClick(wxCommandEvent &event)
static const long idChoiceTask
bool Validate(wxWindow *)
Simplified from the wxWidgets Wiki:
wxObject * Clone() const
Interacts with yatish tables in a SQLite database.
static const long idChoiceProject
static const long idTimePicker2
static const long idTimePicker1
TimeValidator(wxDateTime *p)
wxDateTime * pdt
bool Validate(wxWindow *)
TimeValidator(const TimeValidator &v)
yatishDlgTimeslot(yatishDBsqlite *, long)
This constructor initializes the dialog box with data from the SQL record identified by sql_id...
bool FillChoice(wxChoice *, tableID)
Fills a wxChoice.
static const long idChoiceTool
wxDateTime * pdt