lmi-commits
[Top][All Lists]
Advanced

[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)
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]