cpp branch
Geert Janssens
geert.gnucash at kobaltwit.be
Tue Jan 10 13:26:43 EST 2017
Op dinsdag 10 januari 2017 15:38:27 CET schreef Robert Fewell:
> Geert,
>
> Thank you for the comments, especially the date ones which now make sense.
> I will have a look at my changes and why I made them as it may relate to
> changes I will need to the price importer.
>
You're welcome :)
I have just pushed the most recent state of my cpp branch (minus a final work
in progress) to my github repository. You may want to rebase to that one. It
should present a more or less usable csv transaction import assistant.
Note I don't expect you to take the whole transaction related code for your
price importer. You may follow the design obviously if it suits you as well.
But I think there are a number of useful classes in there which you probably
can reuse as they are. I'm thinking about the gnc-tokenizer class and its
subclasses for csv separated or fixed width column data. They should allow you
to split your csv file in a table of values to be interpreted by a price
specific parser. For transaction importing this specific parser is implemented
in the GncTxImport class (note the absence of "csv" in that name - I believe
the class is generic enough to also handle transactions coming from qif or ofx
data in the future by adding specialized tokenizers for these formats).
The design principles in my csv importer are as follows:
- the assistant code is "dumb". It's responsible for displaying data and
passing user commands to the real parser. So it shouldn't make any decisions
other than what's needed to properly display all the information (including
enabling/disabling options and buttons)
- the real intelligence is stored in the GncTxImport class, which is
responsible for everything related to the data. It will massage the data found
in the input file into proper gnucash transactions. This class is completely
gui-less, so it could potentially even be used from non-gui interactions, such
as our python bindings (if someone would add the currently still missing
bindings).
- Some parts are delegated to helper classes. One such example is the
tokenizer class which handles everything from loading a file to splitting the
data into a table of strings. From there GncTxImport takes over. The settings
are also stored in a separate class to simplify loading and saving user
presets and switching between them. This is heavily based on your initial work
to load and save these presets, mostly reworked into a c++ class and
redesigned a bit to make it a more central piece of the GncTxImport class.
I hope this information will help you better understand the new csv importer
and at the same time help you to model your own price importer, which can
probably be implemented less generically. I would keep the strict separation
of gui and business logic though. Make your price importer class such that it
can be used without a gui and let the gui interact with it by querying the
information it needs/passing the inputs it receives from the user.
Regards,
Geert
More information about the gnucash-devel
mailing list