'  
'-------------------------------------------------------------------------------------  
' MockUp.cba  
'-------------------------------------------------------------------------------------  
AutoDefine "Off"  
$include "windowssdk.inc" 																				/* added */ 
'--------------------------------------------------  
' Defines for catching ENTER key in edit controls:  
'--------------------------------------------------  
SETID "ENMKEYEVENTS",0x10000  
SETID "ENMSGFILTER",0x700  
TYPE MSGFILTER  
 def hwndFrom:INT  
 def idFrom:INT  
 def code:INT  
 def msg:INT  
 def wparam:INT  
 def lparam:INT  
ENDTYPE  
DEF mf:MSGFILTER  
DEF mem:MEMORY  
'--------------------------------------------------  
 openconsole 
DECLARE AddProject(wnd:window, projectname:string, ID:int)  
DECLARE ListProjects(wnd:window,ID:int)  
DECLARE NewItem(wnd:window,path:string,itemname:string)  
DECLARE ListItems(wnd:window,ID:int, projectname:string)  
  
'def LB_RESETCONTENT:int  																				/* deleted */
'CONST LB_RESETCONTENT = 0x184																		/* deleted  wasn't reseting in IWB*/  

def wstyle:int  
  
wstyle = @SIZE|@MINBOX|@MAXBOX  
def win:window    
def cleft,ctop,cwidth,cheight:int 	:'Clientarea  
def run,pcount:int   
def itempath,additem:string   
def selectedproject,newproject,oldproject:string 
selectedproject = "":oldproject ="" 																	/* added */
  
OpenWindow win,-640,0,680,480,wstyle,0,"  CB MockUp",&MainLoop   
GETCLIENTSIZE win,cleft,ctop,cwidth,cheight  
SETWINDOWCOLOR win,RGB(121,150,222)  
drawmode win,@TRANSPARENT   
  
'-------------------------------------------------------------------------------------  
' SETTING UP   
'-------------------------------------------------------------------------------------  
RECT win,33,13,173,56, RGB(96,96,96),RGB(248,216,136)  
RECT win,223,13,173,56,RGB(96,96,96),RGB(248,216,136)  
RECT win,412,13,173,56,RGB(96,96,96),RGB(248,216,136)  
  
CONTROL win,@ComboBox,"Select",40,40,160,202,@CTCOMBODROPDOWN|@VSCROLL,11	:' ComboBox Control
SETCONTROLTEXT win,11,"Select:"     
  
CONTROL win,@ListBox,"",10,85,160,cheight-(10+85),@CTLISTNOTIFY,12			:' ListBox Control
CONTROL win,@Edit,"",180,85,cwidth-190,cheight-(10+85),@CTEDITMULTI|@CTEDITRETURN|@VSCROLL,13	:' Edit Control
  
RECT win,230,40,158,23,0,RGB(102,102,102)	:' Make fake EDIT Control appearance with RE control  
RECT win,231,41,158,23,0,RGB(255,255,255)	:' Make fake EDIT Control appearance with RE control  
CONTROL win,@RichEdit,"",232,43,150,18,@CTEDITLEFT,14
CONTROLCMD win,14,@RTSETEVENTMASK,@ENMKEYEVENTS  
  
RECT win,419,40,158,22,0,RGB(102,102,102)	:' Make fake EDIT Control appearance with RE control  
RECT win,420,41,158,22,0,RGB(255,255,255)	:' Make fake EDIT Control appearance with RE control  
CONTROL win,@RichEdit,"",423,43,150,18,@CTEDITLEFT,15
CONTROLCMD win,15,@RTSETEVENTMASK,@ENMKEYEVENTS  
  
move win,80,20  
FRONTPEN win,RGB(121,150,222)  
print win,"PROJECT"  
move win,270,20  
print win,"NEW  ITEM"  
move win,445,20  
print win,"NEW  PROJECT"  
  
CONTROL win,@Button,"",600,18,49,49,@CTLBTNBITMAP,16
SETCONTROLTEXT win,16,GETSTARTPATH + "info.bmp"    
  
CREATEDIR(GETSTARTPATH + "PROJECTS")  :' Creates Projectfolder if not found  
  
ListProjects(win,11)  
  
run = 1  
  
WAITUNTIL run = 0   
FREEMEM mem  
CLOSEWINDOW win    
END     
  
  
'    
SUB MainLoop(),int    
'-------------------------------------------------------------------------------------    
' Main Loop    
'-------------------------------------------------------------------------------------    
'    
DEF key:int    
SELECT @CLASS     
  
	CASE @IDSIZE                                                              :' Window size has been changed    
		GETCLIENTSIZE win,cleft,ctop,cwidth,cheight                            :' Retreive new window size    
		if CONTROLEXISTS(win,12) then SETSIZE win,10,85,160,cheight-(10+85),12 :' Resize ListBox Control    
		if CONTROLEXISTS(win,13) then SETSIZE win,180,85,cwidth-190,cheight-(10+85),13  :' Resize Edit Control    
  
	CASE @IDCREATE      
		CENTERWINDOW win     
  
	CASE @IDCLOSEWINDOW      
		run = 0      
   
	CASE @IDCONTROL    
		SELECT @CONTROLID    
  
'###############################################################################################  
'###############################################################################################  
' Control ID 11 = ComboBox contains a list of project names    
' Control ID 12 = Listbox  contains a list of project items    
' When selecting a new project from the list with code below,     
' the new list of items are not shown till another control or the window is clicked.    
  
		case 11
			if @NOTIFYCODE = @CBNSELCHANGE																	/* added */
				selectedproject = GETSTRING (win, 11,GETSELECTED (win,11))							/* changed  GETCONTROLTEXT is BIG NONO for combobox*/
 				if selectedproject <> oldproject then 														/* changed */
					SendMessage(win,LB_RESETCONTENT,0,0,12) 
					oldproject = selectedproject															 	/* added */
					ListItems(win,12,selectedproject)
				endif																									/* added */
			endif																										/* added */
 
