diff options
author | AnotherTest <ali.mpfard@gmail.com> | 2020-09-25 17:20:14 +0330 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-09-25 23:55:33 +0200 |
commit | 43b29286888994560f9df815ac05e286174bdc9f (patch) | |
tree | 12da4756d8304fd40c4eb80485866ee20412a546 | |
parent | a2efff9287c9dad65189c450766a54ee92d2f386 (diff) | |
download | serenity-43b29286888994560f9df815ac05e286174bdc9f.zip |
Spreadsheet: Add the 'Date' cell type
Since `JS::Date::value_of()' returns the timestamp in ms, this new type
assumes that the value given is also in ms.
-rw-r--r-- | Applications/Spreadsheet/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Applications/Spreadsheet/CellType/Date.cpp | 60 | ||||
-rw-r--r-- | Applications/Spreadsheet/CellType/Date.h | 42 | ||||
-rw-r--r-- | Applications/Spreadsheet/CellType/Type.cpp | 2 |
4 files changed, 105 insertions, 0 deletions
diff --git a/Applications/Spreadsheet/CMakeLists.txt b/Applications/Spreadsheet/CMakeLists.txt index 7b43bab53c..a80b4f07b7 100644 --- a/Applications/Spreadsheet/CMakeLists.txt +++ b/Applications/Spreadsheet/CMakeLists.txt @@ -4,6 +4,7 @@ compile_json_gui(CondView.json CondFormattingViewUI.h cond_fmt_view_ui_json) set(SOURCES Cell.cpp CellSyntaxHighlighter.cpp + CellType/Date.cpp CellType/Format.cpp CellType/Identity.cpp CellType/Numeric.cpp diff --git a/Applications/Spreadsheet/CellType/Date.cpp b/Applications/Spreadsheet/CellType/Date.cpp new file mode 100644 index 0000000000..75ec4d45d6 --- /dev/null +++ b/Applications/Spreadsheet/CellType/Date.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2020, the SerenityOS developers. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "Date.h" +#include "../Cell.h" +#include "../Spreadsheet.h" +#include <LibCore/DateTime.h> + +namespace Spreadsheet { + +DateCell::DateCell() + : CellType("Date") +{ +} + +DateCell::~DateCell() +{ +} + +String DateCell::display(Cell& cell, const CellTypeMetadata& metadata) const +{ + auto timestamp = js_value(cell, metadata); + auto string = Core::DateTime::from_timestamp(timestamp.to_i32(cell.sheet->interpreter())).to_string(metadata.format.is_empty() ? "%Y-%m-%d %H:%M:%S" : metadata.format.characters()); + + if (metadata.length >= 0) + return string.substring(0, metadata.length); + + return string; +} + +JS::Value DateCell::js_value(Cell& cell, const CellTypeMetadata&) const +{ + auto value = cell.js_data().to_double(cell.sheet->interpreter()); + return JS::Value(value / 1000); // Turn it to seconds +} + +} diff --git a/Applications/Spreadsheet/CellType/Date.h b/Applications/Spreadsheet/CellType/Date.h new file mode 100644 index 0000000000..3221fad0f1 --- /dev/null +++ b/Applications/Spreadsheet/CellType/Date.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2020, the SerenityOS developers. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include "Type.h" + +namespace Spreadsheet { + +class DateCell : public CellType { + +public: + DateCell(); + virtual ~DateCell() override; + virtual String display(Cell&, const CellTypeMetadata&) const override; + virtual JS::Value js_value(Cell&, const CellTypeMetadata&) const override; +}; + +} diff --git a/Applications/Spreadsheet/CellType/Type.cpp b/Applications/Spreadsheet/CellType/Type.cpp index 88195411de..cd64e8f239 100644 --- a/Applications/Spreadsheet/CellType/Type.cpp +++ b/Applications/Spreadsheet/CellType/Type.cpp @@ -25,6 +25,7 @@ */ #include "Type.h" +#include "Date.h" #include "Identity.h" #include "Numeric.h" #include "String.h" @@ -35,6 +36,7 @@ static HashMap<String, Spreadsheet::CellType*> s_cell_types; static Spreadsheet::StringCell s_string_cell; static Spreadsheet::NumericCell s_numeric_cell; static Spreadsheet::IdentityCell s_identity_cell; +static Spreadsheet::DateCell s_date_cell; namespace Spreadsheet { |