glib/gobject/
dynamic_object.rs
1use crate::{
4 enums::{EnumValues, FlagsValues},
5 prelude::*,
6 subclass::prelude::*,
7 InterfaceInfo, Object, TypeFlags, TypeInfo, TypeModule, TypePlugin,
8};
9
10pub trait DynamicObjectRegisterExt: AsRef<TypePlugin> + 'static {
11 fn add_dynamic_interface(
12 &self,
13 instance_type: crate::types::Type,
14 interface_type: crate::types::Type,
15 interface_info: &InterfaceInfo,
16 );
17
18 fn register_dynamic_enum(
19 &self,
20 name: &str,
21 const_static_values: &'static EnumValues,
22 ) -> crate::types::Type;
23
24 fn register_dynamic_flags(
25 &self,
26 name: &str,
27 const_static_values: &'static FlagsValues,
28 ) -> crate::types::Type;
29
30 fn register_dynamic_type(
31 &self,
32 parent_type: crate::types::Type,
33 type_name: &str,
34 type_info: &TypeInfo,
35 flags: TypeFlags,
36 ) -> crate::types::Type;
37}
38
39impl<O: IsA<Object> + IsA<TypePlugin> + ObjectSubclassIsExt> DynamicObjectRegisterExt for O
40where
41 O::Subclass: TypePluginRegisterImpl,
42{
43 fn add_dynamic_interface(
44 &self,
45 instance_type: crate::types::Type,
46 interface_type: crate::types::Type,
47 interface_info: &InterfaceInfo,
48 ) {
49 self.imp()
50 .add_dynamic_interface(instance_type, interface_type, interface_info);
51 }
52
53 fn register_dynamic_enum(
54 &self,
55 name: &str,
56 const_static_values: &'static EnumValues,
57 ) -> crate::types::Type {
58 self.imp().register_dynamic_enum(name, const_static_values)
59 }
60
61 fn register_dynamic_flags(
62 &self,
63 name: &str,
64 const_static_values: &'static FlagsValues,
65 ) -> crate::types::Type {
66 self.imp().register_dynamic_flags(name, const_static_values)
67 }
68
69 fn register_dynamic_type(
70 &self,
71 parent_type: crate::types::Type,
72 type_name: &str,
73 type_info: &TypeInfo,
74 flags: TypeFlags,
75 ) -> crate::types::Type {
76 self.imp()
77 .register_dynamic_type(parent_type, type_name, type_info, flags)
78 }
79}
80
81impl DynamicObjectRegisterExt for TypeModule {
82 fn add_dynamic_interface(
83 &self,
84 instance_type: crate::types::Type,
85 interface_type: crate::types::Type,
86 interface_info: &InterfaceInfo,
87 ) {
88 <Self as TypeModuleExt>::add_interface(self, instance_type, interface_type, interface_info);
89 }
90
91 fn register_dynamic_enum(
92 &self,
93 name: &str,
94 const_static_values: &'static EnumValues,
95 ) -> crate::types::Type {
96 <Self as TypeModuleExt>::register_enum(self, name, const_static_values)
97 }
98
99 fn register_dynamic_flags(
100 &self,
101 name: &str,
102 const_static_values: &'static FlagsValues,
103 ) -> crate::types::Type {
104 <Self as TypeModuleExt>::register_flags(self, name, const_static_values)
105 }
106
107 fn register_dynamic_type(
108 &self,
109 parent_type: crate::types::Type,
110 type_name: &str,
111 type_info: &TypeInfo,
112 flags: TypeFlags,
113 ) -> crate::types::Type {
114 <Self as TypeModuleExt>::register_type(self, parent_type, type_name, type_info, flags)
115 }
116}