CalendarGrid: Many changes:

1. Dragover handler to handle auto scrolling when dragging. Also highlights destination cell in dragging.
2. Solution for the click-right click problem by better handling of right click issues.
3. New method OnRButtonDown()
4. Extra comments everywhere.
5. Fix for single column being enabled when there are multiple resources. Columns property now calls this.SetColumnInfo() to rectify that problem.
CGDocument:
1. EditAppoitment Used to send request a refresh from the DB and update the view itself, rather than letting the view handle that. That's now changed.
CGDocumentManager:
1. MessageBox displayed during login splash now are shown BY the splash form.
CGView:
1. Shortcuts and some display text updated.
2. Splash screen when updating now removed.
3. If print appointment slip checkbox is checked when EditAppointment is chosen, now it will print the routing slip.
4. Tiny change in appointment structure generated during drag and drop (added Patient member, as it was causing a crash)
DApptSearch:
1. Change of name of Appointment to Slot, for better user understanding.
DSplash:
1. RemoteMessage box methods and associated delegates for mickey mousing the form from another thread.

Updated release exes and dlls
This commit is contained in:
sam 2011-04-14 12:33:14 +00:00
parent e7841faa8f
commit bab7ccea69
11 changed files with 287 additions and 102 deletions

View File

@ -1015,12 +1015,6 @@ namespace IndianHealthService.ClinicalScheduling
string sErrorID = r["ERRORID"].ToString();
if (sErrorID == "-1")
pAppt.Note = sNote;
if (this.m_appointments.AppointmentTable.ContainsKey(nApptID))
{
bool bRet = RefreshAvailabilitySchedule();
UpdateAllViews();
}
}
catch (Exception ex)
{

View File

@ -399,7 +399,7 @@ namespace IndianHealthService.ClinicalScheduling
}
catch (System.Net.Sockets.SocketException)
{
MessageBox.Show("Cannot connect to VistA. Network Error");
m_ds.RemoteMsgBox("Can't connect to server! Network Error");
return false;
}
}
@ -437,11 +437,11 @@ namespace IndianHealthService.ClinicalScheduling
}
catch (System.Net.Sockets.SocketException)
{
MessageBox.Show("Cannot connect to VistA. Network Error");
m_ds.RemoteMsgBox("Cannot connect to VistA. Network Error");
}
catch (BMXNetException ex)
{
if (MessageBox.Show("Unable to connect to VistA. " + ex.Message, "Clinical Scheduling", MessageBoxButtons.RetryCancel) == DialogResult.Retry)
if (m_ds.RemoteMsgBox("Unable to connect to VistA. " + ex.Message, "Clinical Scheduling", MessageBoxButtons.RetryCancel) == DialogResult.Retry)
{
bRetry = true;
//I hate this, but this is how the library is designed. It throws an error if the user cancels. XXX: Won't fix library until BMX 4.0 port.

View File

@ -427,18 +427,21 @@ namespace IndianHealthService.ClinicalScheduling
// mnuNewAppointment
//
this.mnuNewAppointment.Index = 0;
this.mnuNewAppointment.Shortcut = System.Windows.Forms.Shortcut.Ins;
this.mnuNewAppointment.Text = "&New Appointment";
this.mnuNewAppointment.Click += new System.EventHandler(this.mnuNewAppointment_Click);
//
// mnuEditAppointment
//
this.mnuEditAppointment.Index = 1;
this.mnuEditAppointment.Shortcut = System.Windows.Forms.Shortcut.F2;
this.mnuEditAppointment.Text = "&Edit Appointment";
this.mnuEditAppointment.Click += new System.EventHandler(this.mnuEditAppointment_Click);
//
// mnuDeleteAppointment
//
this.mnuDeleteAppointment.Index = 2;
this.mnuDeleteAppointment.Shortcut = System.Windows.Forms.Shortcut.Del;
this.mnuDeleteAppointment.Text = "Cance&l Appointment";
this.mnuDeleteAppointment.Click += new System.EventHandler(this.mnuDeleteAppointment_Click);
//
@ -480,7 +483,7 @@ namespace IndianHealthService.ClinicalScheduling
//
this.mnuFindAppt.Index = 9;
this.mnuFindAppt.Shortcut = System.Windows.Forms.Shortcut.CtrlF;
this.mnuFindAppt.Text = "&Find Available Appointment";
this.mnuFindAppt.Text = "&Find Empty Slots";
this.mnuFindAppt.Click += new System.EventHandler(this.mnuFindAppt_Click);
//
// mnuCheckIn
@ -646,7 +649,7 @@ namespace IndianHealthService.ClinicalScheduling
this.tvSchedules.HotTracking = true;
this.tvSchedules.Location = new System.Drawing.Point(0, 0);
this.tvSchedules.Name = "tvSchedules";
this.tvSchedules.Size = new System.Drawing.Size(128, 359);
this.tvSchedules.Size = new System.Drawing.Size(128, 317);
this.tvSchedules.Sorted = true;
this.tvSchedules.TabIndex = 1;
this.tvSchedules.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tvSchedules_AfterSelect);
@ -688,7 +691,7 @@ namespace IndianHealthService.ClinicalScheduling
// ctxFindAppt
//
this.ctxFindAppt.Index = 3;
this.ctxFindAppt.Text = "&Find Available Appointment";
this.ctxFindAppt.Text = "&Find Empty Slots";
this.ctxFindAppt.Click += new System.EventHandler(this.ctxFindAppt_Click);
//
// ctxPrintScheduleT0
@ -715,7 +718,7 @@ namespace IndianHealthService.ClinicalScheduling
this.panelRight.Dock = System.Windows.Forms.DockStyle.Right;
this.panelRight.Location = new System.Drawing.Point(996, 0);
this.panelRight.Name = "panelRight";
this.panelRight.Size = new System.Drawing.Size(128, 359);
this.panelRight.Size = new System.Drawing.Size(128, 317);
this.panelRight.TabIndex = 3;
this.panelRight.Visible = false;
//
@ -811,7 +814,7 @@ namespace IndianHealthService.ClinicalScheduling
this.panelCenter.Dock = System.Windows.Forms.DockStyle.Fill;
this.panelCenter.Location = new System.Drawing.Point(136, 24);
this.panelCenter.Name = "panelCenter";
this.panelCenter.Size = new System.Drawing.Size(857, 311);
this.panelCenter.Size = new System.Drawing.Size(857, 269);
this.panelCenter.TabIndex = 7;
//
// ctxCalendarGrid
@ -904,7 +907,7 @@ namespace IndianHealthService.ClinicalScheduling
//
this.panelBottom.Controls.Add(this.statusBar1);
this.panelBottom.Dock = System.Windows.Forms.DockStyle.Bottom;
this.panelBottom.Location = new System.Drawing.Point(136, 335);
this.panelBottom.Location = new System.Drawing.Point(136, 293);
this.panelBottom.Name = "panelBottom";
this.panelBottom.Size = new System.Drawing.Size(857, 24);
this.panelBottom.TabIndex = 8;
@ -922,7 +925,7 @@ namespace IndianHealthService.ClinicalScheduling
//
this.splitter1.Location = new System.Drawing.Point(128, 24);
this.splitter1.Name = "splitter1";
this.splitter1.Size = new System.Drawing.Size(8, 335);
this.splitter1.Size = new System.Drawing.Size(8, 293);
this.splitter1.TabIndex = 9;
this.splitter1.TabStop = false;
//
@ -931,7 +934,7 @@ namespace IndianHealthService.ClinicalScheduling
this.splitter2.Dock = System.Windows.Forms.DockStyle.Right;
this.splitter2.Location = new System.Drawing.Point(993, 24);
this.splitter2.Name = "splitter2";
this.splitter2.Size = new System.Drawing.Size(3, 335);
this.splitter2.Size = new System.Drawing.Size(3, 293);
this.splitter2.TabIndex = 10;
this.splitter2.TabStop = false;
//
@ -954,7 +957,7 @@ namespace IndianHealthService.ClinicalScheduling
this.calendarGrid1.Name = "calendarGrid1";
this.calendarGrid1.Resources = ((System.Collections.ArrayList)(resources.GetObject("calendarGrid1.Resources")));
this.calendarGrid1.SelectedAppointment = 0;
this.calendarGrid1.Size = new System.Drawing.Size(857, 311);
this.calendarGrid1.Size = new System.Drawing.Size(857, 269);
this.calendarGrid1.StartDate = new System.DateTime(2003, 1, 27, 0, 0, 0, 0);
this.calendarGrid1.TabIndex = 0;
this.calendarGrid1.TimeScale = 20;
@ -967,7 +970,7 @@ namespace IndianHealthService.ClinicalScheduling
// CGView
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(1124, 359);
this.ClientSize = new System.Drawing.Size(1124, 317);
this.Controls.Add(this.panelCenter);
this.Controls.Add(this.panelBottom);
this.Controls.Add(this.splitter2);
@ -1816,6 +1819,16 @@ namespace IndianHealthService.ClinicalScheduling
//Call Document to edit appointment
this.Document.EditAppointment(a, sNote);
if (dAppt.PrintAppointmentSlip)
{
PrintAppointmentSlip(a);
}
//Redraw appointments
this.UpdateArrays();
//Then tell RPMS that we are updated
RaiseRPMSEvent("BSDX SCHEDULE", a.Resource);
}
catch (Exception ex)
{
@ -2683,8 +2696,6 @@ namespace IndianHealthService.ClinicalScheduling
this.calendarGrid1.Columns = 5;
this.Document.m_nColumnCount = 5; // MJL 1/17/2007
//this.Document.UpdateAllViews();
//TODO: Is there a way to just reuse the existing arrays? How far in the future do they go?
RequestRefreshGrid();
}
@ -2692,7 +2703,6 @@ namespace IndianHealthService.ClinicalScheduling
{
this.calendarGrid1.Columns = 7;
this.Document.m_nColumnCount = 7; // MJL 1/17/2007
//TODO: Is there a way to just reuse the existing arrays? How far in the future do they go?
RequestRefreshGrid();
}
@ -2952,6 +2962,8 @@ namespace IndianHealthService.ClinicalScheduling
appt.Note = e.Appointment.Note;
appt.HealthRecordNumber = e.Appointment.HealthRecordNumber;
appt.AccessTypeID = e.AccessTypeID;
appt.Patient = e.Appointment.Patient;
this.Document.CreateAppointment(appt);
//CGAppointment a = new CGAppointment();
@ -3507,25 +3519,34 @@ namespace IndianHealthService.ClinicalScheduling
this.Cursor = Cursors.Default;
}
LoadingSplash _loadingSplash; // Splash object a data point in class
//private delegate DialogResult dLoadingSplash(IWin32Window owner);
string _tempStatusBartext;
/// <summary>
/// Loads a splash that says "Loading"
/// Loads a splash that says "Loading" -- removed it april 13 2010
/// </summary>
private void LoadSplash()
{
_loadingSplash = new LoadingSplash();
_loadingSplash.StartPosition = FormStartPosition.CenterScreen; //XXX: Don't like this, but will do for now.
_loadingSplash.UseWaitCursor = true; // tell user we are working
Thread threadSplash = new Thread(new ThreadStart(() => _loadingSplash.ShowDialog())); // lambda
threadSplash.IsBackground = true; //expendable thread -- exit even if still running.
threadSplash.Name = "Loading Thread";
threadSplash.Start();
_tempStatusBartext = this.statusBar1.Text;
this.statusBar1.Text = "Refreshing Schedule...";
//_loadingSplash = new LoadingSplash();
//_loadingSplash.StartPosition = FormStartPosition.CenterScreen; //XXX: Don't like this, but will do for now.
//_loadingSplash.UseWaitCursor = true; // tell user we are working
//_loadingSplash.Show(this);
//Thread threadSplash = new Thread(tstart);
//threadSplash.IsBackground = true;
//threadSplash.Name = "Loading Thread";
//threadSplash.Start(this);
//Thread threadSplash = new Thread(new ThreadStart(() => _loadingSplash.ShowDialog())); // lambda
//threadSplash.IsBackground = true; //expendable thread -- exit even if still running.
//threadSplash.Name = "Loading Thread";
//threadSplash.Start();
}
private void StopSplash()
{
_loadingSplash.RemoteClose();
this.statusBar1.Text = _tempStatusBartext;
}

