[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master fde50a1 1/2: Reimplement the ledger-to-PDF ca
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master fde50a1 1/2: Reimplement the ledger-to-PDF callback more simply |
Date: |
Thu, 11 Oct 2018 19:34:10 -0400 (EDT) |
branch: master
commit fde50a12b8d0fce68781436b6a62987b2141ede1
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>
Reimplement the ledger-to-PDF callback more simply
The original code was cloned from 'group_quote_pdf_gen*.?pp', which
uses a base class with multiple members. This replacement was cloned de
nouveau from 'file_command*.?pp', whose single function pointer suffices
for illustration PDFs. The replacement spans two commits: this one,
which inserts new code into old files; and the next one, which changes
file names.
The callback function's name, 'pdf_command', and the renamed files soon
to be committed, follow the pattern used for the existing 'file_command'
and 'system_command'. It's not a 'command' in quite the same sense, and
might be renamed later; but for now these three similar facilities have
similar names and similar callback frameworks.
---
ledger_pdf.cpp | 3 +--
ledger_pdf_generator.cpp | 15 +++++++--------
ledger_pdf_generator.hpp | 32 ++++----------------------------
ledger_pdf_generator_wx.cpp | 35 ++++++++++-------------------------
main_wx.cpp | 2 +-
main_wx_test.cpp | 2 +-
6 files changed, 24 insertions(+), 65 deletions(-)
diff --git a/ledger_pdf.cpp b/ledger_pdf.cpp
index d3eb99c..93f3b9a 100644
--- a/ledger_pdf.cpp
+++ b/ledger_pdf.cpp
@@ -93,8 +93,7 @@ std::string write_ledger_as_pdf(Ledger const& ledger,
fs::path const& filepath)
// PDF !! Expunge this 'if' line (but not the statement it controls):
if(0 == scaled_ledger.GetLedgerInvariant().ScalePower())
scaled_ledger.AutoScale();
- auto const pdf = ledger_pdf_generator::create();
- pdf->write(scaled_ledger, pdf_out_file);
+ pdf_command(scaled_ledger, pdf_out_file);
return pdf_out_file.string();
}
diff --git a/ledger_pdf_generator.cpp b/ledger_pdf_generator.cpp
index 54f6543..a5be459 100644
--- a/ledger_pdf_generator.cpp
+++ b/ledger_pdf_generator.cpp
@@ -1,4 +1,4 @@
-// Generate PDF files with ledger data.
+// Create a PDF file from a ledger.
//
// Copyright (C) 2017, 2018 Gregory W. Chicares.
//
@@ -27,20 +27,19 @@
namespace
{
-callback<ledger_pdf_generator::creator_type>
- group_quote_pdf_generator_create_callback;
+ callback<pdf_command_fp_type> pdf_command_callback;
} // Unnamed namespace.
-typedef ledger_pdf_generator::creator_type FunctionPointer;
+typedef pdf_command_fp_type FunctionPointer;
template<> FunctionPointer callback<FunctionPointer>::function_pointer_ =
nullptr;
-bool ledger_pdf_generator::set_creator(creator_type f)
+bool pdf_command_initialize(pdf_command_fp_type f)
{
- group_quote_pdf_generator_create_callback.initialize(f);
+ pdf_command_callback.initialize(f);
return true;
}
-std::shared_ptr<ledger_pdf_generator> ledger_pdf_generator::create()
+void pdf_command(Ledger const& ledger, fs::path const& pdf_out_file)
{
- return group_quote_pdf_generator_create_callback()();
+ pdf_command_callback()(ledger, pdf_out_file);
}
diff --git a/ledger_pdf_generator.hpp b/ledger_pdf_generator.hpp
index 77b1363..d7f7914 100644
--- a/ledger_pdf_generator.hpp
+++ b/ledger_pdf_generator.hpp
@@ -1,4 +1,4 @@
-// Generate PDF files with ledger data.
+// Create a PDF file from a ledger.
//
// Copyright (C) 2017, 2018 Gregory W. Chicares.
//
@@ -28,36 +28,12 @@
#include <boost/filesystem/path.hpp>
-#include <memory> // shared_ptr
-
class Ledger;
-/// Abstract base class for generating PDFs with ledger data.
-///
-/// Although there is currently only a single concrete implementation of this
-/// abstract base class and no other implementations are planned, splitting the
-/// PDF generation functionality into an abstract base and the concrete derived
-/// class is still needed because the former is part of liblmi while the latter
-/// uses wxPdfDocument and other wx facilities and is only part of libskeleton.
-
-class LMI_SO ledger_pdf_generator
-{
- public:
- typedef std::shared_ptr<ledger_pdf_generator> (*creator_type)();
-
- static bool set_creator(creator_type);
- static std::shared_ptr<ledger_pdf_generator> create();
-
- virtual ~ledger_pdf_generator() = default;
-
- virtual void write(Ledger const& ledger, fs::path const& output) const = 0;
+typedef void (*pdf_command_fp_type)(Ledger const&, fs::path const&);
- protected:
- ledger_pdf_generator() = default;
+bool LMI_SO pdf_command_initialize(pdf_command_fp_type);
- private:
- ledger_pdf_generator(ledger_pdf_generator const&) = delete;
- ledger_pdf_generator& operator=(ledger_pdf_generator const&) = delete;
-};
+void LMI_SO pdf_command(Ledger const&, fs::path const&);
#endif // ledger_pdf_generator_hpp
diff --git a/ledger_pdf_generator_wx.cpp b/ledger_pdf_generator_wx.cpp
index 487fb33..36b4e77 100644
--- a/ledger_pdf_generator_wx.cpp
+++ b/ledger_pdf_generator_wx.cpp
@@ -1,4 +1,4 @@
-// Generate PDF files with ledger data using wxPdfDocument library.
+// Create a PDF file from a ledger--wx interface.
//
// Copyright (C) 2017, 2018 Gregory W. Chicares.
//
@@ -56,14 +56,14 @@
#include <exception> // uncaught_exceptions()
#include <fstream>
#include <map>
-#include <memory> // make_unique(), shared_ptr,
unique_ptr
+#include <memory> // make_unique(), unique_ptr
#include <sstream>
#include <stdexcept>
#include <string>
#include <utility> // forward(), move()
#include <vector>
-LMI_FORCE_LINKING_IN_SITU(ledger_pdf_generator_wx)
+LMI_FORCE_LINKING_IN_SITU(pdf_command_wx)
namespace
{
@@ -3138,26 +3138,14 @@ class pdf_illustration_reg_d_indiv : public
pdf_illustration
return "reg_d_indiv_footer_lower";
}
};
+} // Unnamed namespace.
-class ledger_pdf_generator_wx : public ledger_pdf_generator
-{
- public:
- static std::shared_ptr<ledger_pdf_generator> do_create()
- {
- return std::make_shared<ledger_pdf_generator_wx>();
- }
-
- ledger_pdf_generator_wx() = default;
- ledger_pdf_generator_wx(ledger_pdf_generator_wx const&) = delete;
- ledger_pdf_generator_wx& operator=(ledger_pdf_generator_wx const&) =
delete;
-
- void write(Ledger const&, fs::path const&) const override;
-};
+// Implementing this function in a GUI module lets wxPdfDoc be used.
+// Currently, no other interface writes PDF files.
-void ledger_pdf_generator_wx::write
- (Ledger const& ledger
- ,fs::path const& pdf_out_file
- ) const
+namespace
+{
+void concrete_pdf_command(Ledger const& ledger, fs::path const& pdf_out_file)
{
wxBusyCursor reverie;
@@ -3183,8 +3171,5 @@ void ledger_pdf_generator_wx::write
}
}
-volatile bool ensure_setup = ledger_pdf_generator::set_creator
- (ledger_pdf_generator_wx::do_create
- );
-
+bool volatile ensure_setup = pdf_command_initialize(concrete_pdf_command);
} // Unnamed namespace.
diff --git a/main_wx.cpp b/main_wx.cpp
index 3765811..607fe33 100644
--- a/main_wx.cpp
+++ b/main_wx.cpp
@@ -46,7 +46,7 @@
LMI_FORCE_LINKING_EX_SITU(alert_wx)
LMI_FORCE_LINKING_EX_SITU(file_command_wx)
LMI_FORCE_LINKING_EX_SITU(group_quote_pdf_generator_wx)
-LMI_FORCE_LINKING_EX_SITU(ledger_pdf_generator_wx)
+LMI_FORCE_LINKING_IN_SITU(pdf_command_wx)
LMI_FORCE_LINKING_EX_SITU(progress_meter_wx)
LMI_FORCE_LINKING_EX_SITU(system_command_wx)
diff --git a/main_wx_test.cpp b/main_wx_test.cpp
index 6f125fb..fc27332 100644
--- a/main_wx_test.cpp
+++ b/main_wx_test.cpp
@@ -56,7 +56,7 @@
LMI_FORCE_LINKING_EX_SITU(file_command_wx)
LMI_FORCE_LINKING_EX_SITU(group_quote_pdf_generator_wx)
-LMI_FORCE_LINKING_EX_SITU(ledger_pdf_generator_wx)
+LMI_FORCE_LINKING_IN_SITU(pdf_command_wx)
LMI_FORCE_LINKING_EX_SITU(progress_meter_wx)
LMI_FORCE_LINKING_EX_SITU(system_command_wx)