mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
Added Ring Language Support (#3662)
* update .gitmodules * Update grammars.yml * Create hello.ring * Create Natural.ring * Create weblib.ring * vendor/grammars/language-ring * fix order in grammars.yml * remove two files from samples * delete hello.ring * Update languages.yml - add the R * Create hello.ring * Create natural.ring * Create weblib.ring * Create grammars.yml * Create .gitmodules * Create languages.yml * Create languages.yml * Create language-ring.txt * Update .gitmodules Prefer HTTPS links. * Update hello.ring Sample file from "real" applications (under permissive license) to train the Bayesian classifier. * Update languages.yml * Update weblib.ring Reduce the file size * Update .gitmodules * Update .gitmodules * Update .gitmodules * Update .gitmodules * Update submodule : language-ring * Update weblib.ring Sample : Using the web library. * Create weighthistory Add Sample * Rename weighthistory to weighthistory.ring * Update weblib.ring
This commit is contained in:
committed by
Colin Seymour
parent
6b221172c0
commit
632bcdc1ad
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -854,6 +854,9 @@
|
|||||||
[submodule "vendor/grammars/language-webassembly"]
|
[submodule "vendor/grammars/language-webassembly"]
|
||||||
path = vendor/grammars/language-webassembly
|
path = vendor/grammars/language-webassembly
|
||||||
url = https://github.com/Alhadis/language-webassembly
|
url = https://github.com/Alhadis/language-webassembly
|
||||||
|
[submodule "vendor/grammars/language-ring"]
|
||||||
|
path = vendor/grammars/language-ring
|
||||||
|
url = https://github.com/MahmoudFayed/atom-language-ring
|
||||||
[submodule "vendor/grammars/sublime-fantom"]
|
[submodule "vendor/grammars/sublime-fantom"]
|
||||||
path = vendor/grammars/sublime-fantom
|
path = vendor/grammars/sublime-fantom
|
||||||
url = https://github.com/rkoeninger/sublime-fantom
|
url = https://github.com/rkoeninger/sublime-fantom
|
||||||
|
|||||||
@@ -436,6 +436,8 @@ vendor/grammars/language-renpy:
|
|||||||
- source.renpy
|
- source.renpy
|
||||||
vendor/grammars/language-restructuredtext:
|
vendor/grammars/language-restructuredtext:
|
||||||
- text.restructuredtext
|
- text.restructuredtext
|
||||||
|
vendor/grammars/language-ring:
|
||||||
|
- source.ring
|
||||||
vendor/grammars/language-roff:
|
vendor/grammars/language-roff:
|
||||||
- source.ditroff
|
- source.ditroff
|
||||||
- source.ditroff.desc
|
- source.ditroff.desc
|
||||||
|
|||||||
@@ -3736,6 +3736,14 @@ RenderScript:
|
|||||||
tm_scope: none
|
tm_scope: none
|
||||||
ace_mode: text
|
ace_mode: text
|
||||||
language_id: 323
|
language_id: 323
|
||||||
|
Ring:
|
||||||
|
type: programming
|
||||||
|
color: "#0e60e3"
|
||||||
|
extensions:
|
||||||
|
- .ring
|
||||||
|
tm_scope: source.ring
|
||||||
|
ace_mode: text
|
||||||
|
language_id: 431
|
||||||
RobotFramework:
|
RobotFramework:
|
||||||
type: programming
|
type: programming
|
||||||
extensions:
|
extensions:
|
||||||
|
|||||||
335
samples/Ring/hello.ring
Normal file
335
samples/Ring/hello.ring
Normal file
@@ -0,0 +1,335 @@
|
|||||||
|
# The Ring Standard Library
|
||||||
|
# Game Engine for 2D Games
|
||||||
|
# Flappy Bird 3000 Game
|
||||||
|
# 2016, Mahmoud Fayed <msfclipper@yahoo.com>
|
||||||
|
|
||||||
|
oGameState = NULL
|
||||||
|
|
||||||
|
Load "gameengine.ring"
|
||||||
|
|
||||||
|
func main
|
||||||
|
|
||||||
|
oGame = New Game
|
||||||
|
|
||||||
|
while true
|
||||||
|
|
||||||
|
oGameState = New GameState
|
||||||
|
|
||||||
|
oGame {
|
||||||
|
title = "Flappy Bird 3000"
|
||||||
|
sprite
|
||||||
|
{
|
||||||
|
file = "images/fbback.png"
|
||||||
|
x = 0 y=0 width=800 height = 600 scaled = true animate = false
|
||||||
|
keypress = func ogame,oself,nKey {
|
||||||
|
if nkey = key_esc or nKey = GE_AC_BACK
|
||||||
|
ogame.shutdown()
|
||||||
|
but nKey = key_space
|
||||||
|
oGameState.startplay=true
|
||||||
|
ogame.shutdown=true
|
||||||
|
ok
|
||||||
|
}
|
||||||
|
mouse = func ogame,oself,nType,aMouseList {
|
||||||
|
if nType = GE_MOUSE_UP
|
||||||
|
call oself.keypress(oGame,oSelf,Key_Space)
|
||||||
|
ok
|
||||||
|
}
|
||||||
|
}
|
||||||
|
text {
|
||||||
|
animate = false
|
||||||
|
size = 35
|
||||||
|
file = "fonts/pirulen.ttf"
|
||||||
|
text = "Flappy Bird 3000"
|
||||||
|
x = 150 y=50
|
||||||
|
}
|
||||||
|
text {
|
||||||
|
animate = false
|
||||||
|
size = 25
|
||||||
|
file = "fonts/pirulen.ttf"
|
||||||
|
text = "Version 1.0"
|
||||||
|
x = 280 y=100
|
||||||
|
}
|
||||||
|
text {
|
||||||
|
animate = false
|
||||||
|
size = 16
|
||||||
|
file = "fonts/pirulen.ttf"
|
||||||
|
text = "(C) 2016, Mahmoud Fayed"
|
||||||
|
x = 245 y=140
|
||||||
|
}
|
||||||
|
|
||||||
|
text {
|
||||||
|
animate = false
|
||||||
|
size = 25
|
||||||
|
file = "fonts/pirulen.ttf"
|
||||||
|
text = "To Win Get Score = 3000"
|
||||||
|
x = 150 y=270
|
||||||
|
}
|
||||||
|
|
||||||
|
text {
|
||||||
|
animate = false
|
||||||
|
size = 25
|
||||||
|
file = "fonts/pirulen.ttf"
|
||||||
|
text = "Press Space to start"
|
||||||
|
x = 190 y=470
|
||||||
|
}
|
||||||
|
text {
|
||||||
|
animate = false
|
||||||
|
size = 20
|
||||||
|
file = "fonts/pirulen.ttf"
|
||||||
|
text = "Press Esc to Exit"
|
||||||
|
x = 260 y=510
|
||||||
|
}
|
||||||
|
|
||||||
|
animate {
|
||||||
|
file = "images/fbbird.png"
|
||||||
|
x = 200
|
||||||
|
y = 200
|
||||||
|
framewidth = 20
|
||||||
|
scaled = true
|
||||||
|
height = 50
|
||||||
|
width = 50
|
||||||
|
nStep = 3
|
||||||
|
transparent = true
|
||||||
|
animate = true
|
||||||
|
direction = ge_direction_random
|
||||||
|
state = func oGame,oSelf {
|
||||||
|
oSelf {
|
||||||
|
nStep--
|
||||||
|
if nStep = 0
|
||||||
|
nStep = 3
|
||||||
|
if frame < 3
|
||||||
|
frame++
|
||||||
|
else
|
||||||
|
frame=1
|
||||||
|
ok
|
||||||
|
ok
|
||||||
|
if x <= 0 x=0 ok
|
||||||
|
if y <= 0 y=0 ok
|
||||||
|
if x >= 750 x= 750 ok
|
||||||
|
if y > 550 y=550 ok
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Sound {
|
||||||
|
file = "sound/music2.wav"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if oGameState.startplay
|
||||||
|
oGame.refresh()
|
||||||
|
playstart(oGame)
|
||||||
|
oGame.refresh()
|
||||||
|
ok
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
func playstart oGame
|
||||||
|
|
||||||
|
oGame {
|
||||||
|
FPS = 60
|
||||||
|
FixedFPS = 120
|
||||||
|
Title = "Flappy Bird 3000"
|
||||||
|
Sprite {
|
||||||
|
file = "images/fbback.png"
|
||||||
|
x = 0 y=0 width=800 height = 600 scaled = true animate = false
|
||||||
|
keypress = func ogame,oself,nKey {
|
||||||
|
if nkey = key_esc or nKey = GE_AC_BACK
|
||||||
|
ogame.shutdown()
|
||||||
|
ok
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Map {
|
||||||
|
blockwidth = 80
|
||||||
|
blockheight = 80
|
||||||
|
aMap = [
|
||||||
|
[0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
|
||||||
|
[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
|
||||||
|
[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0],
|
||||||
|
[0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0],
|
||||||
|
[0,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0],
|
||||||
|
[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
|
||||||
|
[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
|
||||||
|
[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
|
||||||
|
]
|
||||||
|
newmap(aMap)
|
||||||
|
aImages = ["images/fbwall.png","images/fbwallup.png",
|
||||||
|
"images/fbwalldown.png"]
|
||||||
|
state = func oGame,oSelf {
|
||||||
|
if oGameState.gameresult = false
|
||||||
|
px = oGame.aObjects[3].x
|
||||||
|
py = oGame.aObjects[3].y
|
||||||
|
oSelf {
|
||||||
|
x -= 3
|
||||||
|
if x < - 2100
|
||||||
|
x = 0
|
||||||
|
newmap(aMap)
|
||||||
|
ok
|
||||||
|
nCol = getcol(px,0)
|
||||||
|
if nCol=11 or nCol=15 or nCol=19 or nCol=23 or nCol=27
|
||||||
|
if nCol != oGameState.lastcol
|
||||||
|
oGameState.lastcol = nCol
|
||||||
|
oGameState.Score += 100
|
||||||
|
oGame { Sound {
|
||||||
|
once = true
|
||||||
|
file = "sound/sfx_point.wav"
|
||||||
|
} }
|
||||||
|
checkwin(oGame)
|
||||||
|
ok
|
||||||
|
ok
|
||||||
|
}
|
||||||
|
if oSelf.getvalue(px+40,py) != 0 or
|
||||||
|
oSelf.getvalue(px+40,py+40) != 0 or
|
||||||
|
oSelf.getvalue(px,py) != 0 or
|
||||||
|
oSelf.getvalue(px,py+40) != 0
|
||||||
|
oGameState.gameresult = true
|
||||||
|
oGame {
|
||||||
|
text {
|
||||||
|
point = 550
|
||||||
|
size = 30
|
||||||
|
nStep = 3
|
||||||
|
file = "fonts/pirulen.ttf"
|
||||||
|
text = "Game Over !!!"
|
||||||
|
x = 500 y=10
|
||||||
|
state = func ogame,oself {
|
||||||
|
if oself.y >= 550
|
||||||
|
ogame.shutdown = true
|
||||||
|
ok
|
||||||
|
if oself.y = 90
|
||||||
|
ogame {
|
||||||
|
Sound {
|
||||||
|
once = true
|
||||||
|
file = "sound/sfx_die.wav"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ok
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Sound {
|
||||||
|
once = true
|
||||||
|
file = "sound/sfx_hit.wav"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ok
|
||||||
|
ok
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
animate {
|
||||||
|
file = "images/fbbird.png"
|
||||||
|
x = 10
|
||||||
|
y = 10
|
||||||
|
framewidth = 20
|
||||||
|
scaled = true
|
||||||
|
height = 50
|
||||||
|
width = 50
|
||||||
|
nStep = 3
|
||||||
|
transparent = true
|
||||||
|
state = func oGame,oSelf {
|
||||||
|
oSelf {
|
||||||
|
nStep--
|
||||||
|
if nStep = 0
|
||||||
|
nStep = 3
|
||||||
|
if frame < 3
|
||||||
|
frame++
|
||||||
|
else
|
||||||
|
frame=1
|
||||||
|
ok
|
||||||
|
ok
|
||||||
|
}
|
||||||
|
|
||||||
|
if not oGameState.playerwin
|
||||||
|
oGameState.down --
|
||||||
|
if oGameState.down = 0
|
||||||
|
oGameState.down = 3
|
||||||
|
oself {
|
||||||
|
y += 25
|
||||||
|
if y > 550 y=550 ok
|
||||||
|
}
|
||||||
|
ok
|
||||||
|
ok
|
||||||
|
|
||||||
|
}
|
||||||
|
keypress = func ogame,oself,nKey {
|
||||||
|
if oGameState.gameresult = false
|
||||||
|
oself {
|
||||||
|
if nkey = key_space
|
||||||
|
y -= 55
|
||||||
|
oGameState.down = 60
|
||||||
|
if y<=0 y=0 ok
|
||||||
|
ok
|
||||||
|
}
|
||||||
|
ok
|
||||||
|
}
|
||||||
|
mouse = func ogame,oself,nType,aMouseList {
|
||||||
|
if nType = GE_MOUSE_UP
|
||||||
|
call oself.keypress(oGame,oSelf,Key_Space)
|
||||||
|
ok
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
text {
|
||||||
|
animate = false
|
||||||
|
point = 400
|
||||||
|
size = 30
|
||||||
|
file = "fonts/pirulen.ttf"
|
||||||
|
text = "Score : " + oGameState.score
|
||||||
|
x = 500 y=10
|
||||||
|
state = func oGame,oSelf {
|
||||||
|
oSelf { text = "Score : " + oGameState.score }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func newmap aMap
|
||||||
|
aV = [
|
||||||
|
[1,1,3,0,0,2,1,1],
|
||||||
|
[1,3,0,0,0,2,1,1],
|
||||||
|
[1,1,1,3,0,2,1,1],
|
||||||
|
[1,1,1,3,0,0,0,0],
|
||||||
|
[0,0,0,0,2,1,1,1],
|
||||||
|
[0,0,2,1,1,1,1,1],
|
||||||
|
[0,0,0,2,1,1,1,1],
|
||||||
|
[1,1,1,3,0,2,1,1],
|
||||||
|
[1,1,1,1,1,3,0,0],
|
||||||
|
[3,0,0,2,1,1,1,1],
|
||||||
|
[3,0,0,2,3,0,0,2]
|
||||||
|
]
|
||||||
|
for x = 10 to 24 step 4
|
||||||
|
aVar = aV[ (random(10)+1) ]
|
||||||
|
for y = 1 to 8
|
||||||
|
aMap[y][x] = aVar[y]
|
||||||
|
next
|
||||||
|
next
|
||||||
|
|
||||||
|
func checkwin ogame
|
||||||
|
if oGameState.score = 3000
|
||||||
|
oGameState.gameresult = true
|
||||||
|
oGameState.playerwin = true
|
||||||
|
oGame {
|
||||||
|
text {
|
||||||
|
point = 400
|
||||||
|
size = 30
|
||||||
|
nStep = 3
|
||||||
|
file = "fonts/pirulen.ttf"
|
||||||
|
text = "You Win !!!"
|
||||||
|
x = 500 y=10
|
||||||
|
state = func ogame,oself {
|
||||||
|
if oself.y >= 400
|
||||||
|
ogame.shutdown = true
|
||||||
|
oGameState.Score = 0
|
||||||
|
ok
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ok
|
||||||
|
|
||||||
|
Class GameState
|
||||||
|
down = 3
|
||||||
|
gameresult = false
|
||||||
|
Score = 0
|
||||||
|
startplay=false
|
||||||
|
lastcol = 0
|
||||||
|
playerwin = false
|
||||||
44
samples/Ring/natural.ring
Normal file
44
samples/Ring/natural.ring
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
New App
|
||||||
|
{
|
||||||
|
I want window
|
||||||
|
The window title = "hello world"
|
||||||
|
}
|
||||||
|
|
||||||
|
Class App
|
||||||
|
|
||||||
|
func geti
|
||||||
|
if nIwantwindow = 0
|
||||||
|
nIwantwindow++
|
||||||
|
ok
|
||||||
|
|
||||||
|
func getwant
|
||||||
|
if nIwantwindow = 1
|
||||||
|
nIwantwindow++
|
||||||
|
ok
|
||||||
|
|
||||||
|
func getwindow
|
||||||
|
if nIwantwindow = 2
|
||||||
|
nIwantwindow= 0
|
||||||
|
see "Instruction : I want window" + nl
|
||||||
|
ok
|
||||||
|
if nWindowTitle = 0
|
||||||
|
nWindowTitle++
|
||||||
|
ok
|
||||||
|
|
||||||
|
func settitle cValue
|
||||||
|
if nWindowTitle = 1
|
||||||
|
nWindowTitle=0
|
||||||
|
see "Instruction : Window Title = " + cValue + nl
|
||||||
|
ok
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
# Attributes for the instruction I want window
|
||||||
|
i want window
|
||||||
|
nIwantwindow = 0
|
||||||
|
# Attributes for the instruction Window title
|
||||||
|
# Here we don't define the window attribute again
|
||||||
|
title
|
||||||
|
nWindowTitle = 0
|
||||||
|
# Keywords to ignore, just give them any value
|
||||||
|
the=0
|
||||||
48
samples/Ring/weblib.ring
Normal file
48
samples/Ring/weblib.ring
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Sample : Using the Web Library
|
||||||
|
|
||||||
|
Load "weblib.ring"
|
||||||
|
Load "datalib.ring"
|
||||||
|
Import System.Web
|
||||||
|
|
||||||
|
website = "ex24.ring"
|
||||||
|
|
||||||
|
New SalaryController { Routing() }
|
||||||
|
|
||||||
|
Class SalaryModel from ModelBase
|
||||||
|
|
||||||
|
Class SalaryController From ControllerBase
|
||||||
|
|
||||||
|
Class SalaryView From ViewBase
|
||||||
|
|
||||||
|
oLanguage = new SalaryLanguageEnglish
|
||||||
|
|
||||||
|
Func AddFuncScript oPage,oController
|
||||||
|
return oPage.scriptfuncajax("myadd",oController.cMainURL+
|
||||||
|
oController.cOperation+"=add","mysubpage")
|
||||||
|
|
||||||
|
Func FormViewContent oController,oTranslation,oPage
|
||||||
|
return [
|
||||||
|
[ oTranslation.aColumnsTitles[2], "textbox", "name",
|
||||||
|
oController.oModel.Name, oPage.stylewidth("100%") ],
|
||||||
|
[ oTranslation.aColumnsTitles[3], "textbox", "salary",
|
||||||
|
oController.oModel.Salary, oPage.stylewidth("50%") ]
|
||||||
|
]
|
||||||
|
|
||||||
|
Class SalaryLanguageEnglish
|
||||||
|
cTitle = "Salary Table"
|
||||||
|
cBack = "back"
|
||||||
|
aColumnsTitles = ["ID","Name","Salary"]
|
||||||
|
cOptions = "Options"
|
||||||
|
cSearch = "Search"
|
||||||
|
comboitems = ["Select Option...","Edit","Delete"]
|
||||||
|
cAddRecord = "Add Record"
|
||||||
|
cEditRecord = "Edit Record"
|
||||||
|
cRecordDeleted = "Record Deleted!"
|
||||||
|
aMovePages = ["First","Prev","Next","Last"]
|
||||||
|
cPage = "Page"
|
||||||
|
cOf = "of"
|
||||||
|
cRecordsCount = "Records Count"
|
||||||
|
cSave = "Save"
|
||||||
|
temp = new page
|
||||||
|
cTextAlign = temp.StyleTextRight()
|
||||||
|
cNoRecords = "No records!"
|
||||||
174
samples/Ring/weighthistory.ring
Normal file
174
samples/Ring/weighthistory.ring
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
Load "guilib.ring"
|
||||||
|
|
||||||
|
MyApp = new qApp
|
||||||
|
{
|
||||||
|
$ApplicationObject = "oApp" # To be used when calling events
|
||||||
|
oApp = new App
|
||||||
|
exec()
|
||||||
|
oApp.CloseDatabase()
|
||||||
|
}
|
||||||
|
|
||||||
|
class App
|
||||||
|
|
||||||
|
cDir = currentdir() + "/"
|
||||||
|
oCon
|
||||||
|
aIDs = []
|
||||||
|
|
||||||
|
win1 = new qWidget()
|
||||||
|
{
|
||||||
|
setWindowTitle("Weight History")
|
||||||
|
resize(600,600)
|
||||||
|
layoutButtons = new qhboxlayout()
|
||||||
|
{
|
||||||
|
label1 = new qLabel(win1) { setText("Weight") }
|
||||||
|
text1 = new qlineedit(win1)
|
||||||
|
btnAdd = new qpushbutton(win1) {
|
||||||
|
setText("Add")
|
||||||
|
setClickEvent($ApplicationObject+".AddWeight()")
|
||||||
|
}
|
||||||
|
btnDelete = new qpushbutton(win1) {
|
||||||
|
setText("Delete")
|
||||||
|
setClickEvent($ApplicationObject+".Deleteweight()")
|
||||||
|
}
|
||||||
|
addwidget(label1)
|
||||||
|
addwidget(text1)
|
||||||
|
addwidget(btnAdd)
|
||||||
|
addwidget(btnDelete)
|
||||||
|
}
|
||||||
|
layoutData = new qhboxlayout()
|
||||||
|
{
|
||||||
|
Table1 = new qTableWidget(win1) {
|
||||||
|
setrowcount(0)
|
||||||
|
setcolumncount(3)
|
||||||
|
setselectionbehavior(QAbstractItemView_SelectRows)
|
||||||
|
setHorizontalHeaderItem(0, new QTableWidgetItem("Date"))
|
||||||
|
setHorizontalHeaderItem(1, new QTableWidgetItem("Time"))
|
||||||
|
setHorizontalHeaderItem(2, new QTableWidgetItem("Weight"))
|
||||||
|
setitemChangedEvent($ApplicationObject+".ItemChanged()")
|
||||||
|
setAlternatingRowColors(true)
|
||||||
|
horizontalHeader().setStyleSheet("color: blue")
|
||||||
|
verticalHeader().setStyleSheet("color: red")
|
||||||
|
}
|
||||||
|
addWidget(Table1)
|
||||||
|
}
|
||||||
|
layoutClose = new qhboxlayout()
|
||||||
|
{
|
||||||
|
btnclose = new qpushbutton(win1) {
|
||||||
|
setText("Close")
|
||||||
|
setClickEvent("MyApp.Quit()")
|
||||||
|
}
|
||||||
|
addwidget(btnClose)
|
||||||
|
}
|
||||||
|
layoutMain = new qvboxlayout()
|
||||||
|
{
|
||||||
|
addlayout(layoutButtons)
|
||||||
|
addLayout(LayoutData)
|
||||||
|
addLayout(layoutClose)
|
||||||
|
}
|
||||||
|
setlayout(layoutMain)
|
||||||
|
self.OpenDatabase()
|
||||||
|
self.ShowRecords()
|
||||||
|
show()
|
||||||
|
}
|
||||||
|
|
||||||
|
Func OpenDatabase
|
||||||
|
lCreate = False
|
||||||
|
if not fexists(cDir + "weighthistory.db")
|
||||||
|
lCreate = True
|
||||||
|
ok
|
||||||
|
new QSqlDatabase() {
|
||||||
|
this.oCon = addDatabase("QSQLITE") {
|
||||||
|
setDatabaseName("weighthistory.db")
|
||||||
|
Open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if lCreate
|
||||||
|
new QSqlQuery( ) {
|
||||||
|
exec("create table weighthistory (id integer primary key,"+
|
||||||
|
" f_date varchar(10),"+
|
||||||
|
" f_time varchar(8), f_weight varchar(8) );")
|
||||||
|
delete()
|
||||||
|
}
|
||||||
|
ok
|
||||||
|
|
||||||
|
|
||||||
|
Func CloseDatabase
|
||||||
|
oCon.Close()
|
||||||
|
|
||||||
|
Func AddWeight
|
||||||
|
cWeight = text1.text()
|
||||||
|
AddRecord(cWeight)
|
||||||
|
|
||||||
|
Func DeleteWeight
|
||||||
|
Table1 {
|
||||||
|
nRow = CurrentRow()
|
||||||
|
if nRow >= 0
|
||||||
|
nID = this.aIDs[nROW+1]
|
||||||
|
new QSqlQuery( ) {
|
||||||
|
exec("delete from weighthistory where id = " + nID )
|
||||||
|
}
|
||||||
|
Del(this.aIDs,nRow+1)
|
||||||
|
removerow(nRow)
|
||||||
|
selectrow(nRow)
|
||||||
|
ok
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Func AddRecord cWeight
|
||||||
|
new QSqlQuery( ) {
|
||||||
|
cStr = "insert into weighthistory (f_date,f_time,f_weight) values"+
|
||||||
|
" ('%f1','%f2','%f3')"
|
||||||
|
cDate = Date()
|
||||||
|
cTime = Time()
|
||||||
|
cStr = substr(cStr,"%f1",cDate)
|
||||||
|
cStr = substr(cStr,"%f2",cTime)
|
||||||
|
cStr = substr(cStr,"%f3",cWeight)
|
||||||
|
exec(cStr)
|
||||||
|
delete()
|
||||||
|
}
|
||||||
|
ShowRecords()
|
||||||
|
Table1.selectrow(table1.rowcount()-1)
|
||||||
|
|
||||||
|
|
||||||
|
Func ShowRecords
|
||||||
|
table1.setitemChangedEvent("")
|
||||||
|
aIDs = []
|
||||||
|
query = new QSqlQuery() {
|
||||||
|
exec("select * from weighthistory")
|
||||||
|
nRows = 0
|
||||||
|
this.Table1.setrowcount(0)
|
||||||
|
while movenext()
|
||||||
|
this.table1 {
|
||||||
|
insertRow(nRows)
|
||||||
|
this.aIDs + query.value(0).tostring()
|
||||||
|
for x = 1 to 3
|
||||||
|
cStr = query.value(x).tostring()
|
||||||
|
item = new qTableWidgetItem(cStr)
|
||||||
|
setItem(nRows,x-1,item)
|
||||||
|
next
|
||||||
|
}
|
||||||
|
nRows++
|
||||||
|
end
|
||||||
|
delete()
|
||||||
|
}
|
||||||
|
table1.setitemChangedEvent($ApplicationObject+".ItemChanged()")
|
||||||
|
|
||||||
|
Func ItemChanged
|
||||||
|
nRow = table1.currentrow()
|
||||||
|
if nRow >= 0
|
||||||
|
myitem = Table1.item(table1.currentrow(),0)
|
||||||
|
cDate = myitem.text()
|
||||||
|
myitem = Table1.item(table1.currentrow(),1)
|
||||||
|
cTime = myitem.text()
|
||||||
|
myitem = Table1.item(table1.currentrow(),2)
|
||||||
|
cWeight = myitem.text()
|
||||||
|
new QSqlQuery( ) {
|
||||||
|
cStr = "update weighthistory set f_date ='%f1' , f_time = '%f2' , "+
|
||||||
|
"f_weight ='%f3' where id = " + this.aIDs[nROW+1]
|
||||||
|
cStr = substr(cStr,"%f1",cDate)
|
||||||
|
cStr = substr(cStr,"%f2",cTime)
|
||||||
|
cStr = substr(cStr,"%f3",cWeight)
|
||||||
|
exec(cStr)
|
||||||
|
delete()
|
||||||
|
}
|
||||||
|
ok
|
||||||
1
vendor/grammars/language-ring
vendored
Submodule
1
vendor/grammars/language-ring
vendored
Submodule
Submodule vendor/grammars/language-ring added at 45f3bb0af7
26
vendor/licenses/grammar/language-ring.txt
vendored
Normal file
26
vendor/licenses/grammar/language-ring.txt
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
---
|
||||||
|
type: grammar
|
||||||
|
name: language-ring
|
||||||
|
license: mit
|
||||||
|
---
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2016-2017 Mahmoud Fayed
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
Reference in New Issue
Block a user