Refactored KLocalizedContext
Extracted everything from lib.rs Also extracted all doc tests to integration tests.
This commit is contained in:
parent
0470f05c07
commit
38ebb314b8
|
@ -20,5 +20,8 @@ qttypes = "0.2"
|
||||||
cpp_build = "0.5"
|
cpp_build = "0.5"
|
||||||
semver = "1.0"
|
semver = "1.0"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
lazy_static = "1.4"
|
||||||
|
|
||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
dependencies = ["qtbase5-dev", "qtdeclarative5-dev", "libqt5svg5-dev", "qtquickcontrols2-5-dev", "qml-module-org-kde-kirigami2", "kirigami2-dev", "libkf5i18n-dev", "gettext", "libkf5coreaddons-dev", "qml-module-qtquick-layouts"]
|
dependencies = ["qtbase5-dev", "qtdeclarative5-dev", "libqt5svg5-dev", "qtquickcontrols2-5-dev", "qml-module-org-kde-kirigami2", "kirigami2-dev", "libkf5i18n-dev", "gettext", "libkf5coreaddons-dev", "qml-module-qtquick-layouts"]
|
||||||
|
|
55
src/klocalizedcontext.rs
Normal file
55
src/klocalizedcontext.rs
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
use cpp::{cpp, cpp_class};
|
||||||
|
use qmetaobject::prelude::*;
|
||||||
|
use std::ffi::c_void;
|
||||||
|
|
||||||
|
cpp! {{
|
||||||
|
#include <KLocalizedContext>
|
||||||
|
#include <QtCore/QObject>
|
||||||
|
#include <QtQml/QQmlEngine>
|
||||||
|
#include <QtQuick/QtQuick>
|
||||||
|
|
||||||
|
struct KLocalizedContextHolder {
|
||||||
|
std::unique_ptr<KLocalizedContext> klocalized;
|
||||||
|
|
||||||
|
KLocalizedContextHolder(QObject *parent) : klocalized(new KLocalizedContext(parent)) {}
|
||||||
|
};
|
||||||
|
}}
|
||||||
|
|
||||||
|
cpp_class!(
|
||||||
|
/// Struct representing KLocalizedContext. Mainly used with QML.
|
||||||
|
pub unsafe struct KLocalizedContext as "KLocalizedContextHolder"
|
||||||
|
);
|
||||||
|
|
||||||
|
impl KLocalizedContext {
|
||||||
|
/// Initialize KLocalizedContext from Engine.
|
||||||
|
pub fn init_from_engine(engine: &QmlEngine) -> Self {
|
||||||
|
let engine_ptr = engine.cpp_ptr();
|
||||||
|
cpp!(unsafe [engine_ptr as "QQmlEngine*"] -> KLocalizedContext as "KLocalizedContextHolder" {
|
||||||
|
auto klocalized = new KLocalizedContext(engine_ptr);
|
||||||
|
auto klocalizedholder = KLocalizedContextHolder(klocalized);
|
||||||
|
engine_ptr->rootContext()->setContextObject(klocalized);
|
||||||
|
return klocalizedholder;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a pointer to the C++ object. The pointer is of the type `KLocalizedContext *` in C++.
|
||||||
|
pub fn cpp_ptr(&self) -> *mut c_void {
|
||||||
|
cpp!(unsafe [self as "KLocalizedContextHolder *"] -> *mut c_void as "KLocalizedContext *" {
|
||||||
|
return self->klocalized.get();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set Translation Domain for current KLocalizedContext.
|
||||||
|
pub fn set_translation_domain(&mut self, domain: QString) {
|
||||||
|
cpp!(unsafe [self as "KLocalizedContextHolder *", domain as "QString"] {
|
||||||
|
self->klocalized->setTranslationDomain(domain);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Retrns the current Translation Domain.
|
||||||
|
pub fn translation_domain(&self) -> QString {
|
||||||
|
cpp!(unsafe [self as "KLocalizedContextHolder *"] -> QString as "QString" {
|
||||||
|
return self->klocalized->translationDomain();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
102
src/lib.rs
102
src/lib.rs
|
@ -1,6 +1,11 @@
|
||||||
//! # KI18n-rs
|
//! # KI18n-rs
|
||||||
//! KI18n is a cross-platform internationalization framework used by KDE applications. This crate is meant to allow using KI18n with
|
//! KI18n is a cross-platform internationalization framework used by KDE applications. This crate is meant to allow using KI18n with
|
||||||
//! Rust and [qmetaobject-rs](https://github.com/woboq/qmetaobject-rs) crate.
|
//! Rust and [qmetaobject-rs](https://github.com/woboq/qmetaobject-rs) crate.
|
||||||
|
//!
|
||||||
|
//! # Custom Location for KF5I18n
|
||||||
|
//! The crate searches from KF5I18n using either the environment variables (KF5_I18n_INCLUDE_PATH and KF5_I18n_LIBRARY_PATH) if they are set or just
|
||||||
|
//! searches at /usr/include /usr/library
|
||||||
|
//!
|
||||||
//! # Example
|
//! # Example
|
||||||
//! ```ignore
|
//! ```ignore
|
||||||
//! use cstr::cstr;
|
//! use cstr::cstr;
|
||||||
|
@ -39,99 +44,6 @@
|
||||||
//! engine.exec();
|
//! engine.exec();
|
||||||
//! }
|
//! }
|
||||||
//! ```
|
//! ```
|
||||||
use cpp::{cpp, cpp_class};
|
|
||||||
use qmetaobject::prelude::*;
|
|
||||||
use std::ffi::c_void;
|
|
||||||
|
|
||||||
cpp! {{
|
mod klocalizedcontext;
|
||||||
#include <KLocalizedContext>
|
pub use klocalizedcontext::KLocalizedContext;
|
||||||
#include <QtCore/QObject>
|
|
||||||
#include <QtQml/QQmlEngine>
|
|
||||||
#include <QtQuick/QtQuick>
|
|
||||||
|
|
||||||
struct KLocalizedContextHolder {
|
|
||||||
std::unique_ptr<KLocalizedContext> klocalized;
|
|
||||||
|
|
||||||
KLocalizedContextHolder(QObject *parent) : klocalized(new KLocalizedContext(parent)) {}
|
|
||||||
};
|
|
||||||
}}
|
|
||||||
|
|
||||||
cpp_class!(
|
|
||||||
/// Struct representing KLocalizedContext. Mainly used with QML.
|
|
||||||
pub unsafe struct KLocalizedContext as "KLocalizedContextHolder"
|
|
||||||
);
|
|
||||||
|
|
||||||
impl KLocalizedContext {
|
|
||||||
/// Initialize KLocalizedContext from Engine.
|
|
||||||
/// ```rust
|
|
||||||
/// use qmetaobject::prelude::*;
|
|
||||||
/// use ki18n_rs::KLocalizedContext;
|
|
||||||
///
|
|
||||||
/// let mut engine = QmlEngine::new();
|
|
||||||
/// let context = KLocalizedContext::init_from_engine(&engine);
|
|
||||||
/// ```
|
|
||||||
pub fn init_from_engine(engine: &QmlEngine) -> Self {
|
|
||||||
let engine_ptr = engine.cpp_ptr();
|
|
||||||
cpp!(unsafe [engine_ptr as "QQmlEngine*"] -> KLocalizedContext as "KLocalizedContextHolder" {
|
|
||||||
auto klocalized = new KLocalizedContext(engine_ptr);
|
|
||||||
auto klocalizedholder = KLocalizedContextHolder(klocalized);
|
|
||||||
engine_ptr->rootContext()->setContextObject(klocalized);
|
|
||||||
return klocalizedholder;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns a pointer to the C++ object. The pointer is of the type `KLocalizedContext *` in C++.
|
|
||||||
/// ```rust
|
|
||||||
/// use qmetaobject::prelude::*;
|
|
||||||
/// use ki18n_rs::KLocalizedContext;
|
|
||||||
///
|
|
||||||
/// let mut engine = QmlEngine::new();
|
|
||||||
/// let context = KLocalizedContext::init_from_engine(&engine);
|
|
||||||
///
|
|
||||||
/// let context_ptr = context.cpp_ptr();
|
|
||||||
/// ```
|
|
||||||
pub fn cpp_ptr(&self) -> *mut c_void {
|
|
||||||
cpp!(unsafe [self as "KLocalizedContextHolder *"] -> *mut c_void as "KLocalizedContext *" {
|
|
||||||
return self->klocalized.get();
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Set Translation Domain for current KLocalizedContext.
|
|
||||||
/// ```rust
|
|
||||||
/// use qmetaobject::prelude::*;
|
|
||||||
/// use ki18n_rs::KLocalizedContext;
|
|
||||||
///
|
|
||||||
/// let mut engine = QmlEngine::new();
|
|
||||||
/// let mut context = KLocalizedContext::init_from_engine(&engine);
|
|
||||||
///
|
|
||||||
/// const TRANSLATION_DOMAIN: &str = "Test Domain";
|
|
||||||
/// context.set_translation_domain(TRANSLATION_DOMAIN.into());
|
|
||||||
///
|
|
||||||
/// let domain = context.translation_domain();
|
|
||||||
///
|
|
||||||
/// assert_eq!(domain, QString::from(TRANSLATION_DOMAIN));
|
|
||||||
/// ```
|
|
||||||
pub fn set_translation_domain(&mut self, domain: QString) {
|
|
||||||
cpp!(unsafe [self as "KLocalizedContextHolder *", domain as "QString"] {
|
|
||||||
self->klocalized->setTranslationDomain(domain);
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Retrns the current Translation Domain.
|
|
||||||
/// ```rust
|
|
||||||
/// use qmetaobject::prelude::*;
|
|
||||||
/// use ki18n_rs::KLocalizedContext;
|
|
||||||
///
|
|
||||||
/// let mut engine = QmlEngine::new();
|
|
||||||
/// let mut context = KLocalizedContext::init_from_engine(&engine);
|
|
||||||
///
|
|
||||||
/// let domain = context.translation_domain();
|
|
||||||
///
|
|
||||||
/// assert_eq!(domain, QString::from(""));
|
|
||||||
/// ```
|
|
||||||
pub fn translation_domain(&self) -> QString {
|
|
||||||
cpp!(unsafe [self as "KLocalizedContextHolder *"] -> QString as "QString" {
|
|
||||||
return self->klocalized->translationDomain();
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
12
tests/common.rs
Normal file
12
tests/common.rs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
use lazy_static::lazy_static;
|
||||||
|
use std::sync::Mutex;
|
||||||
|
|
||||||
|
lazy_static! {
|
||||||
|
pub static ref TEST_MUTEX: Mutex<()> = Mutex::new(());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// There can only be one thread running at the time with a QQuickEngine
|
||||||
|
/// (in principle, everything should be in the same main thread)
|
||||||
|
pub fn lock_for_test() -> std::sync::MutexGuard<'static, ()> {
|
||||||
|
TEST_MUTEX.lock().unwrap_or_else(|e| e.into_inner())
|
||||||
|
}
|
37
tests/klocalizedcontext_tests.rs
Normal file
37
tests/klocalizedcontext_tests.rs
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
use ki18n_rs::KLocalizedContext;
|
||||||
|
use qmetaobject::prelude::*;
|
||||||
|
mod common;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn init_engine() {
|
||||||
|
let _lock = common::lock_for_test();
|
||||||
|
|
||||||
|
let engine = QmlEngine::new();
|
||||||
|
KLocalizedContext::init_from_engine(&engine);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn cpp_ptr() {
|
||||||
|
let _lock = common::lock_for_test();
|
||||||
|
|
||||||
|
let engine = QmlEngine::new();
|
||||||
|
let context = KLocalizedContext::init_from_engine(&engine);
|
||||||
|
|
||||||
|
let context_ptr = context.cpp_ptr();
|
||||||
|
assert_ne!(std::ptr::null(), context_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn translation_domain() {
|
||||||
|
let _lock = common::lock_for_test();
|
||||||
|
|
||||||
|
let engine = QmlEngine::new();
|
||||||
|
let mut context = KLocalizedContext::init_from_engine(&engine);
|
||||||
|
|
||||||
|
const TRANSLATION_DOMAIN: &str = "Test Domain";
|
||||||
|
context.set_translation_domain(TRANSLATION_DOMAIN.into());
|
||||||
|
|
||||||
|
let domain = context.translation_domain();
|
||||||
|
|
||||||
|
assert_eq!(domain, QString::from(TRANSLATION_DOMAIN));
|
||||||
|
}
|
|
@ -1 +0,0 @@
|
||||||
use ki18n_rs::*;
|
|
Loading…
Reference in a new issue