From 68dd35512172ed9ca89b87bf97edbf6713d03972 Mon Sep 17 00:00:00 2001 From: Joshua Booth Date: Fri, 17 Jan 2025 14:55:24 -0800 Subject: [PATCH 1/7] cxx-qt-lib: implement Deref and DerefMut to QVector for QPolygon(F) --- crates/cxx-qt-lib/include/gui/qpolygon.h | 13 ++++++++++ crates/cxx-qt-lib/include/gui/qpolygonf.h | 13 ++++++++++ crates/cxx-qt-lib/src/gui/qpolygon.cpp | 17 +++++++++++++ crates/cxx-qt-lib/src/gui/qpolygon.rs | 29 ++++++++++++++++++++++- crates/cxx-qt-lib/src/gui/qpolygonf.cpp | 17 +++++++++++++ crates/cxx-qt-lib/src/gui/qpolygonf.rs | 29 +++++++++++++++++++++++ 6 files changed, 117 insertions(+), 1 deletion(-) diff --git a/crates/cxx-qt-lib/include/gui/qpolygon.h b/crates/cxx-qt-lib/include/gui/qpolygon.h index 8ce9ba7ac..1034d8185 100644 --- a/crates/cxx-qt-lib/include/gui/qpolygon.h +++ b/crates/cxx-qt-lib/include/gui/qpolygon.h @@ -6,6 +6,8 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 #pragma once +#include +#include #include #include "rust/cxx.h" @@ -19,3 +21,14 @@ struct IsRelocatable : ::std::true_type {}; } // namespace rust + +namespace rust { +namespace cxxqtlib1 { + +const QVector& +qpolygonAsQVectorQPointRef(const QPolygon& shape); +QVector& +qpolygonAsQVectorQPointRef(QPolygon& shape); + +} +} diff --git a/crates/cxx-qt-lib/include/gui/qpolygonf.h b/crates/cxx-qt-lib/include/gui/qpolygonf.h index 88d226b6d..c450c0391 100644 --- a/crates/cxx-qt-lib/include/gui/qpolygonf.h +++ b/crates/cxx-qt-lib/include/gui/qpolygonf.h @@ -6,6 +6,8 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 #pragma once +#include +#include #include #include "rust/cxx.h" @@ -19,3 +21,14 @@ struct IsRelocatable : ::std::true_type {}; } // namespace rust + +namespace rust { +namespace cxxqtlib1 { + +const QVector& +qpolygonfAsQVectorQPointFRef(const QPolygonF& shape); +QVector& +qpolygonfAsQVectorQPointFRef(QPolygonF& shape); + +} +} diff --git a/crates/cxx-qt-lib/src/gui/qpolygon.cpp b/crates/cxx-qt-lib/src/gui/qpolygon.cpp index cd6caea61..c686d83cd 100644 --- a/crates/cxx-qt-lib/src/gui/qpolygon.cpp +++ b/crates/cxx-qt-lib/src/gui/qpolygon.cpp @@ -32,3 +32,20 @@ static_assert(!::std::is_trivially_copy_constructible::value); static_assert(!::std::is_trivially_destructible::value); static_assert(QTypeInfo::isRelocatable); + +namespace rust { +namespace cxxqtlib1 { +const QVector& +qpolygonAsQVectorQPointRef(const QPolygon& shape) +{ + return static_cast&>(shape); +} + +QVector& +qpolygonAsQVectorQPointRefMut(QPolygon& shape) +{ + return static_cast&>(shape); +} + +} +} diff --git a/crates/cxx-qt-lib/src/gui/qpolygon.rs b/crates/cxx-qt-lib/src/gui/qpolygon.rs index 5a8fb0894..16a49821b 100644 --- a/crates/cxx-qt-lib/src/gui/qpolygon.rs +++ b/crates/cxx-qt-lib/src/gui/qpolygon.rs @@ -2,9 +2,10 @@ // SPDX-FileContributor: Laurent Montel // // SPDX-License-Identifier: MIT OR Apache-2.0 -use crate::QRect; +use crate::{QPoint, QRect, QVector}; use core::mem::MaybeUninit; use cxx::{type_id, ExternType}; +use std::ops::{Deref, DerefMut}; #[cxx::bridge] mod ffi { @@ -15,6 +16,9 @@ mod ffi { } unsafe extern "C++" { + include!("cxx-qt-lib/qvector.h"); + type QVector_QPoint = crate::QVector; + include!("cxx-qt-lib/qpoint.h"); type QPoint = crate::QPoint; include!("cxx-qt-lib/qrect.h"); @@ -97,6 +101,15 @@ mod ffi { #[rust_name = "qpolygon_to_qstring"] fn toQString(value: &QPolygon) -> QString; } + + #[namespace = "rust::cxxqtlib1"] + unsafe extern "C++" { + #[doc(hidden)] + #[rust_name = "qpolygon_as_qvector_qpoint_ref"] + fn qpolygonAsQVectorQPointRef(shape: &QPolygon) -> &QVector_QPoint; + #[rust_name = "qpolygon_as_qvector_qpoint_ref_mut"] + fn qpolygonAsQVectorQPointRef(shape: &mut QPolygon) -> &mut QVector_QPoint; + } } /// The QPolygon class provides a list of QPoint. @@ -154,6 +167,20 @@ impl std::fmt::Display for QPolygon { impl Eq for QPolygon {} +impl Deref for QPolygon { + type Target = QVector; + + fn deref(&self) -> &Self::Target { + ffi::qpolygon_as_qvector_qpoint_ref(self) + } +} + +impl DerefMut for QPolygon { + fn deref_mut(&mut self) -> &mut Self::Target { + ffi::qpolygon_as_qvector_qpoint_ref_mut(self) + } +} + // Safety: // // Static checks on the C++ side to ensure the size is the same. diff --git a/crates/cxx-qt-lib/src/gui/qpolygonf.cpp b/crates/cxx-qt-lib/src/gui/qpolygonf.cpp index 6380fd880..06f2a1775 100644 --- a/crates/cxx-qt-lib/src/gui/qpolygonf.cpp +++ b/crates/cxx-qt-lib/src/gui/qpolygonf.cpp @@ -32,3 +32,20 @@ static_assert(!::std::is_trivially_copy_constructible::value); static_assert(!::std::is_trivially_destructible::value); static_assert(QTypeInfo::isRelocatable); + +namespace rust { +namespace cxxqtlib1 { +const QVector& +qpolygonfAsQVectorQPointFRef(const QPolygonF& shape) +{ + return static_cast&>(shape); +} + +QVector& +qpolygonfAsQVectorQPointFRefMut(QPolygonF& shape) +{ + return static_cast&>(shape); +} + +} +} diff --git a/crates/cxx-qt-lib/src/gui/qpolygonf.rs b/crates/cxx-qt-lib/src/gui/qpolygonf.rs index 4d0b33ced..74738e56d 100644 --- a/crates/cxx-qt-lib/src/gui/qpolygonf.rs +++ b/crates/cxx-qt-lib/src/gui/qpolygonf.rs @@ -4,6 +4,9 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 use core::mem::MaybeUninit; use cxx::{type_id, ExternType}; +use std::ops::{Deref, DerefMut}; + +use crate::{QPointF, QVector}; #[cxx::bridge] mod ffi { @@ -14,6 +17,9 @@ mod ffi { } unsafe extern "C++" { + include!("cxx-qt-lib/qvector.h"); + type QVector_QPointF = crate::QVector; + include!("cxx-qt-lib/qpointf.h"); type QPointF = crate::QPointF; include!("cxx-qt-lib/qrectf.h"); @@ -86,6 +92,15 @@ mod ffi { #[rust_name = "qpolygonf_to_qstring"] fn toQString(value: &QPolygonF) -> QString; } + + #[namespace = "rust::cxxqtlib1"] + unsafe extern "C++" { + #[doc(hidden)] + #[rust_name = "qpolygonf_as_qvector_qpointf_ref"] + fn qpolygonfAsQVectorQPointFRef(shape: &QPolygonF) -> &QVector_QPointF; + #[rust_name = "qpolygonf_as_qvector_qpointf_ref_mut"] + fn qpolygonfAsQVectorQPointFRef(shape: &mut QPolygonF) -> &mut QVector_QPointF; + } } /// The QPolygonF class provides a list of QPointF. @@ -134,6 +149,20 @@ impl std::fmt::Display for QPolygonF { impl Eq for QPolygonF {} +impl Deref for QPolygonF { + type Target = QVector; + + fn deref(&self) -> &Self::Target { + ffi::qpolygonf_as_qvector_qpointf_ref(self) + } +} + +impl DerefMut for QPolygonF { + fn deref_mut(&mut self) -> &mut Self::Target { + ffi::qpolygonf_as_qvector_qpointf_ref_mut(self) + } +} + // Safety: // // Static checks on the C++ side to ensure the size is the same. From 51ea096cc5eea8e8afe1cf54e69a59701c3889fa Mon Sep 17 00:00:00 2001 From: Joshua Booth Date: Fri, 17 Jan 2025 14:56:48 -0800 Subject: [PATCH 2/7] cxx-qt-lib: implement Debug for QList, QVector, and QSet --- crates/cxx-qt-lib/src/core/qlist/mod.rs | 9 +++++++++ crates/cxx-qt-lib/src/core/qset/mod.rs | 9 +++++++++ crates/cxx-qt-lib/src/core/qstringlist.rs | 2 +- crates/cxx-qt-lib/src/core/qvector/mod.rs | 9 +++++++++ crates/cxx-qt-lib/src/gui/qpolygon.rs | 6 ++++++ crates/cxx-qt-lib/src/gui/qpolygonf.rs | 6 ++++++ 6 files changed, 40 insertions(+), 1 deletion(-) diff --git a/crates/cxx-qt-lib/src/core/qlist/mod.rs b/crates/cxx-qt-lib/src/core/qlist/mod.rs index baa075474..283b31a93 100644 --- a/crates/cxx-qt-lib/src/core/qlist/mod.rs +++ b/crates/cxx-qt-lib/src/core/qlist/mod.rs @@ -75,6 +75,15 @@ where impl Eq for QList where T: QListElement + Eq {} +impl std::fmt::Debug for QList +where + T: QListElement + std::fmt::Debug, +{ + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + f.debug_list().entries(self.iter()).finish() + } +} + impl QList where T: QListElement, diff --git a/crates/cxx-qt-lib/src/core/qset/mod.rs b/crates/cxx-qt-lib/src/core/qset/mod.rs index 7b76d2a11..c0cc2ccc1 100644 --- a/crates/cxx-qt-lib/src/core/qset/mod.rs +++ b/crates/cxx-qt-lib/src/core/qset/mod.rs @@ -64,6 +64,15 @@ where impl Eq for QSet where T: QSetElement + PartialEq {} +impl std::fmt::Debug for QSet +where + T: QSetElement + std::fmt::Debug, +{ + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + f.debug_set().entries(self.iter()).finish() + } +} + impl QSet where T: QSetElement, diff --git a/crates/cxx-qt-lib/src/core/qstringlist.rs b/crates/cxx-qt-lib/src/core/qstringlist.rs index 22d9d3886..77bd73b9f 100644 --- a/crates/cxx-qt-lib/src/core/qstringlist.rs +++ b/crates/cxx-qt-lib/src/core/qstringlist.rs @@ -148,7 +148,7 @@ impl std::fmt::Display for QStringList { impl std::fmt::Debug for QStringList { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{self}") + QList::fmt(self, f) } } diff --git a/crates/cxx-qt-lib/src/core/qvector/mod.rs b/crates/cxx-qt-lib/src/core/qvector/mod.rs index 2f1568287..29a8b88b4 100644 --- a/crates/cxx-qt-lib/src/core/qvector/mod.rs +++ b/crates/cxx-qt-lib/src/core/qvector/mod.rs @@ -75,6 +75,15 @@ where impl Eq for QVector where T: QVectorElement + Eq {} +impl std::fmt::Debug for QVector +where + T: QVectorElement + std::fmt::Debug, +{ + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + f.debug_list().entries(self.iter()).finish() + } +} + impl QVector where T: QVectorElement, diff --git a/crates/cxx-qt-lib/src/gui/qpolygon.rs b/crates/cxx-qt-lib/src/gui/qpolygon.rs index 16a49821b..76373044f 100644 --- a/crates/cxx-qt-lib/src/gui/qpolygon.rs +++ b/crates/cxx-qt-lib/src/gui/qpolygon.rs @@ -159,6 +159,12 @@ impl PartialEq for QPolygon { } } +impl std::fmt::Debug for QPolygon { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + QVector::fmt(self, f) + } +} + impl std::fmt::Display for QPolygon { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { write!(f, "{}", ffi::qpolygon_to_qstring(self)) diff --git a/crates/cxx-qt-lib/src/gui/qpolygonf.rs b/crates/cxx-qt-lib/src/gui/qpolygonf.rs index 74738e56d..7f2cd45c5 100644 --- a/crates/cxx-qt-lib/src/gui/qpolygonf.rs +++ b/crates/cxx-qt-lib/src/gui/qpolygonf.rs @@ -141,6 +141,12 @@ impl PartialEq for QPolygonF { } } +impl std::fmt::Debug for QPolygonF { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + QVector::fmt(self, f) + } +} + impl std::fmt::Display for QPolygonF { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { write!(f, "{}", ffi::qpolygonf_to_qstring(self)) From 96467b25490980062a836ce4e2cc30410bdd48f3 Mon Sep 17 00:00:00 2001 From: Joshua Booth Date: Fri, 17 Jan 2025 15:06:55 -0800 Subject: [PATCH 3/7] cxx-qt-lib: rename toQString to toDebugQString --- crates/cxx-qt-lib/include/common.h | 2 +- crates/cxx-qt-lib/src/core/qdate.rs | 6 +++--- crates/cxx-qt-lib/src/core/qdatetime.rs | 6 +++--- crates/cxx-qt-lib/src/core/qline.rs | 6 +++--- crates/cxx-qt-lib/src/core/qlinef.rs | 6 +++--- crates/cxx-qt-lib/src/core/qmargins.rs | 6 +++--- crates/cxx-qt-lib/src/core/qmarginsf.rs | 6 +++--- crates/cxx-qt-lib/src/core/qmodelindex.rs | 6 +++--- crates/cxx-qt-lib/src/core/qpersistentmodelindex.rs | 6 +++--- crates/cxx-qt-lib/src/core/qpoint.rs | 6 +++--- crates/cxx-qt-lib/src/core/qpointf.rs | 6 +++--- crates/cxx-qt-lib/src/core/qrect.rs | 6 +++--- crates/cxx-qt-lib/src/core/qrectf.rs | 6 +++--- crates/cxx-qt-lib/src/core/qsize.rs | 6 +++--- crates/cxx-qt-lib/src/core/qsizef.rs | 6 +++--- crates/cxx-qt-lib/src/core/qstringlist.rs | 6 +++--- crates/cxx-qt-lib/src/core/qtime.rs | 6 +++--- crates/cxx-qt-lib/src/core/qtimezone.rs | 6 +++--- crates/cxx-qt-lib/src/core/qurl.rs | 2 +- crates/cxx-qt-lib/src/gui/qfont.rs | 6 +++--- crates/cxx-qt-lib/src/gui/qpainterpath.rs | 6 +++--- crates/cxx-qt-lib/src/gui/qpen.rs | 6 +++--- crates/cxx-qt-lib/src/gui/qpolygon.rs | 6 +++--- crates/cxx-qt-lib/src/gui/qpolygonf.rs | 6 +++--- crates/cxx-qt-lib/src/gui/qvector2d.rs | 6 +++--- crates/cxx-qt-lib/src/gui/qvector3d.rs | 6 +++--- crates/cxx-qt-lib/src/gui/qvector4d.rs | 6 +++--- 27 files changed, 77 insertions(+), 77 deletions(-) diff --git a/crates/cxx-qt-lib/include/common.h b/crates/cxx-qt-lib/include/common.h index 0ea8f1fed..a4948d034 100644 --- a/crates/cxx-qt-lib/include/common.h +++ b/crates/cxx-qt-lib/include/common.h @@ -32,7 +32,7 @@ drop(T& value) template QString -toQString(const T& value) +toDebugQString(const T& value) { // We can't convert value directly into a string. // However most Qt types are able to stream into a QDebug object such as diff --git a/crates/cxx-qt-lib/src/core/qdate.rs b/crates/cxx-qt-lib/src/core/qdate.rs index a07e80dbb..e005fe85c 100644 --- a/crates/cxx-qt-lib/src/core/qdate.rs +++ b/crates/cxx-qt-lib/src/core/qdate.rs @@ -115,8 +115,8 @@ mod ffi { #[rust_name = "qdate_init"] fn construct(y: i32, m: i32, d: i32) -> QDate; #[doc(hidden)] - #[rust_name = "qdate_to_qstring"] - fn toQString(value: &QDate) -> QString; + #[rust_name = "qdate_to_debug_qstring"] + fn toDebugQString(value: &QDate) -> QString; } } @@ -136,7 +136,7 @@ impl Default for QDate { impl fmt::Display for QDate { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qdate_to_qstring(self)) + write!(f, "{}", ffi::qdate_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qdatetime.rs b/crates/cxx-qt-lib/src/core/qdatetime.rs index 3882eb7e2..fbc00c853 100644 --- a/crates/cxx-qt-lib/src/core/qdatetime.rs +++ b/crates/cxx-qt-lib/src/core/qdatetime.rs @@ -207,8 +207,8 @@ mod ffi { #[rust_name = "qdatetime_cmp"] fn operatorCmp(a: &QDateTime, b: &QDateTime) -> i8; #[doc(hidden)] - #[rust_name = "qdatetime_to_qstring"] - fn toQString(value: &QDateTime) -> QString; + #[rust_name = "qdatetime_to_debug_qstring"] + fn toDebugQString(value: &QDateTime) -> QString; } } @@ -399,7 +399,7 @@ impl Ord for QDateTime { impl fmt::Display for QDateTime { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qdatetime_to_qstring(self)) + write!(f, "{}", ffi::qdatetime_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qline.rs b/crates/cxx-qt-lib/src/core/qline.rs index 367c70853..0bf67c7f7 100644 --- a/crates/cxx-qt-lib/src/core/qline.rs +++ b/crates/cxx-qt-lib/src/core/qline.rs @@ -93,8 +93,8 @@ mod ffi { fn construct(pt1: QPoint, pt2: QPoint) -> QLine; #[doc(hidden)] - #[rust_name = "qline_to_qstring"] - fn toQString(value: &QLine) -> QString; + #[rust_name = "qline_to_debug_qstring"] + fn toDebugQString(value: &QLine) -> QString; } } @@ -122,7 +122,7 @@ impl Default for QLine { impl fmt::Display for QLine { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qline_to_qstring(self)) + write!(f, "{}", ffi::qline_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qlinef.rs b/crates/cxx-qt-lib/src/core/qlinef.rs index 9bad40878..8c80837d1 100644 --- a/crates/cxx-qt-lib/src/core/qlinef.rs +++ b/crates/cxx-qt-lib/src/core/qlinef.rs @@ -126,8 +126,8 @@ mod ffi { fn construct(line: &QLine) -> QLineF; #[doc(hidden)] - #[rust_name = "qlinef_to_qstring"] - fn toQString(value: &QLineF) -> QString; + #[rust_name = "qlinef_to_debug_qstring"] + fn toDebugQString(value: &QLineF) -> QString; } } @@ -170,7 +170,7 @@ impl From for ffi::QLine { impl fmt::Display for QLineF { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qlinef_to_qstring(self)) + write!(f, "{}", ffi::qlinef_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qmargins.rs b/crates/cxx-qt-lib/src/core/qmargins.rs index e7a848577..5da187b8c 100644 --- a/crates/cxx-qt-lib/src/core/qmargins.rs +++ b/crates/cxx-qt-lib/src/core/qmargins.rs @@ -67,8 +67,8 @@ mod ffi { #[rust_name = "qmargins_new"] fn construct(left: i32, top: i32, right: i32, bottom: i32) -> QMargins; #[doc(hidden)] - #[rust_name = "qmargins_to_qstring"] - fn toQString(value: &QMargins) -> QString; + #[rust_name = "qmargins_to_debug_qstring"] + fn toDebugQString(value: &QMargins) -> QString; #[doc(hidden)] #[rust_name = "qmargins_plus"] fn operatorPlus(a: &QMargins, b: &QMargins) -> QMargins; @@ -122,7 +122,7 @@ impl Default for QMargins { impl fmt::Display for QMargins { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qmargins_to_qstring(self)) + write!(f, "{}", ffi::qmargins_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qmarginsf.rs b/crates/cxx-qt-lib/src/core/qmarginsf.rs index 506491f80..8fcbcf800 100644 --- a/crates/cxx-qt-lib/src/core/qmarginsf.rs +++ b/crates/cxx-qt-lib/src/core/qmarginsf.rs @@ -69,8 +69,8 @@ mod ffi { #[rust_name = "qmarginsf_new"] fn construct(left: f64, top: f64, right: f64, bottom: f64) -> QMarginsF; #[doc(hidden)] - #[rust_name = "qmarginsf_to_qstring"] - fn toQString(value: &QMarginsF) -> QString; + #[rust_name = "qmarginsf_to_debug_qstring"] + fn toDebugQString(value: &QMarginsF) -> QString; #[doc(hidden)] #[rust_name = "qmarginsf_plus"] fn operatorPlus(a: &QMarginsF, b: &QMarginsF) -> QMarginsF; @@ -118,7 +118,7 @@ impl Default for QMarginsF { impl fmt::Display for QMarginsF { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qmarginsf_to_qstring(self)) + write!(f, "{}", ffi::qmarginsf_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qmodelindex.rs b/crates/cxx-qt-lib/src/core/qmodelindex.rs index de029dabc..22c2aa5dc 100644 --- a/crates/cxx-qt-lib/src/core/qmodelindex.rs +++ b/crates/cxx-qt-lib/src/core/qmodelindex.rs @@ -52,8 +52,8 @@ mod ffi { #[rust_name = "qmodelindex_eq"] fn operatorEq(a: &QModelIndex, b: &QModelIndex) -> bool; #[doc(hidden)] - #[rust_name = "qmodelindex_to_qstring"] - fn toQString(value: &QModelIndex) -> QString; + #[rust_name = "qmodelindex_to_debug_qstring"] + fn toDebugQString(value: &QModelIndex) -> QString; #[doc(hidden)] #[rust_name = "qmodelindex_internal_id"] @@ -97,7 +97,7 @@ impl std::cmp::Eq for QModelIndex {} impl fmt::Display for QModelIndex { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qmodelindex_to_qstring(self)) + write!(f, "{}", ffi::qmodelindex_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qpersistentmodelindex.rs b/crates/cxx-qt-lib/src/core/qpersistentmodelindex.rs index 96313bc8a..425ebd229 100644 --- a/crates/cxx-qt-lib/src/core/qpersistentmodelindex.rs +++ b/crates/cxx-qt-lib/src/core/qpersistentmodelindex.rs @@ -54,8 +54,8 @@ mod ffi { #[rust_name = "qpersistentmodelindex_eq"] fn operatorEq(a: &QPersistentModelIndex, b: &QPersistentModelIndex) -> bool; #[doc(hidden)] - #[rust_name = "qpersistentmodelindex_to_qstring"] - fn toQString(value: &QPersistentModelIndex) -> QString; + #[rust_name = "qpersistentmodelindex_to_debug_qstring"] + fn toDebugQString(value: &QPersistentModelIndex) -> QString; } } @@ -96,7 +96,7 @@ impl std::cmp::Eq for QPersistentModelIndex {} impl fmt::Display for QPersistentModelIndex { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qpersistentmodelindex_to_qstring(self)) + write!(f, "{}", ffi::qpersistentmodelindex_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qpoint.rs b/crates/cxx-qt-lib/src/core/qpoint.rs index 5be1fa1b5..5c4dbc342 100644 --- a/crates/cxx-qt-lib/src/core/qpoint.rs +++ b/crates/cxx-qt-lib/src/core/qpoint.rs @@ -70,8 +70,8 @@ mod ffi { #[rust_name = "qpoint_init"] fn construct(x: i32, y: i32) -> QPoint; #[doc(hidden)] - #[rust_name = "qpoint_to_qstring"] - fn toQString(value: &QPoint) -> QString; + #[rust_name = "qpoint_to_debug_qstring"] + fn toDebugQString(value: &QPoint) -> QString; #[doc(hidden)] #[rust_name = "qpoint_plus"] fn operatorPlus(a: &QPoint, b: &QPoint) -> QPoint; @@ -122,7 +122,7 @@ impl Default for QPoint { impl fmt::Display for QPoint { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qpoint_to_qstring(self)) + write!(f, "{}", ffi::qpoint_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qpointf.rs b/crates/cxx-qt-lib/src/core/qpointf.rs index 447a5db8f..3a12b91c2 100644 --- a/crates/cxx-qt-lib/src/core/qpointf.rs +++ b/crates/cxx-qt-lib/src/core/qpointf.rs @@ -70,8 +70,8 @@ mod ffi { #[rust_name = "qpointf_from_qpoint"] fn construct(point: &QPoint) -> QPointF; #[doc(hidden)] - #[rust_name = "qpointf_to_qstring"] - fn toQString(value: &QPointF) -> QString; + #[rust_name = "qpointf_to_debug_qstring"] + fn toDebugQString(value: &QPointF) -> QString; #[doc(hidden)] #[rust_name = "qpointf_plus"] fn operatorPlus(a: &QPointF, b: &QPointF) -> QPointF; @@ -116,7 +116,7 @@ impl Default for QPointF { impl fmt::Display for QPointF { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qpointf_to_qstring(self)) + write!(f, "{}", ffi::qpointf_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qrect.rs b/crates/cxx-qt-lib/src/core/qrect.rs index b0f37f417..c25abe19e 100644 --- a/crates/cxx-qt-lib/src/core/qrect.rs +++ b/crates/cxx-qt-lib/src/core/qrect.rs @@ -257,8 +257,8 @@ mod ffi { #[rust_name = "qrect_init"] fn construct(x: i32, y: i32, width: i32, height: i32) -> QRect; #[doc(hidden)] - #[rust_name = "qrect_to_qstring"] - fn toQString(value: &QRect) -> QString; + #[rust_name = "qrect_to_debug_qstring"] + fn toDebugQString(value: &QRect) -> QString; #[doc(hidden)] #[rust_name = "qrect_plus"] fn operatorPlus(a: &QRect, b: &QMargins) -> QRect; @@ -295,7 +295,7 @@ impl Default for QRect { impl fmt::Display for QRect { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qrect_to_qstring(self)) + write!(f, "{}", ffi::qrect_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qrectf.rs b/crates/cxx-qt-lib/src/core/qrectf.rs index 67b42c371..3ba51b236 100644 --- a/crates/cxx-qt-lib/src/core/qrectf.rs +++ b/crates/cxx-qt-lib/src/core/qrectf.rs @@ -259,8 +259,8 @@ mod ffi { #[rust_name = "qrectf_from_qrect"] fn construct(rectangle: &QRect) -> QRectF; #[doc(hidden)] - #[rust_name = "qrectf_to_qstring"] - fn toQString(value: &QRectF) -> QString; + #[rust_name = "qrectf_to_debug_qstring"] + fn toDebugQString(value: &QRectF) -> QString; #[doc(hidden)] #[rust_name = "qrectf_plus"] fn operatorPlus(a: &QRectF, b: &QMarginsF) -> QRectF; @@ -296,7 +296,7 @@ impl Default for QRectF { impl fmt::Display for QRectF { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qrectf_to_qstring(self)) + write!(f, "{}", ffi::qrectf_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qsize.rs b/crates/cxx-qt-lib/src/core/qsize.rs index 58aa61f2f..41266e132 100644 --- a/crates/cxx-qt-lib/src/core/qsize.rs +++ b/crates/cxx-qt-lib/src/core/qsize.rs @@ -97,8 +97,8 @@ mod ffi { #[rust_name = "qsize_init"] fn construct(w: i32, h: i32) -> QSize; #[doc(hidden)] - #[rust_name = "qsize_to_qstring"] - fn toQString(value: &QSize) -> QString; + #[rust_name = "qsize_to_debug_qstring"] + fn toDebugQString(value: &QSize) -> QString; #[doc(hidden)] #[rust_name = "qsize_plus"] fn operatorPlus(a: &QSize, b: &QSize) -> QSize; @@ -138,7 +138,7 @@ impl Default for QSize { impl fmt::Display for QSize { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qsize_to_qstring(self)) + write!(f, "{}", ffi::qsize_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qsizef.rs b/crates/cxx-qt-lib/src/core/qsizef.rs index 971305397..9a3ec13b3 100644 --- a/crates/cxx-qt-lib/src/core/qsizef.rs +++ b/crates/cxx-qt-lib/src/core/qsizef.rs @@ -100,8 +100,8 @@ mod ffi { #[rust_name = "qsizef_from_qsize"] fn construct(size: &QSize) -> QSizeF; #[doc(hidden)] - #[rust_name = "qsizef_to_qstring"] - fn toQString(value: &QSizeF) -> QString; + #[rust_name = "qsizef_to_debug_qstring"] + fn toDebugQString(value: &QSizeF) -> QString; #[doc(hidden)] #[rust_name = "qsizef_plus"] fn operatorPlus(a: &QSizeF, b: &QSizeF) -> QSizeF; @@ -141,7 +141,7 @@ impl Default for QSizeF { impl fmt::Display for QSizeF { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qsizef_to_qstring(self)) + write!(f, "{}", ffi::qsizef_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qstringlist.rs b/crates/cxx-qt-lib/src/core/qstringlist.rs index 77bd73b9f..56367454d 100644 --- a/crates/cxx-qt-lib/src/core/qstringlist.rs +++ b/crates/cxx-qt-lib/src/core/qstringlist.rs @@ -74,8 +74,8 @@ mod ffi { fn operatorEq(a: &QStringList, b: &QStringList) -> bool; #[doc(hidden)] - #[rust_name = "qstringlist_to_qstring"] - fn toQString(value: &QStringList) -> QString; + #[rust_name = "qstringlist_to_debug_qstring"] + fn toDebugQString(value: &QStringList) -> QString; } #[namespace = "rust::cxxqtlib1"] @@ -142,7 +142,7 @@ impl std::cmp::Eq for QStringList {} impl std::fmt::Display for QStringList { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}", ffi::qstringlist_to_qstring(self)) + write!(f, "{}", ffi::qstringlist_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qtime.rs b/crates/cxx-qt-lib/src/core/qtime.rs index 8ea891e3b..29c294ef6 100644 --- a/crates/cxx-qt-lib/src/core/qtime.rs +++ b/crates/cxx-qt-lib/src/core/qtime.rs @@ -111,8 +111,8 @@ mod ffi { #[rust_name = "qtime_init"] fn construct(h: i32, m: i32, s: i32, ms: i32) -> QTime; #[doc(hidden)] - #[rust_name = "qtime_to_qstring"] - fn toQString(value: &QTime) -> QString; + #[rust_name = "qtime_to_debug_qstring"] + fn toDebugQString(value: &QTime) -> QString; } } @@ -178,7 +178,7 @@ impl Default for QTime { impl fmt::Display for QTime { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qtime_to_qstring(self)) + write!(f, "{}", ffi::qtime_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qtimezone.rs b/crates/cxx-qt-lib/src/core/qtimezone.rs index cfef05dfb..a157b9f3a 100644 --- a/crates/cxx-qt-lib/src/core/qtimezone.rs +++ b/crates/cxx-qt-lib/src/core/qtimezone.rs @@ -103,8 +103,8 @@ mod ffi { #[rust_name = "qtimezone_eq"] fn operatorEq(a: &QTimeZone, b: &QTimeZone) -> bool; #[doc(hidden)] - #[rust_name = "qtimezone_to_qstring"] - fn toQString(value: &QTimeZone) -> QString; + #[rust_name = "qtimezone_to_debug_qstring"] + fn toDebugQString(value: &QTimeZone) -> QString; } // QTimeZone only has a copy-constructor and not a move-constructor, which means that the following is true @@ -169,7 +169,7 @@ impl std::cmp::Eq for QTimeZone {} impl fmt::Display for QTimeZone { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qtimezone_to_qstring(self)) + write!(f, "{}", ffi::qtimezone_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qurl.rs b/crates/cxx-qt-lib/src/core/qurl.rs index 2da7f37bb..a9870be1c 100644 --- a/crates/cxx-qt-lib/src/core/qurl.rs +++ b/crates/cxx-qt-lib/src/core/qurl.rs @@ -186,7 +186,7 @@ mod ffi { #[doc(hidden)] #[rust_name = "qurl_debug"] - fn toQString(url: &QUrl) -> QString; + fn toDebugQString(url: &QUrl) -> QString; } } diff --git a/crates/cxx-qt-lib/src/gui/qfont.rs b/crates/cxx-qt-lib/src/gui/qfont.rs index 8c85fd45d..893a145d5 100644 --- a/crates/cxx-qt-lib/src/gui/qfont.rs +++ b/crates/cxx-qt-lib/src/gui/qfont.rs @@ -355,8 +355,8 @@ mod ffi { fn operatorEq(a: &QFont, b: &QFont) -> bool; #[doc(hidden)] - #[rust_name = "qfont_to_qstring"] - fn toQString(value: &QFont) -> QString; + #[rust_name = "qfont_to_debug_qstring"] + fn toDebugQString(value: &QFont) -> QString; } } @@ -392,7 +392,7 @@ impl Clone for QFont { impl std::fmt::Display for QFont { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}", ffi::qfont_to_qstring(self)) + write!(f, "{}", ffi::qfont_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/gui/qpainterpath.rs b/crates/cxx-qt-lib/src/gui/qpainterpath.rs index 542c29c49..edf3232b7 100644 --- a/crates/cxx-qt-lib/src/gui/qpainterpath.rs +++ b/crates/cxx-qt-lib/src/gui/qpainterpath.rs @@ -200,8 +200,8 @@ mod ffi { fn operatorEq(a: &QPainterPath, b: &QPainterPath) -> bool; #[doc(hidden)] - #[rust_name = "qpainterpath_to_qstring"] - fn toQString(value: &QPainterPath) -> QString; + #[rust_name = "qpainterpath_to_debug_qstring"] + fn toDebugQString(value: &QPainterPath) -> QString; } } @@ -244,7 +244,7 @@ impl PartialEq for QPainterPath { impl fmt::Display for QPainterPath { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qpainterpath_to_qstring(self)) + write!(f, "{}", ffi::qpainterpath_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/gui/qpen.rs b/crates/cxx-qt-lib/src/gui/qpen.rs index edcbc07f7..b728b4019 100644 --- a/crates/cxx-qt-lib/src/gui/qpen.rs +++ b/crates/cxx-qt-lib/src/gui/qpen.rs @@ -122,8 +122,8 @@ mod ffi { fn operatorEq(a: &QPen, b: &QPen) -> bool; #[doc(hidden)] - #[rust_name = "qpen_to_qstring"] - fn toQString(value: &QPen) -> QString; + #[rust_name = "qpen_to_debug_qstring"] + fn toDebugQString(value: &QPen) -> QString; } } @@ -173,7 +173,7 @@ impl From<&ffi::PenStyle> for QPen { impl fmt::Display for QPen { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qpen_to_qstring(self)) + write!(f, "{}", ffi::qpen_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/gui/qpolygon.rs b/crates/cxx-qt-lib/src/gui/qpolygon.rs index 76373044f..f401ccce2 100644 --- a/crates/cxx-qt-lib/src/gui/qpolygon.rs +++ b/crates/cxx-qt-lib/src/gui/qpolygon.rs @@ -98,8 +98,8 @@ mod ffi { fn operatorEq(a: &QPolygon, b: &QPolygon) -> bool; #[doc(hidden)] - #[rust_name = "qpolygon_to_qstring"] - fn toQString(value: &QPolygon) -> QString; + #[rust_name = "qpolygon_to_debug_qstring"] + fn toDebugQString(value: &QPolygon) -> QString; } #[namespace = "rust::cxxqtlib1"] @@ -167,7 +167,7 @@ impl std::fmt::Debug for QPolygon { impl std::fmt::Display for QPolygon { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}", ffi::qpolygon_to_qstring(self)) + write!(f, "{}", ffi::qpolygon_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/gui/qpolygonf.rs b/crates/cxx-qt-lib/src/gui/qpolygonf.rs index 7f2cd45c5..7218de662 100644 --- a/crates/cxx-qt-lib/src/gui/qpolygonf.rs +++ b/crates/cxx-qt-lib/src/gui/qpolygonf.rs @@ -89,8 +89,8 @@ mod ffi { fn operatorEq(a: &QPolygonF, b: &QPolygonF) -> bool; #[doc(hidden)] - #[rust_name = "qpolygonf_to_qstring"] - fn toQString(value: &QPolygonF) -> QString; + #[rust_name = "qpolygonf_to_debug_qstring"] + fn toDebugQString(value: &QPolygonF) -> QString; } #[namespace = "rust::cxxqtlib1"] @@ -149,7 +149,7 @@ impl std::fmt::Debug for QPolygonF { impl std::fmt::Display for QPolygonF { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}", ffi::qpolygonf_to_qstring(self)) + write!(f, "{}", ffi::qpolygonf_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/gui/qvector2d.rs b/crates/cxx-qt-lib/src/gui/qvector2d.rs index d4f9da362..7d1172622 100644 --- a/crates/cxx-qt-lib/src/gui/qvector2d.rs +++ b/crates/cxx-qt-lib/src/gui/qvector2d.rs @@ -107,8 +107,8 @@ mod ffi { #[rust_name = "qvector2d_distance_to_point"] fn qvector2DDistanceToPoint(vector: &QVector2D, point: QVector2D) -> f32; #[doc(hidden)] - #[rust_name = "qvector2d_to_qstring"] - fn toQString(value: &QVector2D) -> QString; + #[rust_name = "qvector2d_to_debug_qstring"] + fn toDebugQString(value: &QVector2D) -> QString; #[doc(hidden)] #[rust_name = "qvector2d_plus"] fn operatorPlus(a: &QVector2D, b: &QVector2D) -> QVector2D; @@ -160,7 +160,7 @@ impl Default for QVector2D { impl std::fmt::Display for QVector2D { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}", ffi::qvector2d_to_qstring(self)) + write!(f, "{}", ffi::qvector2d_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/gui/qvector3d.rs b/crates/cxx-qt-lib/src/gui/qvector3d.rs index 729e7cf21..f6927fe52 100644 --- a/crates/cxx-qt-lib/src/gui/qvector3d.rs +++ b/crates/cxx-qt-lib/src/gui/qvector3d.rs @@ -123,8 +123,8 @@ mod ffi { #[rust_name = "qvector3d_distance_to_point"] fn qvector3DDistanceToPoint(vector: &QVector3D, point: QVector3D) -> f32; #[doc(hidden)] - #[rust_name = "qvector3d_to_qstring"] - fn toQString(value: &QVector3D) -> QString; + #[rust_name = "qvector3d_to_debug_qstring"] + fn toDebugQString(value: &QVector3D) -> QString; #[doc(hidden)] #[rust_name = "qvector3d_plus"] fn operatorPlus(a: &QVector3D, b: &QVector3D) -> QVector3D; @@ -183,7 +183,7 @@ impl Default for QVector3D { impl std::fmt::Display for QVector3D { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}", ffi::qvector3d_to_qstring(self)) + write!(f, "{}", ffi::qvector3d_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/gui/qvector4d.rs b/crates/cxx-qt-lib/src/gui/qvector4d.rs index d1021049e..3725eb6e5 100644 --- a/crates/cxx-qt-lib/src/gui/qvector4d.rs +++ b/crates/cxx-qt-lib/src/gui/qvector4d.rs @@ -114,8 +114,8 @@ mod ffi { fn construct() -> QVector4D; #[doc(hidden)] - #[rust_name = "qvector4d_to_qstring"] - fn toQString(value: &QVector4D) -> QString; + #[rust_name = "qvector4d_to_debug_qstring"] + fn toDebugQString(value: &QVector4D) -> QString; #[doc(hidden)] #[rust_name = "qvector4d_plus"] fn operatorPlus(a: &QVector4D, b: &QVector4D) -> QVector4D; @@ -155,7 +155,7 @@ impl Default for QVector4D { impl std::fmt::Display for QVector4D { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}", ffi::qvector4d_to_qstring(self)) + write!(f, "{}", ffi::qvector4d_to_debug_qstring(self)) } } From 001e35a55dcb886418facf1b32781d1bc3374a2e Mon Sep 17 00:00:00 2001 From: Joshua Booth Date: Fri, 17 Jan 2025 17:19:56 -0800 Subject: [PATCH 4/7] cxx-qt-lib: provide fmt::Debug implementations --- crates/cxx-qt-lib/include/common.h | 7 ++ crates/cxx-qt-lib/include/core/qtimezone.h | 5 ++ crates/cxx-qt-lib/include/core/qurl.h | 2 - crates/cxx-qt-lib/src/core/qanystringview.rs | 16 +++++ crates/cxx-qt-lib/src/core/qbytearray.rs | 9 +-- crates/cxx-qt-lib/src/core/qdate.rs | 7 +- crates/cxx-qt-lib/src/core/qdatetime.rs | 7 +- crates/cxx-qt-lib/src/core/qhash/mod.rs | 12 ++++ crates/cxx-qt-lib/src/core/qlist/mod.rs | 7 +- crates/cxx-qt-lib/src/core/qmap/mod.rs | 12 ++++ crates/cxx-qt-lib/src/core/qmodelindex.rs | 4 +- .../src/core/qpersistentmodelindex.rs | 4 +- crates/cxx-qt-lib/src/core/qset/mod.rs | 7 +- crates/cxx-qt-lib/src/core/qstring.rs | 2 +- crates/cxx-qt-lib/src/core/qstringlist.rs | 11 +-- crates/cxx-qt-lib/src/core/qtime.rs | 7 +- crates/cxx-qt-lib/src/core/qtimezone.cpp | 8 +++ crates/cxx-qt-lib/src/core/qtimezone.rs | 68 ++++++++++++++++++- crates/cxx-qt-lib/src/core/qurl.cpp | 6 -- crates/cxx-qt-lib/src/core/qurl.rs | 10 +-- crates/cxx-qt-lib/src/core/quuid.rs | 4 +- crates/cxx-qt-lib/src/core/qvariant/mod.rs | 13 ++++ crates/cxx-qt-lib/src/core/qvector/mod.rs | 7 +- crates/cxx-qt-lib/src/gui/qfont.rs | 15 +++- crates/cxx-qt-lib/src/gui/qimage.rs | 13 ++++ crates/cxx-qt-lib/src/gui/qpainterpath.rs | 6 ++ crates/cxx-qt-lib/src/gui/qpen.rs | 6 ++ crates/cxx-qt-lib/src/gui/qpolygon.rs | 13 ++-- crates/cxx-qt-lib/src/gui/qpolygonf.rs | 13 ++-- crates/cxx-qt-lib/src/gui/qvector2d.rs | 6 +- crates/cxx-qt-lib/src/gui/qvector3d.rs | 6 +- crates/cxx-qt-lib/src/gui/qvector4d.rs | 6 +- 32 files changed, 251 insertions(+), 68 deletions(-) diff --git a/crates/cxx-qt-lib/include/common.h b/crates/cxx-qt-lib/include/common.h index a4948d034..8a204e993 100644 --- a/crates/cxx-qt-lib/include/common.h +++ b/crates/cxx-qt-lib/include/common.h @@ -30,6 +30,13 @@ drop(T& value) value.~T(); } +template +QString +toQString(const T& value) +{ + return value.toString(); +} + template QString toDebugQString(const T& value) diff --git a/crates/cxx-qt-lib/include/core/qtimezone.h b/crates/cxx-qt-lib/include/core/qtimezone.h index 3088bada7..e07b56365 100644 --- a/crates/cxx-qt-lib/include/core/qtimezone.h +++ b/crates/cxx-qt-lib/include/core/qtimezone.h @@ -13,6 +13,9 @@ #include #include +using QTimeZoneNameType = QTimeZone::NameType; +using QTimeZoneTimeType = QTimeZone::TimeType; + namespace rust { namespace cxxqtlib1 { @@ -22,6 +25,8 @@ ::std::unique_ptr qtimezoneClone(const QTimeZone& timezone); ::std::unique_ptr qtimezoneDefault(); +QString +qtimezoneDisplayName(const QTimeZone &timezone, QTimeZoneTimeType timeType, QTimeZoneNameType nameType); ::std::unique_ptr qtimezoneFromOffsetSeconds(::std::int32_t offsetSeconds); ::std::unique_ptr diff --git a/crates/cxx-qt-lib/include/core/qurl.h b/crates/cxx-qt-lib/include/core/qurl.h index 62f5b78d9..d65e117a2 100644 --- a/crates/cxx-qt-lib/include/core/qurl.h +++ b/crates/cxx-qt-lib/include/core/qurl.h @@ -89,8 +89,6 @@ qurlToPercentEncoding(const QString& input, const QByteArray& exclude, const QByteArray& include); QString -qurlToQString(const QUrl& url); -QString qurlUserInfo(const QUrl& url); QString qurlUserName(const QUrl& url); diff --git a/crates/cxx-qt-lib/src/core/qanystringview.rs b/crates/cxx-qt-lib/src/core/qanystringview.rs index a22c6b3a4..8b157af9c 100644 --- a/crates/cxx-qt-lib/src/core/qanystringview.rs +++ b/crates/cxx-qt-lib/src/core/qanystringview.rs @@ -60,6 +60,10 @@ mod ffi { #[doc(hidden)] #[rust_name = "QAnyStringView_len"] fn qanystringviewLen(string: &QAnyStringView) -> isize; + + #[doc(hidden)] + #[rust_name = "QAnyStringView_to_qstring"] + fn toQString(string: &QAnyStringView) -> QString; } } @@ -126,6 +130,18 @@ impl QAnyStringView<'_> { } } +impl fmt::Display for QAnyStringView<'_> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", ffi::QAnyStringView_to_qstring(self)) + } +} + +impl fmt::Debug for QAnyStringView<'_> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{self}") + } +} + // Safety: // // Static checks on the C++ side to ensure the size is the same. diff --git a/crates/cxx-qt-lib/src/core/qbytearray.rs b/crates/cxx-qt-lib/src/core/qbytearray.rs index 01ff7857d..6be2cd9b5 100644 --- a/crates/cxx-qt-lib/src/core/qbytearray.rs +++ b/crates/cxx-qt-lib/src/core/qbytearray.rs @@ -3,6 +3,7 @@ // // SPDX-License-Identifier: MIT OR Apache-2.0 use cxx::{type_id, ExternType}; +use std::fmt; use std::mem::MaybeUninit; #[cxx::bridge] @@ -151,9 +152,9 @@ impl std::cmp::PartialEq for QByteArray { impl std::cmp::Eq for QByteArray {} -impl std::fmt::Display for QByteArray { +impl fmt::Display for QByteArray { /// Convert the QByteArray to a Rust string - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { if let Ok(string) = String::from_utf8(self.into()) { write!(f, "{string}") } else { @@ -162,8 +163,8 @@ impl std::fmt::Display for QByteArray { } } -impl std::fmt::Debug for QByteArray { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { +impl fmt::Debug for QByteArray { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{self}") } } diff --git a/crates/cxx-qt-lib/src/core/qdate.rs b/crates/cxx-qt-lib/src/core/qdate.rs index e005fe85c..db850b787 100644 --- a/crates/cxx-qt-lib/src/core/qdate.rs +++ b/crates/cxx-qt-lib/src/core/qdate.rs @@ -117,6 +117,9 @@ mod ffi { #[doc(hidden)] #[rust_name = "qdate_to_debug_qstring"] fn toDebugQString(value: &QDate) -> QString; + #[doc(hidden)] + #[rust_name = "qdate_to_qstring"] + fn toQString(value: &QDate) -> QString; } } @@ -136,13 +139,13 @@ impl Default for QDate { impl fmt::Display for QDate { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qdate_to_debug_qstring(self)) + write!(f, "{}", ffi::qdate_to_qstring(self)) } } impl fmt::Debug for QDate { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{self}") + write!(f, "{}", ffi::qdate_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qdatetime.rs b/crates/cxx-qt-lib/src/core/qdatetime.rs index fbc00c853..a7c23c42a 100644 --- a/crates/cxx-qt-lib/src/core/qdatetime.rs +++ b/crates/cxx-qt-lib/src/core/qdatetime.rs @@ -209,6 +209,9 @@ mod ffi { #[doc(hidden)] #[rust_name = "qdatetime_to_debug_qstring"] fn toDebugQString(value: &QDateTime) -> QString; + #[doc(hidden)] + #[rust_name = "qdatetime_to_qstring"] + fn toQString(value: &QDateTime) -> QString; } } @@ -399,13 +402,13 @@ impl Ord for QDateTime { impl fmt::Display for QDateTime { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qdatetime_to_debug_qstring(self)) + write!(f, "{}", ffi::qdatetime_to_qstring(self)) } } impl fmt::Debug for QDateTime { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{self}") + write!(f, "{}", ffi::qdatetime_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qhash/mod.rs b/crates/cxx-qt-lib/src/core/qhash/mod.rs index fd6224d85..6cb60d4b9 100644 --- a/crates/cxx-qt-lib/src/core/qhash/mod.rs +++ b/crates/cxx-qt-lib/src/core/qhash/mod.rs @@ -4,6 +4,7 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 use core::{marker::PhantomData, mem::MaybeUninit}; use cxx::{type_id, ExternType}; +use std::fmt; /// The QHash class is a template class that provides a hash-table-based dictionary. /// @@ -142,6 +143,17 @@ where } } +impl fmt::Debug for QHash +where + T: QHashPair, + T::Key: fmt::Debug, + T::Value: fmt::Debug, +{ + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_map().entries(self.iter()).finish() + } +} + unsafe impl ExternType for QHash where T: QHashPair, diff --git a/crates/cxx-qt-lib/src/core/qlist/mod.rs b/crates/cxx-qt-lib/src/core/qlist/mod.rs index 283b31a93..62d14de23 100644 --- a/crates/cxx-qt-lib/src/core/qlist/mod.rs +++ b/crates/cxx-qt-lib/src/core/qlist/mod.rs @@ -13,6 +13,7 @@ use crate::{ }; use core::{marker::PhantomData, mem::MaybeUninit}; use cxx::{type_id, ExternType}; +use std::fmt; /// The QList class is a template class that provides a dynamic array. /// @@ -75,11 +76,11 @@ where impl Eq for QList where T: QListElement + Eq {} -impl std::fmt::Debug for QList +impl fmt::Debug for QList where - T: QListElement + std::fmt::Debug, + T: QListElement + fmt::Debug, { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.debug_list().entries(self.iter()).finish() } } diff --git a/crates/cxx-qt-lib/src/core/qmap/mod.rs b/crates/cxx-qt-lib/src/core/qmap/mod.rs index 9470129e7..42a69bc09 100644 --- a/crates/cxx-qt-lib/src/core/qmap/mod.rs +++ b/crates/cxx-qt-lib/src/core/qmap/mod.rs @@ -4,6 +4,7 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 use core::{marker::PhantomData, mem::MaybeUninit}; use cxx::{type_id, ExternType}; +use std::fmt; /// The QMap class is a template class that provides an associative array. /// @@ -65,6 +66,17 @@ where { } +impl fmt::Debug for QMap +where + T: QMapPair, + T::Key: fmt::Debug, + T::Value: fmt::Debug, +{ + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_map().entries(self.iter()).finish() + } +} + impl QMap where T: QMapPair, diff --git a/crates/cxx-qt-lib/src/core/qmodelindex.rs b/crates/cxx-qt-lib/src/core/qmodelindex.rs index 22c2aa5dc..6537bd5d5 100644 --- a/crates/cxx-qt-lib/src/core/qmodelindex.rs +++ b/crates/cxx-qt-lib/src/core/qmodelindex.rs @@ -97,13 +97,13 @@ impl std::cmp::Eq for QModelIndex {} impl fmt::Display for QModelIndex { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qmodelindex_to_debug_qstring(self)) + write!(f, "{self:?}") } } impl fmt::Debug for QModelIndex { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{self}") + write!(f, "{}", ffi::qmodelindex_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qpersistentmodelindex.rs b/crates/cxx-qt-lib/src/core/qpersistentmodelindex.rs index 425ebd229..44f171b58 100644 --- a/crates/cxx-qt-lib/src/core/qpersistentmodelindex.rs +++ b/crates/cxx-qt-lib/src/core/qpersistentmodelindex.rs @@ -96,13 +96,13 @@ impl std::cmp::Eq for QPersistentModelIndex {} impl fmt::Display for QPersistentModelIndex { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qpersistentmodelindex_to_debug_qstring(self)) + write!(f, "{self:?}") } } impl fmt::Debug for QPersistentModelIndex { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{self}") + write!(f, "{}", ffi::qpersistentmodelindex_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qset/mod.rs b/crates/cxx-qt-lib/src/core/qset/mod.rs index c0cc2ccc1..30b16c37f 100644 --- a/crates/cxx-qt-lib/src/core/qset/mod.rs +++ b/crates/cxx-qt-lib/src/core/qset/mod.rs @@ -7,6 +7,7 @@ use crate::QDateTime; use crate::{QByteArray, QDate, QPersistentModelIndex, QString, QTime, QUrl, QUuid}; use core::{marker::PhantomData, mem::MaybeUninit}; use cxx::{type_id, ExternType}; +use std::fmt; /// The QSet class is a template class that provides a hash-table-based set. /// @@ -64,11 +65,11 @@ where impl Eq for QSet where T: QSetElement + PartialEq {} -impl std::fmt::Debug for QSet +impl fmt::Debug for QSet where - T: QSetElement + std::fmt::Debug, + T: QSetElement + fmt::Debug, { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.debug_set().entries(self.iter()).finish() } } diff --git a/crates/cxx-qt-lib/src/core/qstring.rs b/crates/cxx-qt-lib/src/core/qstring.rs index 67d6856e0..b27b95867 100644 --- a/crates/cxx-qt-lib/src/core/qstring.rs +++ b/crates/cxx-qt-lib/src/core/qstring.rs @@ -254,7 +254,7 @@ impl fmt::Display for QString { /// /// Note that this converts from UTF-16 to UTF-8 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}", <&QString as Into>::into(self)) + write!(f, "{}", String::from(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qstringlist.rs b/crates/cxx-qt-lib/src/core/qstringlist.rs index 56367454d..7df0e0a40 100644 --- a/crates/cxx-qt-lib/src/core/qstringlist.rs +++ b/crates/cxx-qt-lib/src/core/qstringlist.rs @@ -5,6 +5,7 @@ use crate::{QList, QString}; use core::mem::MaybeUninit; use cxx::{type_id, ExternType}; +use std::fmt; use std::ops::{Deref, DerefMut}; #[cxx::bridge] @@ -140,15 +141,15 @@ impl std::cmp::PartialEq for QStringList { impl std::cmp::Eq for QStringList {} -impl std::fmt::Display for QStringList { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { +impl fmt::Display for QStringList { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}", ffi::qstringlist_to_debug_qstring(self)) } } -impl std::fmt::Debug for QStringList { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - QList::fmt(self, f) +impl fmt::Debug for QStringList { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{:?}", **self) } } diff --git a/crates/cxx-qt-lib/src/core/qtime.rs b/crates/cxx-qt-lib/src/core/qtime.rs index 29c294ef6..de69ee36e 100644 --- a/crates/cxx-qt-lib/src/core/qtime.rs +++ b/crates/cxx-qt-lib/src/core/qtime.rs @@ -113,6 +113,9 @@ mod ffi { #[doc(hidden)] #[rust_name = "qtime_to_debug_qstring"] fn toDebugQString(value: &QTime) -> QString; + #[doc(hidden)] + #[rust_name = "qtime_to_qstring"] + fn toQString(value: &QTime) -> QString; } } @@ -178,13 +181,13 @@ impl Default for QTime { impl fmt::Display for QTime { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qtime_to_debug_qstring(self)) + write!(f, "{}", ffi::qtime_to_qstring(self)) } } impl fmt::Debug for QTime { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{self}") + write!(f, "{}", ffi::qtime_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qtimezone.cpp b/crates/cxx-qt-lib/src/core/qtimezone.cpp index a3e4504a9..00e7b3154 100644 --- a/crates/cxx-qt-lib/src/core/qtimezone.cpp +++ b/crates/cxx-qt-lib/src/core/qtimezone.cpp @@ -27,6 +27,14 @@ qtimezoneDefault() return ::std::make_unique(); } +QString +qtimezoneDisplayName(const QTimeZone& timezone, + QTimeZoneTimeType timeType, + QTimeZoneNameType nameType) +{ + return timezone.displayName(timeType, nameType); +} + ::std::unique_ptr qtimezoneFromOffsetSeconds(::std::int32_t offsetSeconds) { diff --git a/crates/cxx-qt-lib/src/core/qtimezone.rs b/crates/cxx-qt-lib/src/core/qtimezone.rs index a157b9f3a..b852af4bb 100644 --- a/crates/cxx-qt-lib/src/core/qtimezone.rs +++ b/crates/cxx-qt-lib/src/core/qtimezone.rs @@ -6,6 +6,31 @@ use std::fmt; #[cxx::bridge] mod ffi { + #[repr(i32)] + #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] + enum QTimeZoneNameType { + /// The default form of the time zone name, one of LongName, ShortName or OffsetName + DefaultName, + /// The long form of the time zone name, e.g. "Central European Time" + LongName, + /// The short form of the time zone name, usually an abbreviation, e.g. "CET", in locales + /// that have one for the zone, otherwise a compact GMT-ofset form, e.g. "GMT+1" + ShortName, + /// The standard ISO offset form of the time zone name, e.g. "UTC+01:00" + OffsetName, + } + + #[repr(i32)] + #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] + enum QTimeZoneTimeType { + /// The standard time in a time zone, i.e. when Daylight-Saving is not in effect. For example when formatting a display name this will show something like "Pacific Standard Time". + StandardTime, + /// A time when Daylight-Saving is in effect. For example when formatting a display name this will show something like "Pacific daylight-saving time". + DaylightTime, + /// A time which is not specifically Standard or Daylight-Saving time, either an unknown time or a neutral form. For example when formatting a display name this will show something like "Pacific Time". + GenericTime, + } + unsafe extern "C++" { include!("cxx-qt-lib/qbytearray.h"); type QByteArray = crate::QByteArray; @@ -25,6 +50,8 @@ mod ffi { // // Therefore the internal QSharedDataPointer is incremented causing a memory leak, so use an opaque type. type QTimeZone; + type QTimeZoneNameType; + type QTimeZoneTimeType; /// Returns the time zone abbreviation at the given atDateTime. The abbreviation may change depending on DST or even historical events. fn abbreviation(self: &QTimeZone, atDateTime: &QDateTime) -> QString; @@ -79,6 +106,13 @@ mod ffi { #[rust_name = "qtimezone_default"] fn qtimezoneDefault() -> UniquePtr; #[doc(hidden)] + #[rust_name = "qtimezone_display_name"] + fn qtimezoneDisplayName( + timezone: &QTimeZone, + time_type: QTimeZoneTimeType, + name_type: QTimeZoneNameType, + ) -> QString; + #[doc(hidden)] #[rust_name = "qtimezone_from_offset_seconds"] fn qtimezoneFromOffsetSeconds(offset_seconds: i32) -> UniquePtr; #[doc(hidden)] @@ -115,7 +149,13 @@ mod ffi { impl UniquePtr {} } -pub use ffi::QTimeZone; +pub use ffi::{QTimeZone, QTimeZoneNameType, QTimeZoneTimeType}; + +impl Default for QTimeZoneNameType { + fn default() -> Self { + Self::DefaultName + } +} impl QTimeZone { /// Returns a list of all available IANA time zone IDs on this system. @@ -123,6 +163,24 @@ impl QTimeZone { ffi::qtimezone_available_time_zone_ids() } + /// Returns the localized time zone display name. + /// + /// Where the time zone display names have changed over time, the current names will be used. + /// If no suitably localized name of the given type is available, another name type may be + /// used, or an empty string may be returned. + /// + /// For custom timezones created by client code, the data supplied to the constructor are + /// used, as no localization data will be available for it. If this timezone is invalid, an + /// empty string is returned. This may also arise for the representation of local time if + /// determining the system time zone fails. + fn display_name( + &self, + time_type: QTimeZoneTimeType, + name_type: QTimeZoneNameType, + ) -> ffi::QString { + ffi::qtimezone_display_name(self, time_type, name_type) + } + /// Creates an instance of a time zone with the requested Offset from UTC of offsetSeconds. pub fn from_offset_seconds(offset_seconds: i32) -> cxx::UniquePtr { ffi::qtimezone_from_offset_seconds(offset_seconds) @@ -169,12 +227,16 @@ impl std::cmp::Eq for QTimeZone {} impl fmt::Display for QTimeZone { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qtimezone_to_debug_qstring(self)) + let name = self.display_name( + QTimeZoneTimeType::GenericTime, + QTimeZoneNameType::DefaultName, + ); + write!(f, "{name}") } } impl fmt::Debug for QTimeZone { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{self}") + write!(f, "{}", ffi::qtimezone_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/qurl.cpp b/crates/cxx-qt-lib/src/core/qurl.cpp index 4d58694e9..41406e6d5 100644 --- a/crates/cxx-qt-lib/src/core/qurl.cpp +++ b/crates/cxx-qt-lib/src/core/qurl.cpp @@ -199,12 +199,6 @@ qurlToPercentEncoding(const QString& input, return QUrl::toPercentEncoding(input, exclude, include); } -QString -qurlToQString(const QUrl& url) -{ - return url.toString(); -} - QString qurlUserInfo(const QUrl& url) { diff --git a/crates/cxx-qt-lib/src/core/qurl.rs b/crates/cxx-qt-lib/src/core/qurl.rs index a9870be1c..257974753 100644 --- a/crates/cxx-qt-lib/src/core/qurl.rs +++ b/crates/cxx-qt-lib/src/core/qurl.rs @@ -153,9 +153,6 @@ mod ffi { exclude: &QByteArray, include: &QByteArray, ) -> QByteArray; - #[doc(hidden)] - #[rust_name = "qurl_to_qstring"] - fn qurlToQString(url: &QUrl) -> QString; #[rust_name = "qurl_user_info"] fn qurlUserInfo(url: &QUrl) -> QString; #[rust_name = "qurl_user_name"] @@ -185,8 +182,11 @@ mod ffi { fn operatorEq(a: &QUrl, b: &QUrl) -> bool; #[doc(hidden)] - #[rust_name = "qurl_debug"] + #[rust_name = "qurl_to_debug_qstring"] fn toDebugQString(url: &QUrl) -> QString; + #[doc(hidden)] + #[rust_name = "qurl_to_qstring"] + fn toQString(url: &QUrl) -> QString; } } @@ -441,7 +441,7 @@ impl fmt::Display for QUrl { impl fmt::Debug for QUrl { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "{}", ffi::qurl_debug(self)) + write!(f, "{}", ffi::qurl_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/core/quuid.rs b/crates/cxx-qt-lib/src/core/quuid.rs index aa4168b8d..2524cb71c 100644 --- a/crates/cxx-qt-lib/src/core/quuid.rs +++ b/crates/cxx-qt-lib/src/core/quuid.rs @@ -120,13 +120,13 @@ impl Default for QUuid { impl fmt::Display for QUuid { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - ffi::quuid_to_string(self).fmt(f) + write!(f, "{}", ffi::quuid_to_string(self)) } } impl fmt::Debug for QUuid { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - ffi::quuid_to_string(self).fmt(f) + write!(f, "{self}") } } diff --git a/crates/cxx-qt-lib/src/core/qvariant/mod.rs b/crates/cxx-qt-lib/src/core/qvariant/mod.rs index ccdd3f80b..f31ecb9d4 100644 --- a/crates/cxx-qt-lib/src/core/qvariant/mod.rs +++ b/crates/cxx-qt-lib/src/core/qvariant/mod.rs @@ -4,11 +4,15 @@ // // SPDX-License-Identifier: MIT OR Apache-2.0 use cxx::{type_id, ExternType}; +use std::fmt; use std::mem::MaybeUninit; #[cxx::bridge] mod ffi { unsafe extern "C++" { + include!("cxx-qt-lib/qstring.h"); + type QString = crate::QString; + include!("cxx-qt-lib/qvariant.h"); type QVariant = super::QVariant; @@ -38,6 +42,9 @@ mod ffi { #[doc(hidden)] #[rust_name = "qvariant_eq"] fn operatorEq(a: &QVariant, b: &QVariant) -> bool; + #[doc(hidden)] + #[rust_name = "qvariant_to_debug_qstring"] + fn toDebugQString(variant: &QVariant) -> QString; } } @@ -130,6 +137,12 @@ impl std::cmp::PartialEq for QVariant { } } +impl fmt::Debug for QVariant { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", ffi::qvariant_to_debug_qstring(self)) + } +} + pub trait QVariantValue { fn can_convert(variant: &QVariant) -> bool; fn construct(value: &Self) -> QVariant; diff --git a/crates/cxx-qt-lib/src/core/qvector/mod.rs b/crates/cxx-qt-lib/src/core/qvector/mod.rs index 29a8b88b4..e6acd3bb9 100644 --- a/crates/cxx-qt-lib/src/core/qvector/mod.rs +++ b/crates/cxx-qt-lib/src/core/qvector/mod.rs @@ -13,6 +13,7 @@ use crate::{ }; use core::{marker::PhantomData, mem::MaybeUninit}; use cxx::{type_id, ExternType}; +use std::fmt; /// The QVector class is a template class that provides a dynamic array. /// @@ -75,11 +76,11 @@ where impl Eq for QVector where T: QVectorElement + Eq {} -impl std::fmt::Debug for QVector +impl fmt::Debug for QVector where - T: QVectorElement + std::fmt::Debug, + T: QVectorElement + fmt::Debug, { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.debug_list().entries(self.iter()).finish() } } diff --git a/crates/cxx-qt-lib/src/gui/qfont.rs b/crates/cxx-qt-lib/src/gui/qfont.rs index 893a145d5..d1d77c4f3 100644 --- a/crates/cxx-qt-lib/src/gui/qfont.rs +++ b/crates/cxx-qt-lib/src/gui/qfont.rs @@ -3,6 +3,7 @@ // // SPDX-License-Identifier: MIT OR Apache-2.0 use cxx::{type_id, ExternType}; +use std::fmt; use std::mem::MaybeUninit; #[cxx::bridge] @@ -357,7 +358,9 @@ mod ffi { #[doc(hidden)] #[rust_name = "qfont_to_debug_qstring"] fn toDebugQString(value: &QFont) -> QString; - + #[doc(hidden)] + #[rust_name = "qfont_to_qstring"] + fn toQString(value: &QFont) -> QString; } } @@ -390,8 +393,14 @@ impl Clone for QFont { } } -impl std::fmt::Display for QFont { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { +impl fmt::Display for QFont { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", ffi::qfont_to_qstring(self)) + } +} + +impl fmt::Debug for QFont { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}", ffi::qfont_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/gui/qimage.rs b/crates/cxx-qt-lib/src/gui/qimage.rs index 67e5a5247..44bcaa695 100644 --- a/crates/cxx-qt-lib/src/gui/qimage.rs +++ b/crates/cxx-qt-lib/src/gui/qimage.rs @@ -4,6 +4,7 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 use cxx::{type_id, ExternType}; +use std::fmt; use std::mem::MaybeUninit; #[cxx::bridge] @@ -74,6 +75,8 @@ mod ffi { type QImage = super::QImage; include!("cxx-qt-lib/qsize.h"); type QSize = crate::QSize; + include!("cxx-qt-lib/qstring.h"); + type QString = crate::QString; include!("cxx-qt-lib/qrect.h"); type QRect = crate::QRect; include!("cxx-qt-lib/qcolor.h"); @@ -260,6 +263,10 @@ mod ffi { #[doc(hidden)] #[rust_name = "qimage_eq"] fn operatorEq(a: &QImage, b: &QImage) -> bool; + + #[doc(hidden)] + #[rust_name = "qimage_to_debug_qstring"] + fn toDebugQString(image: &QImage) -> QString; } } @@ -302,6 +309,12 @@ impl PartialEq for QImage { impl Eq for QImage {} +impl fmt::Debug for QImage { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", ffi::qimage_to_debug_qstring(self)) + } +} + // Safety: // // Static checks on the C++ side to ensure the size & alignment is the same. diff --git a/crates/cxx-qt-lib/src/gui/qpainterpath.rs b/crates/cxx-qt-lib/src/gui/qpainterpath.rs index edf3232b7..8bc3c5f63 100644 --- a/crates/cxx-qt-lib/src/gui/qpainterpath.rs +++ b/crates/cxx-qt-lib/src/gui/qpainterpath.rs @@ -243,6 +243,12 @@ impl PartialEq for QPainterPath { } impl fmt::Display for QPainterPath { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{self:?}") + } +} + +impl fmt::Debug for QPainterPath { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}", ffi::qpainterpath_to_debug_qstring(self)) } diff --git a/crates/cxx-qt-lib/src/gui/qpen.rs b/crates/cxx-qt-lib/src/gui/qpen.rs index b728b4019..a1f9232d2 100644 --- a/crates/cxx-qt-lib/src/gui/qpen.rs +++ b/crates/cxx-qt-lib/src/gui/qpen.rs @@ -172,6 +172,12 @@ impl From<&ffi::PenStyle> for QPen { } impl fmt::Display for QPen { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{self:?}") + } +} + +impl fmt::Debug for QPen { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}", ffi::qpen_to_debug_qstring(self)) } diff --git a/crates/cxx-qt-lib/src/gui/qpolygon.rs b/crates/cxx-qt-lib/src/gui/qpolygon.rs index f401ccce2..314372639 100644 --- a/crates/cxx-qt-lib/src/gui/qpolygon.rs +++ b/crates/cxx-qt-lib/src/gui/qpolygon.rs @@ -5,6 +5,7 @@ use crate::{QPoint, QRect, QVector}; use core::mem::MaybeUninit; use cxx::{type_id, ExternType}; +use std::fmt; use std::ops::{Deref, DerefMut}; #[cxx::bridge] @@ -159,15 +160,15 @@ impl PartialEq for QPolygon { } } -impl std::fmt::Debug for QPolygon { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - QVector::fmt(self, f) +impl fmt::Display for QPolygon { + fn fmt(&self, f: &mut fmt::Formatter) -> std::fmt::Result { + write!(f, "{}", ffi::qpolygon_to_debug_qstring(self)) } } -impl std::fmt::Display for QPolygon { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}", ffi::qpolygon_to_debug_qstring(self)) +impl fmt::Debug for QPolygon { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{:?}", **self) } } diff --git a/crates/cxx-qt-lib/src/gui/qpolygonf.rs b/crates/cxx-qt-lib/src/gui/qpolygonf.rs index 7218de662..7b843df4d 100644 --- a/crates/cxx-qt-lib/src/gui/qpolygonf.rs +++ b/crates/cxx-qt-lib/src/gui/qpolygonf.rs @@ -4,6 +4,7 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 use core::mem::MaybeUninit; use cxx::{type_id, ExternType}; +use std::fmt; use std::ops::{Deref, DerefMut}; use crate::{QPointF, QVector}; @@ -141,15 +142,15 @@ impl PartialEq for QPolygonF { } } -impl std::fmt::Debug for QPolygonF { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - QVector::fmt(self, f) +impl fmt::Display for QPolygonF { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", ffi::qpolygonf_to_debug_qstring(self)) } } -impl std::fmt::Display for QPolygonF { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}", ffi::qpolygonf_to_debug_qstring(self)) +impl fmt::Debug for QPolygonF { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{:?}", **self) } } diff --git a/crates/cxx-qt-lib/src/gui/qvector2d.rs b/crates/cxx-qt-lib/src/gui/qvector2d.rs index 7d1172622..7349319e6 100644 --- a/crates/cxx-qt-lib/src/gui/qvector2d.rs +++ b/crates/cxx-qt-lib/src/gui/qvector2d.rs @@ -3,6 +3,8 @@ // // SPDX-License-Identifier: MIT OR Apache-2.0 +use std::fmt; + use cxx::{type_id, ExternType}; #[cxx::bridge] @@ -158,8 +160,8 @@ impl Default for QVector2D { } } -impl std::fmt::Display for QVector2D { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { +impl fmt::Display for QVector2D { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}", ffi::qvector2d_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/gui/qvector3d.rs b/crates/cxx-qt-lib/src/gui/qvector3d.rs index f6927fe52..c8b76046b 100644 --- a/crates/cxx-qt-lib/src/gui/qvector3d.rs +++ b/crates/cxx-qt-lib/src/gui/qvector3d.rs @@ -3,6 +3,8 @@ // // SPDX-License-Identifier: MIT OR Apache-2.0 +use std::fmt; + use cxx::{type_id, ExternType}; #[cxx::bridge] @@ -181,8 +183,8 @@ impl Default for QVector3D { } } -impl std::fmt::Display for QVector3D { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { +impl fmt::Display for QVector3D { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}", ffi::qvector3d_to_debug_qstring(self)) } } diff --git a/crates/cxx-qt-lib/src/gui/qvector4d.rs b/crates/cxx-qt-lib/src/gui/qvector4d.rs index 3725eb6e5..944f74b70 100644 --- a/crates/cxx-qt-lib/src/gui/qvector4d.rs +++ b/crates/cxx-qt-lib/src/gui/qvector4d.rs @@ -3,6 +3,8 @@ // // SPDX-License-Identifier: MIT OR Apache-2.0 +use std::fmt; + use cxx::{type_id, ExternType}; #[cxx::bridge] @@ -153,8 +155,8 @@ impl Default for QVector4D { } } -impl std::fmt::Display for QVector4D { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { +impl fmt::Display for QVector4D { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}", ffi::qvector4d_to_debug_qstring(self)) } } From 9cd7ee843fc2feee32aa9a9c57365ef1c9d934f3 Mon Sep 17 00:00:00 2001 From: Joshua Booth Date: Fri, 17 Jan 2025 17:36:55 -0800 Subject: [PATCH 5/7] cxx-qt-lib: add linebreaks to documentation --- crates/cxx-qt-lib/src/core/qtimezone.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/crates/cxx-qt-lib/src/core/qtimezone.rs b/crates/cxx-qt-lib/src/core/qtimezone.rs index b852af4bb..0916c9766 100644 --- a/crates/cxx-qt-lib/src/core/qtimezone.rs +++ b/crates/cxx-qt-lib/src/core/qtimezone.rs @@ -23,11 +23,16 @@ mod ffi { #[repr(i32)] #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] enum QTimeZoneTimeType { - /// The standard time in a time zone, i.e. when Daylight-Saving is not in effect. For example when formatting a display name this will show something like "Pacific Standard Time". + /// The standard time in a time zone, i.e. when Daylight-Saving is not in effect. For + /// example when formatting a display name this will show something like "Pacific Standard + /// Time". StandardTime, - /// A time when Daylight-Saving is in effect. For example when formatting a display name this will show something like "Pacific daylight-saving time". + /// A time when Daylight-Saving is in effect. For example when formatting a display name + /// this will show something like "Pacific daylight-saving time". DaylightTime, - /// A time which is not specifically Standard or Daylight-Saving time, either an unknown time or a neutral form. For example when formatting a display name this will show something like "Pacific Time". + /// A time which is not specifically Standard or Daylight-Saving time, either an unknown + /// time or a neutral form. For example when formatting a display name this will show + /// something like "Pacific Time". GenericTime, } From 7167077621c5def97564f2deb5bc80d3d7fdbf2f Mon Sep 17 00:00:00 2001 From: Joshua Booth Date: Fri, 17 Jan 2025 17:47:48 -0800 Subject: [PATCH 6/7] cxx-qt-lib: format qtimezone.h --- crates/cxx-qt-lib/include/core/qtimezone.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/cxx-qt-lib/include/core/qtimezone.h b/crates/cxx-qt-lib/include/core/qtimezone.h index e07b56365..fee474df4 100644 --- a/crates/cxx-qt-lib/include/core/qtimezone.h +++ b/crates/cxx-qt-lib/include/core/qtimezone.h @@ -26,7 +26,9 @@ qtimezoneClone(const QTimeZone& timezone); ::std::unique_ptr qtimezoneDefault(); QString -qtimezoneDisplayName(const QTimeZone &timezone, QTimeZoneTimeType timeType, QTimeZoneNameType nameType); +qtimezoneDisplayName(const QTimeZone& timezone, + QTimeZoneTimeType timeType, + QTimeZoneNameType nameType); ::std::unique_ptr qtimezoneFromOffsetSeconds(::std::int32_t offsetSeconds); ::std::unique_ptr From bb6f2e563f693f13fe61b169a5684a9f08760d36 Mon Sep 17 00:00:00 2001 From: Joshua Booth Date: Fri, 17 Jan 2025 18:07:14 -0800 Subject: [PATCH 7/7] cxx-qt-lib: fix build issues --- crates/cxx-qt-lib/src/core/qanystringview.rs | 1 + crates/cxx-qt-lib/src/gui/qpolygon.cpp | 2 +- crates/cxx-qt-lib/src/gui/qpolygonf.cpp | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/cxx-qt-lib/src/core/qanystringview.rs b/crates/cxx-qt-lib/src/core/qanystringview.rs index 8b157af9c..199c766ee 100644 --- a/crates/cxx-qt-lib/src/core/qanystringview.rs +++ b/crates/cxx-qt-lib/src/core/qanystringview.rs @@ -7,6 +7,7 @@ use core::ffi::c_void; use core::marker::PhantomData; use core::mem::MaybeUninit; use cxx::{type_id, ExternType}; +use std::fmt; #[cxx::bridge] mod ffi { diff --git a/crates/cxx-qt-lib/src/gui/qpolygon.cpp b/crates/cxx-qt-lib/src/gui/qpolygon.cpp index c686d83cd..32dd9ee11 100644 --- a/crates/cxx-qt-lib/src/gui/qpolygon.cpp +++ b/crates/cxx-qt-lib/src/gui/qpolygon.cpp @@ -42,7 +42,7 @@ qpolygonAsQVectorQPointRef(const QPolygon& shape) } QVector& -qpolygonAsQVectorQPointRefMut(QPolygon& shape) +qpolygonAsQVectorQPointRef(QPolygon& shape) { return static_cast&>(shape); } diff --git a/crates/cxx-qt-lib/src/gui/qpolygonf.cpp b/crates/cxx-qt-lib/src/gui/qpolygonf.cpp index 06f2a1775..665447a13 100644 --- a/crates/cxx-qt-lib/src/gui/qpolygonf.cpp +++ b/crates/cxx-qt-lib/src/gui/qpolygonf.cpp @@ -42,7 +42,7 @@ qpolygonfAsQVectorQPointFRef(const QPolygonF& shape) } QVector& -qpolygonfAsQVectorQPointFRefMut(QPolygonF& shape) +qpolygonfAsQVectorQPointFRef(QPolygonF& shape) { return static_cast&>(shape); }