Ticket #2185: HWindow.cpp-v2.diff

File HWindow.cpp-v2.diff, 15.2 KB (added by kaoutsis, 11 years ago)

with style changes

  • src/preferences/sounds/HWindow.cpp

     
    1 // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
    2 //
    3 //  Copyright (c) 2003, OpenBeOS
    4 //
    5 //  This software is part of the OpenBeOS distribution and is covered
    6 //  by the OpenBeOS license.
    7 //
    8 //
    9 //  File:        HWindow.cpp
    10 //  Author:      Jérôme Duval, Oliver Ruiz Dorantes, Atsushi Takamatsu
    11 //  Description: Sounds Preferences
    12 //  Created :    November 24, 2003
    13 //
    14 // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
     1/*
     2 * Copyright 2003-2008, Haiku, Inc. All rights reserved.
     3 * Distributed under the terms of the MIT License.
     4 *
     5 * Authors:
     6 *      Jérôme Duval
     7 *      Oliver Ruiz Dorantes
     8 *      Atsushi Takamatsu
     9 */
    1510
     11
    1612#include "HWindow.h"
    1713#include "HEventList.h"
    1814#include "HEventItem.h"
    19 #include <ScrollView.h>
    20 #include <StringView.h>
     15
     16#include <stdio.h>
     17
     18#include <Alert.h>
     19#include <Application.h>
     20#include <Beep.h>
     21#include <Box.h>
     22#include <Button.h>
    2123#include <ClassInfo.h>
     24#include <FindDirectory.h>
     25#include <fs_attr.h>
    2226#include <MediaFiles.h>
    2327#include <MenuBar.h>
    24 #include <Box.h>
    25 #include <MenuItem.h>
    2628#include <MenuField.h>
    27 #include <Button.h>
    28 #include <Beep.h>
    29 #include <Path.h>
    30 #include <Application.h>
     29#include <MenuItem.h>
    3130#include <Node.h>
    3231#include <NodeInfo.h>
    33 #include <Alert.h>
     32#include <Path.h>
    3433#include <Roster.h>
    35 #include <fs_attr.h>
    36 #include <stdio.h>
     34#include <ScrollView.h>
     35#include <StringView.h>
    3736#include <Sound.h>
    3837
    39 /***********************************************************
    40  * Constructor
    41  ***********************************************************/
     38
    4239HWindow::HWindow(BRect rect, const char* name)
    43     :_inherited(rect, name, B_TITLED_WINDOW, 0),
     40    : _inherited(rect, name, B_TITLED_WINDOW, 0),
    4441    fFilePanel(NULL),
    4542    fPlayer(NULL)
    4643{
     
    5754    fEventList->Select(0);
    5855}
    5956
    60 /***********************************************************
    61  * Destructor
    62  ***********************************************************/
     57
    6358HWindow::~HWindow()
    6459{
    6560    delete fFilePanel;
    6661    delete fPlayer;
    6762}
    6863
    69 /***********************************************************
    70  * Initialize GUIs.
    71  ***********************************************************/
     64
    7265void
    7366HWindow::InitGUI()
    7467{
    7568    BRect rect = Bounds();
    7669    rect.bottom -= 106;
    77     BView *listView = new BView(rect, "", B_FOLLOW_NONE, B_WILL_DRAW | B_PULSE_NEEDED);
     70    BView* listView = new BView(rect, "", B_FOLLOW_NONE, B_WILL_DRAW | B_PULSE_NEEDED);
    7871    listView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
    7972    AddChild(listView);
    8073
     
    8376    stringView->SetFont(be_bold_font);
    8477    stringView->ResizeToPreferred();
    8578    listView->AddChild(stringView);
    86    
     79
    8780    stringRect.OffsetBy(120, 0);
    8881    stringView = new BStringView(stringRect, "sound", "Sound");
    8982    stringView->SetFont(be_bold_font);
    9083    stringView->ResizeToPreferred();
    9184    listView->AddChild(stringView);
    92    
     85
    9386    rect.left += 13;
    9487    rect.right -= B_V_SCROLL_BAR_WIDTH + 13;
    9588    rect.top += 28;
    9689    rect.bottom -= 7;
    9790    fEventList = new HEventList(rect);
    9891    fEventList->SetType(BMediaFiles::B_SOUNDS);
    99    
    100     BScrollView *scrollView = new BScrollView(""
    101                                     ,fEventList
    102                                     ,B_FOLLOW_ALL
    103                                     ,0
    104                                     ,false
    105                                     ,true);
     92
     93    BScrollView* scrollView = new BScrollView("", fEventList, B_FOLLOW_ALL, 0,
     94        false, true);
    10695    listView->AddChild(scrollView);
    10796
    10897    rect = Bounds();
    10998    rect.top = rect.bottom - 105;
    110     BView *view = new BView(rect, "", B_FOLLOW_NONE, B_WILL_DRAW | B_PULSE_NEEDED);
     99    BView* view = new BView(rect, "", B_FOLLOW_NONE, B_WILL_DRAW | B_PULSE_NEEDED);
    111100    view->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
    112101    AddChild(view);
    113102    rect = view->Bounds().InsetBySelf(12, 12);
    114     BBox *box = new BBox(rect, "", B_FOLLOW_ALL);
     103    BBox* box = new BBox(rect, "", B_FOLLOW_ALL);
    115104    view->AddChild(box);
    116105    rect = box->Bounds();
    117106    rect.top += 10;
    118107    rect.left += 15;
    119108    rect.right -= 10;
    120109    rect.bottom = rect.top + 20;
    121     BMenu *menu = new BMenu("file");
     110    BMenu* menu = new BMenu("file");
    122111    menu->SetRadioMode(true);
    123112    menu->SetLabelFromMarked(true);
    124113    menu->AddSeparatorItem();
    125114   
    126115    menu->AddItem(new BMenuItem("<none>", new BMessage(M_NONE_MESSAGE)));
    127116    menu->AddItem(new BMenuItem("Other" B_UTF8_ELLIPSIS, new BMessage(M_OTHER_MESSAGE)));
    128     BMenuField *menuField = new BMenuField(rect
    129                                         ,"filemenu"
    130                                         ,"Sound File:"
    131                                         ,menu
    132                                         ,B_FOLLOW_TOP | B_FOLLOW_LEFT);
     117    BMenuField* menuField = new BMenuField(rect, "filemenu", "Sound File:", menu,
     118        B_FOLLOW_TOP | B_FOLLOW_LEFT);
    133119    menuField->SetDivider(menuField->StringWidth("Sound File:") + 10);
    134120    box->AddChild(menuField);
    135121    rect.OffsetBy(-2, menuField->Bounds().Height() + 15);
    136     BButton *button = new BButton(rect
    137                         ,"stop"
    138                         ,"Stop"
    139                         ,new BMessage(M_STOP_MESSAGE)
    140                         ,B_FOLLOW_RIGHT | B_FOLLOW_TOP);
     122    BButton* button = new BButton(rect, "stop", "Stop", new BMessage(M_STOP_MESSAGE),
     123        B_FOLLOW_RIGHT | B_FOLLOW_TOP);
    141124    button->ResizeToPreferred();
    142125    button->SetEnabled(false);
    143126    button->MoveTo(box->Bounds().right - button->Bounds().Width() - 15, rect.top);
    144127    box->AddChild(button);
    145    
     128
    146129    rect = button->Frame();
    147130    view->ResizeTo(view->Bounds().Width(), 24 + rect.bottom + 12);
    148131    box->ResizeTo(box->Bounds().Width(), rect.bottom + 12);
    149132
    150133    button->SetResizingMode(B_FOLLOW_RIGHT | B_FOLLOW_TOP);
    151     button = new BButton(rect
    152                                 ,"play"
    153                                 ,"Play"
    154                                 ,new BMessage(M_PLAY_MESSAGE)
    155                                 ,B_FOLLOW_RIGHT | B_FOLLOW_TOP);
     134    button = new BButton(rect, "play", "Play", new BMessage(M_PLAY_MESSAGE),
     135        B_FOLLOW_RIGHT | B_FOLLOW_TOP);
    156136    button->ResizeToPreferred();
    157137    button->SetEnabled(false);
    158138    button->MoveTo(rect.left - button->Bounds().Width() - 15, rect.top);
     
    169149}
    170150
    171151
    172 /***********************************************************
    173  * MessageReceived
    174  ***********************************************************/
    175152void
    176 HWindow::MessageReceived(BMessage *message)
     153HWindow::MessageReceived(BMessage* message)
    177154{
    178     switch(message->what) {
    179     case M_OTHER_MESSAGE:
     155    switch (message->what) {
     156        case M_OTHER_MESSAGE:
    180157        {
    181             BMenuField *menufield = cast_as(FindView("filemenu"), BMenuField);
    182             BMenu *menu = menufield->Menu();
    183            
     158            BMenuField* menufield = cast_as(FindView("filemenu"), BMenuField);
     159            BMenu* menu = menufield->Menu();
     160
    184161            int32 sel = fEventList->CurrentSelection();
    185162            if (sel >= 0) {
    186                 HEventItem *item = cast_as(fEventList->ItemAt(sel), HEventItem);
     163                HEventItem* item = cast_as(fEventList->ItemAt(sel), HEventItem);
    187164                BPath path(item->Path());
    188165                if (path.InitCheck() != B_OK) {
    189                     BMenuItem *item = menu->FindItem("<none>");
     166                    BMenuItem* item = menu->FindItem("<none>");
    190167                    if (item)
    191168                        item->SetMarked(true);
    192                 } else{
    193                     BMenuItem *item = menu->FindItem(path.Leaf());
     169                } else {
     170                    BMenuItem* item = menu->FindItem(path.Leaf());
    194171                    if (item)
    195172                        item->SetMarked(true);
    196173                }
     
    198175            fFilePanel->Show();
    199176            break;
    200177        }
    201     case B_SIMPLE_DATA:
    202     case B_REFS_RECEIVED:
     178
     179        case B_SIMPLE_DATA:
     180        case B_REFS_RECEIVED:
    203181        {
    204182            entry_ref ref;
    205183            int32 sel = fEventList->CurrentSelection();
    206184            if (message->FindRef("refs", &ref) == B_OK && sel >= 0) {
    207                 BMenuField *menufield = cast_as(FindView("filemenu"), BMenuField);
    208                 BMenu *menu = menufield->Menu();
     185                BMenuField* menufield = cast_as(FindView("filemenu"), BMenuField);
     186                BMenu* menu = menufield->Menu();
     187
    209188                // check audio file
    210189                BNode node(&ref);
    211190                BNodeInfo ninfo(&node);
    212                 char type[B_MIME_TYPE_LENGTH+1];
     191                char type[B_MIME_TYPE_LENGTH + 1];
    213192                ninfo.GetType(type);
    214193                BMimeType mtype(type);
    215194                BMimeType superType;
     
    217196                if (superType.Type() == NULL || strcmp(superType.Type(), "audio") != 0) {
    218197                    beep();
    219198                    (new BAlert("", "This is not a audio file.", "OK", NULL, NULL,
    220                             B_WIDTH_AS_USUAL, B_STOP_ALERT))->Go();
     199                        B_WIDTH_AS_USUAL, B_STOP_ALERT))->Go();
    221200                    break;
    222201                }
     202
    223203                // add file item
    224                 BMessage *msg = new BMessage(M_ITEM_MESSAGE);
     204                BMessage* msg = new BMessage(M_ITEM_MESSAGE);
    225205                BPath path(&ref);
    226206                msg->AddRef("refs", &ref);
    227                 BMenuItem *menuitem = menu->FindItem(path.Leaf());
     207                BMenuItem* menuitem = menu->FindItem(path.Leaf());
    228208                if (!menuitem)
    229209                    menu->AddItem(menuitem = new BMenuItem(path.Leaf(), msg), 0);
    230210                // refresh item
     
    235215            }
    236216            break;
    237217        }
    238     case M_PLAY_MESSAGE:
     218
     219        case M_PLAY_MESSAGE:
    239220        {
    240221            int32 sel = fEventList->CurrentSelection();
    241             if (sel >= 0)
    242             {
    243                 HEventItem *item = cast_as(fEventList->ItemAt(sel), HEventItem);
     222            if (sel >= 0) {
     223                HEventItem* item = cast_as(fEventList->ItemAt(sel), HEventItem);
    244224                const char* path = item->Path();
    245                 if (path)
    246                 {
     225                if (path) {
    247226                    entry_ref ref;
    248227                    ::get_ref_for_path(path, &ref);
    249228                    delete fPlayer;
     
    253232            }
    254233            break;
    255234        }
    256     case M_STOP_MESSAGE:
     235
     236        case M_STOP_MESSAGE:
    257237        {
    258238            if (!fPlayer)
    259239                break;
    260             if (fPlayer->IsPlaying())
    261             {
     240            if (fPlayer->IsPlaying()) {
    262241                fPlayer->StopPlaying();
    263242                delete fPlayer;
    264243                fPlayer = NULL;
    265244            }
    266245            break;
    267246        }
    268     case M_EVENT_CHANGED:
     247
     248        case M_EVENT_CHANGED:
    269249        {
    270250            const char* path;
    271             BMenuField *menufield = cast_as(FindView("filemenu"), BMenuField);
    272             BMenu *menu = menufield->Menu();
    273            
     251            BMenuField* menufield = cast_as(FindView("filemenu"), BMenuField);
     252            BMenu* menu = menufield->Menu();
     253
    274254            if (message->FindString("path", &path) == B_OK) {
    275255                BPath path(path);
    276256                if (path.InitCheck() != B_OK) {
    277                     BMenuItem *item = menu->FindItem("<none>");
     257                    BMenuItem* item = menu->FindItem("<none>");
    278258                    if (item)
    279259                        item->SetMarked(true);
    280260                } else {
    281                     BMenuItem *item = menu->FindItem(path.Leaf());
     261                    BMenuItem* item = menu->FindItem(path.Leaf());
    282262                    if (item)
    283263                        item->SetMarked(true);
    284264                }
    285265            }
    286266            break;
    287267        }
    288     case M_ITEM_MESSAGE:
     268
     269        case M_ITEM_MESSAGE:
    289270        {
    290271            entry_ref ref;
    291             if (message->FindRef("refs", &ref) == B_OK) {
     272            if (message->FindRef("refs", &ref) == B_OK)
    292273                fEventList->SetPath(BPath(&ref).Path());
    293             }
    294274            break;
    295275        }
    296     case M_NONE_MESSAGE:
     276
     277        case M_NONE_MESSAGE:
    297278        {
    298279            fEventList->SetPath(NULL);
    299280            break;
    300281        }
    301     default:
    302         _inherited::MessageReceived(message);
     282
     283        default:
     284            _inherited::MessageReceived(message);
    303285    }
    304286}
    305287
    306 /***********************************************************
    307  * Init menu
    308  ***********************************************************/
     288
    309289void
    310290HWindow::SetupMenuField()
    311291{
    312     BMenuField *menufield = cast_as(FindView("filemenu"), BMenuField);
    313     BMenu *menu = menufield->Menu();
     292    BMenuField* menufield = cast_as(FindView("filemenu"), BMenuField);
     293    BMenu* menu = menufield->Menu();
    314294    int32 count = fEventList->CountItems();
    315     for(int32 i = 0; i < count; i++) {
    316         HEventItem *item = cast_as(fEventList->ItemAt(i), HEventItem);
     295    for (int32 i = 0; i < count; i++) {
     296        HEventItem* item = cast_as(fEventList->ItemAt(i), HEventItem);
    317297        if (!item)
    318298            continue;
    319        
     299
    320300        BPath path(item->Path());
    321301        if (path.InitCheck() != B_OK)
    322302            continue;
    323303        if (menu->FindItem(path.Leaf()))
    324304            continue;
    325        
    326         BMessage *msg = new BMessage(M_ITEM_MESSAGE);
     305
     306        BMessage* msg = new BMessage(M_ITEM_MESSAGE);
    327307        entry_ref ref;
    328308        ::get_ref_for_path(path.Path(), &ref);
    329309        msg->AddRef("refs", &ref);
    330310        menu->AddItem(new BMenuItem(path.Leaf(), msg), 0);
    331311    }
    332    
    333     BPath path("/boot/beos/etc/sounds");
    334     status_t err = B_OK;
    335     BDirectory dir( path.Path() );
     312
     313    BPath path;
     314    status_t err = find_directory(B_BEOS_SOUNDS_DIRECTORY, &path);
     315    BDirectory dir(path.Path());
    336316    BEntry entry;
    337317    BPath item_path;
    338     while (err == B_OK){
    339         err = dir.GetNextEntry((BEntry *)&entry, true);
    340         if (entry.InitCheck() != B_NO_ERROR) {
     318    while (err == B_OK) {
     319        err = dir.GetNextEntry((BEntry*)&entry, true);
     320        if (entry.InitCheck() != B_NO_ERROR)
    341321            break;
    342         }
     322
    343323        entry.GetPath(&item_path);
    344        
     324
    345325        if (menu->FindItem(item_path.Leaf()))
    346326            continue;
    347        
    348         BMessage *msg = new BMessage(M_ITEM_MESSAGE);
     327
     328        BMessage* msg = new BMessage(M_ITEM_MESSAGE);
    349329        entry_ref ref;
    350330        ::get_ref_for_path(item_path.Path(), &ref);
    351331        msg->AddRef("refs", &ref);
    352332        menu->AddItem(new BMenuItem(item_path.Leaf(), msg), 0);
    353333    }
    354    
    355     path.SetTo("/boot/home/config/sounds");
     334
     335    err = find_directory(B_USER_SOUNDS_DIRECTORY, &path);
    356336    dir.SetTo(path.Path());
    357     err = B_OK;
    358337    while (err == B_OK) {
    359         err = dir.GetNextEntry((BEntry *)&entry, true);
    360         if (entry.InitCheck() != B_NO_ERROR) {
     338        err = dir.GetNextEntry((BEntry*)&entry, true);
     339        if (entry.InitCheck() != B_NO_ERROR)
    361340            break;
    362         }
     341
    363342        entry.GetPath(&item_path);
    364        
     343
    365344        if (menu->FindItem(item_path.Leaf()))
    366345            continue;
    367        
    368         BMessage *msg = new BMessage(M_ITEM_MESSAGE);
     346
     347        BMessage* msg = new BMessage(M_ITEM_MESSAGE);
    369348        entry_ref ref;
    370        
     349
    371350        ::get_ref_for_path(item_path.Path(), &ref);
    372351        msg->AddRef("refs", &ref);
    373352        menu->AddItem(new BMenuItem(item_path.Leaf(), msg), 0);
    374353    }
    375    
    376     path.SetTo("/boot/home/media");
     354
     355    err = find_directory(B_COMMON_SOUNDS_DIRECTORY, &path);
    377356    dir.SetTo(path.Path());
    378     err = B_OK;
    379357    while (err == B_OK) {
    380         err = dir.GetNextEntry((BEntry *)&entry, true);
    381         if (entry.InitCheck() != B_NO_ERROR) {
     358        err = dir.GetNextEntry((BEntry*)&entry, true);
     359        if (entry.InitCheck() != B_NO_ERROR)
    382360            break;
    383         }
     361
    384362        entry.GetPath(&item_path);
    385        
     363
    386364        if (menu->FindItem(item_path.Leaf()))
    387365            continue;
    388        
    389         BMessage *msg = new BMessage(M_ITEM_MESSAGE);
     366
     367        BMessage* msg = new BMessage(M_ITEM_MESSAGE);
    390368        entry_ref ref;
    391        
     369
    392370        ::get_ref_for_path(item_path.Path(), &ref);
    393371        msg->AddRef("refs", &ref);
    394372        menu->AddItem(new BMenuItem(item_path.Leaf(), msg), 0);
     
    397375}
    398376
    399377
    400 /***********************************************************
    401  * Pulse
    402  ***********************************************************/
    403378void
    404379HWindow::Pulse()
    405380{
    406381    int32 sel = fEventList->CurrentSelection();
    407     BMenuField *menufield = cast_as(FindView("filemenu"), BMenuField);
    408     BButton *button = cast_as(FindView("play"), BButton);
    409     BButton *stop = cast_as(FindView("stop"), BButton);
    410    
     382    BMenuField* menufield = cast_as(FindView("filemenu"), BMenuField);
     383    BButton* button = cast_as(FindView("play"), BButton);
     384    BButton* stop = cast_as(FindView("stop"), BButton);
     385
    411386    if (!menufield)
    412387        return;
    413388
    414     if (sel >=0) {
     389    if (sel >= 0) {
    415390        menufield->SetEnabled(true);
    416391
    417         HEventItem *item = cast_as(fEventList->ItemAt(sel), HEventItem);
     392        HEventItem* item = cast_as(fEventList->ItemAt(sel), HEventItem);
    418393        const char* path = item->Path();
    419394        if (path && strcmp(path, ""))
    420395            button->SetEnabled(true);
     
    424399        menufield->SetEnabled(false);
    425400        button->SetEnabled(false);
    426401    }
     402
    427403    if (fPlayer) {
    428404        if (fPlayer->IsPlaying())
    429405            stop->SetEnabled(true);
     
    434410}
    435411
    436412
    437 /***********************************************************
    438  * DispatchMessage
    439  ***********************************************************/
    440413void
    441 HWindow::DispatchMessage(BMessage *message, BHandler *handler)
     414HWindow::DispatchMessage(BMessage* message, BHandler* handler)
    442415{
    443416    if (message->what == B_PULSE)
    444417        Pulse();
    445418    BWindow::DispatchMessage(message, handler);
    446419}
    447420
    448 /***********************************************************
    449  * QuitRequested
    450  ***********************************************************/
     421
    451422bool
    452423HWindow::QuitRequested()
    453424{