diff --git a/css/swad16.189.css b/css/swad16.189.css
index 9d2bc3b8..a2c6b373 100644
--- a/css/swad16.189.css
+++ b/css/swad16.189.css
@@ -2383,9 +2383,9 @@ a:hover img.CENTRE_PHOTO_SHOW
}
.TT_HOUR_BIG
{
- font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif;
- color:#404040;
- font-size:13pt;
+ /* font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; */
+ color:#808080;
+ font-size:10pt;
font-weight:bold;
line-height:100%;
letter-spacing:0;
@@ -2394,19 +2394,19 @@ a:hover img.CENTRE_PHOTO_SHOW
{
font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif;
color:#A0A0A0;
- font-size:8pt;
+ font-size:10pt;
line-height:100%;
letter-spacing:0;
}
-.TT_HOUR {height:16px;}
-.TT_ALIGN {height:8px;}
-.TT_FREE0 {height:8px; background-color:#F4F2EA; border:solid 1px; border-color:#F4F2EA #E0D9C2 #EEEADC #E0D9C2;}
-.TT_FREE1 {height:8px; background-color:#F4F2EA; border:solid 1px; border-color:#F4F2EA #E0D9C2 #E0D9C2 #E0D9C2;}
-.TT_FREE2 {height:8px; background-color:#FBFAF7; border:solid 1px; border-color:#FBFAF7 #E0D9C2 #F5F2E9 #E0D9C2;}
-.TT_FREE3 {height:8px; background-color:#FBFAF7; border:solid 1px; border-color:#FBFAF7 #E0D9C2 #E0D9C2 #E0D9C2;}
-.TT_THEO {height:8px; background-color:#C0DAE4; border:solid 2px; border-color:#C9E3ED #B5CFD9 #B5CFD9 #C9E3ED;}
-.TT_PRAC {height:8px; background-color:#DBE5E9; border:solid 2px; border-color:#E4EEF2 #D0DADE #D0DADE #E4EEF2;}
-.TT_TUTO {height:8px; background-color:#D6E9C3; border:solid 2px; border-color:#DFEEE0 #CAE3B1 #CAE3B1 #DFEEE0;}
+.TT_HOUR {height:24px;}
+.TT_ALIGN {height:12px;}
+.TT_FREE0 {height:12px; background-color:#F4F2EA; border:solid 1px; border-color:#F4F2EA #E0D9C2 #EEEADC #E0D9C2;}
+.TT_FREE1 {height:12px; background-color:#F4F2EA; border:solid 1px; border-color:#F4F2EA #E0D9C2 #E0D9C2 #E0D9C2;}
+.TT_FREE2 {height:12px; background-color:#FBFAF7; border:solid 1px; border-color:#FBFAF7 #E0D9C2 #F5F2E9 #E0D9C2;}
+.TT_FREE3 {height:12px; background-color:#FBFAF7; border:solid 1px; border-color:#FBFAF7 #E0D9C2 #E0D9C2 #E0D9C2;}
+.TT_THEO {height:12px; background-color:#C0DAE4; border:solid 2px; border-color:#C9E3ED #B5CFD9 #B5CFD9 #C9E3ED;}
+.TT_PRAC {height:12px; background-color:#DBE5E9; border:solid 2px; border-color:#E4EEF2 #D0DADE #D0DADE #E4EEF2;}
+.TT_TUTO {height:12px; background-color:#D6E9C3; border:solid 2px; border-color:#DFEEE0 #CAE3B1 #CAE3B1 #DFEEE0;}
/********************************* Preference ********************************/
.PREF_CONTAINER
diff --git a/swad_changelog.h b/swad_changelog.h
index 08d9b348..bbb11a6f 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -219,13 +219,14 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
-#define Log_PLATFORM_VERSION "SWAD 16.190 (2017-04-25)"
+#define Log_PLATFORM_VERSION "SWAD 16.191 (2017-04-25)"
#define CSS_FILE "swad16.189.css"
#define JS_FILE "swad16.181.js"
// Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
/*
+ Version 16.191: Apr 25, 2017 Changes in timetable. (218183 lines)
Version 16.190: Apr 25, 2017 Code refactoring in timetable. (218106 lines)
Version 16.189: Apr 25, 2017 Changes in timetable. (218027 lines)
7 changes necessary in database.
diff --git a/swad_global.h b/swad_global.h
index 12e8c7b2..398769cd 100644
--- a/swad_global.h
+++ b/swad_global.h
@@ -634,6 +634,7 @@ struct Globals
unsigned IntervalsBeforeStartHour;
} Config;
TT_TimeTableType_t Type;
+ bool Editing;
unsigned Weekday;
unsigned Interval;
unsigned Column;
diff --git a/swad_indicator.c b/swad_indicator.c
index 47e92b5f..d506b8fe 100644
--- a/swad_indicator.c
+++ b/swad_indicator.c
@@ -973,7 +973,7 @@ static void Ind_ShowTableOfCoursesWithIndicators (Ind_IndicatorsLayout_t Indicat
}
/***** List courses *****/
- mysql_data_seek (mysql_res, 0);
+ mysql_data_seek (mysql_res,0);
for (Gbl.RowEvenOdd = 1, NumCrs = 0;
NumCrs < NumCrss;
NumCrs++, Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd)
diff --git a/swad_statistic.c b/swad_statistic.c
index 678b46f3..7f587f75 100644
--- a/swad_statistic.c
+++ b/swad_statistic.c
@@ -1727,7 +1727,7 @@ static void Sta_ShowDetailedAccessesList (unsigned long NumRows,MYSQL_RES *mysql
NumRow >= FirstRow;
NumRow--, UniqueId++, Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd)
{
- mysql_data_seek (mysql_res, (my_ulonglong) (NumRow-1));
+ mysql_data_seek (mysql_res,(my_ulonglong) (NumRow - 1));
row = mysql_fetch_row (mysql_res);
/* Get log code */
@@ -2765,7 +2765,7 @@ static void Sta_ShowNumHitsPerHour (unsigned long NumRows,
ColumnWidth = NumDigits * DIGIT_WIDTH + 2;
/***** Draw the graphic *****/
- mysql_data_seek (mysql_res, 0);
+ mysql_data_seek (mysql_res,0);
NumRow = 1;
fprintf (Gbl.F.Out,"
");
while (Hour < 24)
@@ -3083,7 +3083,7 @@ static void Sta_ShowNumHitsPerAction (unsigned long NumRows,
Sta_ComputeMaxAndTotalHits (&Hits,NumRows,mysql_res,1,1);
/***** Write rows *****/
- mysql_data_seek (mysql_res, 0);
+ mysql_data_seek (mysql_res,0);
for (NumRow = 1;
NumRow <= NumRows;
NumRow++)
@@ -3141,7 +3141,7 @@ static void Sta_ShowNumHitsPerPlugin (unsigned long NumRows,
Sta_ComputeMaxAndTotalHits (&Hits,NumRows,mysql_res,1,1);
/***** Write rows *****/
- mysql_data_seek (mysql_res, 0);
+ mysql_data_seek (mysql_res,0);
for (NumRow = 1;
NumRow <= NumRows;
NumRow++)
@@ -3195,7 +3195,7 @@ static void Sta_ShowNumHitsPerWSFunction (unsigned long NumRows,
Sta_ComputeMaxAndTotalHits (&Hits,NumRows,mysql_res,1,1);
/***** Write rows *****/
- mysql_data_seek (mysql_res, 0);
+ mysql_data_seek (mysql_res,0);
for (NumRow = 1;
NumRow <= NumRows;
NumRow++)
@@ -3260,7 +3260,7 @@ static void Sta_ShowNumHitsPerBanner (unsigned long NumRows,
}
/***** Write rows *****/
- mysql_data_seek (mysql_res, 0);
+ mysql_data_seek (mysql_res,0);
for (NumRow = 1;
NumRow <= NumRows;
NumRow++)
@@ -3328,7 +3328,7 @@ static void Sta_ShowNumHitsPerCountry (unsigned long NumRows,
Sta_ComputeMaxAndTotalHits (&Hits,NumRows,mysql_res,1,1);
/***** Write rows *****/
- mysql_data_seek (mysql_res, 0);
+ mysql_data_seek (mysql_res,0);
for (NumRow = 1, Ranking = 0;
NumRow <= NumRows;
NumRow++)
@@ -3421,7 +3421,7 @@ static void Sta_ShowNumHitsPerInstitution (unsigned long NumRows,
Sta_ComputeMaxAndTotalHits (&Hits,NumRows,mysql_res,1,1);
/***** Write rows *****/
- mysql_data_seek (mysql_res, 0);
+ mysql_data_seek (mysql_res,0);
for (NumRow = 1, Ranking = 0;
NumRow <= NumRows;
NumRow++)
@@ -3516,7 +3516,7 @@ static void Sta_ShowNumHitsPerCentre (unsigned long NumRows,
Sta_ComputeMaxAndTotalHits (&Hits,NumRows,mysql_res,1,1);
/***** Write rows *****/
- mysql_data_seek (mysql_res, 0);
+ mysql_data_seek (mysql_res,0);
for (NumRow = 1, Ranking = 0;
NumRow <= NumRows;
NumRow++)
@@ -3611,7 +3611,7 @@ static void Sta_ShowNumHitsPerDegree (unsigned long NumRows,
Sta_ComputeMaxAndTotalHits (&Hits,NumRows,mysql_res,1,1);
/***** Write rows *****/
- mysql_data_seek (mysql_res, 0);
+ mysql_data_seek (mysql_res,0);
for (NumRow = 1, Ranking = 0;
NumRow <= NumRows;
NumRow++)
@@ -3719,7 +3719,7 @@ static void Sta_ShowNumHitsPerCourse (unsigned long NumRows,
Sta_ComputeMaxAndTotalHits (&Hits,NumRows,mysql_res,1,1);
/***** Write rows *****/
- mysql_data_seek (mysql_res, 0);
+ mysql_data_seek (mysql_res,0);
for (NumRow = 1, Ranking = 0;
NumRow <= NumRows;
NumRow++)
diff --git a/swad_test.c b/swad_test.c
index abad3a65..05041ab8 100644
--- a/swad_test.c
+++ b/swad_test.c
@@ -4549,7 +4549,7 @@ static void Tst_PutFormEditOneQst (char Stem[Cns_MAX_BYTES_TEXT + 1],
" class=\"TAG_SEL\" onchange=\"changeTxtTag('%u')\">",
NumTag,NumTag,NumTag);
fprintf (Gbl.F.Out," ");
- mysql_data_seek (mysql_res, 0);
+ mysql_data_seek (mysql_res,0);
TagNotFound = true;
for (NumRow = 1;
NumRow <= NumRows;
diff --git a/swad_timetable.c b/swad_timetable.c
index b80c41ba..75f58012 100644
--- a/swad_timetable.c
+++ b/swad_timetable.c
@@ -47,21 +47,20 @@
extern struct Globals Gbl;
/*****************************************************************************/
-/*************************** Internal constants ******************************/
+/************************ Internal constants and types ***********************/
/*****************************************************************************/
#define TT_DAYS_PER_WEEK 7 // Seven days per week
#define TT_MINUTES_PER_HOUR 60 // Number of minutes in 1 hour
#define TT_SECONDS_PER_MINUTE 60 // Number of seconds in 1 minute
-/*
-#define TT_MIN_START_HOUR 0 // Day starts at this hour
-#define TT_MAX_END_HOUR 24 // Day ends at this hour
-#define TT_MIN_MINUTES_PER_INTERVAL 5
-#define TT_MAX_HOURS_PER_DAY (TT_MAX_END_HOUR - TT_MIN_START_HOUR)
-#define TT_MAX_INTERVALS_PER_HOUR (TT_MINUTES_PER_HOUR / TT_MIN_MINUTES_PER_INTERVAL)
-#define TT_MAX_INTERVALS_PER_DAY (TT_MAX_INTERVALS_PER_HOUR * TT_MAX_HOURS_PER_DAY)
-*/
+
+#define TT_START_HOUR 6 // Day starts at this hour
+#define TT_END_HOUR 24 // Day ends at this hour
+
+#define TT_MIN_MINUTES_PER_INTERVAL 5
+#define TT_MAX_MINUTES_PER_INTERVAL 30
+
#define TT_MAX_COLUMNS_PER_CELL 3 // Maximum number of items (i.e. classes) in a timetable cell (1, 2, 3 or 4)
#define TT_NUM_MINICOLUMNS_PER_DAY 6 // Least common multiple of 1,2,3,...,TT_MAX_COLUMNS_PER_CELL
@@ -74,23 +73,7 @@ extern struct Globals Gbl;
#define TT_MAX_BYTES_STR_CLASS_TYPE 256
#define TT_MAX_BYTES_STR_DURATION 32 // "hh:mm h"
-/*****************************************************************************/
-/******************************* Internal types ******************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/************************* Internal global variables *************************/
-/*****************************************************************************/
-
-char *TimeTableStrsClassTypeDB[TT_NUM_CLASS_TYPES] =
- {
- "free",
- "lecture",
- "practical",
- "tutoring",
- };
-
-struct TimeTableColumn
+struct TT_Column
{
long CrsCod; // Course code (-1 if no course selected)
long GrpCod; // Group code (-1 if no group selected)
@@ -101,19 +84,41 @@ struct TimeTableColumn
char Group[Grp_MAX_BYTES_GROUP_NAME + 1];
};
-struct TimeTableCell
+struct TT_Cell
{
unsigned NumColumns;
- struct TimeTableColumn Columns[TT_MAX_COLUMNS_PER_CELL];
+ struct TT_Column Columns[TT_MAX_COLUMNS_PER_CELL];
};
-struct TimeTableCell *TT_TimeTable[TT_DAYS_PER_WEEK];
+/*****************************************************************************/
+/************************* Internal global variables *************************/
+/*****************************************************************************/
+
+char *TT_ClassTypeDB[TT_NUM_CLASS_TYPES] =
+ {
+ "free",
+ "lecture",
+ "practical",
+ "tutoring",
+ };
+
+struct TT_Cell *TT_TimeTable[TT_DAYS_PER_WEEK];
+
+/* Possible resolutions of the timetable in minutes */
+#define TT_NUM_RESOLUTIONS 3
+unsigned TT_Resolutions[TT_NUM_RESOLUTIONS] =
+ {
+ 5, // 5 minutes
+ 15, // 15 minutes // Use 10 or 15 minutes (15 looks better), never both together
+ 30, // 30 minutes
+ };
/*****************************************************************************/
/***************************** Internal prototypes **************************/
/*****************************************************************************/
static void TT_TimeTableConstructor (void);
+static void TT_TimeTableConfigureIntervalsAndAllocateTimeTable (void);
static void TT_TimeTableDestructor (void);
static void TT_ShowTimeTableGrpsSelected (void);
@@ -127,6 +132,8 @@ static void TT_PutIconToViewMyTT (void);
static void TT_WriteCrsTimeTableIntoDB (long CrsCod);
static void TT_WriteTutTimeTableIntoDB (long UsrCod);
static void TT_FillTimeTableFromDB (long UsrCod);
+static unsigned TT_GetResolution (unsigned Seconds);
+
static void TT_ModifTimeTable (void);
static void TT_DrawTimeTable (void);
static void TT_TimeTableDrawAdjustRow (void);
@@ -144,17 +151,43 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
/*****************************************************************************/
static void TT_TimeTableConstructor (void)
+ {
+ /***** Start configuration of timetable *****/
+ Gbl.TimeTable.Config.StartHour = TT_START_HOUR; // Day starts at this hour
+ Gbl.TimeTable.Config.EndHour = TT_END_HOUR; // Day ends at this hour
+ Gbl.TimeTable.Config.HoursPerDay = Gbl.TimeTable.Config.EndHour -
+ Gbl.TimeTable.Config.StartHour; // From start hour to end hour
+
+ /***** Editing or viewing? *****/
+ switch (Gbl.Action.Act)
+ {
+ case ActSeeCrsTT: case ActPrnCrsTT: case ActChgCrsTT1stDay:
+ case ActSeeMyTT: case ActPrnMyTT: case ActChgMyTT1stDay:
+ case ActSeeRecOneTch: case ActSeeRecSevTch:
+ Gbl.TimeTable.Editing = false;
+ break;
+ case ActEdiCrsTT: case ActChgCrsTT:
+ case ActEdiTut: case ActChgTut:
+ Gbl.TimeTable.Editing = true;
+ break;
+ }
+
+ /***** End configuration and allocation of timetable *****/
+ if (Gbl.TimeTable.Editing)
+ {
+ Gbl.TimeTable.Config.MinutesPerInterval = TT_Resolutions[0]; // The smallest interval
+ TT_TimeTableConfigureIntervalsAndAllocateTimeTable ();
+ }
+ /* If viewing (not editing) ==>
+ configuration and allocation of memory ends
+ when table is read from database */
+ }
+
+static void TT_TimeTableConfigureIntervalsAndAllocateTimeTable (void)
{
unsigned Weekday;
- /***** Configure timetable *****/
- Gbl.TimeTable.Config.StartHour = 6; // Day starts at this hour
- Gbl.TimeTable.Config.EndHour = 24; // Day ends at this hour
-
- Gbl.TimeTable.Config.MinutesPerInterval = 15; // Number of minutes per interval
-
- Gbl.TimeTable.Config.HoursPerDay = Gbl.TimeTable.Config.EndHour -
- Gbl.TimeTable.Config.StartHour; // From start hour to end hour
+ /***** End configuration depending on resolution *****/
Gbl.TimeTable.Config.SecondsPerInterval = Gbl.TimeTable.Config.MinutesPerInterval *
TT_SECONDS_PER_MINUTE;
Gbl.TimeTable.Config.IntervalsPerHour = TT_MINUTES_PER_HOUR /
@@ -168,9 +201,9 @@ static void TT_TimeTableConstructor (void)
for (Weekday = 0;
Weekday < TT_DAYS_PER_WEEK;
Weekday++)
- if ((TT_TimeTable[Weekday] = (struct TimeTableCell *)
+ if ((TT_TimeTable[Weekday] = (struct TT_Cell *)
malloc (Gbl.TimeTable.Config.IntervalsPerDay *
- sizeof (struct TimeTableCell))) == NULL)
+ sizeof (struct TT_Cell))) == NULL)
Lay_ShowErrorAndExit ("Error allocating memory for timetable.");
}
@@ -249,7 +282,7 @@ static void TT_GetParamsTimeTable (void)
for (Gbl.TimeTable.ClassType = (TT_ClassType_t) 0;
Gbl.TimeTable.ClassType < (TT_ClassType_t) TT_NUM_CLASS_TYPES;
Gbl.TimeTable.ClassType++)
- if (!strcmp (StrClassType,TimeTableStrsClassTypeDB[Gbl.TimeTable.ClassType]))
+ if (!strcmp (StrClassType,TT_ClassTypeDB[Gbl.TimeTable.ClassType]))
break;
if (Gbl.TimeTable.ClassType == (TT_ClassType_t) TT_NUM_CLASS_TYPES)
Lay_ShowErrorAndExit ("Type of timetable cell is missing.");
@@ -561,7 +594,7 @@ static void TT_WriteCrsTimeTableIntoDB (long CrsCod)
Hour,Min,
TT_TimeTable[Weekday][Interval].Columns[Column].DurationNumIntervals *
Gbl.TimeTable.Config.SecondsPerInterval,
- TimeTableStrsClassTypeDB[TT_TimeTable[Weekday][Interval].Columns[Column].ClassType],
+ TT_ClassTypeDB[TT_TimeTable[Weekday][Interval].Columns[Column].ClassType],
TT_TimeTable[Weekday][Interval].Columns[Column].Place,
TT_TimeTable[Weekday][Interval].Columns[Column].Group);
DB_QueryINSERT (Query,"can not create course timetable");
@@ -633,7 +666,11 @@ static void TT_FillTimeTableFromDB (long UsrCod)
unsigned I;
unsigned DurationNumIntervals;
unsigned Column;
- unsigned Seconds;
+ unsigned StartTimeSeconds;
+ unsigned DurationSeconds;
+ unsigned EndTimeSeconds;
+ unsigned ResolutionTable;
+ unsigned ResolutionThisClass;
unsigned FirstFreeColumn;
long GrpCod;
TT_ClassType_t ClassType = TT_FREE; // Initialized to avoid warning
@@ -805,6 +842,45 @@ static void TT_FillTimeTableFromDB (long UsrCod)
}
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get timetable");
+ if (!Gbl.TimeTable.Editing)
+ {
+ /***** Calculate the resolution *****/
+ /* Initialize resolution for timetable */
+ ResolutionTable = TT_Resolutions[TT_NUM_RESOLUTIONS - 1]; // The longest interval
+
+ for (NumRow = 0;
+ NumRow < NumRows;
+ NumRow++)
+ {
+ row = mysql_fetch_row (mysql_res);
+
+ /* StartTime formatted as seconds (row[1]) */
+ if (sscanf (row[1],"%u",&StartTimeSeconds) != 1)
+ Lay_ShowErrorAndExit ("Wrong start time in timetable.");
+
+ /* Compute resolution for start time */
+ ResolutionThisClass = TT_GetResolution (StartTimeSeconds);
+ if (ResolutionThisClass < ResolutionTable)
+ ResolutionTable = ResolutionThisClass;
+
+ /* Duration formatted as seconds (row[2]) */
+ if (sscanf (row[2],"%u",&DurationSeconds) != 1)
+ Lay_ShowErrorAndExit ("Wrong duration in timetable.");
+ EndTimeSeconds = StartTimeSeconds + DurationSeconds;
+
+ /* Compute resolution for end time */
+ ResolutionThisClass = TT_GetResolution (EndTimeSeconds);
+ if (ResolutionThisClass < ResolutionTable)
+ ResolutionTable = ResolutionThisClass;
+ }
+ mysql_data_seek (mysql_res,0);
+
+ /***** End configuration and allocation of timetable *****/
+ Gbl.TimeTable.Config.MinutesPerInterval = ResolutionTable;
+
+ TT_TimeTableConfigureIntervalsAndAllocateTimeTable ();
+ }
+
/***** Build the table depending on the number of rows of the timetable *****/
for (NumRow = 0;
NumRow < NumRows;
@@ -826,18 +902,18 @@ static void TT_FillTimeTableFromDB (long UsrCod)
/* StartTime formatted as seconds (row[1])
--> StartTime in number of intervals */
- if (sscanf (row[1],"%u",&Seconds) != 1)
+ if (sscanf (row[1],"%u",&StartTimeSeconds) != 1)
Lay_ShowErrorAndExit ("Wrong start time in timetable.");
- Interval = Seconds / Gbl.TimeTable.Config.SecondsPerInterval;
+ Interval = StartTimeSeconds / Gbl.TimeTable.Config.SecondsPerInterval;
if (Interval < Gbl.TimeTable.Config.IntervalsBeforeStartHour)
Lay_ShowErrorAndExit ("Wrong start time in timetable.");
Interval -= Gbl.TimeTable.Config.IntervalsBeforeStartHour;
/* Duration formatted as seconds (row[2])
--> Duration in number of intervals */
- if (sscanf (row[2],"%u",&Seconds) != 1)
+ if (sscanf (row[2],"%u",&DurationSeconds) != 1)
Lay_ShowErrorAndExit ("Wrong duration in timetable.");
- DurationNumIntervals = Seconds / Gbl.TimeTable.Config.SecondsPerInterval;
+ DurationNumIntervals = DurationSeconds / Gbl.TimeTable.Config.SecondsPerInterval;
/* Type of class (row[4]) */
switch (Gbl.TimeTable.Type)
@@ -847,7 +923,7 @@ static void TT_FillTimeTableFromDB (long UsrCod)
for (ClassType = TT_LECTURE, Found = false;
ClassType <= TT_TUTORING;
ClassType++)
- if (!strcmp (row[4],TimeTableStrsClassTypeDB[ClassType]))
+ if (!strcmp (row[4],TT_ClassTypeDB[ClassType]))
{
Found = true;
break;
@@ -942,6 +1018,34 @@ static void TT_FillTimeTableFromDB (long UsrCod)
Lay_ShowAlert (Lay_INFO,Txt_Incomplete_timetable_for_lack_of_space);
}
+/*****************************************************************************/
+/****************** Get resolution given a time in seconds *******************/
+/*****************************************************************************/
+// Example: if Seconds == 42300 (time == 11:45:00) => Minutes = 45 => Resolution = 15
+
+static unsigned TT_GetResolution (unsigned Seconds)
+ {
+ unsigned Minutes;
+ unsigned ResolutionThisClass;
+ unsigned Resol;
+
+ /***** Compute minutes part (45) of a time (11;45:00) from seconds (42300) *****/
+ Minutes = (Seconds / TT_SECONDS_PER_MINUTE) % TT_MINUTES_PER_HOUR;
+
+ /***** Compute resolution using minutes part *****/
+ ResolutionThisClass = TT_Resolutions[0]; // Default: the shortest interval
+ for (Resol = TT_NUM_RESOLUTIONS - 1; // From the longest interval...
+ Resol > 0;
+ Resol--) // ...to shorter intervals
+ if (Minutes % TT_Resolutions[Resol] == 0)
+ {
+ ResolutionThisClass = TT_Resolutions[Resol];
+ break;
+ }
+
+ return ResolutionThisClass;
+ }
+
/*****************************************************************************/
/*********************** Modify a class in timetable *************************/
/*****************************************************************************/
@@ -985,7 +1089,6 @@ static void TT_ModifTimeTable (void)
static void TT_DrawTimeTable (void)
{
- bool Editing = false;
unsigned DayColumn; // Column from left (0) to right (6)
unsigned Weekday; // Day of week
unsigned Interval;
@@ -995,20 +1098,6 @@ static void TT_DrawTimeTable (void)
unsigned ColumnsToDrawIncludingExtraColumn;
unsigned ContinuousFreeMinicolumns;
- switch (Gbl.Action.Act)
- {
- case ActSeeCrsTT: case ActPrnCrsTT: case ActChgCrsTT1stDay:
- case ActSeeMyTT: case ActPrnMyTT: case ActChgMyTT1stDay:
- case ActSeeRecOneTch: case ActSeeRecSevTch:
- Editing = false;
- break;
- case ActEdiCrsTT: case ActChgCrsTT:
- case ActEdiTut: case ActChgTut:
- // If editing and there's place for more columns, a potential new column is added at the end of each day
- Editing = true;
- break;
- }
-
/***** Table start *****/
fprintf (Gbl.F.Out,"