Ticket #5563: ShowImage.2.patch

File ShowImage.2.patch, 34.5 KB (added by mt, 14 years ago)

Second patch

  • PrintOptionsWindow.cpp

     
    1313
    1414#include <Box.h>
    1515#include <Button.h>
     16#include <Catalog.h>
     17#include <ControlLook.h>
     18#include <GroupLayoutBuilder.h>
     19#include <GridLayoutBuilder.h>
     20#include <Locale.h>
     21#include <LayoutBuilder.h>
    1622#include <String.h>
    1723
    1824#include "ShowImageConstants.h"
     
    2329    fOption(kFitToPage),
    2430    fZoomFactor(1.0),
    2531    fDPI(72.0),
    26     fWidth(1024/72.0),
    27     fHeight(768/72.0)
     32    fWidth(1024 / 72.0),
     33    fHeight(768 / 72.0)
    2834{
    2935}
    3036
     
    6874}
    6975
    7076
    71 PrintOptionsWindow::PrintOptionsWindow(BPoint at, PrintOptions *options,
     77#undef TR_CONTEXT
     78#define TR_CONTEXT "PrintOptionsWindow"
     79
     80PrintOptionsWindow::PrintOptionsWindow(BPoint at, PrintOptions* options,
    7281    BWindow* listener)
    7382    :
    74     BWindow(BRect(at.x, at.y, at.x + 300, at.y + 200), "Print options",
     83    BWindow(BRect(at.x, at.y, at.x + 300, at.y + 200), TR("Print options"),
    7584        B_TITLED_WINDOW_LOOK, B_MODAL_SUBSET_WINDOW_FEEL,
    76         B_NOT_ZOOMABLE | B_NOT_RESIZABLE),
     85        B_NOT_ZOOMABLE | B_NOT_RESIZABLE | B_AUTO_UPDATE_SIZE_LIMITS),
    7786    fPrintOptions(options),
    7887    fCurrentOptions(*options),
    7988    fListener(listener),
     
    94103
    95104
    96105BRadioButton*
    97 PrintOptionsWindow::AddRadioButton(BView* view, BPoint& at, const char* name,
     106PrintOptionsWindow::AddRadioButton(const char* name,
    98107    const char* label, uint32 what, bool selected)
    99108{
    100     BRect rect(0, 0, 100, 20);
    101109    BRadioButton* button;
    102     rect.OffsetBy(at);
    103     button = new BRadioButton(rect, name, label, new BMessage(what));
    104     view->AddChild(button);
    105     button->ResizeToPreferred();
    106     at.y += button->Bounds().Height() + kLineSkip;
     110    button = new BRadioButton(name, label, new BMessage(what));
    107111    button->SetValue(selected ? B_CONTROL_ON : B_CONTROL_OFF);
    108112    return button;
    109113}
    110114
    111115
    112116BTextControl*
    113 PrintOptionsWindow::AddTextControl(BView* view, BPoint& at, const char* name,
    114     const char* label, float value, float divider, uint32 what)
     117PrintOptionsWindow::AddTextControl(const char* name,
     118    const char* label, float value, uint32 what)
    115119{
    116     BRect rect(0, 0, divider + 45, 20);
    117120    BTextControl* text;
    118     rect.OffsetBy(at);
    119     text = new BTextControl(rect, name, label, "", new BMessage(what));
    120     view->AddChild(text);
     121    text = new BTextControl(name, label, "", new BMessage(what));
    121122    text->SetModificationMessage(new BMessage(what));
    122     text->SetDivider(divider);
    123     text->SetAlignment(B_ALIGN_LEFT, B_ALIGN_RIGHT);
    124123    SetValue(text, value);
    125     at.y += text->Bounds().Height() + kLineSkip;
    126124    return text;
    127125}
    128126
     
    130128void
    131129PrintOptionsWindow::Setup()
    132130{
    133     BRect rect(Bounds());
    134     BPoint at(kIndent, kIndent), textAt;
    135131    BString value;
    136132    enum PrintOptions::Option op = fCurrentOptions.Option();
    137     BRadioButton* rb;
     133    BRadioButton* rbFit;
     134    BRadioButton* rbZoom;
     135    BRadioButton* rbDpi;
     136    BRadioButton* rbResize;
    138137    BBox* line;
    139138    BButton* button;
    140139
    141     BBox *panel = new BBox(rect, "top_panel", B_FOLLOW_ALL,
    142         B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE_JUMP,
    143         B_PLAIN_BORDER);
    144     AddChild(panel);
     140    rbFit = AddRadioButton("fit_to_page", TR("Fit image to page"),
     141        kMsgFitToPageSelected, op == PrintOptions::kFitToPage);
    145142
    146     AddRadioButton(panel, at, "fit_to_page", "Fit image to page",
    147         kMsgFitToPageSelected, op == PrintOptions::kFitToPage);
    148     textAt = at;
    149     rb = AddRadioButton(panel, at, "zoom_factor", "Zoom factor in %: ",
     143    rbZoom = AddRadioButton("zoom_factor", TR("Zoom factor in %:"),
    150144        kMsgZoomFactorSelected, op == PrintOptions::kZoomFactor);
    151     textAt.x = rb->Bounds().right + 5;
    152     fZoomFactor = AddTextControl(panel, textAt, "zoom_factor_text", "",
    153         fCurrentOptions.ZoomFactor()*100, 0, kMsgZoomFactorChanged);
    154145
    155     textAt = at;
    156     rb = AddRadioButton(panel, at, "dpi", "DPI: ", kMsgDPISelected,
     146    fZoomFactor = AddTextControl("zoom_factor_text", "",
     147        fCurrentOptions.ZoomFactor() * 100, kMsgZoomFactorChanged);
     148
     149    rbDpi = AddRadioButton("dpi", TR("DPI:"), kMsgDPISelected,
    157150        op == PrintOptions::kDPI);
    158     textAt.x = rb->Bounds().right + 5;
    159     fDPI = AddTextControl(panel, textAt, "dpi_text", "", fCurrentOptions.DPI(),
    160         0, kMsgDPIChanged);
    161151
    162     rb = AddRadioButton(panel, at, "width_and_height",
    163         "Resize to (in 1/72 inches):", kMsgWidthAndHeightSelected,
     152    fDPI = AddTextControl("dpi_text", "", fCurrentOptions.DPI(),
     153        kMsgDPIChanged);
     154
     155    rbResize = AddRadioButton("width_and_height",
     156        TR("Resize to (in 1/72 inches):"), kMsgWidthAndHeightSelected,
    164157        op == PrintOptions::kWidth || op == PrintOptions::kHeight);
    165     at.x += 15;
    166     textAt = at;
    167     fWidth = AddTextControl(panel, textAt, "width", "Width: ",
    168         fCurrentOptions.Width(), 40, kMsgWidthChanged);
    169     textAt = at;
    170     textAt.x += fWidth->Bounds().Width() + 5;
    171     fHeight = AddTextControl(panel, textAt, "height", "Height: ",
    172         fCurrentOptions.Height(), 40, kMsgHeightChanged);
    173158
    174     at.x = 0;
    175     at.y = textAt.y;
    176     line = new BBox(BRect(rect.left+3, at.y, rect.right-3, at.y + 1), NULL,
    177         B_FOLLOW_LEFT | B_FOLLOW_TOP);
    178     panel->AddChild(line);
     159    fWidth = AddTextControl("width", TR("Width:"),
     160        fCurrentOptions.Width(), kMsgWidthChanged);
    179161
    180     at.y += 10;
    181     rect.OffsetBy(at);
    182     button = new BButton(rect, "job setup", "Job setup",
     162    fHeight = AddTextControl("height", TR("Height: "),
     163        fCurrentOptions.Height(), kMsgHeightChanged);
     164
     165    line = new BBox(B_EMPTY_STRING, B_WILL_DRAW | B_FRAME_EVENTS,
     166        B_FANCY_BORDER);
     167    line->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, 1));
     168
     169    button = new BButton("job setup", TR("Job setup"),
    183170        new BMessage(kMsgJobSetup));
    184     panel->AddChild(button);
    185     button->ResizeToPreferred();
    186 
    187171    SetDefaultButton(button);
    188172
    189     // resize window
    190     ResizeTo(fHeight->Frame().right + kIndent, button->Frame().bottom + kIndent);
    191 
    192     // center button
    193     button->MoveTo((Bounds().Width()-button->Bounds().Width())/2,
    194         button->Frame().top);
     173    const float spacing = be_control_look->DefaultItemSpacing();
     174   
     175    SetLayout(new BGroupLayout(B_HORIZONTAL));
     176    AddChild(BGroupLayoutBuilder(B_VERTICAL, 0)
     177        .Add(BGridLayoutBuilder()
     178                .Add(rbFit, 0, 0)
     179                .Add(rbZoom, 0, 1)
     180                .Add(fZoomFactor, 1, 1)
     181                .Add(rbDpi, 0, 2)
     182                .Add(fDPI, 1, 2)
     183                .Add(rbResize, 0, 3)
     184                )
     185        .AddGroup(B_HORIZONTAL, spacing)
     186            .Add(fWidth)
     187            .Add(fHeight)
     188            .AddGlue()
     189            .SetInsets(22, 0, 0, 0)
     190        .End()
     191        .Add(line)
     192        .AddGroup(B_HORIZONTAL, 0)
     193            .Add(button)
     194        .End()
     195        .SetInsets(spacing, spacing, spacing, spacing)
     196    );
    195197}
    196198
    197199
     
    245247        case kMsgZoomFactorChanged:
    246248            if (GetValue(fZoomFactor, &value)
    247249                && fCurrentOptions.ZoomFactor() != value) {
    248                 fCurrentOptions.SetZoomFactor(value/100);
     250                fCurrentOptions.SetZoomFactor(value / 100);
    249251                SetValue(fDPI, fCurrentOptions.DPI());
    250252            }
    251253            break;
    252254        case kMsgDPIChanged:
    253255            if (GetValue(fDPI, &value) && fCurrentOptions.DPI() != value) {
    254256                fCurrentOptions.SetDPI(value);
    255                 SetValue(fZoomFactor, 100*fCurrentOptions.ZoomFactor());
     257                SetValue(fZoomFactor, 100 * fCurrentOptions.ZoomFactor());
    256258            }
    257259            break;
    258260        case kMsgWidthChanged:
  • PrintOptionsWindow.h

     
    6464    void            MessageReceived(BMessage* msg);
    6565
    6666private:
    67     BRadioButton*               AddRadioButton(BView* view, BPoint& at,
    68                                     const char* name, const char* label,
     67    BRadioButton*               AddRadioButton(const char* name, const char* label,
    6968                                    uint32 what, bool selected);
    7069
    71     BTextControl*               AddTextControl(BView* view, BPoint& at,
    72                                     const char* name, const char* label,
    73                                     float value, float divider, uint32 what);
     70    BTextControl*               AddTextControl(const char* name, const char* label,
     71                                    float value, uint32 what);
    7472
    7573    void                        Setup();
    7674    enum PrintOptions::Option   MsgToOption(uint32 what);
  • ShowImageWindow.cpp

     
    2121#include <Application.h>
    2222#include <Bitmap.h>
    2323#include <BitmapStream.h>
     24#include <Catalog.h>
    2425#include <Clipboard.h>
    2526#include <Entry.h>
    2627#include <File.h>
    2728#include <FilePanel.h>
     29#include <Locale.h>
    2830#include <Menu.h>
    2931#include <MenuBar.h>
    3032#include <MenuItem.h>
     
    3840#include <TranslationDefs.h>
    3941#include <TranslationUtils.h>
    4042#include <TranslatorRoster.h>
     43#include <stdlib.h> // for bs_printf()
    4144
    4245#include "EntryMenuItem.h"
    4346#include "ResizerWindow.h"
     
    5154
    5255class ShowImageWindow::RecentDocumentsMenu : public BMenu {
    5356public:
    54             RecentDocumentsMenu(const char *title,
     57            RecentDocumentsMenu(const char* title,
    5558                menu_layout layout = B_ITEMS_IN_COLUMN);
    5659    bool    AddDynamicItem(add_state addState);
    5760
     
    6063};
    6164
    6265
    63 ShowImageWindow::RecentDocumentsMenu::RecentDocumentsMenu(const char *title,
     66ShowImageWindow::RecentDocumentsMenu::RecentDocumentsMenu(const char* title,
    6467    menu_layout layout)
    6568    :
    6669    BMenu(title, layout)
     
    7780    while (CountItems() > 0)
    7881        delete RemoveItem(0L);
    7982
    80     BMenuItem *item;
     83    BMenuItem* item;
    8184    BMessage list, *msg;
    8285    entry_ref ref;
    8386    char name[B_FILE_NAME_LENGTH];
     
    106109const char* kTranslatorField = "be:translator";
    107110
    108111
    109 ShowImageWindow::ShowImageWindow(const entry_ref *ref,
     112ShowImageWindow::ShowImageWindow(const entry_ref* ref,
    110113    const BMessenger& trackerMessenger)
    111114    :
    112115    BWindow(BRect(5, 24, 250, 100), "", B_DOCUMENT_WINDOW, 0),
     
    143146    fImageView = new ShowImageView(viewFrame, "image_view", B_FOLLOW_ALL,
    144147        B_WILL_DRAW | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE | B_PULSE_NEEDED);
    145148    // wrap a scroll view around the view
    146     BScrollView *scrollView = new BScrollView("image_scroller", fImageView,
     149    BScrollView* scrollView = new BScrollView("image_scroller", fImageView,
    147150        B_FOLLOW_ALL, 0, false, false, B_PLAIN_BORDER);
    148151    AddChild(scrollView);
    149152
     
    154157    rect.left   = viewFrame.left + kstatusWidth;
    155158    rect.right  = viewFrame.right + 1;
    156159    rect.bottom += 1;
    157     BScrollBar *horizontalScrollBar = new BScrollBar(rect, "hscroll",
     160    BScrollBar* horizontalScrollBar = new BScrollBar(rect, "hscroll",
    158161        fImageView, 0, 150, B_HORIZONTAL);
    159162    AddChild(horizontalScrollBar);
    160163
     
    170173    rect.left   = viewFrame.right + 1;
    171174    rect.bottom = viewFrame.bottom + 1;
    172175    rect.right  += 1;
    173     BScrollBar *verticalScrollBar = new BScrollBar(rect, "vscroll", fImageView,
     176    BScrollBar* verticalScrollBar = new BScrollBar(rect, "vscroll", fImageView,
    174177        0, 150, B_VERTICAL);
    175178    AddChild(verticalScrollBar);
    176179
     
    180183    fImageView->SetImage(ref);
    181184    fImageView->SetTrackerMessenger(trackerMessenger);
    182185
     186#undef TR_CONTEXT
     187#define TR_CONTEXT "LoadAlerts"
     188
    183189    if (InitCheck() != B_OK) {
    184190        BAlert* alert;
    185         alert = new BAlert("ShowImage",
    186             "Could not load image! Either the file or an image translator for "
    187             "it does not exist.", "OK", NULL, NULL, B_WIDTH_AS_USUAL, B_INFO_ALERT);
     191        alert = new BAlert(TR("ShowImage"),
     192            TR("Could not load image! Either the file or an image translator for it does not exist."),
     193            TR("OK"), NULL, NULL, B_WIDTH_AS_USUAL, B_INFO_ALERT);
    188194        alert->Go();
    189195
    190196        // quit if file could not be opened
     
    192198        return;
    193199    }
    194200
     201#undef TR_CONTEXT
     202#define TR_CONTEXT "Menus"
     203
    195204    // add View menu here so it can access ShowImageView methods
    196     BMenu* menu = new BMenu("View");
     205    BMenu* menu = new BMenu(TR("View"));
    197206    _BuildViewMenu(menu, false);
    198207    fBar->AddItem(menu);
    199208    _MarkMenuItem(fBar, MSG_DITHER_IMAGE, fImageView->GetDither());
     
    238247
    239248
    240249void
    241 ShowImageWindow::BuildContextMenu(BMenu *menu)
     250ShowImageWindow::BuildContextMenu(BMenu* menu)
    242251{
    243252    _BuildViewMenu(menu, true);
    244253}
    245254
    246255
     256#undef TR_CONTEXT
     257#define TR_CONTEXT "Menus"
     258
    247259void
    248 ShowImageWindow::_BuildViewMenu(BMenu *menu, bool popupMenu)
     260ShowImageWindow::_BuildViewMenu(BMenu* menu, bool popupMenu)
    249261{
    250     _AddItemMenu(menu, "Slide show", MSG_SLIDE_SHOW, 0, 0, this);
     262    _AddItemMenu(menu, TR("Slide show"), MSG_SLIDE_SHOW, 0, 0, this);
    251263    _MarkMenuItem(menu, MSG_SLIDE_SHOW, fImageView->SlideShowStarted());
    252     BMenu* delayMenu = new BMenu("Slide delay");
     264    BMenu* delayMenu = new BMenu(TR("Slide delay"));
    253265    if (fSlideShowDelay == NULL)
    254266        fSlideShowDelay = delayMenu;
    255267
     
    258270    //       if slide show delay is too short! (Especially if loading the image
    259271    //       takes as long as or longer than the slide show delay). Should load
    260272    //       in background thread!
    261     _AddDelayItem(delayMenu, "3 seconds", 3);
    262     _AddDelayItem(delayMenu, "4 seconds", 4);
    263     _AddDelayItem(delayMenu, "5 seconds", 5);
    264     _AddDelayItem(delayMenu, "6 seconds", 6);
    265     _AddDelayItem(delayMenu, "7 seconds", 7);
    266     _AddDelayItem(delayMenu, "8 seconds", 8);
    267     _AddDelayItem(delayMenu, "9 seconds", 9);
    268     _AddDelayItem(delayMenu, "10 seconds", 10);
    269     _AddDelayItem(delayMenu, "20 seconds", 20);
     273    _AddDelayItem(delayMenu, TR("3 seconds"), 3);
     274    _AddDelayItem(delayMenu, TR("4 seconds"), 4);
     275    _AddDelayItem(delayMenu, TR("5 seconds"), 5);
     276    _AddDelayItem(delayMenu, TR("6 seconds"), 6);
     277    _AddDelayItem(delayMenu, TR("7 seconds"), 7);
     278    _AddDelayItem(delayMenu, TR("8 seconds"), 8);
     279    _AddDelayItem(delayMenu, TR("9 seconds"), 9);
     280    _AddDelayItem(delayMenu, TR("10 seconds"), 10);
     281    _AddDelayItem(delayMenu, TR("20 seconds"), 20);
    270282    menu->AddItem(delayMenu);
    271283
    272284    menu->AddSeparatorItem();
    273285
    274     _AddItemMenu(menu, "Original size", MSG_ORIGINAL_SIZE, '1', 0, this);
    275     _AddItemMenu(menu, "Zoom in", MSG_ZOOM_IN, '+', 0, this);
    276     _AddItemMenu(menu, "Zoom out", MSG_ZOOM_OUT, '-', 0, this);
     286    _AddItemMenu(menu, TR("Original size"), MSG_ORIGINAL_SIZE, '1', 0, this);
     287    _AddItemMenu(menu, TR("Zoom in"), MSG_ZOOM_IN, '+', 0, this);
     288    _AddItemMenu(menu, TR("Zoom out"), MSG_ZOOM_OUT, '-', 0, this);
    277289
    278290    menu->AddSeparatorItem();
    279291
    280     _AddItemMenu(menu, "High-quality zooming", MSG_SCALE_BILINEAR, 0, 0, this);
     292    _AddItemMenu(menu, TR("High-quality zooming"), MSG_SCALE_BILINEAR, 0, 0, this);
    281293
    282294    menu->AddSeparatorItem();
    283295
    284     _AddItemMenu(menu, "Shrink to window", MSG_SHRINK_TO_WINDOW, 0, 0, this);
    285     _AddItemMenu(menu, "Zoom to window", MSG_ZOOM_TO_WINDOW, 0, 0, this);
     296    _AddItemMenu(menu, TR("Shrink to window"), MSG_SHRINK_TO_WINDOW, 0, 0, this);
     297    _AddItemMenu(menu, TR("Zoom to window"), MSG_ZOOM_TO_WINDOW, 0, 0, this);
    286298
    287299    menu->AddSeparatorItem();
    288300
    289     _AddItemMenu(menu, "Full screen", MSG_FULL_SCREEN, B_ENTER, 0, this);
     301    _AddItemMenu(menu, TR("Full screen"), MSG_FULL_SCREEN, B_ENTER, 0, this);
    290302    _MarkMenuItem(menu, MSG_FULL_SCREEN, fFullScreen);
    291303
    292     _AddItemMenu(menu, "Show caption in full screen mode", MSG_SHOW_CAPTION, 0,
     304    _AddItemMenu(menu, TR("Show caption in full screen mode"), MSG_SHOW_CAPTION, 0,
    293305        0, this);
    294306    _MarkMenuItem(menu, MSG_SHOW_CAPTION, fShowCaption);
    295307
     
    309321
    310322    if (popupMenu) {
    311323        menu->AddSeparatorItem();
    312         _AddItemMenu(menu, "Use as background" B_UTF8_ELLIPSIS, MSG_DESKTOP_BACKGROUND, 0, 0,
    313             this);
     324        _AddItemMenu(menu, TR("Use as background" B_UTF8_ELLIPSIS),
     325            MSG_DESKTOP_BACKGROUND, 0, 0, this);
    314326    }
    315327}
    316328
    317329
    318330void
    319 ShowImageWindow::AddMenus(BMenuBar *bar)
     331ShowImageWindow::AddMenus(BMenuBar* bar)
    320332{
    321     BMenu *menu = new BMenu("File");
    322     fOpenMenu = new RecentDocumentsMenu("Open");
     333    BMenu* menu = new BMenu(TR("File"));
     334    fOpenMenu = new RecentDocumentsMenu(TR("Open"));
    323335    menu->AddItem(fOpenMenu);
    324336    fOpenMenu->Superitem()->SetTrigger('O');
    325337    fOpenMenu->Superitem()->SetMessage(new BMessage(MSG_FILE_OPEN));
    326338    fOpenMenu->Superitem()->SetTarget(be_app);
    327339    fOpenMenu->Superitem()->SetShortcut('O', 0);
    328340    menu->AddSeparatorItem();
    329     BMenu *pmenuSaveAs = new BMenu("Save as" B_UTF8_ELLIPSIS, B_ITEMS_IN_COLUMN);
     341    BMenu *pmenuSaveAs = new BMenu(TR("Save as" B_UTF8_ELLIPSIS),
     342        B_ITEMS_IN_COLUMN);
    330343    BTranslationUtils::AddTranslationItems(pmenuSaveAs, B_TRANSLATOR_BITMAP);
    331344        // Fill Save As submenu with all types that can be converted
    332345        // to from the Be bitmap image format
    333346    menu->AddItem(pmenuSaveAs);
    334     _AddItemMenu(menu, "Close", B_QUIT_REQUESTED, 'W', 0, this);
     347    _AddItemMenu(menu, TR("Close"), B_QUIT_REQUESTED, 'W', 0, this);
    335348    menu->AddSeparatorItem();
    336     _AddItemMenu(menu, "Page setup" B_UTF8_ELLIPSIS, MSG_PAGE_SETUP, 0, 0, this);
    337     _AddItemMenu(menu, "Print" B_UTF8_ELLIPSIS, MSG_PREPARE_PRINT, 'P', 0, this);
     349    _AddItemMenu(menu, TR("Page setup" B_UTF8_ELLIPSIS),
     350        MSG_PAGE_SETUP, 0, 0, this);
     351    _AddItemMenu(menu, TR("Print" B_UTF8_ELLIPSIS),
     352        MSG_PREPARE_PRINT, 'P', 0, this);
    338353    menu->AddSeparatorItem();
    339     _AddItemMenu(menu, "About ShowImage" B_UTF8_ELLIPSIS, B_ABOUT_REQUESTED, 0, 0,
    340         be_app);
     354    _AddItemMenu(menu, TR("About ShowImage" B_UTF8_ELLIPSIS),
     355        B_ABOUT_REQUESTED, 0, 0,    be_app);
    341356    menu->AddSeparatorItem();
    342     _AddItemMenu(menu, "Quit", B_QUIT_REQUESTED, 'Q', 0, be_app);
     357    _AddItemMenu(menu, TR("Quit"), B_QUIT_REQUESTED, 'Q', 0, be_app);
    343358    bar->AddItem(menu);
    344359
    345     menu = new BMenu("Edit");
    346     _AddItemMenu(menu, "Undo", B_UNDO, 'Z', 0, this, false);
     360    menu = new BMenu(TR("Edit"));
     361    _AddItemMenu(menu, TR("Undo"), B_UNDO, 'Z', 0, this, false);
    347362    menu->AddSeparatorItem();
    348     _AddItemMenu(menu, "Cut", B_CUT, 'X', 0, this, false);
    349     _AddItemMenu(menu, "Copy", B_COPY, 'C', 0, this, false);
    350     _AddItemMenu(menu, "Paste", B_PASTE, 'V', 0, this, false);
    351     _AddItemMenu(menu, "Clear", MSG_CLEAR_SELECT, 0, 0, this, false);
     363    _AddItemMenu(menu, TR("Cut"), B_CUT, 'X', 0, this, false);
     364    _AddItemMenu(menu, TR("Copy"), B_COPY, 'C', 0, this, false);
     365    _AddItemMenu(menu, TR("Paste"), B_PASTE, 'V', 0, this, false);
     366    _AddItemMenu(menu, TR("Clear"), MSG_CLEAR_SELECT, 0, 0, this, false);
    352367    menu->AddSeparatorItem();
    353     _AddItemMenu(menu, "Select all", MSG_SELECT_ALL, 'A', 0, this);
     368    _AddItemMenu(menu, TR("Select all"), MSG_SELECT_ALL, 'A', 0, this);
    354369    bar->AddItem(menu);
    355370
    356     menu = fBrowseMenu = new BMenu("Browse");
    357     _AddItemMenu(menu, "First page", MSG_PAGE_FIRST, B_LEFT_ARROW, B_SHIFT_KEY, this);
    358     _AddItemMenu(menu, "Last page", MSG_PAGE_LAST, B_RIGHT_ARROW, B_SHIFT_KEY, this);
    359     _AddItemMenu(menu, "Previous page", MSG_PAGE_PREV, B_LEFT_ARROW, 0, this);
    360     _AddItemMenu(menu, "Next page", MSG_PAGE_NEXT, B_RIGHT_ARROW, 0, this);
    361     fGoToPageMenu = new BMenu("Go to page");
     371    menu = fBrowseMenu = new BMenu(TR("Browse"));
     372    _AddItemMenu(menu, TR("First page"),
     373        MSG_PAGE_FIRST, B_LEFT_ARROW, B_SHIFT_KEY, this);
     374    _AddItemMenu(menu, TR("Last page"),
     375        MSG_PAGE_LAST, B_RIGHT_ARROW, B_SHIFT_KEY, this);
     376    _AddItemMenu(menu, TR("Previous page"), MSG_PAGE_PREV, B_LEFT_ARROW, 0, this);
     377    _AddItemMenu(menu, TR("Next page"), MSG_PAGE_NEXT, B_RIGHT_ARROW, 0, this);
     378    fGoToPageMenu = new BMenu(TR("Go to page"));
    362379    fGoToPageMenu->SetRadioMode(true);
    363380    menu->AddItem(fGoToPageMenu);
    364381    menu->AddSeparatorItem();
    365     _AddItemMenu(menu, "Previous file", MSG_FILE_PREV, B_UP_ARROW, 0, this);
    366     _AddItemMenu(menu, "Next file", MSG_FILE_NEXT, B_DOWN_ARROW, 0, this);
     382    _AddItemMenu(menu, TR("Previous file"), MSG_FILE_PREV, B_UP_ARROW, 0, this);
     383    _AddItemMenu(menu, TR("Next file"), MSG_FILE_NEXT, B_DOWN_ARROW, 0, this);
    367384    bar->AddItem(menu);
    368385
    369     menu = new BMenu("Image");
    370     _AddItemMenu(menu, "Rotate clockwise", MSG_ROTATE_90, 'R', 0, this);
    371     _AddItemMenu(menu, "Rotate counterclockwise", MSG_ROTATE_270, 'R', B_SHIFT_KEY, this);
     386    menu = new BMenu(TR("Image"));
     387    _AddItemMenu(menu, TR("Rotate clockwise"), MSG_ROTATE_90, 'R', 0, this);
     388    _AddItemMenu(menu, TR("Rotate counterclockwise"),
     389        MSG_ROTATE_270, 'R', B_SHIFT_KEY, this);
    372390    menu->AddSeparatorItem();
    373     _AddItemMenu(menu, "Flip left to right", MSG_FLIP_LEFT_TO_RIGHT, 0, 0, this);
    374     _AddItemMenu(menu, "Flip top to bottom", MSG_FLIP_TOP_TO_BOTTOM, 0, 0, this);
     391    _AddItemMenu(menu, TR("Flip left to right"),
     392        MSG_FLIP_LEFT_TO_RIGHT, 0, 0, this);
     393    _AddItemMenu(menu, TR("Flip top to bottom"),
     394        MSG_FLIP_TOP_TO_BOTTOM, 0, 0, this);
    375395    menu->AddSeparatorItem();
    376     _AddItemMenu(menu, "Invert colors", MSG_INVERT, 0, 0, this);
     396    _AddItemMenu(menu, TR("Invert colors"), MSG_INVERT, 0, 0, this);
    377397    menu->AddSeparatorItem();
    378     fResizeItem = _AddItemMenu(menu, "Resize" B_UTF8_ELLIPSIS,
     398    fResizeItem = _AddItemMenu(menu, TR("Resize" B_UTF8_ELLIPSIS),
    379399        MSG_OPEN_RESIZER_WINDOW, 0, 0, this);
    380400    bar->AddItem(menu);
    381401    menu->AddSeparatorItem();
    382     _AddItemMenu(menu, "Use as background" B_UTF8_ELLIPSIS, MSG_DESKTOP_BACKGROUND, 0, 0,
    383         this);
     402    _AddItemMenu(menu, TR("Use as background" B_UTF8_ELLIPSIS),
     403        MSG_DESKTOP_BACKGROUND, 0, 0, this);
    384404}
    385405
    386406
    387407BMenuItem*
    388 ShowImageWindow::_AddItemMenu(BMenu *menu, const char *label, uint32 what,
    389     const char shortcut, uint32 modifier, const BHandler *target, bool enabled)
     408ShowImageWindow::_AddItemMenu(BMenu* menu, const char* label, uint32 what,
     409    const char shortcut, uint32 modifier, const BHandler* target, bool enabled)
    390410{
    391411    BMenuItem* item = new BMenuItem(label, new BMessage(what), shortcut, modifier);
    392412    menu->AddItem(item);
     
    399419
    400420
    401421BMenuItem*
    402 ShowImageWindow::_AddDelayItem(BMenu *menu, const char *label, float value)
     422ShowImageWindow::_AddDelayItem(BMenu* menu, const char* label, float value)
    403423{
    404424    BMessage* message = new BMessage(MSG_SLIDE_SHOW_DELAY);
    405425    message->AddFloat("value", value);
     
    417437
    418438
    419439void
    420 ShowImageWindow::WindowRedimension(BBitmap *pbitmap)
     440ShowImageWindow::WindowRedimension(BBitmap* pbitmap)
    421441{
    422442    BScreen screen;
    423443    if (!screen.IsValid())
     
    468488ShowImageWindow::_ToggleMenuItem(uint32 what)
    469489{
    470490    bool marked = false;
    471     BMenuItem *item = fBar->FindItem(what);
     491    BMenuItem* item = fBar->FindItem(what);
    472492    if (item != NULL) {
    473493        marked = !item->IsMarked();
    474494        item->SetMarked(marked);
     
    478498
    479499
    480500void
    481 ShowImageWindow::_EnableMenuItem(BMenu *menu, uint32 what, bool enable)
     501ShowImageWindow::_EnableMenuItem(BMenu* menu, uint32 what, bool enable)
    482502{
    483503    BMenuItem* item = menu->FindItem(what);
    484504    if (item && item->IsEnabled() != enable)
     
    487507
    488508
    489509void
    490 ShowImageWindow::_MarkMenuItem(BMenu *menu, uint32 what, bool marked)
     510ShowImageWindow::_MarkMenuItem(BMenu* menu, uint32 what, bool marked)
    491511{
    492512    BMenuItem* item = menu->FindItem(what);
    493513    if (item && item->IsMarked() != marked)
     
    530550
    531551
    532552void
    533 ShowImageWindow::MessageReceived(BMessage *message)
     553ShowImageWindow::MessageReceived(BMessage* message)
    534554{
    535555    switch (message->what) {
    536556        case MSG_MODIFIED:
     
    578598
    579599                for (int32 i = 1; i <= pages; i++) {
    580600                    // Fill Go To page submenu with an entry for each page
    581                     BMessage *pgomsg = new BMessage(MSG_GOTO_PAGE);
     601                    BMessage* pgomsg = new BMessage(MSG_GOTO_PAGE);
    582602                    pgomsg->AddInt32("page", i);
    583603
    584604                    char shortcut = 0;
     
    591611                    BString strCaption;
    592612                    strCaption << i;
    593613
    594                     BMenuItem *item = new BMenuItem(strCaption.String(), pgomsg,
     614                    BMenuItem* item = new BMenuItem(strCaption.String(), pgomsg,
    595615                        shortcut);
    596616                    if (curPage == i)
    597617                        item->SetMarked(true);
     
    786806            break;
    787807
    788808        case MSG_SLIDE_SHOW: {
    789             BMenuItem *item = fBar->FindItem(message->what);
     809            BMenuItem* item = fBar->FindItem(message->what);
    790810            if (!item)
    791811                break;
    792812            if (item->IsMarked()) {
     
    892912
    893913
    894914void
    895 ShowImageWindow::_SaveAs(BMessage *message)
     915ShowImageWindow::_SaveAs(BMessage* message)
    896916{
    897917    // Read the translator and output type the user chose
    898918    translator_id outTranslator;
     
    922942
    923943
    924944void
    925 ShowImageWindow::_SaveToFile(BMessage *message)
     945ShowImageWindow::_SaveToFile(BMessage* message)
    926946{
    927947    // Read in where the file should be saved
    928948    entry_ref dirRef;
    929949    if (message->FindRef("directory", &dirRef) != B_OK)
    930950        return;
    931951
    932     const char *filename;
     952    const char* filename;
    933953    if (message->FindString("name", &filename) != B_OK)
    934954        return;
    935955
     
    945965
    946966    // Find the translator_format information needed to
    947967    // write a MIME attribute for the image file
    948     BTranslatorRoster *roster = BTranslatorRoster::Default();
    949     const translation_format *outFormat = NULL;
     968    BTranslatorRoster* roster = BTranslatorRoster::Default();
     969    const translation_format* outFormat = NULL;
    950970    int32 outCount = 0;
    951971    if (roster->GetOutputFormats(outTranslator, &outFormat, &outCount) != B_OK
    952972        || outCount < 1)
     
    966986}
    967987
    968988
     989// This is temporary solution for building BString with printf like format.
     990// will be removed in the future.
     991static void
     992bs_printf(BString* string, const char* format, ...)
     993{
     994    va_list ap;
     995    char* buf;
     996
     997    va_start(ap, format);
     998    vasprintf(&buf, format, ap);
     999    string->SetTo(buf);
     1000    free(buf);
     1001    va_end(ap);
     1002}
     1003
     1004
     1005#undef TR_CONTEXT
     1006#define TR_CONTEXT "ClosePrompt"
     1007
    9691008bool
    9701009ShowImageWindow::_ClosePrompt()
    9711010{
     
    9771016    page = fImageView->CurrentPage();
    9781017    BString prompt, name;
    9791018    fImageView->GetName(&name);
    980     prompt << "The document '" << name << "'";
    981     if (count > 1)
    982         prompt << " (page " << page << ")";
    9831019
    984     prompt << " has been changed. "
    985            << "Do you want to close the document?";
    986     BAlert *pAlert = new BAlert("Close document", prompt.String(),
    987         "Cancel", "Close");
     1020    if (count > 1) {
     1021        bs_printf(&prompt,
     1022            TR("The document '%s' (page %d) has been changed. Do you want to close the document?"),
     1023            name.String(), page);
     1024    } else {
     1025        bs_printf(&prompt,
     1026            TR("The document '%s' has been changed. Do you want to close the document?"),
     1027            name.String());
     1028    }
     1029   
     1030    BAlert* pAlert = new BAlert(TR("Close document"), prompt.String(),
     1031        TR("Cancel"), TR("Close"));
    9881032    if (pAlert->Go() == 0) {
    9891033        // Cancel
    9901034        return false;
     
    11041148    }
    11051149
    11061150    fPrintOptions.SetBounds(fImageView->GetBitmap()->Bounds());
    1107     fPrintOptions.SetWidth(fImageView->GetBitmap()->Bounds().Width()+1);
     1151    fPrintOptions.SetWidth(fImageView->GetBitmap()->Bounds().Width() + 1);
    11081152
    1109     new PrintOptionsWindow(BPoint(Frame().left+30, Frame().top+50),
     1153    new PrintOptionsWindow(BPoint(Frame().left + 30, Frame().top + 50),
    11101154        &fPrintOptions, this);
    11111155}
    11121156
    11131157
    11141158void
    1115 ShowImageWindow::_Print(BMessage *msg)
     1159ShowImageWindow::_Print(BMessage* msg)
    11161160{
    11171161    status_t st;
    11181162    if (msg->FindInt32("status", &st) != B_OK || st != B_OK)
  • ResizerWindow.cpp

     
    1717
    1818#include <Box.h>
    1919#include <Button.h>
     20#include <Catalog.h>
    2021#include <CheckBox.h>
     22#include <ControlLook.h>
     23#include <GroupLayoutBuilder.h>
     24#include <GridLayoutBuilder.h>
     25#include <Locale.h>
     26#include <LayoutBuilder.h>
    2127#include <RadioButton.h>
    2228#include <Rect.h>
    2329#include <String.h>
     
    2632#include "ShowImageConstants.h"
    2733
    2834
    29 static const char* kWidthLabel = "Width:";
    30 static const char* kHeightLabel = "Height:";
    31 static const char* kKeepAspectRatioLabel = "Keep original proportions";
    32 static const char* kApplyLabel = "Apply";
     35#undef TR_CONTEXT
     36#define TR_CONTEXT "ResizerWindow"
    3337
    34 static const float kLineDistance = 5;
    35 static const float kHorizontalIndent = 10;
    36 static const float kVerticalIndent = 10;
    37 
    38 
    3938ResizerWindow::ResizerWindow(BMessenger target, int32 width, int32 height)
    4039    :
    41     BWindow(BRect(100, 100, 300, 300), "Resize", B_FLOATING_WINDOW,
    42         B_NOT_ZOOMABLE | B_NOT_RESIZABLE),
     40    BWindow(BRect(100, 100, 300, 300), TR("Resize"), B_FLOATING_WINDOW,
     41        B_NOT_ZOOMABLE | B_NOT_RESIZABLE | B_AUTO_UPDATE_SIZE_LIMITS),
    4342    fOriginalWidth(width),
    4443    fOriginalHeight(height),
    4544    fTarget(target)
    4645{
    47     BView* back_view = new BView(Bounds(), "", B_FOLLOW_ALL, B_WILL_DRAW);
    48     back_view->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
    49     AddChild(back_view);
    50    
    51     const float widthLabelWidth = back_view->StringWidth(kWidthLabel);
    52     const float heightLabelWidth = back_view->StringWidth(kHeightLabel);
    53     const float column2 = max_c(widthLabelWidth, heightLabelWidth);
    54 
    55     const float textControlWidth = column2 + back_view->StringWidth("999999");
    56     const float keepAspectRatioLabelWidth = 20
    57         + back_view->StringWidth(kKeepAspectRatioLabel);
    58     const float width2 = 2 * kHorizontalIndent
    59         + max_c(textControlWidth, keepAspectRatioLabelWidth);
    60    
    61     ResizeTo(width2+1, Bounds().Height()+1);
    62    
    63     const float top = kVerticalIndent;
    64     const float left = kHorizontalIndent;
    65     BRect rect(left, top, width2 - kHorizontalIndent, top + 10);
    66    
    6746    BString widthValue;
    6847    widthValue << width;
    69     fWidth = new BTextControl(rect, "width", kWidthLabel, widthValue.String(),
    70         NULL);
     48    fWidth = new BTextControl("width", TR("Width:"), widthValue.String(), NULL);
    7149    fWidth->SetModificationMessage(new BMessage(kWidthModifiedMsg));
    72     AddControl(back_view, fWidth, column2, rect);
    73                    
     50
    7451    BString heightValue;
    7552    heightValue << height; 
    76     fHeight = new BTextControl(rect, "height", kHeightLabel,
    77         heightValue.String(), NULL);
     53    fHeight = new BTextControl("height",
     54        TR("Height:"), heightValue.String(), NULL);
    7855    fHeight->SetModificationMessage(new BMessage(kHeightModifiedMsg));
    79     AddControl(back_view, fHeight, column2, rect);
    80    
    81     fAspectRatio = new BCheckBox(rect, "Ratio", kKeepAspectRatioLabel,
    82         new BMessage(kWidthModifiedMsg));
     56
     57    fAspectRatio = new BCheckBox("Ratio",
     58        TR("Keep original proportions"), new BMessage(kWidthModifiedMsg));
    8359    fAspectRatio->SetValue(B_CONTROL_ON);
    84     AddControl(back_view, fAspectRatio, column2, rect);
    85    
    86     fApply = new BButton(rect, "apply", kApplyLabel, new BMessage(kApplyMsg));
     60
     61    fApply = new BButton("apply", TR("Apply"), new BMessage(kApplyMsg));
    8762    fApply->MakeDefault(true);
    88     AddControl(back_view, fApply, column2, rect);
    89     LeftAlign(fApply);
     63
     64    const float spacing = be_control_look->DefaultItemSpacing();
     65    const float labelspacing = be_control_look->DefaultLabelSpacing();
    9066   
    91     fWidth->MakeFocus();
     67    SetLayout(new BGroupLayout(B_HORIZONTAL));
     68    AddChild(BGroupLayoutBuilder(B_VERTICAL, 0)
     69        .Add(BGridLayoutBuilder(labelspacing, 0)
     70                .Add(fWidth->CreateLabelLayoutItem(), 0, 0)
     71                .Add(fWidth->CreateTextViewLayoutItem(), 1, 0)
     72                .Add(fHeight->CreateLabelLayoutItem(), 0, 1)
     73                .Add(fHeight->CreateTextViewLayoutItem(), 1, 1)
     74                )
     75        .Add(fAspectRatio)
     76        .AddGroup(B_HORIZONTAL, 0)
     77            .AddGlue()
     78            .Add(fApply)
     79        .End()
     80        .SetInsets(spacing, spacing, spacing, spacing)
     81    );
    9282   
    93     ResizeTo(width2, rect.top);
     83    fWidth->MakeFocus();
     84
    9485}
    9586
    9687
     
    9990}
    10091
    10192
    102 void
    103 ResizerWindow::AddControl(BView* view, BControl* control, float column2,
    104     BRect& rect)
    105 {
    106     float width, height;
    107     view->AddChild(control);
    108     control->GetPreferredSize(&width, &height);
    109     if (dynamic_cast<BButton*>(control) != NULL) {
    110         control->ResizeTo(width, height);
    111     } else {
    112         control->ResizeTo(control->Bounds().Width(), height);
    113     }
    114     float top = control->Frame().bottom + kLineDistance;
    115     rect.OffsetTo(rect.left, top);
    116 
    117     if (dynamic_cast<BTextControl*>(control) != NULL) {
    118         ((BTextControl*)control)->SetDivider(column2);
    119     }
    120 }
    121 
    122 
    123 void
    124 ResizerWindow::AddSeparatorLine(BView* view, BRect& rect)
    125 {
    126     const float lineWidth = 3;
    127     BRect line(Bounds());
    128     line.left += 3;
    129     line.right -= 3;
    130     line.top = rect.top;
    131     line.bottom = line.top + lineWidth - 1;
    132     BBox* separatorLine = new BBox(line, "", B_FOLLOW_LEFT_RIGHT,
    133         B_WILL_DRAW | B_FRAME_EVENTS, B_PLAIN_BORDER);
    134     view->AddChild(separatorLine);
    135     rect.OffsetBy(0, kLineDistance + lineWidth);
    136 }
    137 
    138 
    139 void
    140 ResizerWindow::LeftAlign(BControl* control)
    141 {
    142     BRect frame = control->Frame();
    143     float left = Bounds().Width() - frame.Width() - kHorizontalIndent;
    144     control->MoveTo(left, frame.top);
    145 }
    146 
    147 
    14893void
    14994ResizerWindow::MessageReceived(BMessage* message)
    15095{
  • ResizerWindow.h

     
    1515
    1616
    1717#include <Messenger.h>
    18 #include <View.h>
    1918#include <Window.h>
    2019
    2120class BCheckBox;
     
    5049            kApplyMsg,
    5150        };
    5251
    53         void            AddControl(BView* parent, BControl* control,
    54                             float column2, BRect& rect);
    55         void            AddSeparatorLine(BView* parent, BRect& rect);
    56         void            LeftAlign(BControl* control);
    5752
    5853        BTextControl*   fWidth;
    5954        BTextControl*   fHeight;
  • ShowImageApp.cpp

     
    1515
    1616#include <AboutWindow.h>
    1717#include <Alert.h>
     18#include <Catalog.h>
    1819#include <Clipboard.h>
    1920#include <FilePanel.h>
     21#include <Locale.h>
    2022#include <Path.h>
    2123#include <String.h>
    2224
     
    2628
    2729#define WINDOWS_TO_IGNORE 1
    2830
    29 extern const char *kApplicationSignature = "application/x-vnd.Haiku-ShowImage";
     31extern const char* kApplicationSignature = "application/x-vnd.Haiku-ShowImage";
    3032
    3133
    3234ShowImageApp::ShowImageApp()
    3335    :
    3436    BApplication(kApplicationSignature)
    3537{
     38    be_locale->GetAppCatalog(&fCatalog);
     39
    3640    fPulseStarted = false;
    3741    fOpenPanel = new BFilePanel(B_OPEN_PANEL);
    3842}
     
    4347}
    4448
    4549
     50#undef TR_CONTEXT
     51#define TR_CONTEXT "AboutWindow"
     52
    4653void
    4754ShowImageApp::AboutRequested()
    4855{
    49     const char *authors[] = {
     56    const char* authors[] = {
    5057        "Fernando F. Oliveira",
    5158        "Michael Wilber",
    5259        "Michael Pfeiffer",
    5360        "Ryan Leavengood",
    5461        NULL
    5562    };
    56     BAboutWindow about("ShowImage", 2003, authors);
     63    BAboutWindow about(TR("ShowImage"), 2003, authors);
    5764    about.Show();
    5865}
    5966
     
    109116    bool hasRefs = false;
    110117
    111118    // get current working directory
    112     const char *cwd;
     119    const char* cwd;
    113120    if (CurrentMessage() == NULL
    114121        || CurrentMessage()->FindString("cwd", &cwd) != B_OK)
    115122        cwd = "";
     
    139146
    140147
    141148void
    142 ShowImageApp::MessageReceived(BMessage *message)
     149ShowImageApp::MessageReceived(BMessage* message)
    143150{
    144151    switch (message->what) {
    145152        case MSG_FILE_OPEN:
     
    167174
    168175
    169176void
    170 ShowImageApp::RefsReceived(BMessage *message)
     177ShowImageApp::RefsReceived(BMessage* message)
    171178{
    172179    // If a tracker window opened me, get a messenger from it.
    173180    if (message->HasMessenger("TrackerViewToken"))
     
    188195
    189196
    190197void
    191 ShowImageApp::Open(const entry_ref *ref)
     198ShowImageApp::Open(const entry_ref* ref)
    192199{
    193200    new ShowImageWindow(ref, fTrackerMessenger);
    194201}
    195202
    196203
    197204void
    198 ShowImageApp::BroadcastToWindows(BMessage *message)
     205ShowImageApp::BroadcastToWindows(BMessage* message)
    199206{
    200207    const int32 count = CountWindows();
    201208    for (int32 i = 0; i < count; i ++) {
     
    217224    bool dataAvailable = false;
    218225
    219226    if (be_clipboard->Lock()) {
    220         BMessage *clip = be_clipboard->Data();
     227        BMessage* clip = be_clipboard->Data();
    221228        if (clip != NULL) {
    222229            BString className;
    223230            if (clip->FindString("class", &className) == B_OK) {
  • Jamfile

     
    1717    ProgressWindow.cpp
    1818    ResizerWindow.cpp
    1919    : libshared.a
    20     be tracker translation $(TARGET_LIBSUPC++)
     20    be tracker translation liblocale.so $(TARGET_LIBSUPC++)
    2121    : ShowImage.rdef
    2222    ;
    2323
     24DoCatalogs ShowImage :
     25    x-vnd.Haiku-ShowImage
     26    :
     27    PrintOptionsWindow.cpp
     28    ResizerWindow.cpp
     29    ShowImageApp.cpp
     30    ShowImageWindow.cpp
     31    : en.catalog
     32    :
     33;
  • ShowImageApp.h

     
    1414#include "ShowImageSettings.h"
    1515
    1616#include <Application.h>
     17#include <Catalog.h>
    1718#include <FilePanel.h>
    1819
    1920
     
    4243            BFilePanel          *fOpenPanel;
    4344            bool                fPulseStarted;
    4445            ShowImageSettings   fSettings;
     46            BCatalog        fCatalog;
    4547};
    4648
    4749