Page 1 of 1

Flexgrid Version .5 alpha

Posted: Thu Jan 29, 2004 7:21 am
by localmotion34
Code updated for 5.20+

ok here is my yet again updated attempt. ive removed the lockcolumn size, and added HIGHLIGHTING of events, saving and opening flexgrid files, and the saving of notes typed in the "notes" box. NOTE NOTE::: in order to get the info window to pop up you have to RIGHT CLICK on the listicon gadget. cant seem to separate left click and left double click with this code. copy and paste the code and give it a go. it works on XP. i know the code isnt the most optimized, but it seems to work really well. comments and additions are welcome. i hope you guys can really use this.

Code: Select all

; PureBasic Visual Designer v3.81 BETA build 1302 

Global listiconnumber,clickedlisticon,currentitemselection,eventname$,totaleventitems 

;- Window Constants 
Enumeration 
  #Window_0 
  #Window_1 
EndEnumeration 

;- Gadget Constants 
Enumeration 
  #Button_0 
  #Button_1 
  #Combo_0 
  #Combo_1 
  #Text_0 
  #Text_1 
  #String_0 
  #Text_3 
  #Editor_0 
  #Text_5 
  #ScrollArea_1 
EndEnumeration 

Global Dim flexgriddata1.s(48)
Global Dim flexgriddata2.s(48)
Global Dim flexgriddata3.s(48)
Global Dim flexgriddata4.s(48)
Global Dim flexgriddata5.s(48)
Global Dim flexgriddata6.s(48)
Global Dim flexgriddata7.s(48)

Global Dim notesdata1.s(48)
Global Dim notesdata2.s(48)
Global Dim notesdata3.s(48)
Global Dim notesdata4.s(48)
Global Dim notesdata5.s(48)
Global Dim notesdata6.s(48)
Global Dim notesdata7.s(48)

