Pastey Simple database app
- Posted by DerekParnell (admin) Dec 10, 2011
without warning without type_check include std/eds.e include std/filesys.e include win32lib.ew --include cximage.ew ifdef not WINDOWS then puts(1,"Software only runs under windows") abort(1) end ifdef constant App = {"My Personal Game Database", "0.0.0.1", 2011/*year*/, 12/*month*/, 1/*day*/} -- if not CXI_Init() then -- abort(0) -- end if constant ptr = allocate(4) constant GameType = {"GameList","*.ginf"} constant PDF_FORMAT = {"PDF", "*.pdf"} constant ImageType = {"ImageFiles","*.bmp","*.png","*.gif","*.jpg","*.tga"} enum TITLE, DEVELOPER, PUBLISHER, YEAR, GENRE, SYSTEM, INPUT, MEDIA_STORAGE, SAVE_STATE, PLAYERS, INFO, IMAGES, MANUAL, ID, RATING, NETWORK_SYSTEM, MEMORY, ONLINE, Last_Field, $ integer handle = 0 sequence file = "" sequence shortName = "" object buffer = {} integer players = 1 integer images = 0 integer image_count = 0 integer image_total = 0 integer current_image = 0 integer next_image = 0 integer last_image = 0 integer games = 0 integer current_game = 0 integer total_games = 0 atom game_image = 0 sequence ImageList = {current_image,next_image,last_image} sequence sGame_Added = "Game Added to Database" sequence sGame_Removed = "Game removed from database" sequence sStorageMedia = {"Cartridge","CD-ROM","DVD-ROM","Floppy","Card","Blu-ray","HDDVD-Rom","Hucard"} sequence szInputs = {"GamePad", "Gun", "Trackpad", "Headset", "Remote", "Mic", "Mouse", "Keyboard", "Body Movement", --body movement for input (kinect, playstation movie, etc) "SteeringWheel + Pedals", "Guitar", "Drums", "Bass", "Vocals", "Keyboards", "Real-Guitar" } sequence szMemories = {"Built-in Memory", "Memory Card", "Harddrive", "Flashdrive", "Battery-Backup" } sequence szPlayers = {"1-Player", "2-Players", "1-3 Players", "1-4 Players", "1-5 Players", "1-6 Players", "1-7 Players", "1-8 Players"} sequence sYesNo = {"Yes", "No"} sequence sDialup = "Dial-up" sequence sDSL = "DSL" sequence sBroadband = "Broadband" sequence sRating = {"EC", "E", "E10", "T", "M", "A", "K-A"} sequence sLSystem = {"Atari-2600","Atari-5200","Atari-7800","Atari-XEGS","Atari Jaguar", "NES", "SNES", "N64", "Gamecube", "PS1","PS2","PS3","Xbox","Xbox 360", "Wii", "Gameboy", "Gameboy Color","Gameboy Advance","Gameboy DS","Gamebody 3DS", "PSP","Windows","MS-DOS", "GNU/Linux", "FreeBSD","AmigaOS", "MacOS","PC6000", "PC8801","PC98","Turbo-Grafx16","Wonderswan","Commodore 64","Virtual Boy","Sega Master System", "Sega Genesis/Megadrive","Sega Saturn","Sega Dreamcast","Neo-Geo","Neo-Geo CD", "Neo-Geo Pocket","Arcade"} --43 constant MainWin = createEx(Window,"My Personal Game Database - Geek Punk Games",0,Default,Default,800,600,0,0), MainStat = createEx(StatusBar,"",MainWin,0,0,0,0,0,0) constant File = createEx(Menu,"&File",MainWin,0,0,0,0,0,0), File_Open = createEx(MenuItem,"Open exiting DB",File,0,0,0,0,0,0), File_New = createEx(MenuItem,"Create new DB",File,0,0,0,0,0,0), File_Exit = createEx(MenuItem,"Exit",File,0,0,0,0,0,0) constant About = createEx(Menu,"&About",MainWin,0,0,0,0,0,0), About_Now = createEx(MenuItem,"About MPGD",About,0,0,0,0,0,0) constant Title_Text = createEx(LText, "Title:", MainWin, 10, 30, 40, 20, 0, 0), Title_Edit = createEx(EditText,"", MainWin, 90, 30, 130, 22, 0, 0), Developer_Text = createEx(LText,"Developer:",MainWin,10,60,55,20,0,0), Developer_Edit = createEx(EditText,"",MainWin,90,60,130,22,0,0), Publisher_Text = createEx(LText,"Publisher:",MainWin,10,90,55,20,0,0), Publisher_Edit = createEx(EditText,"",MainWin,90,90,130,22,0,0), Genre_Text = createEx(LText,"Genre:",MainWin,10,120,55,20,0,0), Genre_Edit = createEx(EditText,"",MainWin,90,120,130,22,0,0), Info_Text = createEx(LText,"Info:",MainWin,10,150,40,20,0,0), Info_Edit = createEx(EditText,"",MainWin,90,150,190,130,0,0) constant Year_Text = createEx(LText,"Year:",MainWin,10,300,40,20,0,0), Year_DropDown = createEx(DropDownList,"",MainWin,90,300,120,20,0,0), SaveState_Text = createEx(LText,"SaveState:",MainWin,10,330,60,20,0,0), SaveState_DropDown = createEx(DropDownList,"",MainWin,90,330,120,20,0,0), Input_Text = createEx(LText,"Input:",MainWin,10,360,60,20,0,0), Input_DropDown = createEx(DropDownList,"",MainWin,90,360,120,20,0,0), Memory_Text = createEx(LText,"Memory:",MainWin,10,390,60,20,0,0), Memory_DropDown = createEx(DropDownList,"",MainWin,90,390,120,20,0,0), System_Text = createEx(LText,"System:",MainWin,10,420,60,20,0,0), System_DropDown = createEx(DropDownList,"",MainWin,90,420,120,20,0,0) constant StorageMedia_Text = createEx(LText,"StorageMedia:",MainWin,250,300,80,20,0,0), StorageMedia_DropDown = createEx(DropDownList,"",MainWin,340,300,120,20,0,0), Online_Text = createEx(LText,"Online",MainWin,250,330,65,20,0,0), Online_DropDown = createEx(DropDownList,"",MainWin,340,330,120,20,0,0), Players_Text = createEx(LText,"Players:",MainWin,250,360,60,20,0,0), Players_DropDown = createEx(DropDownList,"",MainWin,340,360,120,20,0,0), Rating_Text = createEx(LText,"Rating:",MainWin,250,390,60,20,0,0), Rating_DropDown = createEx(DropDownList,"",MainWin,340,390,120,20,0,0) constant NewDB_Window = createEx(Window, "New Database", 0, 50, 50, 560, 150, 0, 0), NDB_Label = createEx(LText, "Database Name:", NewDB_Window, 10, 20, 14*8, 20, 0, 0), NDB_Text = createEx(EditText, "", NewDB_Window, 10 + 14*8 + 2, 20, 50*8, 22, 0, 0), NDB_Close = createEx(Button, "Ok", NewDB_Window, 10, 50, 60, 20, w32AUTOCLOSE, 0), NDB_Cancel = createEx(Button, "Cancel", NewDB_Window, 80, 50, 60, 20, w32AUTOCLOSE, 0), NDB_Delete = createEx(CheckBox, "Clear existing?", NewDB_Window, 400, 50, 150, 20, 0, 0) -------------------------------------------- procedure Load_DropDown( integer pID, sequence pData, integer pRange = 0) -------------------------------------------- addItem(pID, "n/a") if pRange then for i = pData[1] to pData[2] do addItem(pID, sprintf("%g", i)) end for else for i = 1 to length(pData) do addItem(pID, pData[i]) end for end if end procedure Load_DropDown(Players_DropDown, szPlayers) Load_DropDown(Rating_DropDown, sRating) Load_DropDown(Memory_DropDown, szMemories) Load_DropDown(Input_DropDown, szInputs) Load_DropDown(StorageMedia_DropDown, sStorageMedia) Load_DropDown(SaveState_DropDown, sYesNo) Load_DropDown(Online_DropDown, sYesNo) Load_DropDown(System_DropDown, sLSystem) Load_DropDown(Year_DropDown, {1970, 2025}, w32True) constant Add = createEx(PushButton,"Update",MainWin,10,480,100,25,0,0), Remove = createEx(PushButton,"Remove",MainWin,110,480,100,25,0,0) setEnable({Add,Remove}, 0) constant Image_Grp = createEx(GroupBox,"Image",MainWin,500,30,250,250,0,0), Image_Win = createEx(Window,"",MainWin,510,50,230,180,{WS_CHILD,WS_CLIPSIBLINGS,WS_VISIBLE},0), Image_Add = createEx(PushButton,"Add",MainWin,510,240,100,25,0,0), Image_Remove = createEx(PushButton,"Remove",MainWin,630,240,100,25,0,0) constant Exit_Push = createEx(PushButton,"Exit",MainWin,660,480,100,25,0,0) setWindowBackColor(Image_Win,Black) constant GameList_Grp = createEx(Group,"Game List",MainWin,300,30,180,150,0,0), Game_List = createEx(List,"",MainWin,310,50,150,120,0,0) setHint(Info_Edit,"A brief description of the game.") setHint(Add,"Add or update game in the database.") setHint(Remove,"Remove game from database") setHint(Game_List,"Title of game is displayed in box, other fields are filled in when game is selected.") -------------------------------------------- procedure show_list_item(integer pID, sequence pData) -------------------------------------------- integer idx idx = findItem(pID, pData, 1) if idx > 0 then setIndex(pID, idx) else setIndex(pID, 0) end if end procedure integer DBOpen = 0 -------------------------------------------- procedure OpenDB(integer self, integer event, sequence parm) -------------------------------------------- sequence game_data sequence fName setText(MainStat,"") fName = getOpenFileName(MainWin,file,GameType) if length(fName) = 0 then return end if db_close() -- Close any that might still be open. DBOpen = 0 if db_open(fName) != DB_OK then setText(MainStat,"Failed to open database") return end if if db_select_table("gameapp") != DB_OK then setText(MainStat,"Not a game database") return end if if db_select_table("gamemaster") != DB_OK then setText(MainStat,"Not a game database") return end if eraseItems(Game_List) if db_table_size() > 0 then for i = 1 to db_table_size() do game_data = db_record_data(i) addItem(Game_List, game_data[TITLE]) end for -- Show inital data from db. setIndex(Game_List, 1) invokeHandler(Game_List, w32HClick, {}) else setText(Add, "Add") end if setEnable({Add,Remove}, 1) DBOpen = 1 end procedure setHandler(File_Open,w32HClick,routine_id("OpenDB")) -------------------------------------------- procedure NewDB(integer self, integer event, sequence parm) -------------------------------------------- sequence fName setText(MainStat,"") eraseItems(Game_List) db_close() openDialog(NewDB_Window) fName = getText(NDB_Text) if length(fName) = 0 then return end if fName = defaultext(fName, "ginf") if isChecked(NDB_Delete) then delete_file(fName) end if if db_create(fName) != DB_OK then setText(MainStat, "Failed to create database") return end if db_select(fName) db_create_table("gamemaster") if db_select_table("gamemaster") != DB_OK then setText(MainStat, "Failed to initialize database") return end if db_create_table("gameapp") if db_select_table("gameapp") != DB_OK then setText(MainStat, "Failed to initialize database") return end if db_insert("Name", App[1]) db_insert("Version", App[2]) db_insert("Date", App[3..5]) setEnable(Add, 1) end procedure setHandler(File_New,w32HClick,routine_id("NewDB")) -------------------------------------------- procedure AddGame(integer self, integer event, sequence parm) -------------------------------------------- sequence newrecord sequence newkey integer recid sequence msg if not DBOpen then return end if setText(MainStat,"") if db_select_table("gamemaster") != DB_OK then setText(MainStat, "Database might not be open") return end if newrecord = repeat(0, Last_Field - 1) newkey = getText(Title_Edit) if length(newkey) = 0 then return -- No key so no updating done. end if newrecord[TITLE] = newkey newrecord[DEVELOPER] = getText(Developer_Edit) newrecord[PUBLISHER] = getText(Publisher_Edit) newrecord[GENRE] = getText(Genre_Edit) newrecord[INFO] = getText(Info_Edit) newrecord[YEAR] = getText(Year_DropDown) newrecord[SAVE_STATE] = getText(SaveState_DropDown) newrecord[INPUT] = getText(Input_DropDown) newrecord[MEMORY] = getText(Memory_DropDown) newrecord[SYSTEM] = getText(System_DropDown) newrecord[MEDIA_STORAGE] = getText(StorageMedia_DropDown) newrecord[ONLINE] = getText(Online_DropDown) newrecord[PLAYERS] = getText(Players_DropDown) newrecord[RATING] = getText(Rating_DropDown) -- These fields are not getting any data yet. -- newrecord[IMAGES] = ? -- newrecord[MANUAL] = ? -- newrecord[ID] = ? -- newrecord[NETWORK_SYSTEM] = ? -- save image -- buffer = CXI_SaveImage(game_image,ptr,CXI_FORMAT_JPG) -- if buffer <= 0 then -- abort(0) -- end if -- See if record already exists in the DB recid = db_find_key(newkey) if recid > 0 then -- it exists so we are updating the record. db_replace_data(recid, newrecord) msg = "Game Updated" else -- it doesn't exist so we are adding the record db_insert(newkey, newrecord) msg = "Game Added!" -- Rebuild the game list eraseItems(Game_List) for i = 1 to db_table_size() do newrecord = db_record_data(i) addItem(Game_List, newrecord[TITLE]) end for end if -- Ensure game list shows item just added/updated. show_list_item(Game_List, newkey) setText(Add, "Update") setText(MainStat, msg) end procedure setHandler(Add,w32HClick,routine_id("AddGame")) -------------------------------------------- procedure RemoveGame(integer self, integer event, sequence parm) -------------------------------------------- sequence newrecord sequence newkey integer recid sequence msg if not DBOpen then return end if setText(MainStat,"") if db_select_table("gamemaster") != DB_OK then setText(MainStat, "Database might not be open") return end if newkey =


