J'essaie de réaliser un petit utilitaire, permettant de visualiser les projets sur lesquels j'ai travaillé, afin d'obtenir un diagramme.
Mais je bloque sur un petit soucis, les données sont décalées (par rapport aux mois).
Code : Tout sélectionner
;{ INFOS
; Nom :
; by blendman
; 5.31
; date
;}
;{ Changes
; [21/09/2015] (0.10) (1)
; - UI, window
;}
;{ Enumeration, constantes
#Window_main = 0
#SoftwareName = "Gantt Diagram"
#SoftwareVersion = "0.10"
Enumeration ; gadget
#G_btn
#G_canvas
EndEnumeration
Enumeration ; menu
#menu_open
EndEnumeration
;}
Structure sDate
X_start.i
X_end.i
X_day.i
X_Year.i
X_Month.i
StartDate.i
EndStructure
Structure sProject
Name$
List NewDate.sDate()
Color.i
EndStructure
Global NewList Project.sProject()
Procedure AddNewProject(name$, color=-1)
AddElement(Project())
With Project()
\Name$ = Name$
If color = -1
\Color=RGBA(Random(255),Random(255),Random(255),255)
Else
\Color = color
EndIf
EndWith
EndProcedure
Procedure AddProjectData(name$,startyear,startmonth,startday,endyear,endmonth,endday)
ForEach Project()
If Project()\Name$ = name$
Break
EndIf
Next
AddElement(Project()\NewDate())
With Project()\NewDate()
year = Date(startyear,startmonth,startday,0,0,0)/(60*60*24)
;year1 = Date(startyear,01,01,0,0,0)/(60*60*24)
;\StartDate = Date(startyear,startmonth,startday,0,0,0)/(60*60*24) - year1
\X_start = Date(startyear,startmonth,startday,0,0,0)/(60*60*24) - year
\X_end = (Date(endyear,endmonth,endday,0,0,0)/(60*60*24) - year) + 1
\X_day = startday
\X_Month = startmonth
\X_Year = startyear
Debug Str(\X_start)+"/"+Str(\X_end)
EndWith
; FormatDate("%dd/%mm/%yyyy", D_start)
EndProcedure
Procedure UpdateCanvas()
If StartDrawing(CanvasOutput(#g_canvas))
Box(0,0,OutputWidth(),OutputHeight(),RGBA(255,255,255,255))
xx = 80
yy = 10
hh = 40
h1 = OutputHeight()-100+10
Month$ = "Jan,Fev,Mars,Avril,Mai,Juin,Juil,Aout,Sept,Oct,Nov,Dec,"
W_month = (OutputWidth()-100)/12
ForEach Project()
x1 = 0
w1 = 0
With project()
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(10,30+hh*i,\Name$,0)
DrawingMode(#PB_2DDrawing_AlphaBlend)
ForEach \NewDate()
Select \NewDate()\X_Month
Case 1,3,5,7,8,10,12
day = 31
Case 2
day = 28
Default
day =30
EndSelect
W_day.d = W_month/Day ; size of one day
DayFinalsize.d = \NewDate()\X_day*W_day -1
x1 = W_month * (\NewDate()\X_Month-1) + DayFinalsize
w = W_day*\NewDate()\X_end
Debug "Taille du mois: "+Str(W_month)+" ("+Str(\NewDate()\X_Month)+") / Nb j: "+StrF(day,3)+" / jour: "+StrF(W_day,3)+" / total: "+Str(w)
Box(xx+x1,yy+i*hh,w,hh,\color)
Line(xx,yy+i*hh,OutputWidth()-100,1,RGBA(120,120,120,125)) ; line horizontal
Next
EndWith
i+1
Next
; the last line
Line(xx,yy+i*hh,OutputWidth()-100,1,RGBA(120,120,120,125))
For i = 0 To 12 ; for the months
DrawingMode(#PB_2DDrawing_AlphaBlend)
Line(xx+W_month*i,10,1,OutputHeight()-100,RGBA(200,200,200,255))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(xx+W_month*i,h1,StringField(Month$,i+1,","),0)
Next
Line(xx,10,1,OutputHeight()-100,RGBA(0,0,0,255))
Line(xx,h1,OutputWidth()-100,1,RGBA(0,0,0,255)) ; line hor
StopDrawing()
EndIf
EndProcedure
flag = #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget
w = 1024
h = 768
If OpenWindow(#Window_main,0,0,w,h, #SoftwareName + " " + #SoftwareVersion, Flag)
;{ menu
If CreateMenu(0, WindowID(0))
MenuTitle("File")
MenuItem(#menu_open, "Open")
EndIf
;}
;{ Gadget
XX = 50
If CanvasGadget(#G_canvas,xx,0,WindowWidth(#Window_main)-xx-10,WindowHeight(#Window_main))
; test add some data:
AddNewProject("Projet1")
AddProjectData("Projet1",2014,05,01,2014,05,31)
AddProjectData("Projet1",2014,06,12,2014,06,28)
AddProjectData("Projet1",2014,07,02,2014,07,13)
AddNewProject("Projet2")
AddProjectData("Projet2",2014,01,01,2014,02,17)
AddProjectData("Projet2",2014,03,08,2014,03,28)
UpdateCanvas()
EndIf
;}
EndIf
Repeat
Repeat
EventID = WindowEvent()
EventGadget = EventGadget()
EventMenu = EventMenu()
EventWindow = EventWindow()
Select EventID
Case #PB_Event_Menu
;{ menu
Select EventMenu
EndSelect
;}
Case #PB_Event_SizeWindow
Case #PB_Event_Gadget
;{ gadget
Select EventGadget
EndSelect
;}
Case #PB_Event_CloseWindow
quit = 1
EndSelect
Until event = 0 Or quit = 1
Until Quit = 1
Merci.
EDIT : j'ai corrigé un peu le code, ça commence à être mieux, mais ce n'est pas encore ça ^^
EDIT 2 : bon, j'ai corrigé d'autres choses et je crois que ça fonctionne plutôt correctement maintenant. J'ai donc indiqué résolu dans 'lentête, je laisse le code pour ceux que ça intéresse
