1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//! Contains definitions required to communicate with Qt with the use of `named types`.
//!
//! Provides definition of [`QMetaType`](enum.QMetaType.html) enum, that contains mapping of named types
//! and a trait [`QMetaTypable`](trait.QMetaTypable.html), that controls which types are able to be used in signals, slots or properties.

use qvariantlist::QVariantList;

/// Provides an associated variant of enum for a type.
///
/// Only types that implement this, may be used as types in signals, slots or properties.
pub trait QMetaTypable {
    /// Returns an associate variant of QMetaType
    fn metatype() -> QMetaType;
}

impl QMetaTypable for i32 {
    fn metatype() -> QMetaType {
        QMetaType::Int
    }
}

impl QMetaTypable for String {
    fn metatype() -> QMetaType {
        QMetaType::QString
    }
}

impl QMetaTypable for f64 {
    fn metatype() -> QMetaType {
        QMetaType::Double
    }
}

impl QMetaTypable for f32 {
    fn metatype() -> QMetaType {
        QMetaType::Float
    }
}


impl QMetaTypable for QVariantList {
    fn metatype() -> QMetaType {
        QMetaType::QVariantList
    }
}

// impl QMetaTypable for i64 {
//     fn metatype() -> QMetaType {
//         QMetaType::Long
//     }
// }

impl QMetaTypable for bool {
    fn metatype() -> QMetaType {
        QMetaType::Bool
    }
}

/// Analogue of [`Qt::QMetaType::Type`](http://doc.qt.io/qt-5/qmetatype.html#Type-enum)
///
/// `QMetaType` in Qt manages named types in the meta-object system.
pub enum QMetaType {
    Void = 43,
    Bool = 1,
    Int = 2,
    Double = 6,
    Long = 32,
    QString = 10,
    Float = 38,
    QVariantList = 9,
}