mirror of https://github.com/acanas/swad-core.git
Version 16.188
This commit is contained in:
parent
f1840860e9
commit
136290233f
|
@ -219,13 +219,14 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 16.187.3 (2017-04-24)"
|
#define Log_PLATFORM_VERSION "SWAD 16.188 (2017-04-24)"
|
||||||
#define CSS_FILE "swad16.185.3.css"
|
#define CSS_FILE "swad16.185.3.css"
|
||||||
#define JS_FILE "swad16.181.js"
|
#define JS_FILE "swad16.181.js"
|
||||||
|
|
||||||
// Number of lines (includes comments but not blank lines) has been got with the following command:
|
// 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
|
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
|
||||||
/*
|
/*
|
||||||
|
Version 16.188: Apr 24, 2017 Changes in timetable. Not finished. (218029 lines)
|
||||||
Version 16.187.3: Apr 24, 2017 Changes in timetable. Not finished. (218040 lines)
|
Version 16.187.3: Apr 24, 2017 Changes in timetable. Not finished. (218040 lines)
|
||||||
Version 16.187.2: Apr 24, 2017 Changes in timetable. Not finished. (217963 lines)
|
Version 16.187.2: Apr 24, 2017 Changes in timetable. Not finished. (217963 lines)
|
||||||
Version 16.187.1: Apr 24, 2017 Changes in timetable. Not finished. (217958 lines)
|
Version 16.187.1: Apr 24, 2017 Changes in timetable. Not finished. (217958 lines)
|
||||||
|
|
|
@ -623,11 +623,11 @@ struct Globals
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
TT_TimeTableType_t Type;
|
TT_TimeTableType_t Type;
|
||||||
unsigned Day;
|
unsigned Weekday;
|
||||||
unsigned HourOld;
|
unsigned Interval;
|
||||||
unsigned Column;
|
unsigned Column;
|
||||||
TT_ClassType_t ClassType;
|
TT_ClassType_t ClassType;
|
||||||
unsigned DurationOld;
|
unsigned DurationNumIntervals;
|
||||||
char Place[TT_MAX_BYTES_PLACE + 1];
|
char Place[TT_MAX_BYTES_PLACE + 1];
|
||||||
char Group[Grp_MAX_BYTES_GROUP_NAME + 1];
|
char Group[Grp_MAX_BYTES_GROUP_NAME + 1];
|
||||||
long GrpCod; // Group code (-1 if no group selected)
|
long GrpCod; // Group code (-1 if no group selected)
|
||||||
|
|
469
swad_timetable.c
469
swad_timetable.c
|
@ -50,22 +50,29 @@ extern struct Globals Gbl;
|
||||||
/*************************** Internal constants ******************************/
|
/*************************** Internal constants ******************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
#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_START_HOUR 6 // Day starts at 6:00
|
#define TT_START_HOUR 6 // Day starts at 6:00
|
||||||
#define TT_END_HOUR 24 // Day ends at 24:00
|
#define TT_END_HOUR 24 // Day ends at 24:00
|
||||||
#define TT_HOURS_PER_DAY (TT_END_HOUR - TT_START_HOUR) // From 6:00 to 24:00
|
#define TT_HOURS_PER_DAY (TT_END_HOUR - TT_START_HOUR) // From 6:00 to 24:00
|
||||||
#define TT_INTERVALS_5_MINUTES_PER_HOUR 12
|
|
||||||
#define TT_INTERVALS_5_MINUTES_PER_DAY (TT_HOURS_PER_DAY * TT_INTERVALS_5_MINUTES_PER_HOUR)
|
#define TT_MINUTES_PER_INTERVAL 5
|
||||||
#define TT_INTERVALS_5_MINUTES_BEFORE_START_HOUR (TT_START_HOUR * TT_INTERVALS_5_MINUTES_PER_HOUR)
|
#define TT_SECONDS_PER_INTERVAL (TT_MINUTES_PER_INTERVAL * TT_SECONDS_PER_MINUTE)
|
||||||
#define TT_SECONDS_IN_1_MINUTE 60 // Number of seconds in 1 minute
|
|
||||||
#define TT_SECONDS_IN_5_MINUTES (5 * TT_SECONDS_IN_1_MINUTE) // Number of seconds in 5 minutes
|
#define TT_INTERVALS_PER_HOUR (TT_MINUTES_PER_HOUR / TT_MINUTES_PER_INTERVAL)
|
||||||
|
#define TT_INTERVALS_PER_DAY (TT_INTERVALS_PER_HOUR * TT_HOURS_PER_DAY)
|
||||||
|
#define TT_INTERVALS_BEFORE_START_HOUR (TT_INTERVALS_PER_HOUR * TT_START_HOUR)
|
||||||
|
|
||||||
#define TT_DAYS 7 // Seven days per week
|
|
||||||
#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_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
|
#define TT_NUM_MINICOLUMNS_PER_DAY 6 // Least common multiple of 1,2,3,...,TT_MAX_COLUMNS_PER_CELL
|
||||||
|
|
||||||
#define TT_PERCENT_WIDTH_OF_A_MINICOLUMN 2 // Width (%) of each minicolumn
|
#define TT_PERCENT_WIDTH_OF_A_MINICOLUMN 2 // Width (%) of each minicolumn
|
||||||
#define TT_PERCENT_WIDTH_OF_A_DAY (TT_PERCENT_WIDTH_OF_A_MINICOLUMN * TT_NUM_MINICOLUMNS_PER_DAY) // Width (%) of each day
|
#define TT_PERCENT_WIDTH_OF_A_DAY (TT_PERCENT_WIDTH_OF_A_MINICOLUMN * TT_NUM_MINICOLUMNS_PER_DAY) // Width (%) of each day
|
||||||
#define TT_PERCENT_WIDTH_OF_ALL_DAYS (TT_PERCENT_WIDTH_OF_A_DAY * TT_DAYS) // Width (%) of all days
|
#define TT_PERCENT_WIDTH_OF_ALL_DAYS (TT_PERCENT_WIDTH_OF_A_DAY * TT_DAYS_PER_WEEK) // Width (%) of all days
|
||||||
#define TT_PERCENT_WIDTH_OF_A_SEPARATION_COLUMN 1 // Width (%) of left and right columns (frame)
|
#define TT_PERCENT_WIDTH_OF_A_SEPARATION_COLUMN 1 // Width (%) of left and right columns (frame)
|
||||||
#define TT_PERCENT_WIDTH_OF_AN_HOUR_COLUMN ((100 - TT_PERCENT_WIDTH_OF_ALL_DAYS - TT_PERCENT_WIDTH_OF_A_SEPARATION_COLUMN * 2) / 2) // Width (%) of the separation columns
|
#define TT_PERCENT_WIDTH_OF_AN_HOUR_COLUMN ((100 - TT_PERCENT_WIDTH_OF_ALL_DAYS - TT_PERCENT_WIDTH_OF_A_SEPARATION_COLUMN * 2) / 2) // Width (%) of the separation columns
|
||||||
|
|
||||||
#define TT_MAX_BYTES_STR_CLASS_TYPE 256
|
#define TT_MAX_BYTES_STR_CLASS_TYPE 256
|
||||||
|
@ -87,32 +94,13 @@ char *TimeTableStrsClassTypeDB[TT_NUM_CLASS_TYPES] =
|
||||||
"tutoring",
|
"tutoring",
|
||||||
};
|
};
|
||||||
|
|
||||||
char *TimeTableStrsClassTypeOldDB[TT_NUM_CLASS_TYPES] = // TODO: Remove
|
|
||||||
{
|
|
||||||
"libre",
|
|
||||||
"teoria",
|
|
||||||
"practicas",
|
|
||||||
"tutorias",
|
|
||||||
};
|
|
||||||
char TimeTableCharsDaysOld[TT_DAYS] = // TODO: Remove
|
|
||||||
{
|
|
||||||
'L', // Monday
|
|
||||||
'M', // Tuesday
|
|
||||||
'X', // Wednesday
|
|
||||||
'J', // Thursday
|
|
||||||
'V', // Friday
|
|
||||||
'S', // Saturday
|
|
||||||
'D', // Sunday
|
|
||||||
};
|
|
||||||
|
|
||||||
struct TimeTableColumn
|
struct TimeTableColumn
|
||||||
{
|
{
|
||||||
long CrsCod; // Course code (-1 if no course selected)
|
long CrsCod; // Course code (-1 if no course selected)
|
||||||
long GrpCod; // Group code (-1 if no group selected)
|
long GrpCod; // Group code (-1 if no group selected)
|
||||||
TT_HourType_t HourType;
|
TT_IntervalType_t IntervalType;
|
||||||
TT_ClassType_t ClassType;
|
TT_ClassType_t ClassType;
|
||||||
unsigned DurationNumIntervals5Minutes;
|
unsigned DurationNumIntervals;
|
||||||
unsigned DurationOld; // TODO: Remove
|
|
||||||
char Place[TT_MAX_BYTES_PLACE + 1];
|
char Place[TT_MAX_BYTES_PLACE + 1];
|
||||||
char Group[Grp_MAX_BYTES_GROUP_NAME + 1];
|
char Group[Grp_MAX_BYTES_GROUP_NAME + 1];
|
||||||
};
|
};
|
||||||
|
@ -121,15 +109,9 @@ struct
|
||||||
{
|
{
|
||||||
unsigned NumColumns;
|
unsigned NumColumns;
|
||||||
struct TimeTableColumn Columns[TT_MAX_COLUMNS_PER_CELL];
|
struct TimeTableColumn Columns[TT_MAX_COLUMNS_PER_CELL];
|
||||||
} TimeTableOld[TT_DAYS][TT_HOURS_PER_DAY * TT_INTERVALS_5_MINUTES_PER_HOUR];
|
} TT_TimeTable[TT_DAYS_PER_WEEK][TT_INTERVALS_PER_DAY];
|
||||||
|
|
||||||
struct
|
bool TimeTableHoursChecked[TT_INTERVALS_PER_DAY];
|
||||||
{
|
|
||||||
unsigned NumColumns;
|
|
||||||
struct TimeTableColumn Columns[TT_MAX_COLUMNS_PER_CELL];
|
|
||||||
} TT_TimeTable[TT_DAYS][TT_HOURS_PER_DAY * TT_INTERVALS_5_MINUTES_PER_HOUR];
|
|
||||||
|
|
||||||
bool TimeTableHoursChecked[TT_HOURS_PER_DAY * TT_INTERVALS_5_MINUTES_PER_HOUR];
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/***************************** Internal prototypes **************************/
|
/***************************** Internal prototypes **************************/
|
||||||
|
@ -150,12 +132,12 @@ static void TT_ModifTimeTable (void);
|
||||||
static void TT_DrawTimeTable (void);
|
static void TT_DrawTimeTable (void);
|
||||||
static void TT_TimeTableDrawAdjustRow (void);
|
static void TT_TimeTableDrawAdjustRow (void);
|
||||||
static void TT_TimeTableDrawDaysCells (void);
|
static void TT_TimeTableDrawDaysCells (void);
|
||||||
static void TT_TimeTableDrawHourCell (unsigned HourOld,unsigned Min,const char *Align);
|
static void TT_TimeTableDrawHourCell (unsigned Hour,unsigned Min,const char *Align);
|
||||||
static unsigned TT_TimeTableCalculateColsToDraw (unsigned Day,unsigned HourOld);
|
static unsigned TT_TimeTableCalculateColsToDraw (unsigned Weekday,unsigned Interval);
|
||||||
static void TT_DrawCellAlignTimeTable (void);
|
static void TT_DrawCellAlignTimeTable (void);
|
||||||
static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,unsigned ColSpan,
|
static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Column,unsigned ColSpan,
|
||||||
long CrsCod,TT_HourType_t HourType,TT_ClassType_t ClassType,
|
long CrsCod,TT_IntervalType_t IntervalType,TT_ClassType_t ClassType,
|
||||||
unsigned DurationOld,char *Group,long GrpCod,char *Place);
|
unsigned DurationNumIntervals,char *Group,long GrpCod,char *Place);
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*********** Show whether only my groups or all groups are shown *************/
|
/*********** Show whether only my groups or all groups are shown *************/
|
||||||
|
@ -192,18 +174,18 @@ static void TT_GetParamsTimeTable (void)
|
||||||
unsigned Minutes;
|
unsigned Minutes;
|
||||||
|
|
||||||
/***** Get day (0: monday, 1: tuesday,..., 6: sunday *****/
|
/***** Get day (0: monday, 1: tuesday,..., 6: sunday *****/
|
||||||
Gbl.TimeTable.Day = (unsigned)
|
Gbl.TimeTable.Weekday = (unsigned)
|
||||||
Par_GetParToUnsignedLong ("ModTTDay",
|
Par_GetParToUnsignedLong ("ModTTDay",
|
||||||
0,
|
0,
|
||||||
TT_DAYS - 1,
|
TT_DAYS_PER_WEEK - 1,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
/***** Get hour *****/
|
/***** Get hour *****/
|
||||||
Gbl.TimeTable.HourOld = (unsigned)
|
Gbl.TimeTable.Interval = (unsigned)
|
||||||
Par_GetParToUnsignedLong ("ModTTHour",
|
Par_GetParToUnsignedLong ("ModTTHour",
|
||||||
0,
|
0,
|
||||||
TT_HOURS_PER_DAY * 2 - 1,
|
TT_HOURS_PER_DAY * 2 - 1,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
/***** Get number of column *****/
|
/***** Get number of column *****/
|
||||||
Gbl.TimeTable.Column = (unsigned)
|
Gbl.TimeTable.Column = (unsigned)
|
||||||
|
@ -217,7 +199,7 @@ static void TT_GetParamsTimeTable (void)
|
||||||
for (Gbl.TimeTable.ClassType = (TT_ClassType_t) 0;
|
for (Gbl.TimeTable.ClassType = (TT_ClassType_t) 0;
|
||||||
Gbl.TimeTable.ClassType < (TT_ClassType_t) TT_NUM_CLASS_TYPES;
|
Gbl.TimeTable.ClassType < (TT_ClassType_t) TT_NUM_CLASS_TYPES;
|
||||||
Gbl.TimeTable.ClassType++)
|
Gbl.TimeTable.ClassType++)
|
||||||
if (!strcmp (StrClassType,TimeTableStrsClassTypeOldDB[Gbl.TimeTable.ClassType]))
|
if (!strcmp (StrClassType,TimeTableStrsClassTypeDB[Gbl.TimeTable.ClassType]))
|
||||||
break;
|
break;
|
||||||
if (Gbl.TimeTable.ClassType == (TT_ClassType_t) TT_NUM_CLASS_TYPES)
|
if (Gbl.TimeTable.ClassType == (TT_ClassType_t) TT_NUM_CLASS_TYPES)
|
||||||
Lay_ShowErrorAndExit ("Type of timetable cell is missing.");
|
Lay_ShowErrorAndExit ("Type of timetable cell is missing.");
|
||||||
|
@ -226,7 +208,8 @@ static void TT_GetParamsTimeTable (void)
|
||||||
Par_GetParToText ("ModTTDur",StrDuration,TT_MAX_BYTES_STR_DURATION);
|
Par_GetParToText ("ModTTDur",StrDuration,TT_MAX_BYTES_STR_DURATION);
|
||||||
if (sscanf (StrDuration,"%u:%u",&Hours,&Minutes) != 2)
|
if (sscanf (StrDuration,"%u:%u",&Hours,&Minutes) != 2)
|
||||||
Lay_ShowErrorAndExit ("Duration is missing.");
|
Lay_ShowErrorAndExit ("Duration is missing.");
|
||||||
Gbl.TimeTable.DurationOld = Hours * 2 + Minutes / 30;
|
Gbl.TimeTable.DurationNumIntervals = Hours * TT_INTERVALS_PER_HOUR +
|
||||||
|
Minutes / TT_MINUTES_PER_INTERVAL;
|
||||||
|
|
||||||
/***** Get group code *****/
|
/***** Get group code *****/
|
||||||
Gbl.TimeTable.GrpCod = Par_GetParToLong ("ModTTGrpCod");
|
Gbl.TimeTable.GrpCod = Par_GetParToLong ("ModTTGrpCod");
|
||||||
|
@ -485,7 +468,7 @@ static void TT_WriteCrsTimeTableIntoDB (long CrsCod)
|
||||||
TT_MAX_BYTES_PLACE +
|
TT_MAX_BYTES_PLACE +
|
||||||
Grp_MAX_BYTES_GROUP_NAME];
|
Grp_MAX_BYTES_GROUP_NAME];
|
||||||
unsigned Weekday;
|
unsigned Weekday;
|
||||||
unsigned Interval5Minutes;
|
unsigned Interval;
|
||||||
unsigned Hour;
|
unsigned Hour;
|
||||||
unsigned Min;
|
unsigned Min;
|
||||||
unsigned Column;
|
unsigned Column;
|
||||||
|
@ -497,18 +480,18 @@ static void TT_WriteCrsTimeTableIntoDB (long CrsCod)
|
||||||
|
|
||||||
/***** Go across the timetable inserting classes into database *****/
|
/***** Go across the timetable inserting classes into database *****/
|
||||||
for (Weekday = 0;
|
for (Weekday = 0;
|
||||||
Weekday < TT_DAYS;
|
Weekday < TT_DAYS_PER_WEEK;
|
||||||
Weekday++)
|
Weekday++)
|
||||||
for (Interval5Minutes = 0, Hour = TT_START_HOUR, Min = 0;
|
for (Interval = 0, Hour = TT_START_HOUR, Min = 0;
|
||||||
Interval5Minutes < TT_INTERVALS_5_MINUTES_PER_DAY;
|
Interval < TT_INTERVALS_PER_DAY;
|
||||||
Interval5Minutes++,
|
Interval++,
|
||||||
Hour += (Min + 5) / TT_SECONDS_IN_1_MINUTE,
|
Hour += (Min + TT_MINUTES_PER_INTERVAL) / TT_SECONDS_PER_MINUTE,
|
||||||
Min = (Min + 5) % TT_SECONDS_IN_1_MINUTE)
|
Min = (Min + TT_MINUTES_PER_INTERVAL) % TT_SECONDS_PER_MINUTE)
|
||||||
for (Column = 0;
|
for (Column = 0;
|
||||||
Column < TT_MAX_COLUMNS_PER_CELL;
|
Column < TT_MAX_COLUMNS_PER_CELL;
|
||||||
Column++)
|
Column++)
|
||||||
if (TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].HourType == TT_FIRST_HOUR &&
|
if (TT_TimeTable[Weekday][Interval].Columns[Column].IntervalType == TT_FIRST_INTERVAL &&
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].DurationNumIntervals5Minutes)
|
TT_TimeTable[Weekday][Interval].Columns[Column].DurationNumIntervals)
|
||||||
{
|
{
|
||||||
sprintf (Query,"INSERT INTO timetable_crs"
|
sprintf (Query,"INSERT INTO timetable_crs"
|
||||||
" (CrsCod,GrpCod,Weekday,StartTime,Duration,"
|
" (CrsCod,GrpCod,Weekday,StartTime,Duration,"
|
||||||
|
@ -517,13 +500,13 @@ static void TT_WriteCrsTimeTableIntoDB (long CrsCod)
|
||||||
" (%ld,%ld,%u,'%02u:%02u:00',SEC_TO_TIME(%u),"
|
" (%ld,%ld,%u,'%02u:%02u:00',SEC_TO_TIME(%u),"
|
||||||
"'%s','%s','%s')",
|
"'%s','%s','%s')",
|
||||||
CrsCod,
|
CrsCod,
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].GrpCod,
|
TT_TimeTable[Weekday][Interval].Columns[Column].GrpCod,
|
||||||
Weekday,
|
Weekday,
|
||||||
Hour,Min,
|
Hour,Min,
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].DurationNumIntervals5Minutes * TT_SECONDS_IN_5_MINUTES,
|
TT_TimeTable[Weekday][Interval].Columns[Column].DurationNumIntervals * TT_SECONDS_PER_INTERVAL,
|
||||||
TimeTableStrsClassTypeOldDB[TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].ClassType],
|
TimeTableStrsClassTypeDB[TT_TimeTable[Weekday][Interval].Columns[Column].ClassType],
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].Place,
|
TT_TimeTable[Weekday][Interval].Columns[Column].Place,
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].Group);
|
TT_TimeTable[Weekday][Interval].Columns[Column].Group);
|
||||||
DB_QueryINSERT (Query,"can not create course timetable");
|
DB_QueryINSERT (Query,"can not create course timetable");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -537,7 +520,7 @@ static void TT_WriteTutTimeTableIntoDB (long UsrCod)
|
||||||
char Query[512 +
|
char Query[512 +
|
||||||
TT_MAX_BYTES_PLACE];
|
TT_MAX_BYTES_PLACE];
|
||||||
unsigned Weekday;
|
unsigned Weekday;
|
||||||
unsigned Interval5Minutes;
|
unsigned Interval;
|
||||||
unsigned Hour;
|
unsigned Hour;
|
||||||
unsigned Min;
|
unsigned Min;
|
||||||
unsigned Column;
|
unsigned Column;
|
||||||
|
@ -549,18 +532,18 @@ static void TT_WriteTutTimeTableIntoDB (long UsrCod)
|
||||||
|
|
||||||
/***** Loop over timetable *****/
|
/***** Loop over timetable *****/
|
||||||
for (Weekday = 0;
|
for (Weekday = 0;
|
||||||
Weekday < TT_DAYS;
|
Weekday < TT_DAYS_PER_WEEK;
|
||||||
Weekday++)
|
Weekday++)
|
||||||
for (Interval5Minutes = 0, Hour = TT_START_HOUR, Min = 0;
|
for (Interval = 0, Hour = TT_START_HOUR, Min = 0;
|
||||||
Interval5Minutes < TT_INTERVALS_5_MINUTES_PER_DAY;
|
Interval < TT_INTERVALS_PER_DAY;
|
||||||
Interval5Minutes++,
|
Interval++,
|
||||||
Hour += (Min + 5) / TT_SECONDS_IN_1_MINUTE,
|
Hour += (Min + TT_MINUTES_PER_INTERVAL) / TT_SECONDS_PER_MINUTE,
|
||||||
Min = (Min + 5) % TT_SECONDS_IN_1_MINUTE)
|
Min = (Min + TT_MINUTES_PER_INTERVAL) % TT_SECONDS_PER_MINUTE)
|
||||||
for (Column = 0;
|
for (Column = 0;
|
||||||
Column < TT_MAX_COLUMNS_PER_CELL;
|
Column < TT_MAX_COLUMNS_PER_CELL;
|
||||||
Column++)
|
Column++)
|
||||||
if (TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].HourType == TT_FIRST_HOUR &&
|
if (TT_TimeTable[Weekday][Interval].Columns[Column].IntervalType == TT_FIRST_INTERVAL &&
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].DurationNumIntervals5Minutes)
|
TT_TimeTable[Weekday][Interval].Columns[Column].DurationNumIntervals)
|
||||||
{
|
{
|
||||||
sprintf (Query,"INSERT INTO timetable_tut"
|
sprintf (Query,"INSERT INTO timetable_tut"
|
||||||
" (UsrCod,Weekday,StartTime,Duration,Place)"
|
" (UsrCod,Weekday,StartTime,Duration,Place)"
|
||||||
|
@ -569,8 +552,8 @@ static void TT_WriteTutTimeTableIntoDB (long UsrCod)
|
||||||
UsrCod,
|
UsrCod,
|
||||||
Weekday,
|
Weekday,
|
||||||
Hour,Min,
|
Hour,Min,
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].DurationNumIntervals5Minutes * TT_SECONDS_IN_5_MINUTES,
|
TT_TimeTable[Weekday][Interval].Columns[Column].DurationNumIntervals * TT_SECONDS_PER_INTERVAL,
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].Place);
|
TT_TimeTable[Weekday][Interval].Columns[Column].Place);
|
||||||
DB_QueryINSERT (Query,"can not create office timetable");
|
DB_QueryINSERT (Query,"can not create office timetable");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -588,9 +571,9 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
unsigned long NumRow;
|
unsigned long NumRow;
|
||||||
unsigned long NumRows;
|
unsigned long NumRows;
|
||||||
unsigned Weekday;
|
unsigned Weekday;
|
||||||
unsigned Interval5Minutes;
|
unsigned Interval;
|
||||||
unsigned Interv;
|
unsigned I;
|
||||||
unsigned DurationNumIntervals5Minutes;
|
unsigned DurationNumIntervals;
|
||||||
unsigned Column;
|
unsigned Column;
|
||||||
unsigned Seconds;
|
unsigned Seconds;
|
||||||
unsigned FirstFreeColumn;
|
unsigned FirstFreeColumn;
|
||||||
|
@ -602,24 +585,24 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
|
|
||||||
/***** Initialize timetable to all free *****/
|
/***** Initialize timetable to all free *****/
|
||||||
for (Weekday = 0;
|
for (Weekday = 0;
|
||||||
Weekday < TT_DAYS;
|
Weekday < TT_DAYS_PER_WEEK;
|
||||||
Weekday++)
|
Weekday++)
|
||||||
for (Interval5Minutes = 0;
|
for (Interval = 0;
|
||||||
Interval5Minutes < TT_INTERVALS_5_MINUTES_PER_DAY;
|
Interval < TT_INTERVALS_PER_DAY;
|
||||||
Interval5Minutes++)
|
Interval++)
|
||||||
{
|
{
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].NumColumns = 0;
|
TT_TimeTable[Weekday][Interval].NumColumns = 0;
|
||||||
for (Column = 0;
|
for (Column = 0;
|
||||||
Column < TT_MAX_COLUMNS_PER_CELL;
|
Column < TT_MAX_COLUMNS_PER_CELL;
|
||||||
Column++)
|
Column++)
|
||||||
{
|
{
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].CrsCod = -1L;
|
TT_TimeTable[Weekday][Interval].Columns[Column].CrsCod = -1L;
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].GrpCod = -1L;
|
TT_TimeTable[Weekday][Interval].Columns[Column].GrpCod = -1L;
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].HourType = TT_FREE_HOUR;
|
TT_TimeTable[Weekday][Interval].Columns[Column].IntervalType = TT_FREE_INTERVAL;
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].ClassType = TT_FREE;
|
TT_TimeTable[Weekday][Interval].Columns[Column].ClassType = TT_FREE;
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].DurationNumIntervals5Minutes = 0;
|
TT_TimeTable[Weekday][Interval].Columns[Column].DurationNumIntervals = 0;
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].Group[0] = '\0';
|
TT_TimeTable[Weekday][Interval].Columns[Column].Group[0] = '\0';
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].Place[0] = '\0';
|
TT_TimeTable[Weekday][Interval].Columns[Column].Place[0] = '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -779,23 +762,23 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
|
|
||||||
/* Day of week (row[0]) */
|
/* Day of week (row[0]) */
|
||||||
if (sscanf (row[0],"%u",&Weekday) == 1)
|
if (sscanf (row[0],"%u",&Weekday) == 1)
|
||||||
if (Weekday >= TT_DAYS)
|
if (Weekday >= TT_DAYS_PER_WEEK)
|
||||||
Lay_ShowErrorAndExit ("Wrong day of week in timetable.");
|
Lay_ShowErrorAndExit ("Wrong day of week in timetable.");
|
||||||
|
|
||||||
/* StartTime formatted as seconds (row[1])
|
/* StartTime formatted as seconds (row[1])
|
||||||
--> StartTime in number of intervals of 5 minutes */
|
--> StartTime in number of intervals */
|
||||||
if (sscanf (row[1],"%u",&Seconds) != 1)
|
if (sscanf (row[1],"%u",&Seconds) != 1)
|
||||||
Lay_ShowErrorAndExit ("Wrong hour in timetable.");
|
Lay_ShowErrorAndExit ("Wrong hour in timetable.");
|
||||||
Interval5Minutes = Seconds / TT_SECONDS_IN_1_MINUTE;
|
Interval = Seconds / TT_SECONDS_PER_MINUTE;
|
||||||
if (Interval5Minutes < TT_INTERVALS_5_MINUTES_BEFORE_START_HOUR)
|
if (Interval < TT_INTERVALS_BEFORE_START_HOUR)
|
||||||
Lay_ShowErrorAndExit ("Wrong hour in timetable.");
|
Lay_ShowErrorAndExit ("Wrong hour in timetable.");
|
||||||
Interval5Minutes -= TT_INTERVALS_5_MINUTES_BEFORE_START_HOUR;
|
Interval -= TT_INTERVALS_BEFORE_START_HOUR;
|
||||||
|
|
||||||
/* Duration formatted as seconds (row[2])
|
/* Duration formatted as seconds (row[2])
|
||||||
--> Duration in number of intervals of 5 minutes */
|
--> Duration in number of intervals */
|
||||||
if (sscanf (row[2],"%u",&Seconds) != 1)
|
if (sscanf (row[2],"%u",&Seconds) != 1)
|
||||||
Lay_ShowErrorAndExit ("Wrong duration in timetable.");
|
Lay_ShowErrorAndExit ("Wrong duration in timetable.");
|
||||||
DurationNumIntervals5Minutes = Seconds / TT_SECONDS_IN_5_MINUTES;
|
DurationNumIntervals = Seconds / TT_SECONDS_PER_INTERVAL;
|
||||||
|
|
||||||
/* Type of class (row[4]) */
|
/* Type of class (row[4]) */
|
||||||
switch (Gbl.TimeTable.Type)
|
switch (Gbl.TimeTable.Type)
|
||||||
|
@ -819,7 +802,7 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cell has been read without errors */
|
/* Cell has been read without errors */
|
||||||
if (TT_TimeTable[Weekday][Interval5Minutes].NumColumns < TT_MAX_COLUMNS_PER_CELL)
|
if (TT_TimeTable[Weekday][Interval].NumColumns < TT_MAX_COLUMNS_PER_CELL)
|
||||||
// If there's place for another column in this cell...
|
// If there's place for another column in this cell...
|
||||||
{
|
{
|
||||||
/* Find the first free column for this day-hour */
|
/* Find the first free column for this day-hour */
|
||||||
|
@ -827,7 +810,7 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
for (Column = 0;
|
for (Column = 0;
|
||||||
Column < TT_MAX_COLUMNS_PER_CELL;
|
Column < TT_MAX_COLUMNS_PER_CELL;
|
||||||
Column++)
|
Column++)
|
||||||
if (TT_TimeTable[Weekday][Interval5Minutes].Columns[Column].HourType == TT_FREE_HOUR)
|
if (TT_TimeTable[Weekday][Interval].Columns[Column].IntervalType == TT_FREE_INTERVAL)
|
||||||
{
|
{
|
||||||
FirstFreeColumn = Column;
|
FirstFreeColumn = Column;
|
||||||
break;
|
break;
|
||||||
|
@ -837,11 +820,11 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
{
|
{
|
||||||
/* Check if there's place for all the rows of this class */
|
/* Check if there's place for all the rows of this class */
|
||||||
TimeTableHasSpaceForThisClass = true;
|
TimeTableHasSpaceForThisClass = true;
|
||||||
for (Interv = Interval5Minutes + 1;
|
for (I = Interval + 1;
|
||||||
Interv < Interval5Minutes + DurationNumIntervals5Minutes &&
|
I < Interval + DurationNumIntervals &&
|
||||||
Interv < TT_INTERVALS_5_MINUTES_PER_DAY;
|
I < TT_INTERVALS_PER_DAY;
|
||||||
Interv++)
|
I++)
|
||||||
if (TT_TimeTable[Weekday][Interv].Columns[FirstFreeColumn].HourType != TT_FREE_HOUR)
|
if (TT_TimeTable[Weekday][I].Columns[FirstFreeColumn].IntervalType != TT_FREE_INTERVAL)
|
||||||
{
|
{
|
||||||
TimeTableIsIncomplete = true;
|
TimeTableIsIncomplete = true;
|
||||||
TimeTableHasSpaceForThisClass = false;
|
TimeTableHasSpaceForThisClass = false;
|
||||||
|
@ -849,16 +832,16 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
}
|
}
|
||||||
if (TimeTableHasSpaceForThisClass)
|
if (TimeTableHasSpaceForThisClass)
|
||||||
{
|
{
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[FirstFreeColumn].ClassType = ClassType;
|
TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].ClassType = ClassType;
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[FirstFreeColumn].DurationNumIntervals5Minutes = DurationNumIntervals5Minutes;
|
TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].DurationNumIntervals = DurationNumIntervals;
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[FirstFreeColumn].HourType = TT_FIRST_HOUR;
|
TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].IntervalType = TT_FIRST_INTERVAL;
|
||||||
for (Interv = Interval5Minutes + 1;
|
for (I = Interval + 1;
|
||||||
Interv < Interval5Minutes + DurationNumIntervals5Minutes &&
|
I < Interval + DurationNumIntervals &&
|
||||||
Interv < TT_HOURS_PER_DAY * 2;
|
I < TT_HOURS_PER_DAY * 2;
|
||||||
Interv++)
|
I++)
|
||||||
{
|
{
|
||||||
TT_TimeTable[Weekday][Interv].Columns[FirstFreeColumn].HourType = TT_NEXT_HOUR;
|
TT_TimeTable[Weekday][I].Columns[FirstFreeColumn].IntervalType = TT_NEXT_INTERVAL;
|
||||||
TT_TimeTable[Weekday][Interv].NumColumns++;
|
TT_TimeTable[Weekday][I].NumColumns++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Course (row[7]), group (row[5]) and place (row[3])*/
|
/* Course (row[7]), group (row[5]) and place (row[3])*/
|
||||||
|
@ -866,23 +849,23 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
{
|
{
|
||||||
case TT_MY_TIMETABLE:
|
case TT_MY_TIMETABLE:
|
||||||
case TT_COURSE_TIMETABLE:
|
case TT_COURSE_TIMETABLE:
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[FirstFreeColumn].CrsCod =
|
TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].CrsCod =
|
||||||
(Gbl.TimeTable.Type == TT_MY_TIMETABLE ? Str_ConvertStrCodToLongCod (row[7]) :
|
(Gbl.TimeTable.Type == TT_MY_TIMETABLE ? Str_ConvertStrCodToLongCod (row[7]) :
|
||||||
Gbl.CurrentCrs.Crs.CrsCod);
|
Gbl.CurrentCrs.Crs.CrsCod);
|
||||||
Str_Copy (TT_TimeTable[Weekday][Interval5Minutes].Columns[FirstFreeColumn].Group,
|
Str_Copy (TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].Group,
|
||||||
row[5],
|
row[5],
|
||||||
Grp_MAX_BYTES_GROUP_NAME);
|
Grp_MAX_BYTES_GROUP_NAME);
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].Columns[FirstFreeColumn].GrpCod = GrpCod;
|
TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].GrpCod = GrpCod;
|
||||||
// no break;
|
// no break;
|
||||||
case TT_TUTORING_TIMETABLE:
|
case TT_TUTORING_TIMETABLE:
|
||||||
Str_Copy (TT_TimeTable[Weekday][Interval5Minutes].Columns[FirstFreeColumn].Place,
|
Str_Copy (TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].Place,
|
||||||
row[3],
|
row[3],
|
||||||
TT_MAX_BYTES_PLACE);
|
TT_MAX_BYTES_PLACE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Increment number of items in this cell */
|
/* Increment number of items in this cell */
|
||||||
TT_TimeTable[Weekday][Interval5Minutes].NumColumns++;
|
TT_TimeTable[Weekday][Interval].NumColumns++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -905,31 +888,32 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
|
|
||||||
static void TT_ModifTimeTable (void)
|
static void TT_ModifTimeTable (void)
|
||||||
{
|
{
|
||||||
if (TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].HourType == TT_FIRST_HOUR)
|
if (TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].IntervalType == TT_FIRST_INTERVAL)
|
||||||
{
|
{
|
||||||
/***** Free this cell *****/
|
/***** Free this cell *****/
|
||||||
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].GrpCod = -1;
|
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].GrpCod = -1;
|
||||||
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].HourType = TT_FREE_HOUR;
|
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].IntervalType = TT_FREE_INTERVAL;
|
||||||
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].ClassType = TT_FREE;
|
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].ClassType = TT_FREE;
|
||||||
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].DurationOld = 0;
|
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].DurationNumIntervals = 0;
|
||||||
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].Group[0] = '\0';
|
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].Group[0] = '\0';
|
||||||
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].Place[0] = '\0';
|
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].Place[0] = '\0';
|
||||||
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].NumColumns--;
|
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].NumColumns--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Gbl.TimeTable.ClassType != TT_FREE && Gbl.TimeTable.DurationOld > 0 &&
|
if (Gbl.TimeTable.ClassType != TT_FREE &&
|
||||||
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].NumColumns < TT_MAX_COLUMNS_PER_CELL)
|
Gbl.TimeTable.DurationNumIntervals > 0 &&
|
||||||
|
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].NumColumns < TT_MAX_COLUMNS_PER_CELL)
|
||||||
{
|
{
|
||||||
/***** Change this cell *****/
|
/***** Change this cell *****/
|
||||||
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].NumColumns++;
|
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].NumColumns++;
|
||||||
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].GrpCod = Gbl.TimeTable.GrpCod;
|
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].GrpCod = Gbl.TimeTable.GrpCod;
|
||||||
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].HourType = TT_FIRST_HOUR;
|
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].IntervalType = TT_FIRST_INTERVAL;
|
||||||
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].ClassType = Gbl.TimeTable.ClassType;
|
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].ClassType = Gbl.TimeTable.ClassType;
|
||||||
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].DurationOld = Gbl.TimeTable.DurationOld;
|
TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].DurationNumIntervals = Gbl.TimeTable.DurationNumIntervals;
|
||||||
Str_Copy (TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].Group,
|
Str_Copy (TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].Group,
|
||||||
Gbl.TimeTable.Group,
|
Gbl.TimeTable.Group,
|
||||||
Grp_MAX_BYTES_GROUP_NAME);
|
Grp_MAX_BYTES_GROUP_NAME);
|
||||||
Str_Copy (TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].Place,
|
Str_Copy (TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].Place,
|
||||||
Gbl.TimeTable.Place,
|
Gbl.TimeTable.Place,
|
||||||
TT_MAX_BYTES_PLACE);
|
TT_MAX_BYTES_PLACE);
|
||||||
}
|
}
|
||||||
|
@ -943,10 +927,10 @@ static void TT_DrawTimeTable (void)
|
||||||
{
|
{
|
||||||
bool Editing = false;
|
bool Editing = false;
|
||||||
unsigned DayColumn; // Column from left (0) to right (6)
|
unsigned DayColumn; // Column from left (0) to right (6)
|
||||||
unsigned Day; // Day of week
|
unsigned Weekday; // Day of week
|
||||||
unsigned HourOld;
|
unsigned Interval;
|
||||||
unsigned Min;
|
unsigned Min;
|
||||||
unsigned H;
|
unsigned I;
|
||||||
unsigned Column;
|
unsigned Column;
|
||||||
unsigned ColumnsToDraw;
|
unsigned ColumnsToDraw;
|
||||||
unsigned ColumnsToDrawIncludingExtraColumn;
|
unsigned ColumnsToDrawIncludingExtraColumn;
|
||||||
|
@ -996,36 +980,38 @@ static void TT_DrawTimeTable (void)
|
||||||
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
|
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
|
||||||
|
|
||||||
/***** Write the table row by row *****/
|
/***** Write the table row by row *****/
|
||||||
for (HourOld = 0, Min = 5;
|
for (Interval = 0, Min = TT_MINUTES_PER_INTERVAL;
|
||||||
HourOld < TT_HOURS_PER_DAY * TT_INTERVALS_5_MINUTES_PER_HOUR;
|
Interval < TT_INTERVALS_PER_DAY;
|
||||||
HourOld++, Min = (Min + 5) % TT_SECONDS_IN_1_MINUTE)
|
Interval++, Min = (Min + TT_MINUTES_PER_INTERVAL) % TT_SECONDS_PER_MINUTE)
|
||||||
{
|
{
|
||||||
fprintf (Gbl.F.Out,"<tr>");
|
fprintf (Gbl.F.Out,"<tr>");
|
||||||
|
|
||||||
/* HourOld */
|
/* Left hour:minutes cell */
|
||||||
if (HourOld % 2)
|
if (Interval % 2)
|
||||||
TT_TimeTableDrawHourCell (TT_START_HOUR + (HourOld + 2) / TT_INTERVALS_5_MINUTES_PER_HOUR,Min,"RIGHT_MIDDLE");
|
TT_TimeTableDrawHourCell (TT_START_HOUR + (Interval + 2) / TT_INTERVALS_PER_HOUR,
|
||||||
|
Min,
|
||||||
|
"RIGHT_MIDDLE");
|
||||||
|
|
||||||
/* Empty column used to adjust height */
|
/* Empty column used to adjust height */
|
||||||
TT_DrawCellAlignTimeTable ();
|
TT_DrawCellAlignTimeTable ();
|
||||||
|
|
||||||
/* Row for this hour */
|
/* Row for this hour */
|
||||||
for (DayColumn = 0;
|
for (DayColumn = 0;
|
||||||
DayColumn < TT_DAYS;
|
DayColumn < TT_DAYS_PER_WEEK;
|
||||||
DayColumn++)
|
DayColumn++)
|
||||||
{
|
{
|
||||||
/* Day == 0 ==> monday,
|
/* Weekday == 0 ==> monday,
|
||||||
...
|
...
|
||||||
Day == 6 ==> sunday */
|
Weekday == 6 ==> sunday */
|
||||||
Day = (DayColumn + Gbl.Prefs.FirstDayOfWeek) % 7;
|
Weekday = (DayColumn + Gbl.Prefs.FirstDayOfWeek) % 7;
|
||||||
|
|
||||||
/* Check how many colums are needed.
|
/* Check how many colums are needed.
|
||||||
For each item (class) in this hour from left to right, we must check the maximum of columns */
|
For each item (class) in this hour from left to right, we must check the maximum of columns */
|
||||||
for (H = 0;
|
for (I = 0;
|
||||||
H < TT_HOURS_PER_DAY * TT_INTERVALS_5_MINUTES_PER_HOUR;
|
I < TT_INTERVALS_PER_DAY;
|
||||||
H++)
|
I++)
|
||||||
TimeTableHoursChecked[H] = false;
|
TimeTableHoursChecked[I] = false;
|
||||||
ColumnsToDraw = TT_TimeTableCalculateColsToDraw (Day,HourOld);
|
ColumnsToDraw = TT_TimeTableCalculateColsToDraw (Weekday,Interval);
|
||||||
if (!Editing && ColumnsToDraw == 0)
|
if (!Editing && ColumnsToDraw == 0)
|
||||||
ColumnsToDraw = 1;
|
ColumnsToDraw = 1;
|
||||||
ColumnsToDrawIncludingExtraColumn = ColumnsToDraw;
|
ColumnsToDrawIncludingExtraColumn = ColumnsToDraw;
|
||||||
|
@ -1036,36 +1022,41 @@ static void TT_DrawTimeTable (void)
|
||||||
for (Column = 0, ContinuousFreeMinicolumns = 0;
|
for (Column = 0, ContinuousFreeMinicolumns = 0;
|
||||||
Column < ColumnsToDrawIncludingExtraColumn;
|
Column < ColumnsToDrawIncludingExtraColumn;
|
||||||
Column++)
|
Column++)
|
||||||
if (TimeTableOld[Day][HourOld].Columns[Column].HourType == TT_FREE_HOUR)
|
if (TT_TimeTable[Weekday][Interval].Columns[Column].IntervalType == TT_FREE_INTERVAL)
|
||||||
ContinuousFreeMinicolumns += TT_NUM_MINICOLUMNS_PER_DAY / ColumnsToDrawIncludingExtraColumn;
|
ContinuousFreeMinicolumns += TT_NUM_MINICOLUMNS_PER_DAY /
|
||||||
|
ColumnsToDrawIncludingExtraColumn;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (ContinuousFreeMinicolumns)
|
if (ContinuousFreeMinicolumns)
|
||||||
{
|
{
|
||||||
TT_TimeTableDrawCell (Day,HourOld,Column-1,ContinuousFreeMinicolumns,
|
TT_TimeTableDrawCell (Weekday,Interval,Column - 1,ContinuousFreeMinicolumns,
|
||||||
-1L,TT_FREE_HOUR,TT_FREE,0,NULL,-1,NULL);
|
-1L,TT_FREE_INTERVAL,TT_FREE,0,NULL,-1,NULL);
|
||||||
ContinuousFreeMinicolumns = 0;
|
ContinuousFreeMinicolumns = 0;
|
||||||
}
|
}
|
||||||
TT_TimeTableDrawCell (Day,HourOld,Column,TT_NUM_MINICOLUMNS_PER_DAY/ColumnsToDrawIncludingExtraColumn,
|
TT_TimeTableDrawCell (Weekday,Interval,Column,
|
||||||
TimeTableOld[Day][HourOld].Columns[Column].CrsCod,
|
TT_NUM_MINICOLUMNS_PER_DAY /
|
||||||
TimeTableOld[Day][HourOld].Columns[Column].HourType,
|
ColumnsToDrawIncludingExtraColumn,
|
||||||
TimeTableOld[Day][HourOld].Columns[Column].ClassType,
|
TT_TimeTable[Weekday][Interval].Columns[Column].CrsCod,
|
||||||
TimeTableOld[Day][HourOld].Columns[Column].DurationOld,
|
TT_TimeTable[Weekday][Interval].Columns[Column].IntervalType,
|
||||||
TimeTableOld[Day][HourOld].Columns[Column].Group,
|
TT_TimeTable[Weekday][Interval].Columns[Column].ClassType,
|
||||||
TimeTableOld[Day][HourOld].Columns[Column].GrpCod,
|
TT_TimeTable[Weekday][Interval].Columns[Column].DurationNumIntervals,
|
||||||
TimeTableOld[Day][HourOld].Columns[Column].Place);
|
TT_TimeTable[Weekday][Interval].Columns[Column].Group,
|
||||||
|
TT_TimeTable[Weekday][Interval].Columns[Column].GrpCod,
|
||||||
|
TT_TimeTable[Weekday][Interval].Columns[Column].Place);
|
||||||
}
|
}
|
||||||
if (ContinuousFreeMinicolumns)
|
if (ContinuousFreeMinicolumns)
|
||||||
TT_TimeTableDrawCell (Day,HourOld,Column-1,ContinuousFreeMinicolumns,
|
TT_TimeTableDrawCell (Weekday,Interval,Column - 1,ContinuousFreeMinicolumns,
|
||||||
-1L,TT_FREE_HOUR,TT_FREE,0,NULL,-1L,NULL);
|
-1L,TT_FREE_INTERVAL,TT_FREE,0,NULL,-1L,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Empty column used to adjust height */
|
/* Empty column used to adjust height */
|
||||||
TT_DrawCellAlignTimeTable ();
|
TT_DrawCellAlignTimeTable ();
|
||||||
|
|
||||||
/* HourOld */
|
/* Right hour:minutes cell */
|
||||||
if (HourOld % 2)
|
if (Interval % 2)
|
||||||
TT_TimeTableDrawHourCell (TT_START_HOUR + (HourOld + 2) / TT_INTERVALS_5_MINUTES_PER_HOUR,Min,"LEFT_MIDDLE");
|
TT_TimeTableDrawHourCell (TT_START_HOUR + (Interval + 2) / TT_INTERVALS_PER_HOUR,
|
||||||
|
Min,
|
||||||
|
"LEFT_MIDDLE");
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"</tr>");
|
fprintf (Gbl.F.Out,"</tr>");
|
||||||
}
|
}
|
||||||
|
@ -1095,7 +1086,7 @@ static void TT_DrawTimeTable (void)
|
||||||
|
|
||||||
static void TT_TimeTableDrawAdjustRow (void)
|
static void TT_TimeTableDrawAdjustRow (void)
|
||||||
{
|
{
|
||||||
unsigned Day;
|
unsigned Weekday;
|
||||||
unsigned Minicolumn;
|
unsigned Minicolumn;
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
|
@ -1104,9 +1095,9 @@ static void TT_TimeTableDrawAdjustRow (void)
|
||||||
"</td>",
|
"</td>",
|
||||||
TT_PERCENT_WIDTH_OF_AN_HOUR_COLUMN);
|
TT_PERCENT_WIDTH_OF_AN_HOUR_COLUMN);
|
||||||
TT_DrawCellAlignTimeTable ();
|
TT_DrawCellAlignTimeTable ();
|
||||||
for (Day = 0;
|
for (Weekday = 0;
|
||||||
Day < TT_DAYS;
|
Weekday < TT_DAYS_PER_WEEK;
|
||||||
Day++)
|
Weekday++)
|
||||||
for (Minicolumn = 0;
|
for (Minicolumn = 0;
|
||||||
Minicolumn < TT_NUM_MINICOLUMNS_PER_DAY;
|
Minicolumn < TT_NUM_MINICOLUMNS_PER_DAY;
|
||||||
Minicolumn++)
|
Minicolumn++)
|
||||||
|
@ -1131,23 +1122,23 @@ static void TT_TimeTableDrawDaysCells (void)
|
||||||
{
|
{
|
||||||
extern const char *Txt_DAYS_CAPS[7];
|
extern const char *Txt_DAYS_CAPS[7];
|
||||||
unsigned DayColumn;
|
unsigned DayColumn;
|
||||||
unsigned Day;
|
unsigned Weekday;
|
||||||
|
|
||||||
for (DayColumn = 0;
|
for (DayColumn = 0;
|
||||||
DayColumn < TT_DAYS;
|
DayColumn < TT_DAYS_PER_WEEK;
|
||||||
DayColumn++)
|
DayColumn++)
|
||||||
{
|
{
|
||||||
Day = (DayColumn + Gbl.Prefs.FirstDayOfWeek) % 7;
|
Weekday = (DayColumn + Gbl.Prefs.FirstDayOfWeek) % 7;
|
||||||
fprintf (Gbl.F.Out,"<td colspan=\"%u\""
|
fprintf (Gbl.F.Out,"<td colspan=\"%u\""
|
||||||
" class=\"%s CENTER_MIDDLE\""
|
" class=\"%s CENTER_MIDDLE\""
|
||||||
" style=\"width:%u%%;\">"
|
" style=\"width:%u%%;\">"
|
||||||
"%s"
|
"%s"
|
||||||
"</td>",
|
"</td>",
|
||||||
TT_NUM_MINICOLUMNS_PER_DAY,
|
TT_NUM_MINICOLUMNS_PER_DAY,
|
||||||
Day == 6 ? "TT_SUNDAY" : // Sunday drawn in red
|
Weekday == 6 ? "TT_SUNDAY" : // Sunday drawn in red
|
||||||
"TT_DAY", // Monday to Saturday
|
"TT_DAY", // Monday to Saturday
|
||||||
TT_PERCENT_WIDTH_OF_A_DAY,
|
TT_PERCENT_WIDTH_OF_A_DAY,
|
||||||
Txt_DAYS_CAPS[Day]);
|
Txt_DAYS_CAPS[Weekday]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1155,7 +1146,7 @@ static void TT_TimeTableDrawDaysCells (void)
|
||||||
/****************** Draw cells with day names in a time table ****************/
|
/****************** Draw cells with day names in a time table ****************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void TT_TimeTableDrawHourCell (unsigned HourOld,unsigned Min,const char *Align)
|
static void TT_TimeTableDrawHourCell (unsigned Hour,unsigned Min,const char *Align)
|
||||||
{
|
{
|
||||||
fprintf (Gbl.F.Out,"<td rowspan=\"2\""
|
fprintf (Gbl.F.Out,"<td rowspan=\"2\""
|
||||||
" class=\"TT_HOUR %s %s\""
|
" class=\"TT_HOUR %s %s\""
|
||||||
|
@ -1164,7 +1155,7 @@ static void TT_TimeTableDrawHourCell (unsigned HourOld,unsigned Min,const char *
|
||||||
"TT_HOUR_BIG",
|
"TT_HOUR_BIG",
|
||||||
Align,
|
Align,
|
||||||
TT_PERCENT_WIDTH_OF_AN_HOUR_COLUMN);
|
TT_PERCENT_WIDTH_OF_AN_HOUR_COLUMN);
|
||||||
fprintf (Gbl.F.Out,"%02u",HourOld);
|
fprintf (Gbl.F.Out,"%02u",Hour);
|
||||||
if (Min)
|
if (Min)
|
||||||
fprintf (Gbl.F.Out,":%02u",Min);
|
fprintf (Gbl.F.Out,":%02u",Min);
|
||||||
fprintf (Gbl.F.Out,"</td>");
|
fprintf (Gbl.F.Out,"</td>");
|
||||||
|
@ -1174,51 +1165,51 @@ static void TT_TimeTableDrawHourCell (unsigned HourOld,unsigned Min,const char *
|
||||||
/**** Calculate recursively number of columns to draw for a day and hour *****/
|
/**** Calculate recursively number of columns to draw for a day and hour *****/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static unsigned TT_TimeTableCalculateColsToDraw (unsigned Day,unsigned HourOld)
|
static unsigned TT_TimeTableCalculateColsToDraw (unsigned Weekday,unsigned Interval)
|
||||||
{
|
{
|
||||||
unsigned ColumnsToDraw;
|
unsigned ColumnsToDraw;
|
||||||
unsigned Column;
|
unsigned Column;
|
||||||
unsigned H;
|
unsigned I;
|
||||||
unsigned FirstHour;
|
unsigned FirstHour;
|
||||||
unsigned Cols;
|
unsigned Cols;
|
||||||
|
|
||||||
ColumnsToDraw = TimeTableOld[Day][HourOld].NumColumns;
|
ColumnsToDraw = TT_TimeTable[Weekday][Interval].NumColumns;
|
||||||
|
|
||||||
if (!TimeTableHoursChecked[HourOld])
|
if (!TimeTableHoursChecked[Interval])
|
||||||
{
|
{
|
||||||
TimeTableHoursChecked[HourOld] = true;
|
TimeTableHoursChecked[Interval] = true;
|
||||||
for (Column = 0;
|
for (Column = 0;
|
||||||
Column < TT_MAX_COLUMNS_PER_CELL;
|
Column < TT_MAX_COLUMNS_PER_CELL;
|
||||||
Column++)
|
Column++)
|
||||||
{
|
{
|
||||||
switch (TimeTableOld[Day][HourOld].Columns[Column].HourType)
|
switch (TT_TimeTable[Weekday][Interval].Columns[Column].IntervalType)
|
||||||
{
|
{
|
||||||
case TT_FREE_HOUR:
|
case TT_FREE_INTERVAL:
|
||||||
break;
|
break;
|
||||||
case TT_FIRST_HOUR:
|
case TT_FIRST_INTERVAL:
|
||||||
/* Check from first hour (this one) to last hour searching maximum number of columns */
|
/* Check from first hour (this one) to last hour searching maximum number of columns */
|
||||||
for (H = HourOld + 1;
|
for (I = Interval + 1;
|
||||||
H < HourOld + TimeTableOld[Day][HourOld].Columns[Column].DurationOld;
|
I < Interval + TT_TimeTable[Weekday][Interval].Columns[Column].DurationNumIntervals;
|
||||||
H++)
|
I++)
|
||||||
if (!TimeTableHoursChecked[H])
|
if (!TimeTableHoursChecked[I])
|
||||||
{
|
{
|
||||||
Cols = TT_TimeTableCalculateColsToDraw (Day,H);
|
Cols = TT_TimeTableCalculateColsToDraw (Weekday,I);
|
||||||
if (Cols > ColumnsToDraw)
|
if (Cols > ColumnsToDraw)
|
||||||
ColumnsToDraw = Cols;
|
ColumnsToDraw = Cols;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TT_NEXT_HOUR:
|
case TT_NEXT_INTERVAL:
|
||||||
/* Find first hour for this item (class) */
|
/* Find first hour for this item (class) */
|
||||||
for (FirstHour = HourOld;
|
for (FirstHour = Interval;
|
||||||
TimeTableOld[Day][FirstHour].Columns[Column].HourType == TT_NEXT_HOUR;
|
TT_TimeTable[Weekday][FirstHour].Columns[Column].IntervalType == TT_NEXT_INTERVAL;
|
||||||
FirstHour--);
|
FirstHour--);
|
||||||
/* Check from first hour to last hour searching maximum number of columns */
|
/* Check from first hour to last hour searching maximum number of columns */
|
||||||
for (H = FirstHour;
|
for (I = FirstHour;
|
||||||
H < FirstHour + TimeTableOld[Day][FirstHour].Columns[Column].DurationOld;
|
I < FirstHour + TT_TimeTable[Weekday][FirstHour].Columns[Column].DurationNumIntervals;
|
||||||
H++)
|
I++)
|
||||||
if (!TimeTableHoursChecked[H])
|
if (!TimeTableHoursChecked[I])
|
||||||
{
|
{
|
||||||
Cols = TT_TimeTableCalculateColsToDraw (Day,H);
|
Cols = TT_TimeTableCalculateColsToDraw (Weekday,I);
|
||||||
if (Cols > ColumnsToDraw)
|
if (Cols > ColumnsToDraw)
|
||||||
ColumnsToDraw = Cols;
|
ColumnsToDraw = Cols;
|
||||||
}
|
}
|
||||||
|
@ -1245,9 +1236,9 @@ static void TT_DrawCellAlignTimeTable (void)
|
||||||
/*************************** Write a timetable cell **************************/
|
/*************************** Write a timetable cell **************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,unsigned ColSpan,
|
static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Column,unsigned ColSpan,
|
||||||
long CrsCod,TT_HourType_t HourType,TT_ClassType_t ClassType,
|
long CrsCod,TT_IntervalType_t IntervalType,TT_ClassType_t ClassType,
|
||||||
unsigned DurationOld,char *Group,long GrpCod,char *Place)
|
unsigned DurationNumIntervals,char *Group,long GrpCod,char *Place)
|
||||||
{
|
{
|
||||||
extern const char *Txt_unknown_removed_course;
|
extern const char *Txt_unknown_removed_course;
|
||||||
extern const char *Txt_TIMETABLE_CLASS_TYPES[TT_NUM_CLASS_TYPES];
|
extern const char *Txt_TIMETABLE_CLASS_TYPES[TT_NUM_CLASS_TYPES];
|
||||||
|
@ -1272,7 +1263,7 @@ static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,
|
||||||
struct GroupData GrpDat;
|
struct GroupData GrpDat;
|
||||||
unsigned NumGrpTyp;
|
unsigned NumGrpTyp;
|
||||||
unsigned NumGrp;
|
unsigned NumGrp;
|
||||||
unsigned H;
|
unsigned I;
|
||||||
unsigned Dur;
|
unsigned Dur;
|
||||||
unsigned MaxDuration;
|
unsigned MaxDuration;
|
||||||
unsigned RowSpan = 0;
|
unsigned RowSpan = 0;
|
||||||
|
@ -1280,15 +1271,15 @@ static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,
|
||||||
struct Course Crs;
|
struct Course Crs;
|
||||||
|
|
||||||
/***** Compute row span and background color depending on hour type *****/
|
/***** Compute row span and background color depending on hour type *****/
|
||||||
switch (HourType)
|
switch (IntervalType)
|
||||||
{
|
{
|
||||||
case TT_FREE_HOUR: // Free cell written
|
case TT_FREE_INTERVAL: // Free cell written
|
||||||
RowSpan = 1;
|
RowSpan = 1;
|
||||||
break;
|
break;
|
||||||
case TT_FIRST_HOUR: // Normal cell written
|
case TT_FIRST_INTERVAL: // Normal cell written
|
||||||
RowSpan = DurationOld;
|
RowSpan = DurationNumIntervals;
|
||||||
break;
|
break;
|
||||||
case TT_NEXT_HOUR: // Nothing written
|
case TT_NEXT_INTERVAL: // Nothing written
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1315,7 +1306,7 @@ static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** If group code > 0, a group is selected ==> get group type and name *****/
|
/***** If group code > 0, a group is selected ==> get group type and name *****/
|
||||||
if (HourType == TT_FIRST_HOUR &&
|
if (IntervalType == TT_FIRST_INTERVAL &&
|
||||||
(TimeTableView == TT_CRS_SHOW ||
|
(TimeTableView == TT_CRS_SHOW ||
|
||||||
TimeTableView == TT_CRS_EDIT) &&
|
TimeTableView == TT_CRS_EDIT) &&
|
||||||
GrpCod > 0)
|
GrpCod > 0)
|
||||||
|
@ -1329,7 +1320,7 @@ static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,
|
||||||
fprintf (Gbl.F.Out,"<td rowspan=\"%u\" colspan=\"%u\" class=\"%s",
|
fprintf (Gbl.F.Out,"<td rowspan=\"%u\" colspan=\"%u\" class=\"%s",
|
||||||
RowSpan,ColSpan,TimeTableClasses[ClassType]);
|
RowSpan,ColSpan,TimeTableClasses[ClassType]);
|
||||||
if (ClassType == TT_FREE)
|
if (ClassType == TT_FREE)
|
||||||
fprintf (Gbl.F.Out,"%u",HourOld % 4);
|
fprintf (Gbl.F.Out,"%u",Interval % 4);
|
||||||
fprintf (Gbl.F.Out," CENTER_MIDDLE DAT_SMALL\">");
|
fprintf (Gbl.F.Out," CENTER_MIDDLE DAT_SMALL\">");
|
||||||
|
|
||||||
/***** Form to modify this cell *****/
|
/***** Form to modify this cell *****/
|
||||||
|
@ -1343,7 +1334,7 @@ static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,
|
||||||
{
|
{
|
||||||
case TT_CRS_SHOW:
|
case TT_CRS_SHOW:
|
||||||
case TT_TUT_SHOW:
|
case TT_TUT_SHOW:
|
||||||
if (HourType != TT_FREE_HOUR) // If cell is not empty...
|
if (IntervalType != TT_FREE_INTERVAL) // If cell is not empty...
|
||||||
{
|
{
|
||||||
fprintf (Gbl.F.Out,"<div class=\"TT_CELL TT_TXT\">");
|
fprintf (Gbl.F.Out,"<div class=\"TT_CELL TT_TXT\">");
|
||||||
if (Gbl.TimeTable.Type == TT_MY_TIMETABLE)
|
if (Gbl.TimeTable.Type == TT_MY_TIMETABLE)
|
||||||
|
@ -1358,8 +1349,8 @@ static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,
|
||||||
}
|
}
|
||||||
fprintf (Gbl.F.Out,"%s (%dh%s)",
|
fprintf (Gbl.F.Out,"%s (%dh%s)",
|
||||||
Txt_TIMETABLE_CLASS_TYPES[ClassType],
|
Txt_TIMETABLE_CLASS_TYPES[ClassType],
|
||||||
DurationOld / 2,
|
DurationNumIntervals / 2,
|
||||||
DurationOld % 2 ? "30'" :
|
DurationNumIntervals % 2 ? "30'" :
|
||||||
"");
|
"");
|
||||||
if (TimeTableView == TT_CRS_SHOW)
|
if (TimeTableView == TT_CRS_SHOW)
|
||||||
{
|
{
|
||||||
|
@ -1382,8 +1373,8 @@ static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,
|
||||||
break;
|
break;
|
||||||
case TT_CRS_EDIT:
|
case TT_CRS_EDIT:
|
||||||
case TT_TUT_EDIT:
|
case TT_TUT_EDIT:
|
||||||
Par_PutHiddenParamUnsigned ("ModTTDay",Day);
|
Par_PutHiddenParamUnsigned ("ModTTDay",Weekday);
|
||||||
Par_PutHiddenParamUnsigned ("ModTTHour",HourOld);
|
Par_PutHiddenParamUnsigned ("ModTTHour",Interval);
|
||||||
Par_PutHiddenParamUnsigned ("ModTTCol",Column);
|
Par_PutHiddenParamUnsigned ("ModTTCol",Column);
|
||||||
|
|
||||||
/***** Class type *****/
|
/***** Class type *****/
|
||||||
|
@ -1401,19 +1392,19 @@ static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,
|
||||||
if (CT == ClassType)
|
if (CT == ClassType)
|
||||||
fprintf (Gbl.F.Out," selected=\"selected\"");
|
fprintf (Gbl.F.Out," selected=\"selected\"");
|
||||||
fprintf (Gbl.F.Out," value=\"%s\">%s</option>",
|
fprintf (Gbl.F.Out," value=\"%s\">%s</option>",
|
||||||
TimeTableStrsClassTypeOldDB[CT],
|
TimeTableStrsClassTypeDB[CT],
|
||||||
Txt_TIMETABLE_CLASS_TYPES[CT]);
|
Txt_TIMETABLE_CLASS_TYPES[CT]);
|
||||||
}
|
}
|
||||||
fprintf (Gbl.F.Out,"</select>");
|
fprintf (Gbl.F.Out,"</select>");
|
||||||
if (HourType == TT_FREE_HOUR)
|
if (IntervalType == TT_FREE_INTERVAL)
|
||||||
{
|
{
|
||||||
fprintf (Gbl.F.Out,"<input type=\"hidden\" name=\"ModTTDur\" value=\"");
|
fprintf (Gbl.F.Out,"<input type=\"hidden\" name=\"ModTTDur\" value=\"");
|
||||||
for (H = HourOld + 1;
|
for (I = Interval + 1;
|
||||||
H < TT_HOURS_PER_DAY * 2;
|
I < TT_HOURS_PER_DAY * 2;
|
||||||
H++)
|
I++)
|
||||||
if (TimeTableOld[Day][H].NumColumns == TT_MAX_COLUMNS_PER_CELL)
|
if (TT_TimeTable[Weekday][I].NumColumns == TT_MAX_COLUMNS_PER_CELL)
|
||||||
break;
|
break;
|
||||||
MaxDuration = H - HourOld;
|
MaxDuration = I - Interval;
|
||||||
if (MaxDuration > 1)
|
if (MaxDuration > 1)
|
||||||
fprintf (Gbl.F.Out,"1:00");
|
fprintf (Gbl.F.Out,"1:00");
|
||||||
else
|
else
|
||||||
|
@ -1426,20 +1417,20 @@ static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,
|
||||||
fprintf (Gbl.F.Out,"<select name=\"ModTTDur\" style=\"width:57px;\""
|
fprintf (Gbl.F.Out,"<select name=\"ModTTDur\" style=\"width:57px;\""
|
||||||
" onchange=\"document.getElementById('%s').submit();\">",
|
" onchange=\"document.getElementById('%s').submit();\">",
|
||||||
Gbl.Form.Id);
|
Gbl.Form.Id);
|
||||||
for (H = HourOld + TimeTableOld[Day][HourOld].Columns[Column].DurationOld;
|
for (I = Interval + TT_TimeTable[Weekday][Interval].Columns[Column].DurationNumIntervals;
|
||||||
H < TT_HOURS_PER_DAY * 2;
|
I < TT_HOURS_PER_DAY * 2;
|
||||||
H++)
|
I++)
|
||||||
if (TimeTableOld[Day][H].NumColumns == TT_MAX_COLUMNS_PER_CELL)
|
if (TT_TimeTable[Weekday][I].NumColumns == TT_MAX_COLUMNS_PER_CELL)
|
||||||
break;
|
break;
|
||||||
MaxDuration = H - HourOld;
|
MaxDuration = I - Interval;
|
||||||
if (TimeTableOld[Day][HourOld].Columns[Column].DurationOld > MaxDuration)
|
if (TT_TimeTable[Weekday][Interval].Columns[Column].DurationNumIntervals > MaxDuration)
|
||||||
MaxDuration = TimeTableOld[Day][HourOld].Columns[Column].DurationOld;
|
MaxDuration = TT_TimeTable[Weekday][Interval].Columns[Column].DurationNumIntervals;
|
||||||
for (Dur = 0;
|
for (Dur = 0;
|
||||||
Dur <= MaxDuration;
|
Dur <= MaxDuration;
|
||||||
Dur++)
|
Dur++)
|
||||||
{
|
{
|
||||||
fprintf (Gbl.F.Out,"<option");
|
fprintf (Gbl.F.Out,"<option");
|
||||||
if (Dur == DurationOld)
|
if (Dur == DurationNumIntervals)
|
||||||
fprintf (Gbl.F.Out," selected=\"selected\"");
|
fprintf (Gbl.F.Out," selected=\"selected\"");
|
||||||
fprintf (Gbl.F.Out,">%u:%02u h</option>",
|
fprintf (Gbl.F.Out,">%u:%02u h</option>",
|
||||||
Dur / 2,
|
Dur / 2,
|
||||||
|
|
|
@ -46,10 +46,10 @@ typedef enum
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
TT_FREE_HOUR,
|
TT_FREE_INTERVAL,
|
||||||
TT_FIRST_HOUR,
|
TT_FIRST_INTERVAL,
|
||||||
TT_NEXT_HOUR,
|
TT_NEXT_INTERVAL,
|
||||||
} TT_HourType_t;
|
} TT_IntervalType_t;
|
||||||
|
|
||||||
#define TT_NUM_CLASS_TYPES 4
|
#define TT_NUM_CLASS_TYPES 4
|
||||||
typedef enum
|
typedef enum
|
||||||
|
|
Loading…
Reference in New Issue