Ticket #6302: message.patch

File message.patch, 6.3 KB (added by yourpalal, 14 years ago)

patch to add convenience methods for BSize and BAlignment

  • src/kits/app/Message.cpp

     
    1717#include <TokenSpace.h>
    1818#include <util/KMessage.h>
    1919
     20#include <Alignment.h>
    2021#include <Application.h>
    2122#include <AppMisc.h>
    2223#include <BlockCache.h>
     
    23822383
    23832384DEFINE_FUNCTIONS(BPoint, Point, B_POINT_TYPE);
    23842385DEFINE_FUNCTIONS(BRect, Rect, B_RECT_TYPE);
     2386DEFINE_FUNCTIONS(BSize, Size, B_SIZE_TYPE);
    23852387DEFINE_FUNCTIONS(int8, Int8, B_INT8_TYPE);
    23862388DEFINE_FUNCTIONS(uint8, UInt8, B_UINT8_TYPE);
    23872389DEFINE_FUNCTIONS(int16, Int16, B_INT16_TYPE);
     
    24032405    return HasData(name, typeCode, index);                                  \
    24042406}
    24052407
     2408DEFINE_HAS_FUNCTION(Alignment, B_ALIGNMENT_TYPE);
    24062409DEFINE_HAS_FUNCTION(String, B_STRING_TYPE);
    24072410DEFINE_HAS_FUNCTION(Pointer, B_POINTER_TYPE);
    24082411DEFINE_HAS_FUNCTION(Messenger, B_MESSENGER_TYPE);
     
    24342437#undef DEFINE_LAZY_FIND_FUNCTION
    24352438
    24362439status_t
     2440BMessage::AddAlignment(const char* name, const BAlignment& alignment)
     2441{
     2442    int32 data[2] = {alignment.horizontal, alignment.vertical};
     2443    return AddData(name, B_ALIGNMENT_TYPE, data, sizeof(data));
     2444}
     2445
     2446
     2447status_t
    24372448BMessage::AddString(const char *name, const char *string)
    24382449{
    24392450    return AddData(name, B_STRING_TYPE, string, string ? strlen(string) + 1 : 0, false);
     
    25392550
    25402551
    25412552status_t
     2553BMessage::FindAlignment(const char* name, BAlignment* alignment) const
     2554{
     2555    return FindAlignment(name, 0, alignment);
     2556}
     2557
     2558
     2559status_t
     2560BMessage::FindAlignment(const char* name, int32 index,
     2561    BAlignment* alignment) const
     2562{
     2563    if (!alignment)
     2564        return B_BAD_VALUE;
     2565
     2566    int32* data;
     2567    ssize_t bytes;
     2568
     2569    status_t err = FindData(name, B_ALIGNMENT_TYPE, index,
     2570        (const void**)&data, &bytes);
     2571
     2572    if (err == B_OK) {
     2573        if (bytes != sizeof(int32[2]))
     2574            return B_ERROR;
     2575
     2576        alignment->horizontal = (enum alignment)(*data);
     2577        alignment->vertical = (vertical_alignment)*(data + 1);
     2578    }
     2579
     2580    return err;
     2581}
     2582
     2583
     2584status_t
    25422585BMessage::FindString(const char *name, const char **string) const
    25432586{
    25442587    return FindString(name, 0, string);
     
    27192762
    27202763
    27212764status_t
     2765BMessage::ReplaceAlignment(const char* name, const BAlignment& alignment)
     2766{
     2767    int32 data[2] = {alignment.horizontal, alignment.vertical};
     2768    return ReplaceData(name, B_ALIGNMENT_TYPE, 0, data, sizeof(data));
     2769}
     2770
     2771
     2772status_t
     2773BMessage::ReplaceAlignment(const char* name, int32 index,
     2774    const BAlignment& alignment)
     2775{
     2776    int32 data[2] = {alignment.horizontal, alignment.vertical};
     2777    return ReplaceData(name, B_ALIGNMENT_TYPE, index, data, sizeof(data));
     2778}
     2779
     2780
     2781status_t
    27222782BMessage::ReplaceString(const char *name, const char *string)
    27232783{
    27242784    if (string == NULL)
  • headers/os/app/Message.h

     
    1818#include <AppDefs.h>        /* For convenience */
    1919#include <TypeConstants.h>  /* For convenience */
    2020
     21class BAlignment;
    2122class BBlockCache;
    2223class BMessenger;
    2324class BHandler;
     
    114115        status_t        PopSpecifier();
    115116
    116117        // Adding data
     118        status_t        AddAlignment(const char* name,
     119                            const BAlignment& alignment);
    117120        status_t        AddRect(const char *name, BRect aRect);
    118121        status_t        AddPoint(const char *name, BPoint aPoint);
     122        status_t        AddSize(const char* name, BSize aSize);
    119123        status_t        AddString(const char *name, const char *aString);
    120124        status_t        AddString(const char *name, const BString &aString);
    121125        status_t        AddInt8(const char *name, int8 value);
     
    145149        status_t        MakeEmpty();
    146150
    147151        // Finding data
     152        status_t        FindAlignment(const char* name,
     153                            BAlignment* alignment) const;
     154        status_t        FindAlignment(const char* name, int32 index,
     155                            BAlignment* alignment) const;
     156
    148157        status_t        FindRect(const char *name, BRect *rect) const;
    149158        status_t        FindRect(const char *name, int32 index, BRect *rect) const;
    150159        status_t        FindPoint(const char *name, BPoint *point) const;
    151160        status_t        FindPoint(const char *name, int32 index, BPoint *point) const;
     161
     162        status_t        FindSize(const char *name, BSize* size) const;
     163        status_t        FindSize(const char *name,
     164                            int32 index, BSize* size) const;
     165
    152166        status_t        FindString(const char *name, const char **string) const;
    153167        status_t        FindString(const char *name, int32 index, const char **string) const;
    154168        status_t        FindString(const char *name, BString *string) const;
     
    191205                            const void **data, ssize_t *numBytes) const;
    192206
    193207        // Replacing data
     208        status_t        ReplaceAlignment(const char* name,
     209                            const BAlignment& alignment);
     210        status_t        ReplaceAlignment(const char* name, int32 index,
     211                            const BAlignment& alignment);
     212
    194213        status_t        ReplaceRect(const char *name, BRect aRect);
    195214        status_t        ReplaceRect(const char *name, int32 index, BRect aRect);
     215
    196216        status_t        ReplacePoint(const char *name, BPoint aPoint);
    197217        status_t        ReplacePoint(const char *name, int32 index, BPoint aPoint);
     218        status_t        ReplaceSize(const char* name, BSize aSize);
     219        status_t        ReplaceSize(const char* name, int32 index, BSize aSize);
     220
    198221        status_t        ReplaceString(const char *name, const char *aString);
    199222        status_t        ReplaceString(const char *name, int32 index, const char *aString);
    200223        status_t        ReplaceString(const char *name, const BString &aString);
     
    245268        void            operator delete(void *pointer, size_t size);
    246269
    247270        // Private, reserved, or obsolete
     271        bool            HasAlignment(const char*, int32 n = 0) const;
    248272        bool            HasRect(const char *, int32 n = 0) const;
    249273        bool            HasPoint(const char *, int32 n = 0) const;
     274        bool            HasSize(const char*, int32 n = 0) const;
    250275        bool            HasString(const char *, int32 n = 0) const;
    251276        bool            HasInt8(const char *, int32 n = 0) const;
    252277        bool            HasUInt8(const char *, int32 n = 0) const;
  • headers/os/support/TypeConstants.h

     
    1414
    1515enum {
    1616    B_AFFINE_TRANSFORM_TYPE         = 'AMTX',
     17    B_ALIGNMENT_TYPE                = 'ALGN',
    1718    B_ANY_TYPE                      = 'ANYT',
    1819    B_ATOM_TYPE                     = 'ATOM',
    1920    B_ATOMREF_TYPE                  = 'ATMR',
     
    4748    B_REF_TYPE                      = 'RREF',
    4849    B_RGB_32_BIT_TYPE               = 'RGBB',
    4950    B_RGB_COLOR_TYPE                = 'RGBC',
     51    B_SIZE_TYPE                     = 'SIZE',
    5052    B_SIZE_T_TYPE                   = 'SIZT',
    5153    B_SSIZE_T_TYPE                  = 'SSZT',
    5254    B_STRING_TYPE                   = 'CSTR',