package Palm::Progect::DB_23::Prefs;
use Palm::Raw;
use Palm::StdAppInfo;
use strict;
use 5.004;
use CLASS;
use base qw(Class::Accessor Class::Constructor);
my @Accessors = qw(
name
appinfo
);
# Eventually handle these undef $appinfo->{other}, I think...:
# format
# hideDoneTasks
# displayDueDates
# displayPriorities;
# displayYear;
# useFatherStatus;
# autoSyncToDo;
# flatHideDone;
# flatDated;
# flatMinPriority;
# flatOr;
# flatMin;
# boldMinPriority;
# boldMinDays;
# strikeDoneTasks;
# hideDoneProgress;
# hideProgress;
#
# taskDefaults; // embedded record structure... research
#
# flatSorted; // enum: none, datefirst, priorityfirst
# flatDateLimit; // 0 = no, 1 = overdue, 2 = today...
# completionDate; // true = record completion date
# flatCategories;
# wordWrapLines;
# drawTreeLines;
CLASS->mk_accessors(@Accessors);
CLASS->mk_constructor(
Auto_Init => \@Accessors,
Init_Methods => '_init',
);
sub _init {
my $self = shift;
my %args = @_;
$self->categories(delete $args{'categories'}) if exists $args{'categories'};
$self->_seed_appinfo();
}
# Put the categories into the appinfo hash
sub categories {
my $self = shift;
my $categories = ref $_[0] eq 'ARRAY'? $_[0] : [ @_ ];
# Add 'name' field if missing
foreach my $cat (@$categories) {
$cat->{'name'} = '' unless defined $cat->{'name'};
}
# pad out categories to 16
if (@$categories < 16) {
my $missing = 16 - @$categories;
push @$categories, {
'renamed' => 0,
'name' => '',
'id' => 0,
} for 1..$missing;
}
$self->appinfo->{'categories'} = $categories;
}
sub packed_appinfo {
my $self = shift;
return &Palm::StdAppInfo::pack_StdAppInfo($self->{'appinfo'});
}
sub _seed_appinfo {
my $self = shift;
my $progect_version = 23;
# This interpretation of the prefs format is
# NOT correct. It is here to make sure that Progect
# gets *something* in the database's prefs block.
# Otherwise it assumes all sorts of wonky defaults.
#
# But currently setting (e.g.) the displayDueDates bit
# will fubar all the prefs.
# ver 1 1 1 1 1 1 1 1 2 2
# 0e 0f 0f 00 17 00 00 01 01 00 00 01 01 02 03 01 |................|
# 2 2 2 2 2 2 t . . . p. c. . . . ?
# 01 00 00 00 00 00 00 00 10 06 06 00 00 00 00 04 |................|
# ? ? ? ? ? ? ? 3 3 3 c c 4 4
# 54 1c 00 04 54 1c 02 07 01 00 ff ff 02 01 |T...T......... |
my $progect_prefs = pack 'CC' # version, reserved
. 'CCCC CCCC' # first prefs group
. 'CCCC CCCC' # second prefs group
. 'CCC CC C CC' # task defaults
. 'CCC CCC CCC' # padding ???
. 'CCC' # third prefs group
. 'CC' # flat categories 1 & 2
. 'CC', # fourth prefs group
$progect_version,
0, # reserved
## first prefs group
0, # hide done tasks
1, # displayDueDates
1, # displayPriorities
0, # displayYear
0, # useFatherStatus
1, # autoSyncToDo
1, # flatHideDone
2, # flat_dated
## second prefs group
3, # flat_min_priority
1, # flatOr
1, # flatMin
0, # boldMinPriority
0, # boldMinDays
0, # strikeDoneTasks
0, # hideDoneProgress
0, # hideProgress
## task defaults
# f1 f2 f3 pri comp date desc note
0, 0, 0, 0, 0, 0, 0, 0,
## Padding. Can't figure this out
0,0,0,0,0,0,0,0,0,
# This is how the default record
# fields break out
# 0, # level
# 0, # next
# 0, # child
# 0, # opened
# 0, # prev
# 0, # reserved
#
# 0, # hasStartDate
# 0, # hasPred
# 0, # hasDuration
# 1, # hasDueDate
# 0, # hasToDo
# 0, # hasNote
#
# 0, # hasLink
# 0, # itemType
# 0, # hasXB
# 1, # newTask
# 1, # newFormat
# 0, # nextFormat
#
# 6, # priority
# 0, # completed
#
# 0, # date 1
# 0, # date 2
# 0, # date 3
# 0, # desc
# 0, # reserved (align)
## third prefs group
0, # flatSorted
0, # flatDateLimit
1, # completionDate
255, # flatCategories1
255, # flatCategories2
## fourth prefs group
2, # wordWrapLines
1; # drawTreeLines
my $appinfo = {
sortOrder => undef,
other => $progect_prefs,
};
&Palm::StdAppInfo::seed_StdAppInfo($appinfo);
$self->appinfo($appinfo);
}
1;