Skip to content

cxx-qt-lib: standardize constructor method naming conventions #1220

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Casting is automatically implmented for qobjects or types which have `#[base = T]` in `"RustQt"` or `"C++Qt"` blocks
- Support for `QMessageLogContext` and sending log messages to the Qt message handler.

### Changed

- `QTime::from_string` and `QTime::from_string_enum` now return `Option<QTime>` rather than `QTime`, in keeping with the identical functions for `QDate` and `QDateTime`.
- Combined and renamed the following functions:
- `QDate::from_string` and `QDate::from_string_enum` → `QDate::from_qstring_opt`
- `QDate::format` and `QDate::format_enum` → `QDate::to_qstring`
- `QDateTime::from_date_and_time_time_zone` → `QDateTime::from_qdate_qtime_qtimezone`
- `QDateTime::from_date_and_time_time_spec` → `QDateTime::from_qdate_qtime_timespec`
- `QDateTime::from_string` and `QDateTime::from_string_enum` → `QDateTime::from_qstring_opt`
- `QDateTime::format` and `QDateTime::format_enum` → `QDateTime::to_qstring`
- `QImage::from_data` → `QImage::from_data_opt`
- `QTime::from_string` and `QTime::from_string_enum` → `QTime::from_qstring_opt`
- `QTime::format` and `QTime::format_enum` → `QTime::to_qstring`

### Removed

- CXX-Qt-build: Interface no longer includes compiler definitions (<https://github.com/KDAB/cxx-qt/issues/1165>)
Expand Down Expand Up @@ -146,7 +160,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- Do not use -bundle otherwise CMake builds are missing qt-static-initalizers (note this is broken in rustc 1.69)
- Do not import `Pin` in hidden module as invokables are outside now, resolving IDE integration
- Rust always links against a non-debug Windows runtime with *-msvc targets, so we need to link to MultiThreadedDLL
- Rust always links against a non-debug Windows runtime with \*-msvc targets, so we need to link to MultiThreadedDLL

### Removed

Expand Down
8 changes: 5 additions & 3 deletions crates/cxx-qt-lib/include/core/qdate.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,18 @@ namespace cxxqtlib1 {
QDate
qdateCurrentDate();
QDate
qdateFromString(const QString& string, const QString& format);
qdateFromQString(const QString& string, const QString& format);
QDate
qdateFromString(const QString& string, Qt::DateFormat format);
qdateFromQString(const QString& string, Qt::DateFormat format);
// In Qt 5 d is const-ref, in Qt 6 it is value
qint64
qdateDaysTo(const QDate& date, QDate d);
bool
qdateIsLeapYear(::std::int32_t year);
QString
qdateToFormat(const QDate& date, const QString& format);
qdateToQString(const QDate& date, Qt::DateFormat format);
QString
qdateToQString(const QDate& date, const QString& format);

}
}
6 changes: 6 additions & 0 deletions crates/cxx-qt-lib/include/core/qdatetime.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,11 @@ void
qdatetimeSetTimeZone(QDateTime& datetime, const QTimeZone& timeZone);
QDateTime
qdatetimeFromQString(const QString& string, Qt::DateFormat format);
QDateTime
qdatetimeFromQString(const QString& string, const QString& format);
QString
qdatetimeToQString(const QDateTime& date, Qt::DateFormat format);
QString
qdatetimeToQString(const QDateTime& date, const QString& format);
}
}
8 changes: 6 additions & 2 deletions crates/cxx-qt-lib/include/core/qtime.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,16 @@ qtimeFromMSecsSinceStartOfDay(::std::int32_t msecs);
::std::int32_t
qtimeMSecsTo(const QTime& time, QTime t);
QTime
qtimeFromString(const QString& string, const QString& format);
qtimeFromQString(const QString& string, const QString& format);
QTime
qtimeFromString(const QString& string, Qt::DateFormat format);
qtimeFromQString(const QString& string, Qt::DateFormat format);
// In Qt 5 t is const-ref, in Qt 6 it is value
::std::int32_t
qtimeSecsTo(const QTime& time, QTime t);
QString
qtimeToQString(const QTime& date, Qt::DateFormat format);
QString
qtimeToQString(const QTime& date, const QString& format);

bool
qtimeIsValid(int h, int m, int s, int ms);
Expand Down
12 changes: 9 additions & 3 deletions crates/cxx-qt-lib/src/core/qdate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,13 @@ qdateDaysTo(const QDate& date, QDate d)
}

QDate
qdateFromString(const QString& string, const QString& format)
qdateFromQString(const QString& string, const QString& format)
{
return QDate::fromString(string, format);
}

QDate
qdateFromString(const QString& string, Qt::DateFormat format)
qdateFromQString(const QString& string, Qt::DateFormat format)
{
return QDate::fromString(string, format);
}
Expand All @@ -53,7 +53,13 @@ qdateIsLeapYear(::std::int32_t year)
}

QString
qdateToFormat(const QDate& date, const QString& format)
qdateToQString(const QDate& date, const QString& format)
{
return date.toString(format);
}

QString
qdateToQString(const QDate& date, Qt::DateFormat format)
{
return date.toString(format);
}
Expand Down
72 changes: 42 additions & 30 deletions crates/cxx-qt-lib/src/core/qdate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
//
// SPDX-License-Identifier: MIT OR Apache-2.0