View File

@ -8,6 +8,7 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Linq;
/// <summary>
/// This class is reponsible for rendering the Calendar Grid.
@ -124,24 +125,33 @@
{
try
{
//calculate each cell's height
SizeF ef = g.MeasureString("Test", this.m_fCell);
this.m_cellHeight = ((int) ef.Height) + 4;
int nColumns = this.m_nColumns;
int num2 = 60 / this.m_nTimeScale;
int num3 = 24 * num2;
nColumns++;
num3++;
this.m_cellWidth = 600 / nColumns;
int nColumns = this.m_nColumns; // columns set via property
int slotsPerHour = 60 / this.m_nTimeScale; //time scale set via property
int slotsPerDay = 24 * slotsPerHour;
nColumns++; // add extra column for time display
slotsPerDay++; // not sure here why that's don't
//calculate each cell's height
this.m_cellWidth = 600 / nColumns; // base size is 600 pixels
// if larger:
if (base.ClientRectangle.Width > 600)
{
this.m_cellWidth = (base.ClientRectangle.Width - this.m_col0Width) / (nColumns - 1);
}
// if only one column
if (this.m_nColumns == 1)
{
this.m_cellWidth = base.ClientRectangle.Width - this.m_col0Width;
}
//next line seems to be useless (we don't use X and Y below)
g.TranslateTransform((float) base.AutoScrollPosition.X, (float) base.AutoScrollPosition.Y);
for (int i = num3; i > -1; i--)
//now, build the grid cells
for (int i = slotsPerDay; i > -1; i--)
{
for (int j = 1; j < nColumns; j++)
{
@ -232,6 +242,54 @@
}
}
void CalendarGrid_DragOver(object sender, DragEventArgs e)
{
//Translate point to client point
Point pt = this.PointToClient(new Point(e.X, e.Y));
//clear selections
foreach (DictionaryEntry entry in this.m_gridCells.CellHashTable)
{
CGCell cell = (CGCell)entry.Value;
cell.IsSelected = false;
}
this.m_selectedRange.Cells.ClearAllCells();
//select a cell based on current drag position to visually assist the user
int nRow = -1;
int nCol = -1;
if (this.HitTest(pt.X, pt.Y, ref nRow, ref nCol))
{
CGCell cellFromRowCol = this.m_gridCells.GetCellFromRowCol(nRow, nCol);
if (cellFromRowCol != null)
{
this.m_currentCell = cellFromRowCol;
this.m_selectedRange.StartCell = null;
this.m_selectedRange.EndCell = null;
this.m_selectedRange.CreateRange(this.m_gridCells, cellFromRowCol, cellFromRowCol);
cellFromRowCol.IsSelected = true;
}
base.Invalidate();
}
//if Y axis is outside the top or bottom
if ((pt.Y + 40 >= this.ClientRectangle.Bottom) || (pt.Y - 40 <= this.ClientRectangle.Top))
{
//start auto scrolling. m_bScrollDown decides whether we scroll up or down.
this.m_bScrollDown = (pt.Y + 40) >= this.ClientRectangle.Bottom;
AutoDragStart();
}
//if Y axis within client rectagle, stop dragging (whether you started or not)
if ((pt.Y + 40 < this.ClientRectangle.Bottom) && (pt.Y - 40 > this.ClientRectangle.Top))
{
AutoDragStop();
}
}
private void CalendarGrid_MouseDown(object sender, MouseEventArgs e)
{
//watch.Restart();
@ -246,13 +304,48 @@
this.m_bMouseDown = true;
this.OnLButtonDown(e.X, e.Y, true);
}
//new code!!! smh 4/13/2011 -- refactor later
else if (e.Button == MouseButtons.Right)
{
// clear all selected cells, but ONLY if the the pointer is NOT over one of the cells in
// the selected range
int nRow = -1;
int nCol = -1;
CGCell cellFromRowCol = null;
bool _isCellInRange = false;
if (this.HitTest(e.X, e.Y, ref nRow, ref nCol))
{
cellFromRowCol = this.m_gridCells.GetCellFromRowCol(nRow, nCol);
}
if (cellFromRowCol != null)
_isCellInRange = this.m_selectedRange.CellIsInRange(cellFromRowCol);
if (!_isCellInRange)
{
foreach (DictionaryEntry entry in this.m_gridCells.CellHashTable)
{
CGCell cell = (CGCell)entry.Value;
cell.IsSelected = false;
}
this.m_selectedRange.Cells.ClearAllCells();
}
// clear all selected appointments
this.m_SelectedAppointments.ClearAllAppointments();
foreach (CGAppointment a in this.m_Appointments.AppointmentTable.Values) a.Selected = false;
this.m_nSelectID = 0;
OnRButtonDown(e.X, e.Y, _isCellInRange);
}
//end new code!!! /smh 4/13/2011
}
private void CalendarGrid_MouseMove(object Sender, MouseEventArgs e)
{
//test
//System.Diagnostics.Debug.Write(watch.ElapsedMilliseconds + "\n");
//test
//if the left mouse button is down and we are moving the mouse...
if (this.m_bMouseDown)
@ -287,13 +380,14 @@
base.DoDragDrop(data, DragDropEffects.Move);
this.m_bDragDropStart = true;
}
}
}
}
else
{
//test
AutoDragStop(); //is this needed?
//test
AutoDragStop(); //is this needed? //just in case maybe
//this code below displays the tooltip if we are moving the mouse over an appointment
int y = e.Y - base.AutoScrollPosition.Y;
int x = e.X - base.AutoScrollPosition.X;
Point pt = new Point(x, y);
@ -306,29 +400,6 @@
}
}
this.m_toolTip.RemoveAll();
////smh new code -- select cell
//int nRow = -1;
//int nCol = -1;
////Is the mouse over a known cell? If so, highlight cell
//if (this.HitTest(x, y, ref nRow, ref nCol))
//{
// CGCell cellFromRowCol = this.m_gridCells.GetCellFromRowCol(nRow, nCol);
// if (cellFromRowCol != null)
// {
// this.m_currentCell = cellFromRowCol;
// this.m_selectedRange.StartCell = null;
// this.m_selectedRange.EndCell = null;
// this.m_selectedRange.CreateRange(this.m_gridCells, cellFromRowCol, cellFromRowCol);
// this.m_bSelectingRange = true;
// cellFromRowCol.IsSelected = true;
// base.Invalidate(this.m_currentCell.CellRectangle);
// //base.Invalidate();
// }
//}
}
}
@ -514,7 +585,7 @@
// flag is true only if there are no cells what so ever in the screen
// Only true when no resource is selected.
bool flag = this.m_gridCells.CellCount == 0;
bool noCellsFlag = this.m_gridCells.CellCount == 0;
// Move the base point from the client screen to the scrolling region top-left corner.
g.TranslateTransform((float) base.AutoScrollPosition.X, (float) base.AutoScrollPosition.Y);
@ -599,40 +670,45 @@
{
num12 = this.m_col0Width;
}
if (k > 1) //
if (k > 1) // if we are subsequent columns, adjust accordingly
{
num12 = this.m_col0Width + (this.m_cellWidth * (k - 1));
}
//make a rectangle for the cell
Point point4 = new Point(num12, j * this.m_cellHeight);
Rectangle r = new Rectangle(point4.X, point4.Y, this.m_cellWidth, this.m_cellHeight);
if (j != 0)
if (j != 0) // if we are not at the top (we are starting from the bottom)
{
CGCell cellFromRowCol = null;
if (flag)
CGCell cellFromRowCol = null;
if (noCellsFlag) //if there are no cells, create the cell
{
cellFromRowCol = new CGCell(r, j, k);
this.m_gridCells.AddCell(cellFromRowCol);
}
else
else // otherwise, get the cell from the m_gridCells array
{
cellFromRowCol = this.m_gridCells.GetCellFromRowCol(j, k);
cellFromRowCol.CellRectangle = r;
}
if (this.m_sResourcesArray.Count > 0)
if (this.m_sResourcesArray.Count > 0) // if we have any resources open
{
//IMP
//this is the place where we the selected cells are drawn in Light Light Blue.
//IMP
// if cell is selected, draw it in Aquamarine (light light blue)
if (this.m_selectedRange.CellIsInRange(cellFromRowCol))
{
g.FillRectangle(Brushes.Aquamarine, r);
//g.FillRectangle(Brushes.AntiqueWhite, r);
}
// otherwise, draw it from Appointment Type Color set by BuildGridCellsArray()
else
{
g.FillRectangle(cellFromRowCol.AppointmentTypeColor, r);
}
// finally the drawing
g.DrawRectangle(pen, r.X, r.Y, r.Width, r.Height);
// once done with availabilities, draw the appointments
if (j == 1)
{
this.DrawAppointments(g, this.m_col0Width, this.m_cellWidth, this.m_cellHeight);
@ -640,6 +716,8 @@
}
continue;
}
//Below draws the top column either containing the dates or resources
if (!this.m_bScroll)
{
g.TranslateTransform(0f, (float) -base.AutoScrollPosition.Y);
@ -921,10 +999,12 @@
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.CalendarGrid_MouseDown);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.CalendarGrid_MouseUp);
this.DragEnter += new System.Windows.Forms.DragEventHandler(this.CalendarGrid_DragEnter);
this.DragOver += new DragEventHandler(CalendarGrid_DragOver);
this.ResumeLayout(false);
}
private static int MinSince80(DateTime d)
{
DateTime time = new DateTime(1980, 1, 1, 0, 0, 0);
@ -932,6 +1012,59 @@
return (int) span.TotalMinutes;
}
//new code1!! smh 4/14/2011
private void OnRButtonDown(int X, int Y, bool RangeAlreadySelected)
{
//if right mouse button is clicked, select an appointment if mouse hovers over one
foreach (CGAppointment appointment3 in this.m_Appointments.AppointmentTable.Values)
{
int y = Y - base.AutoScrollPosition.Y;
int x = X - base.AutoScrollPosition.X;
Point pt = new Point(x, y);
if (!appointment3.GridRectangle.Contains(pt))
{
continue;
}
this.m_bMouseDown = false;
this.m_SelectedAppointments.AddAppointment(appointment3);
appointment3.Selected = true;
this.m_nSelectID = appointment3.AppointmentKey;
//this.m_bGridEnter = true;
}
// if we find an appointment, redraw the grid
if (this.m_SelectedAppointments.AppointmentCount > 0)
{
base.Invalidate();
return;
}
// Otherwise, select a cell, but only if we don't don't have an existing range
if (RangeAlreadySelected) return;
// Ok, select cell here
int nRow = -1;
int nCol = -1;
if (this.HitTest(X, Y, ref nRow, ref nCol))
{
CGCell cellFromRowCol = this.m_gridCells.GetCellFromRowCol(nRow, nCol);
if (cellFromRowCol != null)
{
this.m_currentCell = cellFromRowCol;
this.m_selectedRange.StartCell = null;
this.m_selectedRange.EndCell = null;
this.m_selectedRange.CreateRange(this.m_gridCells, cellFromRowCol, cellFromRowCol);
cellFromRowCol.IsSelected = true;
}
base.Invalidate();
return;
}
}
private void OnLButtonDown(int X, int Y, bool bStart)
{
this.m_bDragDropStart = false;
@ -1066,11 +1199,14 @@
{
if (this.m_gridCells.CellCount != 0)
{
// this happens for the CGAVView Grid
foreach (DictionaryEntry entry in this.m_gridCells.CellHashTable)
{
CGCell cell = (CGCell) entry.Value;
cell.AppointmentTypeColor = (this.m_GridBackColor == "blue") ? Brushes.CornflowerBlue : Brushes.Khaki;
}
// won't happen for CGAVView Grid b/c it has no availabilites
// BUT, will happen for normal CGView Grid if there any availabilies
if ((this.m_pAvArray != null) && (this.m_pAvArray.Count != 0))
{
foreach (CGAvailability availability in this.m_pAvArray)
@ -1079,9 +1215,12 @@
int nCol = 0;
int num3 = 0;
int num4 = 0;
// pick the color from the availability
Brush brush = new SolidBrush(Color.FromArgb(availability.Red, availability.Green, availability.Blue));
// get starting and ending cell
this.GetCellFromTime(availability.StartTime, ref nRow, ref nCol, true, availability.ResourceList);
this.GetCellFromTime(availability.EndTime, ref num3, ref num4, false, availability.ResourceList);
// for each of the range cells between starting and ending, change their color
for (int i = nCol; i <= num4; i++)
{
for (int j = nRow; (i == num4) && (j <= num3); j++)
@ -1327,12 +1466,15 @@
if ((value > 0) && (value < 11))
{
this.m_nColumns = value;
this.m_gridCells.ClearAllCells();
this.m_selectedRange.Cells.ClearAllCells();
//new line
this.SetColumnInfo(); // redoes the columns if we have multiple resources
//end new line
this.m_gridCells.ClearAllCells(); //remove all cells
this.m_selectedRange.Cells.ClearAllCells(); //remove selected range
Graphics g = base.CreateGraphics();
this.BuildGridCellsArray(g);
this.SetAppointmentTypes();
base.Invalidate();
this.BuildGridCellsArray(g); //rebuild the cells
this.SetAppointmentTypes(); //set the colors on the cells for availabilities
base.Invalidate(); //Fire paint to call DrawGrid
}
}
}

View File

@ -36,7 +36,7 @@
<RemoteDebugMachine>
</RemoteDebugMachine>
<StartAction>Project</StartAction>
<StartArguments>/s=172.16.16.108 /p=9250 /a=BASMA.ALDWAIRI /v=SELEN.123</StartArguments>
<StartArguments>/s=172.16.16.108 /p=9250 /a=s.habiel /v=catdog.66</StartArguments>
<StartPage>
</StartPage>
<StartProgram>C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\IEExec.exe</StartProgram>

View File

@ -4,7 +4,6 @@ using System.Collections.Generic;
using System.Windows.Forms;
using System.Data;
using System.Linq;
//using System.Data.OleDb;
namespace IndianHealthService.ClinicalScheduling
{
@ -113,7 +112,7 @@ namespace IndianHealthService.ClinicalScheduling
public void InitializePage(ArrayList alResources, CGDocumentManager docManager)
{
this.Text = "Searching for Appointments in: " + string.Join(" | ", alResources.Cast<string>());
this.Text = "Searching for available slots in: " + string.Join(" | ", alResources.Cast<string>());
this.m_DocManager = docManager;
this.m_dsGlobal = m_DocManager.GlobalDataSet;
@ -274,6 +273,7 @@ namespace IndianHealthService.ClinicalScheduling
private void InitializeComponent()
{
this.panel1 = new System.Windows.Forms.Panel();
this.lblMessage = new System.Windows.Forms.Label();
this.cmdSearch = new System.Windows.Forms.Button();
this.cmdCancel = new System.Windows.Forms.Button();
this.btnAccept = new System.Windows.Forms.Button();
@ -312,7 +312,6 @@ namespace IndianHealthService.ClinicalScheduling
this.colResource = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colSlots = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colAccessType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.lblMessage = new System.Windows.Forms.Label();
this.panel1.SuspendLayout();
this.pnlDescription.SuspendLayout();
this.grpDescription.SuspendLayout();
@ -334,6 +333,16 @@ namespace IndianHealthService.ClinicalScheduling
this.panel1.Size = new System.Drawing.Size(923, 40);
this.panel1.TabIndex = 4;
//
// lblMessage
//
this.lblMessage.AutoSize = true;
this.lblMessage.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblMessage.ForeColor = System.Drawing.Color.Red;
this.lblMessage.Location = new System.Drawing.Point(337, 16);
this.lblMessage.Name = "lblMessage";
this.lblMessage.Size = new System.Drawing.Size(0, 16);
this.lblMessage.TabIndex = 3;
//
// cmdSearch
//
this.cmdSearch.Location = new System.Drawing.Point(33, 6);
@ -389,9 +398,9 @@ namespace IndianHealthService.ClinicalScheduling
this.lblDescription.Name = "lblDescription";
this.lblDescription.Size = new System.Drawing.Size(917, 45);
this.lblDescription.TabIndex = 1;
this.lblDescription.Text = "Search for available appointment times using this panel. You may narrow your sea" +
"rch by selecting an access type or by selecting specific days of the week or tim" +
"es of day.";
this.lblDescription.Text = "Search for available slots times using this panel. You may narrow your search by" +
" selecting an access type or by selecting specific days of the week or times of " +
"day.";
//
// groupBox1
//
@ -676,16 +685,6 @@ namespace IndianHealthService.ClinicalScheduling
this.colAccessType.Text = "Access Type";
this.colAccessType.Width = 101;
//
// lblMessage
//
this.lblMessage.AutoSize = true;
this.lblMessage.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lblMessage.ForeColor = System.Drawing.Color.Red;
this.lblMessage.Location = new System.Drawing.Point(337, 16);
this.lblMessage.Name = "lblMessage";
this.lblMessage.Size = new System.Drawing.Size(0, 16);
this.lblMessage.TabIndex = 3;
//
// DApptSearch
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
@ -898,7 +897,7 @@ namespace IndianHealthService.ClinicalScheduling
lstResults.Items.Clear(); //empty it from old data
if (items.Length > 0) lstResults.Items.AddRange(items); // add new data
else this.lblMessage.Text = "No available Appointment Slots Found!";
else this.lblMessage.Text = "No available slots found!";
lstResults.EndUpdate(); // ok done adding items, draw now.
//--End Update Listview
@ -943,11 +942,11 @@ namespace IndianHealthService.ClinicalScheduling
if (lstResults.SelectedIndices.Count == 0)
{
this.DialogResult = DialogResult.None;
lblMessage.Text = "No Appointment Slot selected!";
lblMessage.Text = "No slot selected!";
return;
}
long availabilityKey = long.Parse(lstResults.SelectedItems[0].SubItems[0].Text);
int availabilityKey = Int32.Parse(lstResults.SelectedItems[0].SubItems[0].Text);
_selectedAvailability = (from av in lstResultantAvailabilities
where av.AvailabilityType == availabilityKey
select av).Single<CGAvailability>();

View File

@ -7,7 +7,10 @@ using System.Windows.Forms;
namespace IndianHealthService.ClinicalScheduling
{
/// <summary>
/// Summary description for DSplash.
/// Program loading splash screen. Notice the numerous remote methods intended
/// to mickey mouse the form from another thread.
///
/// I don't know of a better way of doing this right now.
/// </summary>
public class DSplash : System.Windows.Forms.Form
{
@ -146,6 +149,8 @@ namespace IndianHealthService.ClinicalScheduling
public delegate void dSetStatus(string sStatus);
public delegate void dAny();
public delegate void dProgressBarSet(int number);
public delegate DialogResult dMessageBox(IWin32Window owner, string message);
public delegate DialogResult dMessageBox2(IWin32Window owner, string message, string caption, MessageBoxButtons btns);
public void SetStatus(string sStatus)
{
@ -164,12 +169,36 @@ namespace IndianHealthService.ClinicalScheduling
this.lblVersion.Text = "Version " + Application.ProductVersion;
}
public DialogResult RemoteMsgBox(string msg)
{
dMessageBox d = new dMessageBox(MessageBox.Show);
return (DialogResult)this.Invoke(d, this, msg);
}
public DialogResult RemoteMsgBox(string msg, string caption, MessageBoxButtons btns)
{
dMessageBox2 d = new dMessageBox2(MessageBox.Show);
return (DialogResult)this.Invoke(d, this, msg, caption, btns);
}
public void RemoteClose()
{
dAny d = new dAny(this.Close);
this.Invoke(d);
}
public void RemoteActivate()
{
dAny d = new dAny(this.Activate);
this.Invoke(d);
}
public void RemoteHide()
{
dAny d = new dAny(this.Hide);
this.Invoke(d);
}
public void RemoteProgressBarMaxSet(int max)
{
if (this.InvokeRequired == true)