diff --git a/src/cpp/include/nodegui/QtCore/QDate/qdate_wrap.h b/src/cpp/include/nodegui/QtCore/QDate/qdate_wrap.h index 4bb91bf25..9e96e7b0a 100644 --- a/src/cpp/include/nodegui/QtCore/QDate/qdate_wrap.h +++ b/src/cpp/include/nodegui/QtCore/QDate/qdate_wrap.h @@ -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 diff --git a/src/cpp/include/nodegui/QtCore/QDateTime/qdatetime_wrap.h b/src/cpp/include/nodegui/QtCore/QDateTime/qdatetime_wrap.h index 8dfdd7f8b..8b3dc9943 100644 --- a/src/cpp/include/nodegui/QtCore/QDateTime/qdatetime_wrap.h +++ b/src/cpp/include/nodegui/QtCore/QDateTime/qdatetime_wrap.h @@ -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 diff --git a/src/cpp/include/nodegui/QtCore/QTime/qtime_wrap.h b/src/cpp/include/nodegui/QtCore/QTime/qtime_wrap.h index 71b3e5000..f6b6fa0fc 100644 --- a/src/cpp/include/nodegui/QtCore/QTime/qtime_wrap.h +++ b/src/cpp/include/nodegui/QtCore/QTime/qtime_wrap.h @@ -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 diff --git a/src/cpp/lib/QtCore/QDate/qdate_wrap.cpp b/src/cpp/lib/QtCore/QDate/qdate_wrap.cpp index d64f195eb..bcf1f2c36 100644 --- a/src/cpp/lib/QtCore/QDate/qdate_wrap.cpp +++ b/src/cpp/lib/QtCore/QDate/qdate_wrap.cpp @@ -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().Utf8Value(); + + QDate date; + if (info[1].IsString()) { + std::string format = info[1].As().Utf8Value(); + date = QDate::fromString(QString::fromUtf8(dateString.c_str()), + QString::fromUtf8(format.c_str())); + } else { + int format = info[1].As().Int32Value(); + date = QDate::fromString(QString::fromUtf8(dateString.c_str()), + static_cast(format)); + } + auto instance = QDateWrap::constructor.New({Napi::External::New( + env, new QDate(date.year(), date.month(), date.day()))}); + return instance; +} Napi::Value StaticDateWrapMethods::fromQVariant( const Napi::CallbackInfo& info) { diff --git a/src/cpp/lib/QtCore/QDateTime/qdatetime_wrap.cpp b/src/cpp/lib/QtCore/QDateTime/qdatetime_wrap.cpp index 5bb033fa9..1767a64b6 100644 --- a/src/cpp/lib/QtCore/QDateTime/qdatetime_wrap.cpp +++ b/src/cpp/lib/QtCore/QDateTime/qdatetime_wrap.cpp @@ -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().Utf8Value(); + + QDateTime dateTime; + if (info[1].IsString()) { + std::string format = info[1].As().Utf8Value(); + dateTime = QDateTime::fromString(QString::fromUtf8(dateTimeString.c_str()), + QString::fromUtf8(format.c_str())); + } else { + int format = info[1].As().Int32Value(); + dateTime = QDateTime::fromString(QString::fromUtf8(dateTimeString.c_str()), + static_cast(format)); + } + auto instance = QDateTimeWrap::constructor.New( + {Napi::External::New(env, new QDateTime(dateTime))}); + return instance; +} + Napi::Value StaticDateTimeWrapMethods::fromQVariant( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); diff --git a/src/cpp/lib/QtCore/QTime/qtime_wrap.cpp b/src/cpp/lib/QtCore/QTime/qtime_wrap.cpp index 3d79e937b..f48710862 100644 --- a/src/cpp/lib/QtCore/QTime/qtime_wrap.cpp +++ b/src/cpp/lib/QtCore/QTime/qtime_wrap.cpp @@ -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().Utf8Value(); + + QTime time; + if (info[1].IsString()) { + std::string format = info[1].As().Utf8Value(); + time = QTime::fromString(QString::fromUtf8(timeString.c_str()), + QString::fromUtf8(format.c_str())); + } else { + int format = info[1].As().Int32Value(); + time = QTime::fromString(QString::fromUtf8(timeString.c_str()), + static_cast(format)); + } + auto instance = QTimeWrap::constructor.New({Napi::External::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(); diff --git a/src/demo.ts b/src/demo.ts index d04feb7d7..c1dc427b0 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -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; diff --git a/src/lib/QtCore/QDate.ts b/src/lib/QtCore/QDate.ts index 7837d626b..71aa8f391 100644 --- a/src/lib/QtCore/QDate.ts +++ b/src/lib/QtCore/QDate.ts @@ -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)); } diff --git a/src/lib/QtCore/QDateTime.ts b/src/lib/QtCore/QDateTime.ts index 5c19cbb4e..a4eecb57d 100644 --- a/src/lib/QtCore/QDateTime.ts +++ b/src/lib/QtCore/QDateTime.ts @@ -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)); } diff --git a/src/lib/QtCore/QTime.ts b/src/lib/QtCore/QTime.ts index 0d8d97555..b67616b9e 100644 --- a/src/lib/QtCore/QTime.ts +++ b/src/lib/QtCore/QTime.ts @@ -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)); }