use crate::{AnyDateFormat, QString};
use cxx::{type_id, ExternType};
use std::fmt;

Expand Down Expand Up @@ -77,10 +78,6 @@ mod ffi {
#[rust_name = "set_date"]
fn setDate(self: &mut QDate, y: i32, m: i32, d: i32) -> bool;

/// Returns the time as a string. The format parameter determines the format of the string.
#[rust_name = "format_enum"]
fn toString(self: &QDate, format: DateFormat) -> QString;

/// Returns the year of this date.
fn year(self: &QDate) -> i32;
}
Expand All @@ -96,19 +93,22 @@ mod ffi {
fn qdateDaysTo(date: &QDate, d: QDate) -> qint64;

#[doc(hidden)]
#[rust_name = "qdate_from_string"]
fn qdateFromString(string: &QString, format: &QString) -> QDate;
#[rust_name = "qdate_from_qstring_qstring"]
fn qdateFromQString(string: &QString, format: &QString) -> QDate;
#[doc(hidden)]
#[rust_name = "qdate_from_string_enum"]
fn qdateFromString(string: &QString, format: DateFormat) -> QDate;
#[rust_name = "qdate_from_qstring_dateformat"]
fn qdateFromQString(string: &QString, format: DateFormat) -> QDate;

#[doc(hidden)]
#[rust_name = "qdate_is_leap_year"]
fn qdateIsLeapYear(year: i32) -> bool;
#[rust_name = "qdate_to_qstring_qstring"]
fn qdateToQString(date: &QDate, format: &QString) -> QString;
#[doc(hidden)]
#[rust_name = "qdate_to_qstring_dateformat"]
fn qdateToQString(date: &QDate, format: DateFormat) -> QString;

#[doc(hidden)]
#[rust_name = "qdate_to_format"]
fn qdateToFormat(date: &QDate, format: &QString) -> QString;
#[rust_name = "qdate_is_leap_year"]
fn qdateIsLeapYear(year: i32) -> bool;
}

#[namespace = "rust::cxxqtlib1"]
Expand Down Expand Up @@ -143,7 +143,7 @@ impl Default for QDate {

impl fmt::Display for QDate {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.format_enum(ffi::DateFormat::TextDate))
write!(f, "{}", self.to_qstring(ffi::DateFormat::TextDate))
}
}

Expand All @@ -166,33 +166,34 @@ impl QDate {
ffi::qdate_days_to(self, date)
}

/// Returns the time as a string. The format parameter determines the format of the result string.
pub fn format(&self, format: &ffi::QString) -> ffi::QString {
ffi::qdate_to_format(self, format)
}

/// Converts the Julian day jd to a QDate.
pub fn from_julian_day(jd: i64) -> Self {
Self { jd }
}

/// Returns the QTime represented by the string, using the format given, or None if the string cannot be parsed.
pub fn from_string(string: &ffi::QString, format: &ffi::QString) -> Option<Self> {
let date = ffi::qdate_from_string(string, format);
if date.is_valid() {
Some(date)
/// Returns the QDate represented by the string, using the format given.
/// If the string cannot be parsed, returns `None`.
pub fn from_qstring_opt<'a, T>(string: &QString, format: T) -> Option<Self>
where
T: Into<AnyDateFormat<'a>>,
{
let parsed = Self::from_qstring(string, format);
if parsed.is_valid() {
Some(parsed)
} else {
None
}
}

/// Returns the time represented in the string as a QTime using the format given, or None if this is not possible.
pub fn from_string_enum(string: &ffi::QString, format: ffi::DateFormat) -> Option<Self> {
let date = ffi::qdate_from_string_enum(string, format);
if date.is_valid() {
Some(date)
} else {
None
/// Returns the QDate represented by the string, using the format given.
/// If the string cannot be parsed, returns an invalid date.
fn from_qstring<'a, T>(string: &QString, format: T) -> Self
where
T: Into<AnyDateFormat<'a>>,
{
match format.into() {
AnyDateFormat::DateFormat(f) => ffi::qdate_from_qstring_dateformat(string, f),
AnyDateFormat::QString(f) => ffi::qdate_from_qstring_qstring(string, f),
}
}

Expand All @@ -210,6 +211,17 @@ impl QDate {
pub fn to_julian_day(&self) -> i64 {
self.jd
}

/// Returns the date as a string. The format parameter determines the format of the result string.
pub fn to_qstring<'a, T>(&self, format: T) -> QString
where
T: Into<AnyDateFormat<'a>>,
{
match format.into() {
AnyDateFormat::DateFormat(f) => ffi::qdate_to_qstring_dateformat(self, f),
AnyDateFormat::QString(f) => ffi::qdate_to_qstring_qstring(self, f),
}
}
}

// Safety:
Expand Down
18 changes: 18 additions & 0 deletions crates/cxx-qt-lib/src/core/qdatetime.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,5 +98,23 @@ qdatetimeFromQString(const QString& string, const Qt::DateFormat format)
return QDateTime::fromString(string, format);
}

QDateTime
qdatetimeFromQString(const QString& string, const QString& format)
{
return QDateTime::fromString(string, format);
}

QString
qdatetimeToQString(const QDateTime& date, const QString& format)
{
return date.toString(format);
}

QString
qdatetimeToQString(const QDateTime& date, Qt::DateFormat format)
{
return date.toString(format);
}

}
}
Loading
Loading