diff --git a/src/addins/tmpl/Cargo.lock b/src/addins/tmpl/Cargo.lock index 09ad90a40f..bc2ab1a041 100644 --- a/src/addins/tmpl/Cargo.lock +++ b/src/addins/tmpl/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "addin1c" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ce4a2faf46b8c80fc9f6a9a280bef80b7968d6b5d4324b563e6b8b4717031c3" +checksum = "58f985421a06951cfab1529e5bf26203b42fba9d792de9adc99486fbf3214dc3" dependencies = [ "smallvec", "utf16_lit", diff --git a/src/addins/tmpl/Cargo.toml b/src/addins/tmpl/Cargo.toml index aa0c3c74bb..6f61c2fe5f 100644 --- a/src/addins/tmpl/Cargo.toml +++ b/src/addins/tmpl/Cargo.toml @@ -13,4 +13,4 @@ panic = "abort" # Abort on panic strip = true # Automatically strip symbols from the binary. [dependencies] -addin1c = "0.1" \ No newline at end of file +addin1c = "0.2.0" \ No newline at end of file diff --git a/src/addins/tmpl/src/component/methods.rs b/src/addins/tmpl/src/component/methods.rs index d6238dc66c..c5243a999a 100644 --- a/src/addins/tmpl/src/component/methods.rs +++ b/src/addins/tmpl/src/component/methods.rs @@ -13,4 +13,8 @@ pub fn send_message(obj: &AddIn, params: &[Variant]) -> String { "Param error".to_string() } -} \ No newline at end of file +} + +pub fn amount(obj: &AddIn, params: &[Variant]) -> i32 { + params[0].get_i32().unwrap() + params[1].get_i32().unwrap() +} diff --git a/src/addins/tmpl/src/component/mod.rs b/src/addins/tmpl/src/component/mod.rs index 24ae6bd50d..71a8d83aa7 100644 --- a/src/addins/tmpl/src/component/mod.rs +++ b/src/addins/tmpl/src/component/mod.rs @@ -8,13 +8,15 @@ use crate::core::getset; // Синонимы pub const METHODS: &[&[u16]] = &[ - name!("Метод1") // 0 + name!("Метод1"), // 0 + name!("Сложение") // 1 ]; // Число параметров функций компоненты pub fn get_params_amount(num: usize) -> usize { match num { 0 => 1, + 1 => 2, _ => 0, } } @@ -25,6 +27,7 @@ pub fn cal_func(obj: &AddIn, num: usize, params: &mut [Variant]) -> Box Box::new(methods::send_message(&obj, ¶ms)), + 1 => Box::new(methods::amount(&obj, ¶ms)), _ => Box::new(false), } diff --git a/src/addins/tmpl/src/core/getset.rs b/src/addins/tmpl/src/core/getset.rs index 4750731689..710786c255 100644 --- a/src/addins/tmpl/src/core/getset.rs +++ b/src/addins/tmpl/src/core/getset.rs @@ -4,7 +4,7 @@ use addin1c::{Variant, ParamValue, Tm}; pub trait ValueType { fn get_value(&self, val: &mut Variant) -> bool; - fn set_value(&mut self, val: &ParamValue); + fn set_value(&mut self, val: &Variant); } impl ValueType for i32 { @@ -13,10 +13,8 @@ impl ValueType for i32 { true } - fn set_value(&mut self, val: &ParamValue) { - if let ParamValue::I32(x) = val { - *self = *x; - } + fn set_value(&mut self, val: &Variant) { + *self = val.get_i32().unwrap(); } } @@ -27,10 +25,8 @@ impl ValueType for f64 { true } - fn set_value(&mut self, val: &ParamValue) { - if let ParamValue::F64(x) = val { - *self = *x; - } + fn set_value(&mut self, val: &Variant) { + *self = val.get_f64().unwrap(); } } @@ -41,10 +37,8 @@ impl ValueType for bool { true } - fn set_value(&mut self, val: &ParamValue) { - if let ParamValue::Bool(x) = val { - *self = *x; - } + fn set_value(&mut self, val: &Variant) { + *self = val.get_bool().unwrap(); } } @@ -55,10 +49,8 @@ impl ValueType for Tm { true } - fn set_value(&mut self, val: &ParamValue) { - if let ParamValue::Date(x) = val { - *self = *x; - } + fn set_value(&mut self, val: &Variant) { + *self = val.get_date().unwrap(); } } @@ -66,26 +58,21 @@ impl ValueType for Tm { impl ValueType for String { fn get_value(&self, val: &mut Variant) -> bool { let s: Vec = self.encode_utf16().collect(); - val.set_str(s.as_slice()) + val.set_str1c(s.as_slice()).is_ok() } - fn set_value(&mut self, val: &ParamValue) { - if let ParamValue::Str(x) = val { - *self = String::from_utf16(*x).unwrap(); - } + fn set_value(&mut self, val: &Variant) { + *self = val.get_string().unwrap_or("".to_string()); } } // Реализация для Vec impl ValueType for Vec { fn get_value(&self, val: &mut Variant) -> bool { - val.set_blob(self.as_slice()) + val.set_blob(self.as_slice()).is_ok() } - fn set_value(&mut self, val: &ParamValue) { - if let ParamValue::Blob(x) = val { - self.clear(); - self.extend_from_slice(x); - } + fn set_value(&mut self, val: &Variant) { + *self = val.get_blob().unwrap().to_vec() } } \ No newline at end of file diff --git a/src/addins/tmpl/src/core/mod.rs b/src/addins/tmpl/src/core/mod.rs index 9317b270fe..48cbf4a285 100644 --- a/src/addins/tmpl/src/core/mod.rs +++ b/src/addins/tmpl/src/core/mod.rs @@ -29,7 +29,7 @@ impl RawAddin for AddIn { } fn get_prop_name(&mut self, num: usize, _alias: usize) -> Option<&'static [u16]> { PROPS.get(num).copied() } fn get_prop_val(&mut self, num: usize, val: &mut Variant) -> bool {let field: &dyn getset::ValueType = &self[num]; field.get_value(val) } - fn set_prop_val(&mut self, num: usize, val: &ParamValue) -> bool {let field: &mut dyn getset::ValueType = &mut self[num]; field.set_value(&val); true } + fn set_prop_val(&mut self, num: usize, val: &Variant) -> bool {let field: &mut dyn getset::ValueType = &mut self[num]; field.set_value(val); true } fn is_prop_readable(&mut self, _num: usize) -> bool { true } fn is_prop_writable(&mut self, num: usize) -> bool { true } fn get_n_methods(&mut self) -> usize { METHODS.len() }