Procedure Flexgridgadget(scrollareanumber,flexgridx,flexgridy,flexgridwidth,flexgridheight,scrollwidth,scrollheight)
  ScrollAreaGadget(scrollareanumber, flexgridx, flexgridy, flexgridwidth, flexgridheight, scrollwidth, scrollheight, 10) 
  listiconnumber=scrollareanumber 
  ListIconGadget(listiconnumber+1, 40, 30, 110, 700, "Sunday", 105, #PB_ListIcon_MultiSelect | #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect) 
  ListIconGadget(listiconnumber+2, 150, 30, 110, 700, "Monday", 105, #PB_ListIcon_MultiSelect | #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect) 
  ListIconGadget(listiconnumber+3, 260, 30, 110, 700, "Tuesday", 105, #PB_ListIcon_MultiSelect | #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect) 
  ListIconGadget(listiconnumber+4, 370, 30, 110, 700, "Wednesday", 105, #PB_ListIcon_MultiSelect | #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect) 
  ListIconGadget(listiconnumber+5, 480, 30, 110, 700, "Thursday", 105, #PB_ListIcon_MultiSelect | #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect) 
  ListIconGadget(listiconnumber+6, 590, 30, 110, 700, "Friday", 105, #PB_ListIcon_MultiSelect | #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect) 
  ListIconGadget(listiconnumber+7, 700, 30, 110, 700, "Saturday", 105, #PB_ListIcon_MultiSelect | #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect) 
  ;add text boxes EVERY OTHER ITEM that mark the hours 
  starttimehour=5 
  textgadgetnumber=listiconnumber+7 
  y=25    ;start at height=25 
  For a=listiconnumber+7 To listiconnumber+30 
    y=y+28  ;this value works best to line up boxes with listicon rows 
    textgadgetnumber=textgadgetnumber+1 ;add one to the previous gadget number 
    starttimehour=starttimehour+1 ;add one to the previous hour 
    If starttimehour>=0 And  starttimehour<=11 
      ampm$="am" 
    ElseIf  starttimehour>=12 And  starttimehour<=23 
      ampm$="pm" 
    EndIf 
    If starttimehour=24 ;when we get to midnight, we start all over 
      starttimehour=starttimehour-24 
      ampm$="am" 
      TextGadget(textgadgetnumber,0,y,40,13,Str(starttimehour)+":00"+ampm$) 
    Else 
      TextGadget(textgadgetnumber,0,y,40,13,Str(starttimehour)+":00"+ampm$) 
    EndIf 
  Next 
  For a= listiconnumber+1 To listiconnumber+7   ;now we add empty spaces to the listicons 
    For b=0 To 47 
      AddGadgetItem(a,b,"") 
    Next 
  Next 
EndProcedure 

Procedure Open_Window_0() 
  If OpenWindow(#Window_0, 0, 0, 830, 609, "PB FlexGrid", 
                #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
    Flexgridgadget(#ScrollArea_1,0, 10, 830, 590, 850, 750) 
    CreateMenu(0, WindowID(#Window_0))    ; here the menu creating starts.... 
    MenuTitle("File") 
    MenuItem(1, "Open") 
    MenuItem(2, "Save") 
    MenuItem(3, "Save as") 
    MenuItem(4, "Print") 
  EndIf 
EndProcedure 

Procedure Open_Window_1() ;this is the information window 
  If OpenWindow(#Window_1, 237, 162, 458, 293, "Enter Information",
                #PB_Window_SizeGadget | #PB_Window_ScreenCentered) 
    ButtonGadget(#Button_0, 110, 250, 90, 30, "Enter") 
    ButtonGadget(#Button_1, 240, 250, 90, 30, "Cancel") 
    ComboBoxGadget(#Combo_0, 170, 20, 100, 350) 
    ComboBoxGadget(#Combo_1, 170, 60, 100, 350) 
    TextGadget(#Text_0, 70, 20, 70, 20, "Start:", #PB_Text_Center) 
    TextGadget(#Text_1, 70, 60, 70, 20, "Stop:", #PB_Text_Center) 
    StringGadget(#String_0, 110, 100, 310, 20, "") 
    TextGadget(#Text_3, 40, 100, 70, 20, "Event:", #PB_Text_Center) 
    EditorGadget(#Editor_0, 110, 130, 310, 110) 
    TextGadget(#Text_5, 40, 170, 70, 20, "Notes:", #PB_Text_Center) 
    hour=5 ;here we add all the times to the comboboxes 
    d=-2 
    For a=0 To 23 
      d=d+2 
      hour=hour+1 
      If hour>=0 And  hour<=11 
        ampm$="am" 
      ElseIf  hour>=12 And  hour<=23 
        ampm$="pm" 
      EndIf 
      If hour=24 
        hour=hour-24 
        ampm$="am" 
        AddGadgetItem(#Combo_0,d,Str(hour)+":00"+ampm$) 
        AddGadgetItem(#Combo_0,d+1,Str(hour)+":30"+ampm$) 
      Else 
        AddGadgetItem(#Combo_0,d,Str(hour)+":00"+ampm$) 
        AddGadgetItem(#Combo_0,d+1,Str(hour)+":30"+ampm$) 
      EndIf 
    Next 
    hour=5 ;here we add all the times to the comboboxes 
    d=-2 
    For a=0 To 23 
      d=d+2 
      hour=hour+1 
      If hour>=0 And  hour<=11 
        ampm$="am" 
      ElseIf  hour>=12 And  hour<=23 
        ampm$="pm" 
      EndIf 
      If hour=24 
        hour=hour-24 
        ampm$="am" 
        AddGadgetItem(#Combo_1,d,Str(hour)+":00"+ampm$) 
        AddGadgetItem(#Combo_1,d+1,Str(hour)+":30"+ampm$) 
      Else 
        AddGadgetItem(#Combo_1,d,Str(hour)+":00"+ampm$) 
        AddGadgetItem(#Combo_1,d+1,Str(hour)+":30"+ampm$) 
      EndIf 
    Next 
  EndIf 
EndProcedure 

Procedure writeINI(section.s,key.s,value.s,inifile.s)
  result=WritePrivateProfileString_(section,key,value,inifile)
  ProcedureReturn result
EndProcedure

Procedure.s readINI(section.s,key.s,empty.s,inifile.s)
  result.s=Space(255)
  GetPrivateProfileString_(section,key,empty,@result,255,inifile)
  ProcedureReturn result
EndProcedure 

Procedure saveflexgrid()
  For a=0 To 47
    flexgriddata1(a)=GetGadgetItemText(listiconnumber+1,a,0)
  Next 
  For a=0 To 47
    flexgriddata2(a)=GetGadgetItemText(listiconnumber+2,a,0)
  Next 
  For a=0 To 47
    flexgriddata3(a)=GetGadgetItemText(listiconnumber+3,a,0)
  Next 
  For a=0 To 47
    flexgriddata4(a)=GetGadgetItemText(listiconnumber+4,a,0)
  Next 
  For a=0 To 47
    flexgriddata5(a)=GetGadgetItemText(listiconnumber+5,a,0)
  Next 
  For a=0 To 47
    flexgriddata6(a)=GetGadgetItemText(listiconnumber+6,a,0)
  Next 
  For a=0 To 47
    flexgriddata7(a)=GetGadgetItemText(listiconnumber+7,a,0)
  Next 
  filename$=SaveFileRequester("Choose A Flexgrid File To Save","","Flexgrid|*.fgf",0)
  filepart$=GetExtensionPart(filename$)
  If filepart$="fgf"
    mainfile$=filename$
  Else
    mainfile$=filename$ + ".fgf"
  EndIf
  For a=0 To 47
    writeINI("Sunday",Str(a),flexgriddata1(a),mainfile$)
    writeINI("Sunday","Notes"+Str(a),notesdata1(a),mainfile$)
  Next 
  For a=0 To 47
    writeINI("Monday",Str(a),flexgriddata2(a),mainfile$)
    writeINI("Monday","Notes"+Str(a),notesdata2(a),mainfile$)
  Next 
  For a=0 To 47
    writeINI("Tuesday",Str(a),flexgriddata3(a),mainfile$)
    writeINI("Tuesday","Notes"+Str(a),notesdata3(a),mainfile$)
  Next 
  For a=0 To 47
    writeINI("Wednesday",Str(a),flexgriddata4(a),mainfile$)
    writeINI("Wednesday","Notes"+Str(a),notesdata4(a),mainfile$)
  Next 
  For a=0 To 47
    writeINI("Thursday",Str(a),flexgriddata5(a),mainfile$)
    writeINI("Thursday","Notes"+Str(a),notesdata5(a),mainfile$)
  Next 
  For a=0 To 47
    writeINI("Friday",Str(a),flexgriddata6(a),mainfile$)
    writeINI("Friday","Notes"+Str(a),notesdata6(a),mainfile$)
  Next 
  For a=0 To 47
    writeINI("Saturday",Str(a),flexgriddata7(a),mainfile$)
    writeINI("Saturday","Notes"+Str(a),notesdata7(a),mainfile$)
  Next 
EndProcedure 

Procedure openflexgrid()
  mainfile$=OpenFileRequester("Please Choose A Flexgrid To Open","","Flexgrid|*.fgf",0)
  If mainfile$=""
  Else 
    For a=0 To 47
      sunday$=readINI("Sunday",Str(a),"",mainfile$)
      notesdata1(a)=readINI("Sunday","Notes"+Str(a),"",mainfile$)
      SetGadgetItemText(listiconnumber+1,a,sunday$,0)
    Next 
    For a=0 To 47
      Monday$=readINI("Monday",Str(a),"",mainfile$)
      notesdata2(a)=readINI("Monday","Notes"+Str(a),"",mainfile$)
      SetGadgetItemText(listiconnumber+2,a,Monday$,0)
    Next 
    For a=0 To 47
      Tuesday$=readINI("Tuesday",Str(a),"",mainfile$)
      notesdata3(a)=readINI("Tuesday","Notes"+Str(a),"",mainfile$)
      SetGadgetItemText(listiconnumber+3,a,Tuesday$,0)
    Next 
    For a=0 To 47
      Wednesday$=readINI("Wednesday",Str(a),"",mainfile$)
      notesdata4(a)=readINI("Wednesday","Notes"+Str(a),"",mainfile$)
      SetGadgetItemText(listiconnumber+4,a,Wednesday$,0)
    Next 
    For a=0 To 47
      Thursday$=readINI("Thursday",Str(a),"",mainfile$)
      notesdata5(a)=readINI("Thursday","Notes"+Str(a),"",mainfile$)
      SetGadgetItemText(listiconnumber+5,a,Thursday$,0)
    Next 
    For a=0 To 47
      Friday$=readINI("Friday",Str(a),"",mainfile$)
      notesdata6(a)=readINI("Friday","Notes"+Str(a),"",mainfile$)
      SetGadgetItemText(listiconnumber+6,a,Friday$,0)
    Next 
    For a=0 To 47
      Saturday$=readINI("Saturday",Str(a),"",mainfile$)
      notesdata7(a)=readINI("Saturday","Notes"+Str(a),"",mainfile$)
      SetGadgetItemText(listiconnumber+7,a,Saturday$,0)
    Next 
  EndIf 
EndProcedure 

;-Main Program 
Open_Window_0();open our window 

;-Event Loop 
Repeat 
  Event = WaitWindowEvent() 
  Select Event 
    Case #PB_Event_Gadget
      eventtype=EventType() 
      Select EventType() 
        Case #PB_EventType_LeftClick 
          GadgetID = EventGadget() 
          If GadgetID>=listiconnumber+1 And GadgetID<=listiconnumber+7 
            clickedlisticon=GadgetID 
            currentitemselection=GetGadgetState(clickedlisticon) 
            currentevent$=GetGadgetItemText(clickedlisticon,currentitemselection,0) 
            g=currentitemselection 
            If currentevent$<>"|||||||||||||||||||||||||||||||||||||||||||||||" And currentevent$<>"" 
              Repeat 
                g=g+1 
                currentevent$=GetGadgetItemText(clickedlisticon,g,0) 
                If currentevent$<> "|||||||||||||||||||||||||||||||||||||||||||||||" 
                  Break 
                EndIf 
                SetGadgetItemState(clickedlisticon,g,1) 
              Until currentevent$<> "|||||||||||||||||||||||||||||||||||||||||||||||" 
            ElseIf currentevent$="|||||||||||||||||||||||||||||||||||||||||||||||" 
              g=currentitemselection 
              Repeat 
                g=g+1 
                currentevent$=GetGadgetItemText(clickedlisticon,g,0) 
                If currentevent$= "|||||||||||||||||||||||||||||||||||||||||||||||" 
                  SetGadgetItemState(clickedlisticon,g,1) 
                EndIf 
              Until currentevent$<>"|||||||||||||||||||||||||||||||||||||||||||||||" 
              g=currentitemselection 
              Repeat 
                g=g-1 
                currentevent$=GetGadgetItemText(clickedlisticon,g,0) 
                If currentevent$= "|||||||||||||||||||||||||||||||||||||||||||||||" 
                  SetGadgetItemState(clickedlisticon,g,1) 
                EndIf 
              Until currentevent$<>"|||||||||||||||||||||||||||||||||||||||||||||||" 
              SetGadgetItemState(clickedlisticon,g,1)
            EndIf 
          EndIf 
          Select GadgetID 
            Case #Button_1 
              EnableWindow_(WindowID(#Window_0),#True) 
              HideWindow(#Window_1,1) 
            Case #Button_0 
              timeresult=GetGadgetState(#Combo_0) 
              timeresult1=GetGadgetState(#Combo_1) 
              totaltime=timeresult1-timeresult 
              If totaltime<0 
                MessageRequester("Error","You Specified A Time Range That Goes Backwards",#PB_MessageRequester_Ok) 
              Else 
                EnableWindow_(WindowID(#Window_0),#True) 
                eventname$=GetGadgetText(#String_0) 
                If eventname$="" 
                Else 
                  SetGadgetItemText(clickedlisticon,currentitemselection,eventname$,0) 
                  For f=currentitemselection+1 To currentitemselection+totaltime 
                    SetGadgetItemText(clickedlisticon,f,"|||||||||||||||||||||||||||||||||||||||||||||||",0) 
                  Next 
                  If totaltime<>totaleventitems 
                    itemstoclear=totaleventitems-totaltime 
                    For s=currentitemselection+totaltime+1 To currentitemselection+totaltime+1+itemstoclear 
                      SetGadgetItemText(clickedlisticon,s,"",0) 
                    Next 
                  ElseIf eventname$="" 
                    For s=currentitemselection To totaleventitems 
                      SetGadgetItemText(clickedlisticon,s,"",0) 
                    Next 
                  EndIf 
                EndIf 
                If clickedlisticon=listiconnumber+1
                  notesdata1(currentitemselection)=GetGadgetText(#Editor_0)
                ElseIf clickedlisticon=listiconnumber+2
                  notesdata2(currentitemselection)=GetGadgetText(#Editor_0)
                ElseIf clickedlisticon=listiconnumber+3
                  notesdata3(currentitemselection)=GetGadgetText(#Editor_0)
                ElseIf clickedlisticon=listiconnumber+4
                  notesdata4(currentitemselection)=GetGadgetText(#Editor_0)
                ElseIf clickedlisticon=listiconnumber+5
                  notesdata5(currentitemselection)=GetGadgetText(#Editor_0)
                ElseIf clickedlisticon=listiconnumber+6
                  notesdata6(currentitemselection)=GetGadgetText(#Editor_0)
                ElseIf clickedlisticon=listiconnumber+7
                  notesdata7(currentitemselection)=GetGadgetText(#Editor_0)
                EndIf 
                HideWindow(#Window_1,1) 
              EndIf 
          EndSelect 
        Case #PB_EventType_RightClick 
          GadgetID = EventGadget() 
          If GadgetID>=listiconnumber+1 And GadgetID<=listiconnumber+7 
            clickedlisticon=GadgetID 
            currentitemselection=GetGadgetState(clickedlisticon) 
            currentevent$=GetGadgetItemText(clickedlisticon,currentitemselection,0) 
            g=currentitemselection 
            totaleventitems=1 
            Repeat 
              g=g+1 
              result$=GetGadgetItemText(clickedlisticon,g,0) 
              If result$="|||||||||||||||||||||||||||||||||||||||||||||||" 
                totaleventitems=totaleventitems+1 
              ElseIf result$="" 
                Break 
              EndIf 
            Until result$<>"|||||||||||||||||||||||||||||||||||||||||||||||" 
            If currentevent$="|||||||||||||||||||||||||||||||||||||||||||||||" 
            Else 
              Open_Window_1() 
              SetGadgetState(#Combo_0,currentitemselection) 
              SetGadgetState(#Combo_1,currentitemselection+totaleventitems-1) 
              SetGadgetText(#String_0,currentevent$) 
              If clickedlisticon=listiconnumber+1
                SetGadgetText(#Editor_0,notesdata1(currentitemselection))
              ElseIf clickedlisticon=listiconnumber+2
                SetGadgetText(#Editor_0,notesdata2(currentitemselection))
              ElseIf clickedlisticon=listiconnumber+3
                SetGadgetText(#Editor_0,notesdata3(currentitemselection))
              ElseIf clickedlisticon=listiconnumber+4
                SetGadgetText(#Editor_0,notesdata4(currentitemselection))
              ElseIf clickedlisticon=listiconnumber+5
                SetGadgetText(#Editor_0,notesdata5(currentitemselection))
              ElseIf clickedlisticon=listiconnumber+6
                SetGadgetText(#Editor_0,notesdata6(currentitemselection))
              ElseIf clickedlisticon=listiconnumber+7
                SetGadgetText(#Editor_0,notesdata7(currentitemselection))
              EndIf 
              EnableWindow_(WindowID(#Window_0),#False);user double clicks, and presto--info window pops up 
            EndIf 
          EndIf 
      EndSelect 
    Case #PB_Event_Menu
      eventmenu=EventMenu() 
      Select eventmenu 
        Case 2
          saveflexgrid()
        Case 1
          openflexgrid()
      EndSelect 
  EndSelect 
Until Event = #PB_Event_CloseWindow
have fun and hit me up with some tips and suggestions or additions

Posted: Fri Jan 30, 2004 2:44 am
by einander
Useful, Localmotion34.

Are you using Wn98 or WinMe?
In WinXP, the bottom scroll bar is partially out of the window.

Some hints in
viewtopic.php?t=7911&highlight=size+winxp
Kind regards
Einander

Posted: Fri Jan 30, 2004 6:51 pm
by localmotion34
sorry about that---i think the window size is about 10 pixels too small heightwise. i took the flexgrid idea out of my main program that i am writing and slopped it together as best i could from scratch. anyone out there interested in taking this further, refining it and making a real gadget out of it. i noticed the "outlook gadget" uses the same principle of taking PB gadgets and putting them together into a hybrid gadget. i also tend to take the scenic route when it comes to coding. if anyone can optimize this please do and post it. i think if we are able to make some good hybrid gadgets, we can extend PB alot and have some fun. gotta go patch clamp record on some neurons. 8O .