Added fromString functions to QDate, QTime, and QDateTime (#518)

Added fromString functions to QDate, QTime, and QDateTime and added a demo on how to show and sort QDate and QTime in a QTreeWidget.
This commit is contained in:
mspencer92 2020-04-14 13:16:02 -04:00 committed by GitHub
parent 527a18a1e5
commit e8c97e1938
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 123 additions and 9 deletions

View File

@ -43,5 +43,6 @@ DLL_EXPORT Napi::Value currentDate(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromJulianDay(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value isLeapYear(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value isValid(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromString(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromQVariant(const Napi::CallbackInfo& info);
} // namespace StaticDateWrapMethods

View File

@ -55,5 +55,6 @@ DLL_EXPORT Napi::Value currentDateTime(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value currentDateTimeUtc(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value currentMSecsSinceEpoch(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value currentSecsSinceEpoch(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromString(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromQVariant(const Napi::CallbackInfo& info);
} // namespace StaticDateTimeWrapMethods

View File

@ -42,5 +42,6 @@ namespace StaticTimeWrapMethods {
DLL_EXPORT Napi::Value currentTime(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromMSecsSinceStartOfDay(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value isValid(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromString(const Napi::CallbackInfo& info);
DLL_EXPORT Napi::Value fromQVariant(const Napi::CallbackInfo& info);
} // namespace StaticTimeWrapMethods

View File

@ -32,6 +32,7 @@ Napi::Object QDateWrap::init(Napi::Env env, Napi::Object exports) {
StaticMethod("fromJulianDay", &StaticDateWrapMethods::fromJulianDay),
StaticMethod("isLeapYear", &StaticDateWrapMethods::isLeapYear),
StaticMethod("isValid", &StaticDateWrapMethods::isValid),
StaticMethod("fromString", &StaticDateWrapMethods::fromString),
StaticMethod("fromQVariant", &StaticDateWrapMethods::fromQVariant),
COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QDateWrap)});
constructor = Napi::Persistent(func);
@ -235,6 +236,26 @@ Napi::Value StaticDateWrapMethods::isValid(const Napi::CallbackInfo& info) {
return Napi::Value::From(env, QDate::isValid(year, month, day));
}
Napi::Value StaticDateWrapMethods::fromString(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
std::string dateString = info[0].As<Napi::String>().Utf8Value();
QDate date;
if (info[1].IsString()) {
std::string format = info[1].As<Napi::String>().Utf8Value();
date = QDate::fromString(QString::fromUtf8(dateString.c_str()),
QString::fromUtf8(format.c_str()));
} else {
int format = info[1].As<Napi::Number>().Int32Value();
date = QDate::fromString(QString::fromUtf8(dateString.c_str()),
static_cast<Qt::DateFormat>(format));
}
auto instance = QDateWrap::constructor.New({Napi::External<QDate>::New(
env, new QDate(date.year(), date.month(), date.day()))});
return instance;
}
Napi::Value StaticDateWrapMethods::fromQVariant(
const Napi::CallbackInfo& info) {

View File

@ -48,6 +48,7 @@ Napi::Object QDateTimeWrap::init(Napi::Env env, Napi::Object exports) {
&StaticDateTimeWrapMethods::currentMSecsSinceEpoch),
StaticMethod("currentSecsSinceEpoch",
&StaticDateTimeWrapMethods::currentSecsSinceEpoch),
StaticMethod("fromString", &StaticDateTimeWrapMethods::fromString),
StaticMethod("fromQVariant", &StaticDateTimeWrapMethods::fromQVariant),
COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QDateTimeWrap)});
constructor = Napi::Persistent(func);
@ -386,6 +387,28 @@ Napi::Value StaticDateTimeWrapMethods::currentSecsSinceEpoch(
return Napi::Value::From(env, QDateTime::currentSecsSinceEpoch());
}
Napi::Value StaticDateTimeWrapMethods::fromString(
const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
std::string dateTimeString = info[0].As<Napi::String>().Utf8Value();
QDateTime dateTime;
if (info[1].IsString()) {
std::string format = info[1].As<Napi::String>().Utf8Value();
dateTime = QDateTime::fromString(QString::fromUtf8(dateTimeString.c_str()),
QString::fromUtf8(format.c_str()));
} else {
int format = info[1].As<Napi::Number>().Int32Value();
dateTime = QDateTime::fromString(QString::fromUtf8(dateTimeString.c_str()),
static_cast<Qt::DateFormat>(format));
}
auto instance = QDateTimeWrap::constructor.New(
{Napi::External<QDateTime>::New(env, new QDateTime(dateTime))});
return instance;
}
Napi::Value StaticDateTimeWrapMethods::fromQVariant(
const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();

View File

@ -30,6 +30,7 @@ Napi::Object QTimeWrap::init(Napi::Env env, Napi::Object exports) {
StaticMethod("fromMSecsSinceStartOfDay",
&StaticTimeWrapMethods::fromMSecsSinceStartOfDay),
StaticMethod("isValid", &StaticTimeWrapMethods::isValid),
StaticMethod("fromString", &StaticTimeWrapMethods::fromString),
StaticMethod("fromQVariant", &StaticTimeWrapMethods::fromQVariant),
COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QTimeWrap)});
constructor = Napi::Persistent(func);
@ -230,6 +231,27 @@ Napi::Value StaticTimeWrapMethods::isValid(const Napi::CallbackInfo& info) {
return Napi::Value::From(env, QTime::isValid(h, m, s, ms));
}
Napi::Value StaticTimeWrapMethods::fromString(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
std::string timeString = info[0].As<Napi::String>().Utf8Value();
QTime time;
if (info[1].IsString()) {
std::string format = info[1].As<Napi::String>().Utf8Value();
time = QTime::fromString(QString::fromUtf8(timeString.c_str()),
QString::fromUtf8(format.c_str()));
} else {
int format = info[1].As<Napi::Number>().Int32Value();
time = QTime::fromString(QString::fromUtf8(timeString.c_str()),
static_cast<Qt::DateFormat>(format));
}
auto instance = QTimeWrap::constructor.New({Napi::External<QTime>::New(
env, new QTime(time.hour(), time.minute(), time.second(), time.msec()))});
return instance;
}
Napi::Value StaticTimeWrapMethods::fromQVariant(
const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();

View File

@ -1,12 +1,48 @@
import { QFileDialog, DialogCode, FileMode } from './index';
import { QTime } from '.';
import { DateFormat } from './lib/QtEnums';
const fileDialog = new QFileDialog();
fileDialog.setFileMode(FileMode.AnyFile);
fileDialog.setNameFilter('All files (*.*)');
//const date = QDate.fromString('04132020', 'MMddyyyy');
const { QMainWindow, QTreeWidgetItem, QTreeWidget, QDate, ItemDataRole, QDateTime } = require('./index');
if (fileDialog.exec() === DialogCode.Accepted) {
const selectedFiles = fileDialog.selectedFiles();
console.log(selectedFiles);
} else {
console.log('User canceled');
const win = new QMainWindow();
const tree = new QTreeWidget();
tree.setSortingEnabled(true);
tree.setHeaderLabels(['Date', 'Time']);
const dates = [
'11/22/1973 02:55:43 AM',
'02/10/1949 08:44:35 AM',
'02/06/1970 02:45:24 PM',
'02/15/1984 04:04:01 AM',
'03/02/1981 01:14:37 PM',
'12/24/1937 11:51:14 AM',
'01/01/2003 08:44:47 PM',
'08/10/1961 12:21:59 PM',
'07/14/1977 04:02:20 AM',
'11/23/1980 11:58:03 PM',
'03/01/1965 12:35:36 AM',
'03/04/1996 05:32:37 AM',
'07/11/1986 10:16:10 AM',
'04/13/1933 02:14:08 PM',
'03/28/1972 08:50:09 PM',
'06/18/1925 07:06:51 AM',
'04/22/2017 08:29:33 PM',
'01/12/1932 04:01:28 AM',
'10/07/2019 08:14:44 PM',
'10/27/1987 11:51:41 AM',
'06/09/2002 06:04:50 AM',
'12/31/1980 01:33:19 PM',
'11/07/1964 04:43:42 PM',
'03/26/1957 06:40:36 AM',
];
for (const date of dates) {
const item = new QTreeWidgetItem();
const dateObject = QDate.fromString(date.split(' ')[0], 'MM/dd/yyyy');
const timeObject = QTime.fromString(date.split(' ')[1] + ' ' + date.split(' ')[2], 'hh:mm:ss AP');
item.setData(0, ItemDataRole.DisplayRole, dateObject.native);
item.setData(1, ItemDataRole.DisplayRole, timeObject.native);
tree.addTopLevelItem(item);
}
win.setCentralWidget(tree);
win.show();
(global as any).win = win;

View File

@ -77,6 +77,9 @@ export class QDate extends Component {
static isValid(year: number, month: number, day: number): boolean {
return addon.QDate.isValid(year, month, day);
}
static fromString(dateString: string, format: string | DateFormat): QDate {
return new QDate(addon.QDate.fromString(dateString, format));
}
static fromQVariant(variant: QVariant): QDate {
return new QDate(addon.QDate.fromQVariant(variant.native));
}

View File

@ -115,6 +115,9 @@ export class QDateTime extends Component {
static currentSecsSinceEpoch(): number {
return addon.QDateTime.currentSecsSinceEpoch();
}
static fromString(dateTimeString: string, format: string | DateFormat): QDateTime {
return addon.QDateTime.fromString(dateTimeString, format);
}
static fromQVariant(variant: QVariant): QDateTime {
return new QDateTime(addon.QDateTime.fromQVariant(variant.native));
}

View File

@ -74,6 +74,9 @@ export class QTime extends Component {
static isValid(h: number, m: number, s: number, ms = 0): boolean {
return addon.QTime.isValid(h, m, s, ms);
}
static fromString(timeString: string, format: string | DateFormat): QTime {
return new QTime(addon.QTime.fromString(timeString, format));
}
static fromQVariant(variant: QVariant): QTime {
return new QTime(addon.QTime.fromQVariant(variant.native));
}