1/*****************************************************************************/ 2// ImageWindow 3// Written by Michael Wilber, Haiku Translation Kit Team 4// 5// ImageWindow.cpp 6// 7// BWindow class for displaying an image. Uses ImageView class for its 8// view. 9// 10// 11// Copyright (c) 2003 Haiku Project 12// 13// Permission is hereby granted, free of charge, to any person obtaining a 14// copy of this software and associated documentation files (the "Software"), 15// to deal in the Software without restriction, including without limitation 16// the rights to use, copy, modify, merge, publish, distribute, sublicense, 17// and/or sell copies of the Software, and to permit persons to whom the 18// Software is furnished to do so, subject to the following conditions: 19// 20// The above copyright notice and this permission notice shall be included 21// in all copies or substantial portions of the Software. 22// 23// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 24// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 26// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 28// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 29// DEALINGS IN THE SOFTWARE. 30/*****************************************************************************/ 31 32#include "ImageWindow.h" 33#include "Constants.h" 34#include <Application.h> 35#include <Catalog.h> 36#include <Locale.h> 37#include <MenuBar.h> 38#include <MenuItem.h> 39#include <Menu.h> 40#include <ScrollView.h> 41#include <Alert.h> 42 43#undef B_TRANSLATION_CONTEXT 44#define B_TRANSLATION_CONTEXT "ImageWindow" 45 46 47ImageWindow::ImageWindow(BRect rect, const char *name) 48 : BWindow(rect, name, B_DOCUMENT_WINDOW, 0) 49{ 50 // Setup menu bar 51 BRect rctbar(0, 0, 100, 10); 52 BMenuBar *pbar = new BMenuBar(rctbar, "MenuBar"); 53 54 BMenu *pmnufile = new BMenu(B_TRANSLATE("File")); 55 BMenuItem *pitmopen = new BMenuItem(B_TRANSLATE("Open" B_UTF8_ELLIPSIS), 56 new BMessage(M_OPEN_IMAGE), 'O', 0); 57 58 BMenuItem *pitmsave = new BMenuItem(B_TRANSLATE("Save" B_UTF8_ELLIPSIS), 59 new BMessage(M_SAVE_IMAGE), 'S', 0); 60 61 BMenuItem *pitmquit = new BMenuItem(B_TRANSLATE("Quit"), 62 new BMessage(B_QUIT_REQUESTED), 'Q', 0); 63 64 pmnufile->AddItem(pitmopen); 65 pmnufile->AddItem(pitmsave); 66 pmnufile->AddSeparatorItem(); 67 pmnufile->AddItem(pitmquit); 68 pbar->AddItem(pmnufile); 69 70 BMenu *pmnuview = new BMenu(B_TRANSLATE("View")); 71 BMenuItem *pitmfirst = new BMenuItem(B_TRANSLATE("First Page"), 72 new BMessage(M_VIEW_FIRST_PAGE), 'F', 0); 73 74 BMenuItem *pitmlast = new BMenuItem(B_TRANSLATE("Last Page"), 75 new BMessage(M_VIEW_LAST_PAGE), 'L', 0); 76 77 BMenuItem *pitmnext = new BMenuItem(B_TRANSLATE("Next Page"), 78 new BMessage(M_VIEW_NEXT_PAGE), 'N', 0); 79 80 BMenuItem *pitmprev = new BMenuItem(B_TRANSLATE("Previous Page"), 81 new BMessage(M_VIEW_PREV_PAGE), 'P', 0); 82 83 pmnuview->AddItem(pitmfirst); 84 pmnuview->AddItem(pitmlast); 85 pmnuview->AddItem(pitmnext); 86 pmnuview->AddItem(pitmprev); 87 pbar->AddItem(pmnuview); 88 89 90 BMenu *pmnuwindow = new BMenu(B_TRANSLATE("Window")); 91 BMenuItem *pitmactives = new BMenuItem(B_TRANSLATE("Active Translators"), 92 new BMessage(M_ACTIVE_TRANSLATORS_WINDOW), 'T', 0); 93 pitmactives->SetTarget(be_app); 94 95 BMenuItem *pitminfo = new BMenuItem(B_TRANSLATE("Info"), 96 new BMessage(M_INFO_WINDOW), 'I', 0); 97 pitminfo->SetTarget(be_app); 98 99 pmnuwindow->AddItem(pitmactives); 100 pmnuwindow->AddItem(pitminfo); 101 pbar->AddItem(pmnuwindow); 102 103 AddChild(pbar); 104 105 // Setup image view 106 BRect rctview = Bounds(); 107 rctview.top = pbar->Frame().bottom + 1; 108 rctview.right -= B_V_SCROLL_BAR_WIDTH; 109 rctview.bottom -= B_H_SCROLL_BAR_HEIGHT; 110 111 fpimageView = new ImageView(rctview, "ImageView"); 112 AddChild(new BScrollView("ImageScroll", fpimageView, 113 B_FOLLOW_ALL_SIDES, 0, true, true)); 114 115 // Setup file open panel 116 BMessenger messenger(this); 117 BMessage message(M_OPEN_FILE_PANEL); 118 fpopenPanel = new BFilePanel(B_OPEN_PANEL, &messenger, NULL, 0L, false, 119 &message, NULL, false, true); 120 121 SetSizeLimits(200, 10000, 150, 10000); 122} 123 124ImageWindow::~ImageWindow() 125{ 126 delete fpopenPanel; 127 fpopenPanel = NULL; 128} 129 130void 131ImageWindow::MessageReceived(BMessage *pmsg) 132{ 133 switch (pmsg->what) { 134 case M_OPEN_IMAGE: 135 fpopenPanel->Window()->SetWorkspaces(B_CURRENT_WORKSPACE); 136 fpopenPanel->Show(); 137 break; 138 139 case M_SAVE_IMAGE: 140 if (fpimageView->HasImage()) { 141 BAlert *palert = new BAlert(NULL, 142 B_TRANSLATE("Save feature not implemented yet."), 143 B_TRANSLATE("Bummer")); 144 palert->Go(); 145 } else { 146 BAlert *palert = new BAlert(NULL, 147 B_TRANSLATE("No image available to save."), 148 B_TRANSLATE("OK")); 149 palert->Go(); 150 } 151 break; 152 153 case M_OPEN_FILE_PANEL: 154 case B_SIMPLE_DATA: 155 fpimageView->SetImage(pmsg); 156 break; 157 158 case M_VIEW_FIRST_PAGE: 159 fpimageView->FirstPage(); 160 break; 161 case M_VIEW_LAST_PAGE: 162 fpimageView->LastPage(); 163 break; 164 case M_VIEW_NEXT_PAGE: 165 fpimageView->NextPage(); 166 break; 167 case M_VIEW_PREV_PAGE: 168 fpimageView->PrevPage(); 169 break; 170 171 case B_CANCEL: 172 break; 173 174 default: 175 BWindow::MessageReceived(pmsg); 176 break; 177 } 178} 179 180bool 181ImageWindow::QuitRequested() 182{ 183 be_app->PostMessage(B_QUIT_REQUESTED); 184 return true; 185} 186 187