Ticket #6374: TrackerInitialState.cpp.patch

File TrackerInitialState.cpp.patch, 29.1 KB (added by mt, 14 years ago)
  • src/kits/tracker/TrackerInitialState.cpp

     
    2626used in advertising or otherwise to promote the sale, use or other dealings in
    2727this Software without prior written authorization from Be Incorporated.
    2828
    29 Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks
    30 of Be Incorporated in the United States and other countries. Other brand product
    31 names are registered trademarks or trademarks of their respective holders.
     29Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered
     30trademarks of Be Incorporated in the United States and other countries.
     31Other brand product names are registered trademarks or trademarks of
     32their respective holders.
    3233All rights reserved.
    3334*/
    3435
     
    4647#include <Path.h>
    4748#include <Screen.h>
    4849#include <VolumeRoster.h>
     50#include <InterfaceDefs.h>
    4951
    5052#include <fs_attr.h>
    5153#include <fs_index.h>
     
    6163#include "FSUtils.h"
    6264#include "QueryContainerWindow.h"
    6365#include "Tracker.h"
     66#include "ViewState.h"
     67#include "AutoDeleter.h"
    6468
     69
    6570enum {
    6671    kForceLargeIcon = 0x1,
    6772    kForceMiniIcon = 0x2,
     
    7176};
    7277
    7378
    74 const char *kAttrName = "META:name";
    75 const char *kAttrCompany = "META:company";
    76 const char *kAttrAddress = "META:address";
    77 const char *kAttrCity = "META:city";
    78 const char *kAttrState = "META:state";
    79 const char *kAttrZip = "META:zip";
    80 const char *kAttrCountry = "META:country";
    81 const char *kAttrHomePhone = "META:hphone";
    82 const char *kAttrWorkPhone = "META:wphone";
    83 const char *kAttrFax = "META:fax";
    84 const char *kAttrEmail = "META:email";
    85 const char *kAttrURL = "META:url";
    86 const char *kAttrGroup = "META:group";
    87 const char *kAttrNickname = "META:nickname";
     79const char* kAttrName = "META:name";
     80const char* kAttrCompany = "META:company";
     81const char* kAttrAddress = "META:address";
     82const char* kAttrCity = "META:city";
     83const char* kAttrState = "META:state";
     84const char* kAttrZip = "META:zip";
     85const char* kAttrCountry = "META:country";
     86const char* kAttrHomePhone = "META:hphone";
     87const char* kAttrWorkPhone = "META:wphone";
     88const char* kAttrFax = "META:fax";
     89const char* kAttrEmail = "META:email";
     90const char* kAttrURL = "META:url";
     91const char* kAttrGroup = "META:group";
     92const char* kAttrNickname = "META:nickname";
    8893
    89 const char *kNetPositiveSignature = "application/x-vnd.Be-NPOS";
    90 const char *kPeopleSignature = "application/x-vnd.Be-PEPL";
     94const char* kNetPositiveSignature = "application/x-vnd.Be-NPOS";
     95const char* kPeopleSignature = "application/x-vnd.Be-PEPL";
    9196
    9297// the following templates are in big endian and we rely on the Tracker
    9398// translation support to swap them on little endian machines
    9499//
    95 // in case there is an attribute (B_RECT_TYPE) that gets swapped by the media (unzip,
    96 // file system endianness swapping, etc., the correct endianness for the
    97 // correct machine has to be used here
     100// in case there is an attribute (B_RECT_TYPE) that gets swapped
     101// by the media (unzip, file system endianness swapping, etc.,
     102// the correct endianness for the correct machine has to be used here
    98103
    99104const BRect kDefaultFrame(40, 40, 500, 350);
    100105const int32 kDefaultQueryTemplateCount = 3;
    101106
    102 const AttributeTemplate kDefaultQueryTemplate[] =
    103     /* /boot/home/config/settings/Tracker/DefaultQueryTemplates/application_octet-stream */
     107char* fDefaultQueryColumnsBits = NULL;
     108char* fBookmarkQueryColumnsBits = NULL;
     109char* fPersonQueryColumnsBits = NULL;
     110char* fEmailQueryColumnsBits = NULL;
     111
     112struct ColumnData
    104113{
    105     {        /* default frame */
     114    const char* title;
     115    float   offset;
     116    float width;
     117    alignment align;
     118    const char* attributeName;
     119    uint32 attrType;
     120    bool statField;
     121    bool editable;
     122};
     123
     124static
     125AttributeTemplate defaultQueryTemplate[] =
     126    /* /boot/home/config/settings/Tracker/DefaultQueryTemplates/
     127        application_octet-stream */
     128{
     129    {       /* default frame */
    106130        kAttrWindowFrame,
    107131        B_RECT_TYPE,
    108132        16,
    109         (const char *)&kDefaultFrame
     133        (const char* )&kDefaultFrame
    110134    },
    111     {        /* attr: _trk/viewstate */
     135    {       /* attr: _trk/viewstate */
    112136        kAttrViewState_be,
    113137        B_RAW_TYPE,
    114138        49,
     
    116140        "\000\000\000\000\000\000\000\000\000\000\357\323\335RCSTR\000\000\000"
    117141        "\000\000\000\000\000\000"
    118142    },
    119     {        /* attr: _trk/columns */
     143    {       /* attr: _trk/columns */
    120144        kAttrColumns_be,
    121145        B_RAW_TYPE,
    122146        223,
    123         "O\362VR\000\000\000\025\000\000\000\004Name\000B \000\000C\021\000"
    124         "\000\000\000\000\000\000\000\000\012_stat/name\000\357\323\335RCST"
    125         "R\001\001O\362VR\000\000\000\025\000\000\000\004Path\000CH\000\000"
    126         "Ca\000\000\000\000\000\000\000\000\000\011_trk/path\000\357_\174RC"
    127         "STR\000\000O\362VR\000\000\000\025\000\000\000\004Size\000C\334\000"
    128         "\000B$\000\000\000\000\000\001\000\000\000\012_stat/size\000\317\317"
    129         "\306TOFFT\001\000O\362VR\000\000\000\025\000\000\000\010Modified\000"
    130         "C\370\000\000C\012\000\000\000\000\000\000\000\000\000\016_stat/mo"
    131         "dified\000]KmETIME\001\000"
     147        NULL
    132148    }
    133149};
    134150
    135 const AttributeTemplate kBookmarkQueryTemplate[] =
    136     /* /boot/home/config/settings/Tracker/DefaultQueryTemplates/application_x-vnd.Be-bookmark */
     151#undef B_TRANSLATE_CONTEXT
     152#define B_TRANSLATE_CONTEXT "DefaultQueryColumns"
     153
     154static
     155ColumnData defaultQueryColumns[]=
    137156{
    138     {        /* default frame */
     157    {
     158        B_TRANSLATE_MARK("Name"),
     159        40,
     160        145,
     161        B_ALIGN_LEFT,
     162        "_stat/name",
     163        B_STRING_TYPE,
     164        true,
     165        true
     166    },
     167    {
     168        B_TRANSLATE_MARK("Path"),
     169        200,
     170        225,
     171        B_ALIGN_LEFT,
     172        "_trk/path",
     173        B_STRING_TYPE,
     174        false,
     175        false
     176    },
     177    {
     178        B_TRANSLATE_MARK("Size"),
     179        440,
     180        41,
     181        B_ALIGN_LEFT,
     182        "_stat/size",
     183        B_OFF_T_TYPE,
     184        true,
     185        false
     186        },
     187    {
     188        B_TRANSLATE_MARK("Modified"),
     189        496,
     190        138,
     191        B_ALIGN_LEFT,
     192        " _stat/modified",
     193        B_TIME_TYPE,
     194        true,
     195        false
     196    }
     197
     198};
     199
     200static
     201AttributeTemplate bookmarkQueryTemplate[] =
     202    /* /boot/home/config/settings/Tracker/DefaultQueryTemplates/
     203        application_x-vnd.Be-bookmark */
     204{
     205    {       /* default frame */
    139206        kAttrWindowFrame,
    140207        B_RECT_TYPE,
    141208        16,
    142         (const char *)&kDefaultFrame
     209        (const char* )&kDefaultFrame
    143210    },
    144     {        /* attr: _trk/viewstate */
     211    {       /* attr: _trk/viewstate */
    145212        kAttrViewState_be,
    146213        B_RAW_TYPE,
    147214        49,
     
    149216        "\000\000\000\000\000\000\000\000\000\000w\373\175RCSTR\000\000\000"
    150217        "\000\000\000\000\000\000"
    151218    },
    152     {        /* attr: _trk/columns */
     219    {       /* attr: _trk/columns */
    153220        kAttrColumns_be,
    154221        B_RAW_TYPE,
    155222        163,
    156         "O\362VR\000\000\000\025\000\000\000\005Title\000B \000\000C+\000\000"
    157         "\000\000\000\000\000\000\000\012META:title\000w\373\175RCSTR\000\001"
    158         "O\362VR\000\000\000\025\000\000\000\003URL\000Cb\000\000C\217\200\000"
    159         "\000\000\000\000\000\000\000\010META:url\000\343[TRCSTR\000\001O\362"
    160         "VR\000\000\000\025\000\000\000\010Keywords\000D\004\000\000C\002\000"
    161         "\000\000\000\000\000\000\000\000\011META:keyw\000\333\363\334RCSTR"
    162         "\000\001"
     223        NULL
    163224    }
    164225};
    165226
    166 const AttributeTemplate kPersonQueryTemplate[] =
    167     /* /boot/home/config/settings/Tracker/DefaultQueryTemplates/application_x-vnd.Be-bookmark */
     227#undef B_TRANSLATE_CONTEXT
     228#define B_TRANSLATE_CONTEXT "bookmarkQueryColumns"
     229
     230static
     231ColumnData bookmarkQueryColumns[]=
    168232{
    169     {        /* default frame */
     233    {
     234        B_TRANSLATE_MARK("Title"),
     235        40,
     236        171,
     237        B_ALIGN_LEFT,
     238        "META:title",
     239        B_STRING_TYPE,
     240        false,
     241        true
     242    },
     243    {
     244        B_TRANSLATE_MARK("URL"),
     245        226,
     246        287,
     247        B_ALIGN_LEFT,
     248        kAttrURL,
     249        B_STRING_TYPE,
     250        false,
     251        true
     252    },
     253    {
     254        B_TRANSLATE_MARK("Keywords"),
     255        528,
     256        130,
     257        B_ALIGN_LEFT,
     258        "META:keyw",
     259        B_STRING_TYPE,
     260        false,
     261        true
     262    }
     263};
     264
     265static
     266AttributeTemplate personQueryTemplate[] =
     267    /* /boot/home/config/settings/Tracker/DefaultQueryTemplates/
     268        application_x-vnd.Be-bookmark */
     269{
     270    {       /* default frame */
    170271        kAttrWindowFrame,
    171272        B_RECT_TYPE,
    172273        16,
    173         (const char *)&kDefaultFrame
     274        (const char* )&kDefaultFrame
    174275    },
    175     {        /* attr: _trk/viewstate */
     276    {       /* attr: _trk/viewstate */
    176277        kAttrViewState_be,
    177278        B_RAW_TYPE,
    178279        49,
     
    180281        "\000\000\000\000\000\000\000\000\000\000\357\323\335RCSTR\000\000\000"
    181282        "\000\000\000\000\000\000"
    182283    },
    183     {        /* attr: _trk/columns */
     284    {       /* attr: _trk/columns */
    184285        kAttrColumns_be,
    185286        B_RAW_TYPE,
    186287        230,
    187         "O\362VR\000\000\000\025\000\000\000\004Name\000B \000\000B\346\000"
    188         "\000\000\000\000\000\000\000\000\012_stat/name\000\357\323\335RCST"
    189         "R\001\001O\362VR\000\000\000\025\000\000\000\012Work Phone\000C*\000"
    190         "\000B\264\000\000\000\000\000\000\000\000\000\013META:wphone\000C_"
    191         "uRCSTR\000\001O\362VR\000\000\000\025\000\000\000\006E-mail\000C\211"
    192         "\200\000B\272\000\000\000\000\000\000\000\000\000\012META:email\000"
    193         "sW\337RCSTR\000\001O\362VR\000\000\000\025\000\000\000\007Company\000"
    194         "C\277\200\000B\360\000\000\000\000\000\000\000\000\000\014META:com"
    195         "pany\000CS\174RCSTR\000\001"
     288        NULL
    196289    },
    197290};
    198291
    199 const AttributeTemplate kEmailQueryTemplate[] =
     292#undef B_TRANSLATE_CONTEXT
     293#define B_TRANSLATE_CONTEXT "parsonQueryColumns"
     294
     295static
     296ColumnData parsonQueryColumns[]=
     297{
     298    {
     299        B_TRANSLATE_MARK("Name"),
     300        40,
     301        115,
     302        B_ALIGN_LEFT,
     303        "_stat/name",
     304        B_STRING_TYPE,
     305        true,
     306        true
     307    },
     308    {
     309        B_TRANSLATE_MARK("Work Phone"),
     310        170,
     311        90,
     312        B_ALIGN_LEFT,
     313        kAttrWorkPhone,
     314        B_STRING_TYPE,
     315        false,
     316        true
     317    },
     318    {
     319        B_TRANSLATE_MARK("E-mail"),
     320        275,
     321        93,
     322        B_ALIGN_LEFT,
     323        kAttrEmail,
     324        B_STRING_TYPE,
     325        false,
     326        true
     327    },
     328    {
     329        B_TRANSLATE_MARK("Company"),
     330        383,
     331        120,
     332        B_ALIGN_LEFT,
     333        kAttrCompany,
     334        B_STRING_TYPE,
     335        false,
     336        true
     337    }
     338};
     339
     340static
     341AttributeTemplate emailQueryTemplate[] =
    200342    /* /boot/home/config/settings/Tracker/DefaultQueryTemplates/text_x-email */
    201343{
    202     {        /* default frame */
     344    {       /* default frame */
    203345        kAttrWindowFrame,
    204346        B_RECT_TYPE,
    205347        16,
    206         (const char *)&kDefaultFrame
     348        (const char* )&kDefaultFrame
    207349    },
    208     {        /* attr: _trk/viewstate */
     350    {       /* attr: _trk/viewstate */
    209351        kAttrViewState_be,
    210352        B_RAW_TYPE,
    211353        49,
     
    213355        "\000\000\000\000\000\000\000\000\000\000\366_\377ETIME\000\000\000"
    214356        "\000\000\000\000\000\000"
    215357    },
    216     {        /* attr: _trk/columns */
     358    {       /* attr: _trk/columns */
    217359        kAttrColumns_be,
    218360        B_RAW_TYPE,
    219361        222,
    220         "O\362VR\000\000\000\025\000\000\000\007Subject\000B \000\000B\334\000"
    221         "\000\000\000\000\000\000\000\000\014MAIL:subject\000\343\173\337RC"
    222         "STR\000\000O\362VR\000\000\000\025\000\000\000\004From\000C%\000\000"
    223         "C\031\000\000\000\000\000\000\000\000\000\011MAIL:from\000\317s_RC"
    224         "STR\000\000O\362VR\000\000\000\025\000\000\000\004When\000C\246\200"
    225         "\000B\360\000\000\000\000\000\000\000\000\000\011MAIL:when\000\366"
    226         "_\377ETIME\000\000O\362VR\000\000\000\025\000\000\000\006Status\000"
    227         "C\352\000\000BH\000\000\000\000\000\001\000\000\000\013MAIL:status"
    228         "\000G\363\134RCSTR\000\001"
     362        NULL
    229363    },
    230364};
    231365
     366#undef B_TRANSLATE_CONTEXT
     367#define B_TRANSLATE_CONTEXT "emailQueryColumns"
    232368
     369static
     370ColumnData emailQueryColumns[]=
     371{
     372    {
     373        B_TRANSLATE_MARK("Subject"),
     374        40,
     375        110,
     376        B_ALIGN_LEFT,
     377        "MAIL:subject",
     378        B_STRING_TYPE,
     379        false,
     380        false
     381    },
     382    {
     383        B_TRANSLATE_MARK("From"),
     384        165,
     385        153,
     386        B_ALIGN_LEFT,
     387        "MAIL:from",
     388        B_STRING_TYPE,
     389        false,
     390        false
     391    },
     392    {
     393        B_TRANSLATE_MARK("When"),
     394        333,
     395        120,
     396        B_ALIGN_LEFT,
     397        "MAIL:when",
     398        B_STRING_TYPE,
     399        false,
     400        false
     401    },
     402    {
     403        B_TRANSLATE_MARK("Status"),
     404        468,
     405        50,
     406        B_ALIGN_RIGHT,
     407        "MAIL:status",
     408        B_STRING_TYPE,
     409        false,
     410        true
     411    }
     412};
     413
     414
    233415namespace BPrivate {
    234416
    235417class ExtraAttributeLazyInstaller {
    236418public:
    237     ExtraAttributeLazyInstaller(const char *type);
     419    ExtraAttributeLazyInstaller(const char* type);
    238420    ~ExtraAttributeLazyInstaller();
    239421
    240     bool AddExtraAttribute(const char *publicName, const char *name,
     422    bool AddExtraAttribute(const char* publicName, const char* name,
    241423        uint32 type, bool viewable, bool editable, float width,
    242424        int32 alignment, bool extra);
    243425
     
    251433}   // namespace BPrivate
    252434
    253435
    254 ExtraAttributeLazyInstaller::ExtraAttributeLazyInstaller(const char *type)
     436ExtraAttributeLazyInstaller::ExtraAttributeLazyInstaller(const char* type)
    255437    :
    256438    fMimeType(type),
    257439    fDirty(false)
     
    269451
    270452
    271453bool
    272 ExtraAttributeLazyInstaller::AddExtraAttribute(const char *publicName,
    273     const char *name, uint32 type, bool viewable, bool editable, float width,
     454ExtraAttributeLazyInstaller::AddExtraAttribute(const char* publicName,
     455    const char* name, uint32 type, bool viewable, bool editable, float width,
    274456    int32 alignment, bool extra)
    275457{
    276458    for (int32 index = 0; ; index++) {
    277         const char *oldPublicName;
     459        const char* oldPublicName;
    278460        if (fExtraAttrs.FindString("attr:public_name", index, &oldPublicName) != B_OK)
    279461            break;
    280462
     
    299481
    300482// #pragma mark -
    301483
     484#undef B_TRANSLATE_CONTEXT
     485#define B_TRANSLATE_CONTEXT "TrackerInitialState"
    302486
     487
    303488static void
    304489InstallTemporaryBackgroundImages(BNode* node, BMessage* message)
    305490{
     
    317502
    318503
    319504static void
    320 AddTemporaryBackgroundImages(BMessage *message, const char *imagePath,
     505AddTemporaryBackgroundImages(BMessage* message, const char* imagePath,
    321506    BackgroundImage::Mode mode, BPoint offset, uint32 workspaces,
    322507    bool textWidgetOutlines)
    323508{
     
    336521#define B_TRANSLATE_CONTEXT "TrackerInitialState"
    337522
    338523bool
    339 TTracker::InstallMimeIfNeeded(const char *type, int32 bitsID,
    340     const char *shortDescription, const char *longDescription,
    341     const char *preferredAppSignature, uint32 forceMask)
     524TTracker::InstallMimeIfNeeded(const char* type, int32 bitsID,
     525    const char* shortDescription, const char* longDescription,
     526    const char* preferredAppSignature, uint32 forceMask)
    342527{
    343528    // used by InitMimeTypes - checks if a metamime of a given <type> is
    344529    // installed and if it has all the specified attributes; if not, the
     
    405590void
    406591TTracker::InitMimeTypes()
    407592{
    408     InstallMimeIfNeeded(B_APP_MIME_TYPE, R_AppIcon, "Be Application",
    409         "Generic Be application executable.", kTrackerSignature);
     593    InstallMimeIfNeeded(B_APP_MIME_TYPE, R_AppIcon, B_TRANSLATE("Be Application"),
     594        B_TRANSLATE("Generic Be application executable."), kTrackerSignature);
    410595
    411596    InstallMimeIfNeeded(B_FILE_MIMETYPE, R_FileIcon,
    412         "Generic file", "Generic document file.", kTrackerSignature);
     597        B_TRANSLATE("Generic file"), B_TRANSLATE("Generic document file."),
     598        kTrackerSignature);
    413599
    414600    InstallMimeIfNeeded(B_VOLUME_MIMETYPE, R_HardDiskIcon,
    415         "Be Volume", "Disk volume.", kTrackerSignature);
     601        B_TRANSLATE("Be Volume"), B_TRANSLATE("Disk volume."), kTrackerSignature);
    416602
    417603    InstallMimeIfNeeded(B_QUERY_MIMETYPE, R_QueryDirIcon,
    418         "Be Query", "Query to locate items on disks.", kTrackerSignature);
     604        B_TRANSLATE("Be Query"), B_TRANSLATE("Query to locate items on disks."),
     605        kTrackerSignature);
    419606
    420607    InstallMimeIfNeeded(B_QUERY_TEMPLATE_MIMETYPE, R_QueryTemplateIcon,
    421         "Be Query template", "", kTrackerSignature);
     608        B_TRANSLATE("Be Query template"), "",
     609        kTrackerSignature);
    422610
    423     InstallMimeIfNeeded(B_LINK_MIMETYPE, R_BrokenLinkIcon, "Symbolic link",
    424         "Link to another item in the file system.", kTrackerSignature);
     611    InstallMimeIfNeeded(B_LINK_MIMETYPE, R_BrokenLinkIcon,
     612        B_TRANSLATE("Symbolic link"),
     613        B_TRANSLATE("Link to another item in the file system."),
     614        kTrackerSignature);
    425615
    426616    InstallMimeIfNeeded(B_ROOT_MIMETYPE, R_RootIcon,
    427         "Be Root", "File system root.", kTrackerSignature);
     617        B_TRANSLATE("Be Root"), B_TRANSLATE("File system root."),
     618        kTrackerSignature);
    428619
    429620    InstallMimeIfNeeded(B_BOOKMARK_MIMETYPE, R_BookmarkIcon,
    430         "Bookmark", "Bookmark for a web page.", kNetPositiveSignature);
     621        B_TRANSLATE("Bookmark"), B_TRANSLATE("Bookmark for a web page."),
     622        kNetPositiveSignature);
    431623
    432624    {
    433625        // install a couple of extra fields for bookmark
    434626
    435627        ExtraAttributeLazyInstaller installer(B_BOOKMARK_MIMETYPE);
    436         installer.AddExtraAttribute("URL", "META:url", B_STRING_TYPE, true, true,
    437             170, B_ALIGN_LEFT, false);
    438         installer.AddExtraAttribute("Keywords", "META:keyw", B_STRING_TYPE, true, true,
    439             130, B_ALIGN_LEFT, false);
    440         installer.AddExtraAttribute("Title", "META:title", B_STRING_TYPE, true, true,
    441             130, B_ALIGN_LEFT, false);
     628        installer.AddExtraAttribute(B_TRANSLATE("URL"), kAttrURL,
     629            B_STRING_TYPE, true, true, 170, B_ALIGN_LEFT, false);
     630        installer.AddExtraAttribute(B_TRANSLATE("Keywords"), "META:keyw",
     631            B_STRING_TYPE, true, true, 130, B_ALIGN_LEFT, false);
     632        installer.AddExtraAttribute(B_TRANSLATE("Title"), "META:title",
     633            B_STRING_TYPE, true, true, 130, B_ALIGN_LEFT, false);
    442634    }
    443635
    444636    InstallMimeIfNeeded(B_PERSON_MIMETYPE, R_PersonIcon,
    445         "Person", "Contact information for a person.", kPeopleSignature);
     637        B_TRANSLATE("Person"), B_TRANSLATE("Contact information for a person."),
     638            kPeopleSignature);
    446639
    447640    {
    448641        ExtraAttributeLazyInstaller installer(B_PERSON_MIMETYPE);
    449         installer.AddExtraAttribute("Contact name", kAttrName, B_STRING_TYPE, true, true,
    450             120, B_ALIGN_LEFT, false);
    451         installer.AddExtraAttribute("Company", kAttrCompany, B_STRING_TYPE, true, true,
    452             120, B_ALIGN_LEFT, false);
    453         installer.AddExtraAttribute("Address", kAttrAddress, B_STRING_TYPE, true, true,
    454             120, B_ALIGN_LEFT, false);
    455         installer.AddExtraAttribute("City", kAttrCity, B_STRING_TYPE, true, true,
    456             90, B_ALIGN_LEFT, false);
    457         installer.AddExtraAttribute("State", kAttrState, B_STRING_TYPE, true, true,
    458             50, B_ALIGN_LEFT, false);
    459         installer.AddExtraAttribute("Zip", kAttrZip, B_STRING_TYPE, true, true,
    460             50, B_ALIGN_LEFT, false);
    461         installer.AddExtraAttribute("Country", kAttrCountry, B_STRING_TYPE, true, true,
    462             120, B_ALIGN_LEFT, false);
    463         installer.AddExtraAttribute("E-mail", kAttrEmail, B_STRING_TYPE, true, true,
    464             120, B_ALIGN_LEFT, false);
    465         installer.AddExtraAttribute("Home phone", kAttrHomePhone, B_STRING_TYPE, true, true,
    466             90, B_ALIGN_LEFT, false);
    467         installer.AddExtraAttribute("Work phone", kAttrWorkPhone, B_STRING_TYPE, true, true,
    468             90, B_ALIGN_LEFT, false);
    469         installer.AddExtraAttribute("Fax", kAttrFax, B_STRING_TYPE, true, true,
    470             90, B_ALIGN_LEFT, false);
    471         installer.AddExtraAttribute("URL", kAttrURL, B_STRING_TYPE, true, true,
    472             120, B_ALIGN_LEFT, false);
    473         installer.AddExtraAttribute("Group", kAttrGroup, B_STRING_TYPE, true, true,
    474             120, B_ALIGN_LEFT, false);
    475         installer.AddExtraAttribute("Nickname", kAttrNickname, B_STRING_TYPE, true, true,
    476             120, B_ALIGN_LEFT, false);
     642        installer.AddExtraAttribute(B_TRANSLATE("Contact name"), kAttrName,
     643            B_STRING_TYPE, true, true, 120, B_ALIGN_LEFT, false);
     644        installer.AddExtraAttribute(B_TRANSLATE("Company"), kAttrCompany,
     645            B_STRING_TYPE, true, true, 120, B_ALIGN_LEFT, false);
     646        installer.AddExtraAttribute(B_TRANSLATE("Address"), kAttrAddress,
     647            B_STRING_TYPE, true, true, 120, B_ALIGN_LEFT, false);
     648        installer.AddExtraAttribute(B_TRANSLATE("City"), kAttrCity,
     649            B_STRING_TYPE, true, true, 90, B_ALIGN_LEFT, false);
     650        installer.AddExtraAttribute(B_TRANSLATE("State"), kAttrState,
     651            B_STRING_TYPE, true, true, 50, B_ALIGN_LEFT, false);
     652        installer.AddExtraAttribute(B_TRANSLATE("Zip"), kAttrZip,
     653            B_STRING_TYPE, true, true, 50, B_ALIGN_LEFT, false);
     654        installer.AddExtraAttribute(B_TRANSLATE("Country"), kAttrCountry,
     655            B_STRING_TYPE, true, true, 120, B_ALIGN_LEFT, false);
     656        installer.AddExtraAttribute(B_TRANSLATE("E-mail"), kAttrEmail,
     657            B_STRING_TYPE, true, true, 120, B_ALIGN_LEFT, false);
     658        installer.AddExtraAttribute(B_TRANSLATE("Home phone"), kAttrHomePhone,
     659            B_STRING_TYPE, true, true, 90, B_ALIGN_LEFT, false);
     660        installer.AddExtraAttribute(B_TRANSLATE("Work phone"), kAttrWorkPhone,
     661            B_STRING_TYPE, true, true, 90, B_ALIGN_LEFT, false);
     662        installer.AddExtraAttribute(B_TRANSLATE("Fax"), kAttrFax,
     663            B_STRING_TYPE, true, true, 90, B_ALIGN_LEFT, false);
     664        installer.AddExtraAttribute(B_TRANSLATE("URL"), kAttrURL,
     665            B_STRING_TYPE, true, true, 120, B_ALIGN_LEFT, false);
     666        installer.AddExtraAttribute(B_TRANSLATE("Group"), kAttrGroup,
     667            B_STRING_TYPE, true, true, 120, B_ALIGN_LEFT, false);
     668        installer.AddExtraAttribute(B_TRANSLATE("Nickname"), kAttrNickname,
     669            B_STRING_TYPE, true, true, 120, B_ALIGN_LEFT, false);
    477670    }
    478671
    479672    InstallMimeIfNeeded(B_PRINTER_SPOOL_MIMETYPE, R_SpoolFileIcon,
    480         "Printer spool", "Printer spool file.", "application/x-vnd.Be-PRNT");
     673        B_TRANSLATE("Printer spool"), B_TRANSLATE("Printer spool file."),
     674        "application/x-vnd.Be-PRNT");
    481675
    482676    {
    483677#if B_BEOS_VERSION_DANO
    484678        ExtraAttributeLazyInstaller installer(B_PRINTER_SPOOL_MIMETYPE);
    485         installer.AddExtraAttribute("Status", PSRV_SPOOL_ATTR_STATUS, B_STRING_TYPE, true, false,
     679        installer.AddExtraAttribute(B_TRANSLATE("Status"),
     680            PSRV_SPOOL_ATTR_STATUS, B_STRING_TYPE, true, false,
    486681            60, B_ALIGN_LEFT, false);
    487         installer.AddExtraAttribute("Page count", PSRV_SPOOL_ATTR_PAGECOUNT, B_INT32_TYPE, true, false,
     682        installer.AddExtraAttribute(B_TRANSLATE("Page count"),
     683            PSRV_SPOOL_ATTR_PAGECOUNT, B_INT32_TYPE, true, false,
    488684            40, B_ALIGN_RIGHT, false);
    489         installer.AddExtraAttribute("Description", PSRV_SPOOL_ATTR_DESCRIPTION, B_STRING_TYPE, true, true,
     685        installer.AddExtraAttribute(B_TRANSLATE("Description"),
     686            PSRV_SPOOL_ATTR_DESCRIPTION, B_STRING_TYPE, true, true,
    490687            100, B_ALIGN_LEFT, false);
    491         installer.AddExtraAttribute("Printer name", PSRV_SPOOL_ATTR_PRINTER, B_STRING_TYPE, true, false,
     688        installer.AddExtraAttribute(B_TRANSLATE("Printer name"),
     689            PSRV_SPOOL_ATTR_PRINTER, B_STRING_TYPE, true, false,
    492690            80, B_ALIGN_LEFT, false);
    493         installer.AddExtraAttribute("Job creator type", PSRV_SPOOL_ATTR_MIMETYPE, B_ASCII_TYPE, true, false,
     691        installer.AddExtraAttribute(B_TRANSLATE("Job creator type"),
     692            PSRV_SPOOL_ATTR_MIMETYPE, B_ASCII_TYPE, true, false,
    494693            60, B_ALIGN_LEFT, false);
    495694#else
    496695        ExtraAttributeLazyInstaller installer(B_PRINTER_SPOOL_MIMETYPE);
    497         installer.AddExtraAttribute("Page count", "_spool/Page Count", B_INT32_TYPE, true, false,
     696        installer.AddExtraAttribute(B_TRANSLATE("Page count"),
     697            "_spool/Page Count", B_INT32_TYPE, true, false,
    498698            40, B_ALIGN_RIGHT, false);
    499         installer.AddExtraAttribute("Description", "_spool/Description", B_ASCII_TYPE, true, true,
     699        installer.AddExtraAttribute(B_TRANSLATE("Description"),
     700            "_spool/Description", B_ASCII_TYPE, true, true,
    500701            100, B_ALIGN_LEFT, false);
    501         installer.AddExtraAttribute("Printer name", "_spool/Printer", B_ASCII_TYPE, true, false,
     702        installer.AddExtraAttribute(B_TRANSLATE("Printer name"),
     703            "_spool/Printer", B_ASCII_TYPE, true, false,
    502704            80, B_ALIGN_LEFT, false);
    503         installer.AddExtraAttribute("Job creator type", "_spool/MimeType", B_ASCII_TYPE, true, false,
     705        installer.AddExtraAttribute(B_TRANSLATE("Job creator type"),
     706            "_spool/MimeType", B_ASCII_TYPE, true, false,
    504707            60, B_ALIGN_LEFT, false);
    505708#endif
    506709    }
    507710
    508711    InstallMimeIfNeeded(B_PRINTER_MIMETYPE, R_GenericPrinterIcon,
    509         "Printer", "Printer queue.", kTrackerSignature /*application/x-vnd.Be-PRNT*/);
     712        B_TRANSLATE("Printer"), B_TRANSLATE("Printer queue."),
     713            kTrackerSignature /*application/x-vnd.Be-PRNT*/);
    510714        // for now set tracker as a default handler for the printer because we
    511715        // just want to open it as a folder
    512716#if B_BEOS_VERSION_DANO
    513717    {
    514718        ExtraAttributeLazyInstaller installer(B_PRINTER_MIMETYPE);
    515         installer.AddExtraAttribute("Driver", PSRV_PRINTER_ATTR_DRV_NAME, B_STRING_TYPE, true, false,
     719        installer.AddExtraAttribute(B_TRANSLATE("Driver"),
     720            PSRV_PRINTER_ATTR_DRV_NAME, B_STRING_TYPE, true, false,
    516721            120, B_ALIGN_LEFT, false);
    517         installer.AddExtraAttribute("Transport", PSRV_PRINTER_ATTR_TRANSPORT, B_STRING_TYPE, true, false,
     722        installer.AddExtraAttribute(B_TRANSLATE("Transport"),
     723            PSRV_PRINTER_ATTR_TRANSPORT, B_STRING_TYPE, true, false,
    518724            60, B_ALIGN_RIGHT, false);
    519         installer.AddExtraAttribute("Connection", PSRV_PRINTER_ATTR_CNX, B_STRING_TYPE, true, false,
     725        installer.AddExtraAttribute(B_TRANSLATE("Connection"),
     726            PSRV_PRINTER_ATTR_CNX, B_STRING_TYPE, true, false,
    520727            40, B_ALIGN_LEFT, false);
    521         installer.AddExtraAttribute("Description", PSRV_PRINTER_ATTR_COMMENTS, B_STRING_TYPE, true, true,
     728        installer.AddExtraAttribute(B_TRANSLATE("Description"),
     729            PSRV_PRINTER_ATTR_COMMENTS, B_STRING_TYPE, true, true,
    522730            140, B_ALIGN_LEFT, false);
    523731    }
    524732#endif
     
    544752void
    545753TTracker::InstallIndices(dev_t device)
    546754{
    547     status_t error = fs_create_index(device, kAttrQueryLastChange, B_INT32_TYPE, 0);
     755    status_t error = fs_create_index(device, kAttrQueryLastChange,
     756        B_INT32_TYPE, 0);
    548757    error = fs_create_index(device, "_trk/recentQuery", B_INT32_TYPE, 0);
    549758}
    550759
    551760
     761// In TrackerinitialState.cpp, AttributeTemplate.fBits (attr: _trk/columns)
     762// is big endian, So, in little endian machine (like x86),
     763// we need to swap data when making Localized AttributeTemplates.
     764static void
     765StringToStream(const char* src, BMallocIO& stream, bool swap)
     766{
     767    int32 length = strlen(src);
     768    int32 n = length;
     769    if (swap) {
     770        n = SwapInt32(n);
     771    }
     772    stream.Write(&n, sizeof(int32));
     773    stream.Write(src, (size_t)length + 1);
     774}
     775
     776
     777static void
     778BColumnToStream(BColumn* src, BMallocIO& stream, bool swap)
     779{
     780    uint32 key = AttrHashString("BColumn", B_OBJECT_TYPE);
     781    if (swap) {
     782        key = SwapUInt32(key);
     783    }
     784    stream.Write(&key, sizeof(uint32));
     785
     786    int32 version = kColumnStateArchiveVersion;
     787    if (swap) {
     788        version = SwapInt32(version);
     789    }
     790    stream.Write(&version, sizeof(int32));
     791
     792    StringToStream(src->Title(), stream, swap);
     793
     794    float offset = src->Offset();
     795    if (swap) {
     796        offset = B_SWAP_FLOAT(offset);
     797    }
     798    stream.Write(&offset, sizeof(float));
     799
     800    float width = src->Width();
     801    if (swap) {
     802        width = B_SWAP_FLOAT(width);
     803    }
     804    stream.Write(&width, sizeof(float));
     805
     806    alignment align = src->Alignment();
     807    if (swap) {
     808        align = (alignment)SwapInt32(align);
     809    }
     810    stream.Write(&align, sizeof(alignment));
     811
     812    StringToStream(src->AttrName(), stream, swap);
     813
     814    uint32 attrhash = src->AttrHash();
     815    if (swap) {
     816        attrhash = SwapUInt32(attrhash);
     817    }
     818    stream.Write(&attrhash, sizeof(uint32));
     819
     820    uint32 attrtype = src->AttrType();
     821    if (swap) {
     822        attrtype = SwapUInt32(attrtype);
     823    }
     824    stream.Write(&attrtype, sizeof(uint32));
     825
     826    bool statfield = src->StatField();
     827    stream.Write(&statfield, sizeof(bool));
     828
     829    bool editable = src->Editable();
     830    stream.Write(&editable, sizeof(bool));
     831
     832    StringToStream(src->DisplayAs(), stream, swap);
     833}
     834
     835
     836static size_t
     837mkColumnsBits(char** bits, ColumnData* src, int32 nelm, const char* context)
     838{
     839BMallocIO stream;
     840
     841    for (int32 i = 0; i < nelm; i++) {
     842        BColumn* c = new BColumn(
     843            be_locale_roster->GetCatalog()->GetString((src[i].title), context),
     844            src[i].offset, src[i].width, src[i].align,  src[i].attributeName,
     845            src[i].attrType, src[i].statField, src[i].editable);
     846
     847        if (!c) break;
     848        BColumnToStream(c, stream,
     849            B_HOST_IS_LENDIAN ? true : false);
     850        delete c;
     851    }
     852
     853    size_t n = stream.Position();
     854    *bits = new char[n];
     855    memcpy(*bits, stream.Buffer(), n);
     856
     857return n;
     858}
     859
     860
     861ArrayDeleter<char> defaultQueryColumnsBitsDeleter(fDefaultQueryColumnsBits);
     862ArrayDeleter<char> bookmarkQueryColumnsBitsDeleter(fBookmarkQueryColumnsBits);
     863ArrayDeleter<char> personQueryColumnsBitsDeleter(fPersonQueryColumnsBits);
     864ArrayDeleter<char> emailQueryColumnsBitsDeleter(fEmailQueryColumnsBits);
     865
     866
    552867void
    553868TTracker::InstallDefaultTemplates()
    554869{
     
    558873
    559874    if (!BContainerWindow::DefaultStateSourceNode(query.String(), &node, false))
    560875        if (BContainerWindow::DefaultStateSourceNode(query.String(), &node, true)) {
     876            size_t n = mkColumnsBits(&fDefaultQueryColumnsBits,
     877                defaultQueryColumns, 4, "DefaultQueryColumns");
     878            defaultQueryTemplate[2].fSize = n;
     879            defaultQueryTemplate[2].fBits= fDefaultQueryColumnsBits;
     880
    561881            AttributeStreamFileNode fileNode(&node);
    562             AttributeStreamTemplateNode tmp(kDefaultQueryTemplate, 3);
     882            AttributeStreamTemplateNode tmp(defaultQueryTemplate, 3);
    563883            fileNode << tmp;
    564884        }
    565885
    566886    (query = kQueryTemplates) += "/application_x-vnd.Be-bookmark";
    567887    if (!BContainerWindow::DefaultStateSourceNode(query.String(), &node, false))
    568888        if (BContainerWindow::DefaultStateSourceNode(query.String(), &node, true)) {
     889            size_t n = mkColumnsBits(&fBookmarkQueryColumnsBits,
     890                bookmarkQueryColumns, 3, "bookmarkQueryColumns");
     891            bookmarkQueryTemplate[2].fSize = n;
     892            bookmarkQueryTemplate[2].fBits= fBookmarkQueryColumnsBits;
     893
    569894            AttributeStreamFileNode fileNode(&node);
    570             AttributeStreamTemplateNode tmp(kBookmarkQueryTemplate, 3);
     895            AttributeStreamTemplateNode tmp(bookmarkQueryTemplate, 3);
    571896            fileNode << tmp;
    572897        }
    573898
    574899    (query = kQueryTemplates) += "/application_x-person";
    575900    if (!BContainerWindow::DefaultStateSourceNode(query.String(), &node, false))
    576901        if (BContainerWindow::DefaultStateSourceNode(query.String(), &node, true)) {
     902            size_t n = mkColumnsBits(&fPersonQueryColumnsBits,
     903                parsonQueryColumns, 4, "parsonQueryColumns");
     904            personQueryTemplate[2].fSize = n;
     905            personQueryTemplate[2].fBits= fPersonQueryColumnsBits;
     906
    577907            AttributeStreamFileNode fileNode(&node);
    578             AttributeStreamTemplateNode tmp(kPersonQueryTemplate, 3);
     908            AttributeStreamTemplateNode tmp(personQueryTemplate, 3);
    579909            fileNode << tmp;
    580910        }
    581911
    582912    (query = kQueryTemplates) += "/text_x-email";
    583913    if (!BContainerWindow::DefaultStateSourceNode(query.String(), &node, false))
    584914        if (BContainerWindow::DefaultStateSourceNode(query.String(), &node, true)) {
     915            size_t n = mkColumnsBits(&fEmailQueryColumnsBits,
     916                emailQueryColumns, 4, "emailQueryColumns");
     917            emailQueryTemplate[2].fSize = n;
     918            emailQueryTemplate[2].fBits= fEmailQueryColumnsBits;
     919
    585920            AttributeStreamFileNode fileNode(&node);
    586             AttributeStreamTemplateNode tmp(kEmailQueryTemplate, 3);
     921            AttributeStreamTemplateNode tmp(emailQueryTemplate, 3);
    587922            fileNode << tmp;
    588923        }
    589924}