Ticket #6374: TrackerInitialState.cpp.2.patch
File TrackerInitialState.cpp.2.patch, 12.8 KB (added by , 13 years ago) |
---|
-
src/kits/tracker/TrackerInitialState.cpp
46 46 #include <Path.h> 47 47 #include <Screen.h> 48 48 #include <VolumeRoster.h> 49 #include <InterfaceDefs.h> 49 50 50 51 #include <fs_attr.h> 51 52 #include <fs_index.h> … … 61 62 #include "FSUtils.h" 62 63 #include "QueryContainerWindow.h" 63 64 #include "Tracker.h" 65 #include "ViewState.h" 66 #include "AutoDeleter.h" 64 67 68 65 69 enum { 66 70 kForceLargeIcon = 0x1, 67 71 kForceMiniIcon = 0x2, … … 99 103 const BRect kDefaultFrame(40, 40, 500, 350); 100 104 const int32 kDefaultQueryTemplateCount = 3; 101 105 102 const AttributeTemplate kDefaultQueryTemplate[] = 103 /* /boot/home/config/settings/Tracker/DefaultQueryTemplates/application_octet-stream */ 106 char* fDefaultQueryColumnsBits = NULL; 107 char* fBookmarkQueryColumnsBits = NULL; 108 char* fPersonQueryColumnsBits = NULL; 109 char* fEmailQueryColumnsBits = NULL; 110 111 struct ColumnData 104 112 { 105 { /* default frame */ 113 const char* title; 114 float offset; 115 float width; 116 alignment align; 117 const char* attributeName; 118 uint32 attrType; 119 bool statField; 120 bool editable; 121 }; 122 123 static 124 AttributeTemplate defaultQueryTemplate[] = 125 /* /boot/home/config/settings/Tracker/DefaultQueryTemplates/ 126 application_octet-stream */ 127 { 128 { /* default frame */ 106 129 kAttrWindowFrame, 107 130 B_RECT_TYPE, 108 131 16, … … 120 143 kAttrColumns_be, 121 144 B_RAW_TYPE, 122 145 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" 146 NULL 132 147 } 133 148 }; 134 149 135 const AttributeTemplate kBookmarkQueryTemplate[] = 136 /* /boot/home/config/settings/Tracker/DefaultQueryTemplates/application_x-vnd.Be-bookmark */ 150 #undef B_TRANSLATE_CONTEXT 151 #define B_TRANSLATE_CONTEXT "DefaultQueryColumns" 152 153 static 154 ColumnData defaultQueryColumns[]= 137 155 { 138 { /* default frame */ 156 { 157 B_TRANSLATE_MARK("Name"), 158 40, 159 145, 160 B_ALIGN_LEFT, 161 "_stat/name", 162 B_STRING_TYPE, 163 true, 164 true 165 }, 166 { 167 B_TRANSLATE_MARK("Path"), 168 200, 169 225, 170 B_ALIGN_LEFT, 171 "_trk/path", 172 B_STRING_TYPE, 173 false, 174 false 175 }, 176 { 177 B_TRANSLATE_MARK("Size"), 178 440, 179 41, 180 B_ALIGN_LEFT, 181 "_stat/size", 182 B_OFF_T_TYPE, 183 true, 184 false 185 }, 186 { 187 B_TRANSLATE_MARK("Modified"), 188 496, 189 138, 190 B_ALIGN_LEFT, 191 " _stat/modified", 192 B_TIME_TYPE, 193 true, 194 false 195 } 196 197 }; 198 199 static 200 AttributeTemplate bookmarkQueryTemplate[] = 201 /* /boot/home/config/settings/Tracker/DefaultQueryTemplates/ 202 application_x-vnd.Be-bookmark */ 203 { 204 { /* default frame */ 139 205 kAttrWindowFrame, 140 206 B_RECT_TYPE, 141 207 16, 142 (const char *)&kDefaultFrame208 (const char* )&kDefaultFrame 143 209 }, 144 210 { /* attr: _trk/viewstate */ 145 211 kAttrViewState_be, … … 153 219 kAttrColumns_be, 154 220 B_RAW_TYPE, 155 221 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" 222 NULL 163 223 } 164 224 }; 165 225 166 const AttributeTemplate kPersonQueryTemplate[] = 167 /* /boot/home/config/settings/Tracker/DefaultQueryTemplates/application_x-vnd.Be-bookmark */ 226 #undef B_TRANSLATE_CONTEXT 227 #define B_TRANSLATE_CONTEXT "bookmarkQueryColumns" 228 229 static 230 ColumnData bookmarkQueryColumns[]= 168 231 { 169 { /* default frame */ 232 { 233 B_TRANSLATE_MARK("Title"), 234 40, 235 171, 236 B_ALIGN_LEFT, 237 "META:title", 238 B_STRING_TYPE, 239 false, 240 true 241 }, 242 { 243 B_TRANSLATE_MARK("URL"), 244 226, 245 287, 246 B_ALIGN_LEFT, 247 kAttrURL, 248 B_STRING_TYPE, 249 false, 250 true 251 }, 252 { 253 B_TRANSLATE_MARK("Keywords"), 254 528, 255 130, 256 B_ALIGN_LEFT, 257 "META:keyw", 258 B_STRING_TYPE, 259 false, 260 true 261 } 262 }; 263 264 static 265 AttributeTemplate personQueryTemplate[] = 266 /* /boot/home/config/settings/Tracker/DefaultQueryTemplates/ 267 application_x-vnd.Be-bookmark */ 268 { 269 { /* default frame */ 170 270 kAttrWindowFrame, 171 271 B_RECT_TYPE, 172 272 16, … … 184 284 kAttrColumns_be, 185 285 B_RAW_TYPE, 186 286 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" 287 NULL 196 288 }, 197 289 }; 198 290 199 const AttributeTemplate kEmailQueryTemplate[] = 291 #undef B_TRANSLATE_CONTEXT 292 #define B_TRANSLATE_CONTEXT "parsonQueryColumns" 293 294 static 295 ColumnData parsonQueryColumns[]= 296 { 297 { 298 B_TRANSLATE_MARK("Name"), 299 40, 300 115, 301 B_ALIGN_LEFT, 302 "_stat/name", 303 B_STRING_TYPE, 304 true, 305 true 306 }, 307 { 308 B_TRANSLATE_MARK("Work Phone"), 309 170, 310 90, 311 B_ALIGN_LEFT, 312 kAttrWorkPhone, 313 B_STRING_TYPE, 314 false, 315 true 316 }, 317 { 318 B_TRANSLATE_MARK("E-mail"), 319 275, 320 93, 321 B_ALIGN_LEFT, 322 kAttrEmail, 323 B_STRING_TYPE, 324 false, 325 true 326 }, 327 { 328 B_TRANSLATE_MARK("Company"), 329 383, 330 120, 331 B_ALIGN_LEFT, 332 kAttrCompany, 333 B_STRING_TYPE, 334 false, 335 true 336 } 337 }; 338 339 static 340 AttributeTemplate emailQueryTemplate[] = 200 341 /* /boot/home/config/settings/Tracker/DefaultQueryTemplates/text_x-email */ 201 342 { 202 343 { /* default frame */ … … 217 358 kAttrColumns_be, 218 359 B_RAW_TYPE, 219 360 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" 361 NULL 229 362 }, 230 363 }; 231 364 365 #undef B_TRANSLATE_CONTEXT 366 #define B_TRANSLATE_CONTEXT "emailQueryColumns" 232 367 368 static 369 ColumnData emailQueryColumns[]= 370 { 371 { 372 B_TRANSLATE_MARK("Subject"), 373 40, 374 110, 375 B_ALIGN_LEFT, 376 "MAIL:subject", 377 B_STRING_TYPE, 378 false, 379 false 380 }, 381 { 382 B_TRANSLATE_MARK("From"), 383 165, 384 153, 385 B_ALIGN_LEFT, 386 "MAIL:from", 387 B_STRING_TYPE, 388 false, 389 false 390 }, 391 { 392 B_TRANSLATE_MARK("When"), 393 333, 394 120, 395 B_ALIGN_LEFT, 396 "MAIL:when", 397 B_STRING_TYPE, 398 false, 399 false 400 }, 401 { 402 B_TRANSLATE_MARK("Status"), 403 468, 404 50, 405 B_ALIGN_RIGHT, 406 "MAIL:status", 407 B_STRING_TYPE, 408 false, 409 true 410 } 411 }; 412 413 233 414 namespace BPrivate { 234 415 235 416 class ExtraAttributeLazyInstaller { … … 299 480 300 481 // #pragma mark - 301 482 483 #undef B_TRANSLATE_CONTEXT 484 #define B_TRANSLATE_CONTEXT "TrackerInitialState" 302 485 486 303 487 static void 304 488 InstallTemporaryBackgroundImages(BNode* node, BMessage* message) 305 489 { … … 549 733 } 550 734 551 735 736 // In TrackerinitialState.cpp, AttributeTemplate.fBits (attr: _trk/columns) 737 // is big endian, So, in little endian machine (like x86), 738 // we need to swap data when making Localized AttributeTemplates. 739 static void 740 StringToStream(const char* src, BMallocIO& stream, bool swap) 741 { 742 int32 length = strlen(src); 743 int32 n = length; 744 if (swap) { 745 n = SwapInt32(n); 746 } 747 stream.Write(&n, sizeof(int32)); 748 stream.Write(src, (size_t)length + 1); 749 } 750 751 752 static void 753 BColumnToStream(BColumn* src, BMallocIO& stream, bool swap) 754 { 755 uint32 key = AttrHashString("BColumn", B_OBJECT_TYPE); 756 if (swap) { 757 key = SwapUInt32(key); 758 } 759 stream.Write(&key, sizeof(uint32)); 760 761 int32 version = kColumnStateArchiveVersion; 762 if (swap) { 763 version = SwapInt32(version); 764 } 765 stream.Write(&version, sizeof(int32)); 766 767 StringToStream(src->Title(), stream, swap); 768 769 float offset = src->Offset(); 770 if (swap) { 771 offset = B_SWAP_FLOAT(offset); 772 } 773 stream.Write(&offset, sizeof(float)); 774 775 float width = src->Width(); 776 if (swap) { 777 width = B_SWAP_FLOAT(width); 778 } 779 stream.Write(&width, sizeof(float)); 780 781 alignment align = src->Alignment(); 782 if (swap) { 783 align = (alignment)SwapInt32(align); 784 } 785 stream.Write(&align, sizeof(alignment)); 786 787 StringToStream(src->AttrName(), stream, swap); 788 789 uint32 attrhash = src->AttrHash(); 790 if (swap) { 791 attrhash = SwapUInt32(attrhash); 792 } 793 stream.Write(&attrhash, sizeof(uint32)); 794 795 uint32 attrtype = src->AttrType(); 796 if (swap) { 797 attrtype = SwapUInt32(attrtype); 798 } 799 stream.Write(&attrtype, sizeof(uint32)); 800 801 bool statfield = src->StatField(); 802 stream.Write(&statfield, sizeof(bool)); 803 804 bool editable = src->Editable(); 805 stream.Write(&editable, sizeof(bool)); 806 807 StringToStream(src->DisplayAs(), stream, swap); 808 } 809 810 811 static size_t 812 mkColumnsBits(char** bits, ColumnData* src, int32 nelm, const char* context) 813 { 814 BMallocIO stream; 815 816 for (int32 i = 0; i < nelm; i++) { 817 BColumn* c = new BColumn( 818 B_TRANSLATE_WITH_CONTEXT((src[i].title), context), 819 src[i].offset, src[i].width, src[i].align, src[i].attributeName, 820 src[i].attrType, src[i].statField, src[i].editable); 821 822 if (!c) break; 823 BColumnToStream(c, stream, 824 B_HOST_IS_LENDIAN ? true : false); 825 delete c; 826 } 827 828 size_t n = stream.Position(); 829 *bits = new char[n]; 830 memcpy(*bits, stream.Buffer(), n); 831 832 return n; 833 } 834 835 836 ArrayDeleter<char> defaultQueryColumnsBitsDeleter(fDefaultQueryColumnsBits); 837 ArrayDeleter<char> bookmarkQueryColumnsBitsDeleter(fBookmarkQueryColumnsBits); 838 ArrayDeleter<char> personQueryColumnsBitsDeleter(fPersonQueryColumnsBits); 839 ArrayDeleter<char> emailQueryColumnsBitsDeleter(fEmailQueryColumnsBits); 840 841 552 842 void 553 843 TTracker::InstallDefaultTemplates() 554 844 { … … 558 848 559 849 if (!BContainerWindow::DefaultStateSourceNode(query.String(), &node, false)) 560 850 if (BContainerWindow::DefaultStateSourceNode(query.String(), &node, true)) { 851 size_t n = mkColumnsBits(&fDefaultQueryColumnsBits, 852 defaultQueryColumns, 4, "DefaultQueryColumns"); 853 defaultQueryTemplate[2].fSize = n; 854 defaultQueryTemplate[2].fBits= fDefaultQueryColumnsBits; 855 561 856 AttributeStreamFileNode fileNode(&node); 562 AttributeStreamTemplateNode tmp( kDefaultQueryTemplate, 3);857 AttributeStreamTemplateNode tmp(defaultQueryTemplate, 3); 563 858 fileNode << tmp; 564 859 } 565 860 566 861 (query = kQueryTemplates) += "/application_x-vnd.Be-bookmark"; 567 862 if (!BContainerWindow::DefaultStateSourceNode(query.String(), &node, false)) 568 863 if (BContainerWindow::DefaultStateSourceNode(query.String(), &node, true)) { 864 size_t n = mkColumnsBits(&fBookmarkQueryColumnsBits, 865 bookmarkQueryColumns, 3, "bookmarkQueryColumns"); 866 bookmarkQueryTemplate[2].fSize = n; 867 bookmarkQueryTemplate[2].fBits= fBookmarkQueryColumnsBits; 868 569 869 AttributeStreamFileNode fileNode(&node); 570 AttributeStreamTemplateNode tmp( kBookmarkQueryTemplate, 3);870 AttributeStreamTemplateNode tmp(bookmarkQueryTemplate, 3); 571 871 fileNode << tmp; 572 872 } 573 873 574 874 (query = kQueryTemplates) += "/application_x-person"; 575 875 if (!BContainerWindow::DefaultStateSourceNode(query.String(), &node, false)) 576 876 if (BContainerWindow::DefaultStateSourceNode(query.String(), &node, true)) { 877 size_t n = mkColumnsBits(&fPersonQueryColumnsBits, 878 parsonQueryColumns, 4, "parsonQueryColumns"); 879 personQueryTemplate[2].fSize = n; 880 personQueryTemplate[2].fBits= fPersonQueryColumnsBits; 881 577 882 AttributeStreamFileNode fileNode(&node); 578 AttributeStreamTemplateNode tmp( kPersonQueryTemplate, 3);883 AttributeStreamTemplateNode tmp(personQueryTemplate, 3); 579 884 fileNode << tmp; 580 885 } 581 886 582 887 (query = kQueryTemplates) += "/text_x-email"; 583 888 if (!BContainerWindow::DefaultStateSourceNode(query.String(), &node, false)) 584 889 if (BContainerWindow::DefaultStateSourceNode(query.String(), &node, true)) { 890 size_t n = mkColumnsBits(&fEmailQueryColumnsBits, 891 emailQueryColumns, 4, "emailQueryColumns"); 892 emailQueryTemplate[2].fSize = n; 893 emailQueryTemplate[2].fBits= fEmailQueryColumnsBits; 894 585 895 AttributeStreamFileNode fileNode(&node); 586 AttributeStreamTemplateNode tmp( kEmailQueryTemplate, 3);896 AttributeStreamTemplateNode tmp(emailQueryTemplate, 3); 587 897 fileNode << tmp; 588 898 } 589 899 }