Bookcase 0.4 Released

Bookcase 0.4 is released. I fixed a few bugs, added a toolbar with a combobox for selecting which property to group the books by, and improveed the printing layout a bit.

I’ve learned more about XSLT than I ever wanted to know. You can’t use a parameter in the key() function, which limited me since I wanted to pass in the parameter from Bookcase. So I went a different route, much more inefficient, of doing two different sorts in the XSLT file. I also took advantage of the EXSLT extensions in libxslt which means at least version 1.0.19 is now required.

I made a src rpm and a i586 rpm for Mandrake 9.0.

Bookcase in italia

One of the joys of open-source development is getting feedback and patches from users. One of such users sent me a very nice email about his having found Bookcase to be a useful app. This makes me happy. Said user is also Italian, and he sent a long an Italian translation. Now, has lots of information for translators, and lots of information for developers building translation files, but not much about how I integrate the po file into my app. Autoconf seems to pick it up automatically, but I’ve not figured out how to test it. I’ve tried:

% KDE_LANG=it bookcase
% LANG=it bookcase
% LC_MESSAGES=it bookcase
% LC_ALL=it bookcase

and nothing seems to work…hmmm…

Bookcase thoughts

My current area of play with Bookcase is changing the way the books are grouped. I’d like to show them grouped by author, and them change to genre, for example. I decided to cache a list of pointers to the book objects for each group. This became a bit tricky. My collection object holds a QDict, where the keys are the name of the attributes which may be used to group the books. The entry, though, is another QDict, where the keys are the values of the groups.

Now, I want to keep a list of pointers to the books which fall under this category, so I use a QPtrList of Books. So the variable becomes QDict<QDict<QPtrList<Book>>>. Typedefs made this look a bit clearer, but wow…

On top of that, since when a Book is modified or added, the QDict must be updated, I needed a way for the Book to know which lists it was in. The only implementation I could think of was the brute-force way of adding a QPtrList<QPtrList<Book>> to each Book. Then I go through and delete the Book from each QPtrList and so on…it feels monstrously inefficient, but it seems to work.