[Kmymoney-devel] Patch for HolidayRegion and Working Week

Ian Neal iann_bugzilla at blueyonder.co.uk
Sun Jan 10 03:24:48 CET 2010


  Thomas Baumgart wrote:
> On Thursday 07 January 2010 02:32:16 Ian Neal wrote:
>> Any constructive comments/feedback/review are welcome,
> OK, you asked for them, here they are:
>
> Since the only dependancy on KHolidays is the isHoliday(const QDate&) method,
> we could simplify the interface and remove the dependancy in those steps:
>
> 1) remove all references to KHoliday
Removed those references from mymoneyscheduled.h/.cpp
> 2) create a static pointer to a bool isHoliday(const QDate&) function and
> initialize it to 0
I have in mymoneyscheduled.cpp:
bool (*isHoliday)(const QDate&) = 0;

(Nothing in mymoneyscheduled.h though).
> 3) create a setter for this function pointer
>     void setHolidayCheck(bool (*f)(const QDate&))
>     I am not sure if we need a getter method for that pointer
I have that function in mymoneyscheduled.cpp:
void MyMoneySchedule::setHolidayCheck(bool (*pt2Func)(const QDate&))
{
isHoliday = pt2Func;
}

In mymoneyscheduled.h public:
void setHolidayCheck(bool (*pt2Func)(const QDate&));

> 4) Create a KHoliday object within the scope of the application
d->m_holidayRegion is created as a new KHolidays::HolidayRegion() within 
kmymoney.cpp
> 5) pass the address of the isHoliday(const QDate&) method to setHolidayCheck
Have:
MyMoneySchedule::setHolidayCheck(&d->m_holidayRegion->isHoliday);
> 6) upon deletion of the KHoliday object set the pointer within MyMoneySchedule
> to 0. Maybe the usage of a QSharedPointer for this object is useful
Not done yet, as not found many examples of QSharedPointer in use.
> 7) Only use the isHoliday function pointer in MyMoneySchedule if it is
> non-zero
>
Done.
> Hope that is somewhat clear. If not, please ask and I try to clarify. If
> someone has a better alternative to solve the dependancy, let us know.
>
When I try to compile I get:
/usr/src/kmymoney/kmymoney/kmymoney/kmymoney.cpp: In member function 
‘void KMyMoney2App::updateHolidayRegion()’:
/usr/src/kmymoney/kmymoney/kmymoney/kmymoney.cpp:439: error: ISO C++ 
forbids taking the address of a bound member function to form a pointer 
to member function. Say ‘&KHolidays::HolidayRegion::isHoliday’
/usr/src/kmymoney/kmymoney/kmymoney/kmymoney.cpp:439: error: no matching 
function for call to ‘MyMoneySchedule::setHolidayCheck(bool 
(KHolidays::HolidayRegion::*)(const QDate&)const)’
/usr/src/kmymoney/build/kmymoney/mymoneyscheduled.h:613: note: 
candidates are: void MyMoneySchedule::setHolidayCheck(bool (*)(const 
QDate&))
make[2]: *** [kmymoney/CMakeFiles/kmymoney.dir/kmymoney.o] Error 1
make[1]: *** [kmymoney/CMakeFiles/kmymoney.dir/all] Error 2
make: *** [all] Error 2

So instead I tried creating a function isHoliday in kmymoney.cpp:
bool KMyMoney2App::isHoliday(const QDate &date)
{
return (d->m_holidayRegion && d->m_holidayRegion->isValid()) ?
d->m_holidayRegion->isHoliday(date) : false;
}

and in kmymoney.h public:
bool isHoliday(const QDate& date);

and passing a function pointer to that using:
MyMoneySchedule::setHolidayCheck(&KMyMoney2App::isHoliday);

but when I try to compile that I get:
/usr/src/kmymoney/kmymoney/kmymoney/kmymoney.cpp: In member function 
‘void KMyMoney2App::updateHolidayRegion()’:
/usr/src/kmymoney/kmymoney/kmymoney/kmymoney.cpp:439: error: no matching 
function for call to ‘MyMoneySchedule::setHolidayCheck(bool 
(KMyMoney2App::*)(const QDate&))’
/usr/src/kmymoney/build/kmymoney/mymoneyscheduled.h:613: note: 
candidates are: void MyMoneySchedule::setHolidayCheck(bool (*)(const 
QDate&))
make[2]: *** [kmymoney/CMakeFiles/kmymoney.dir/kmymoney.o] Error 1
make[1]: *** [kmymoney/CMakeFiles/kmymoney.dir/all] Error 2
make: *** [all] Error 2

I've probably got something simple wrong, but i'm just going round in 
circles at the moment.
Can anyone point me in the right direction? Is using QSharedPointer the 
answer?

Thanks,

Ian



More information about the KMyMoney-devel mailing list