'###################   THE NEW LIST IS NOT SHOWN UNTIL ANOTHER CONTROL IS CLICKED  ##############  
'###############################################################################################   
  
  
		case 12	:' When selected in ListBox, load selected file for editing   
  
  
		case 13	:' test for any changes in EditControl text  
  
  
		case 14	:' New Item is Entered    
			IF @NOTIFYCODE = @ENMSGFILTER     
            'read in the MSGFILTER structure     
				mem = @QUAL     
				READMEM mem,1,mf     
            'at this point the keyboard event     
            'is in mf.msg and the keyboard code is in mf.wparam     
            'the event can be things like @IDCHAR     
				IF mf.msg = @IDCHAR     
					key = mf.wparam     
					IF (key = 13)   :' ENTER KEY PRESSED    
						selectedproject = GETCONTROLTEXT(win,11)    
						additem = GETCONTROLTEXT(win,14)    
 						if additem <> ""    
							itempath = GETSTARTPATH + "PROJECTS\\" + selectedproject + "\\"    
							NewItem(win,itempath,additem)    
							ADDSTRING win,12,additem + ".txt"    
							SETCONTROLTEXT(win,14,"")    
							additem = ""    
							SETFOCUS win,14	:' Send focus back to the window    
						endif    
					ENDIF    
				ENDIF    
			ENDIF    
  
  
		case 15	:' New project is entered    
			IF @NOTIFYCODE = @ENMSGFILTER     
	         'read in the MSGFILTER structure     
				mem = @QUAL     
				READMEM mem,1,mf     
   	      'at this point the keyboard event     
    	      'is in mf.msg and the keyboard code is in mf.wparam     
     	      'the event can be things like @IDCHAR     
				IF mf.msg = @IDCHAR     
					key = mf.wparam     
					IF (key = 13)   :' ENTER KEY PRESSED    
						newproject = GETCONTROLTEXT(win,15)    
 						if newproject<>"" then AddProject(win,newproject,11)    
							SETCONTROLTEXT(win,15,"")    
							pcount = GETSTRINGCOUNT(win,11)    
							SETSELECTED win,11,pcount-1     
							oldproject = newproject    
							newproject = ""    
						endif    
				ENDIF    
			ENDIF    
  
  
			case 16    
				system GETSTARTPATH + "info.txt"    
			ENDSELECT   
  
ENDSELECT      
RETURN 0
EndSub
'-------------------------------------------------------------------------------------  
  
  
'    
SUB ListProjects(wnd:window,ID:int)    
'-------------------------------------------------------------------------------------    
' Find existing project folders and add them to ComboBox list    
'-------------------------------------------------------------------------------------    
DEF dir:INT    
DEF fname:STRING    
def fdir:string     
fdir = "PROJECTS\\"    
	dir = FINDOPEN(GETSTARTPATH + fdir + "*.*")    
	IF(dir)    
		DO    
			fname = FINDNEXT(dir)    
			if (fname <> ".") & (fname <> "..") &(fname <> "")    
				if CONTROLEXISTS(wnd,ID) then ADDSTRING wnd,ID,fname    
			endif    
		UNTIL fname = ""    
	FINDCLOSE dir    
	ENDIF    
RETURN   
EndSub
'-------------------------------------------------------------------------------------    
  
'    
SUB AddProject(wnd:window, projectname:string, ID:int)    
'-------------------------------------------------------------------------------------    
' Create new project    
'-------------------------------------------------------------------------------------    
DEF err:int    
	err = CREATEDIR(GETSTARTPATH + "PROJECTS\\" + projectname)    
	if (err=1) & CONTROLEXISTS(wnd,ID)    
		ADDSTRING wnd,ID,projectname    
	else    
		if err = 0 then MessageBox(wnd,"Project already exists!", "",0x30)    
	endif    
RETURN   
EndSub
'-------------------------------------------------------------------------------------    
  
'    
SUB NewItem(wnd:window,path:string,itemname:string)    
'-------------------------------------------------------------------------------------    
' Creates new, empty, Item File for editing later    
'-------------------------------------------------------------------------------------    
DEF myfile:FILE   
DEF myfilename:string    
myfilename = path + itemname + ".txt"    
  
	IF(OPENFILE(myfile,myfilename,"W") = 0)    
   	WRITE myfile,"EMPTY "    
   	CLOSEFILE myfile    
	ELSE    
		MessageBox(wnd, "Could not create file","WARNING!",0x30)    
	ENDIF    
  
RETURN    
EndSub
'-------------------------------------------------------------------------------------    
  
'    
SUB ListItems(wnd:window,ID:int, projectname:string)    
'-------------------------------------------------------------------------------------    
' List items in selected project in ListBox Control    
'-------------------------------------------------------------------------------------    
DEF dir:INT    
DEF fname:STRING    
def fdir:string     
fdir = "PROJECTS\\" + projectname + "\\"    
  
	dir = FINDOPEN(GETSTARTPATH + fdir + "*.*")    
	IF(dir)    
		DO    
			fname = FINDNEXT(dir)    
			if (fname <> ".") & (fname <> "..") &(fname <> "")    
			ADDSTRING wnd,ID,fname  
			endif    
		UNTIL fname = ""    
	FINDCLOSE dir    
	ENDIF 
SETSELECTED wnd, ID, 0   															/*added */
RETURN    
EndSub
'-------------------------------------------------------------------------------------    
  
