Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
name: test
on:
- push
- pull_request

defaults:
run:
Expand Down
27 changes: 12 additions & 15 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "QML"
uuid = "2db162a6-7e43-52c3-8d84-290c1c42d82a"
version = "0.11"
authors = ["Bart Janssens <[email protected]>"]
version = "0.10.1"

[deps]
ColorTypes = "3da002f7-5984-5a60-b8a6-cbb66c0b333f"
Expand All @@ -10,29 +10,26 @@ Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
MacroTools = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
Observables = "510215fc-4207-5dde-b226-833fc4488ee2"
Qt6Wayland_jll = "e99dba38-086e-5de3-a5b1-6e4c66e897c3"
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
jlqml_jll = "6b5019fb-a83d-5b4e-a9f7-678a36c28df7"

[compat]
ColorTypes = "0.11, 0.12"
CxxWrap = "0.17"
MacroTools = "0.5"
Observables = "0.5"
jlqml_jll = "0.7.1"
Qt6Wayland_jll = "6.8"
Requires = "1.3"
julia = "1.10"

[weakdeps]
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
Qt65Compat_jll = "f5784262-74e5-52be-b835-f3e8a3cf8710"
Qt6Quick3D_jll = "6dc365b9-5e99-58d6-8812-efce7277b6ef"
Qt6Graphs_jll = "7aac1016-a7e0-562a-8747-d0456fd6285f"
Qt6Quick3D_jll = "6dc365b9-5e99-58d6-8812-efce7277b6ef"

[extensions]
Qt65CompatExt = "Qt65Compat_jll"
Qt6Quick3DExt = "Qt6Quick3D_jll"
Qt6GraphsExt = "Qt6Graphs_jll"
Qt6Quick3DExt = "Qt6Quick3D_jll"

[compat]
ColorTypes = "0.11, 0.12"
CxxWrap = "0.17"
MacroTools = "0.5"
Observables = "0.5"
Qt6Wayland_jll = "6.8"
jlqml_jll = "0.8.0"
julia = "1.10"

[extras]
BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,10 @@ For further examples, see the [`documentation`](https://JuliaGraphics.github.io/

## Breaking changes

### Upgrade from v0.10 to 0.11

The Qt `enum` types (e.g. `QML.Orientation` from the item model) are now mapped to complete Julia `@enum` types, to accommodate working with the newly added mouse and keyboard enums. This implies that they are no longer automatically considered as an `Integer`, which may in rare cases cause an error in code that relies on this.

### Upgrade from v0.9 to 0.10

* The QML module name has been changed from `org.julialang` to just `jlqml`, so `import org.julialang` needs to be replaced with `import jlqml` in all QML files.
Expand Down
9 changes: 0 additions & 9 deletions src/QML.jl
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,6 @@ import jlqml_jll
using CxxWrap
using Observables
import Libdl
if !isdefined(Base, :get_extension)
using Requires
end
using ColorTypes
using MacroTools: @capture

Expand Down Expand Up @@ -176,12 +173,6 @@ function __init__()

loadqmljll(jlqml_jll.Qt6Declarative_jll)

@static if !isdefined(Base, :get_extension)
@require Qt65Compat_jll="f5784262-74e5-52be-b835-f3e8a3cf8710" include("../ext/Qt65CompatExt.jl")
@require Qt6Quick3D_jll="6dc365b9-5e99-58d6-8812-efce7277b6ef" include("../ext/Qt6Quick3DExt.jl")
@require Qt6Graphs_jll="6dc365b9-5e99-58d6-8812-efce7277b6ef" include("../ext/Qt6GraphsExt.jl")
end

global ARGV = ArgcArgv([Base.julia_cmd()[1], ARGS...])
global APPLICATION = QGuiApplication(ARGV.argc, getargv(ARGV))
end
Expand Down
24 changes: 13 additions & 11 deletions src/itemmodel.jl
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,10 @@ rowcount(m::ItemModelData) = Int32(Base.size(m.values[],1))
colcount(m::ItemModelData) = Int32(Base.size(m.values[],2))
rolenames(m::ItemModelData) = m.roles

function rolegetter(m::ItemModelData, role::Integer)
@assert haskey(m.getters, role)
return m.getters[role]
function rolegetter(m::ItemModelData, role)
roleint = Int(role)
@assert haskey(m.getters, roleint)
return m.getters[roleint]
end

function isvalidindex(values, row, col)
Expand All @@ -46,7 +47,7 @@ function isvalidindex(values, row, col)
return true
end

function data(m::ItemModelData, role::Integer, row::Integer, col::Integer)
function data(m::ItemModelData, role, row::Integer, col::Integer)
if !isvalidindex(m.values[], row, col)
return QVariant()
end
Expand All @@ -57,7 +58,7 @@ end
# By default, we just return the column or row number as header data
defaultheaderdata(data, row_or_col, orientation, role) = row_or_col

headerdata(m::ItemModelData, row_or_col, orientation, role) = QVariant(m.headerdata(m.values[], row_or_col, orientation[], role))
headerdata(m::ItemModelData, row_or_col, orientation, role) = QVariant(m.headerdata(m.values[], row_or_col, orientation, role))

"""
setheadergetter!(itemmodel::JuliaItemModel, f::Function)
Expand All @@ -73,7 +74,8 @@ and `role` is an integer describing the role
"""
setheadergetter!(itemmodel::JuliaItemModel, f::Function) = (get_julia_data(itemmodel).headerdata = f)

@cxxdereference function setdata!(itemmodel::JuliaItemModel, val::QVariant, role::Integer, row::Integer, col::Integer)
@cxxdereference function setdata!(itemmodel::JuliaItemModel, val::QVariant, roleenum, row::Integer, col::Integer)
role = Int(roleenum)
m = get_julia_data(itemmodel)
if !isvalidindex(m.values[], row, col)
return false
Expand Down Expand Up @@ -106,8 +108,8 @@ end

@cxxdereference function setheaderdata!(itemmodel::JuliaItemModel, row_or_col, orientation, value, role)
m = get_julia_data(itemmodel)
m.setheaderdata(m.values[], row_or_col, orientation[], QML.value(value), role)
emit_header_data_changed(itemmodel, orientation[], row_or_col, row_or_col)
m.setheaderdata(m.values[], row_or_col, orientation, QML.value(value), role)
emit_header_data_changed(itemmodel, orientation, row_or_col, row_or_col)
end

"""
Expand Down Expand Up @@ -409,7 +411,7 @@ hasrole(m::ItemModelData, rolename) = rolename ∈ values(m.roles)
hasrole(lm::JuliaItemModel, rolename) = hasrole(get_julia_data(lm), rolename)
function nextroleindex(roles)
sortedkeys = sort(keys(roles))
return max(UserRole,sortedkeys[end]+1)
return max(Int(UserRole),sortedkeys[end]+1)
end

function roleindex(m::ItemModelData, rolename)
Expand All @@ -425,12 +427,12 @@ roleindex(lm::JuliaItemModel, rolename) = roleindex(get_julia_data(lm), rolename

setgetter!(lm::JuliaItemModel, getter, roleidx) = setgetter!(get_julia_data(lm), getter, roleidx)
function setgetter!(m::ItemModelData, getter, roleidx)
m.getters[roleidx] = getter
m.getters[Int(roleidx)] = getter
end

setsetter!(lm::JuliaItemModel, setter, roleidx) = setsetter!(get_julia_data(lm), setter, roleidx)
function setsetter!(m::ItemModelData, setter, roleidx)
m.setters[roleidx] = setter
m.setters[Int(roleidx)] = setter
end

"""
Expand Down
Loading