From 13afa64231695bfa50edd375d99fa850ece3a156 Mon Sep 17 00:00:00 2001 From: Phil Greenway Date: Mon, 22 Jul 2002 23:59:33 +0000 Subject: [PATCH] Initial Checkin. Coded by Fernando Francisco de Oliveira. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@388 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/showimage/ShowImage.rsrc | Bin 0 -> 4239 bytes src/apps/showimage/ShowImageApp.cpp | 159 ++++++++++ src/apps/showimage/ShowImageApp.h | 33 ++ src/apps/showimage/ShowImageConstants.cpp | 7 + src/apps/showimage/ShowImageConstants.h | 21 ++ src/apps/showimage/ShowImageStatusView.cpp | 22 ++ src/apps/showimage/ShowImageStatusView.h | 23 ++ src/apps/showimage/ShowImageView.cpp | 171 ++++++++++ src/apps/showimage/ShowImageView.h | 43 +++ src/apps/showimage/ShowImageWindow.cpp | 348 +++++++++++++++++++++ src/apps/showimage/ShowImageWindow.h | 44 +++ src/apps/showimage/ShowImageX | Bin 0 -> 73922 bytes src/apps/showimage/ShowImageX.proj | Bin 0 -> 13677 bytes src/apps/showimage/makefile | 107 +++++++ 14 files changed, 978 insertions(+) create mode 100644 src/apps/showimage/ShowImage.rsrc create mode 100644 src/apps/showimage/ShowImageApp.cpp create mode 100644 src/apps/showimage/ShowImageApp.h create mode 100644 src/apps/showimage/ShowImageConstants.cpp create mode 100644 src/apps/showimage/ShowImageConstants.h create mode 100644 src/apps/showimage/ShowImageStatusView.cpp create mode 100644 src/apps/showimage/ShowImageStatusView.h create mode 100644 src/apps/showimage/ShowImageView.cpp create mode 100644 src/apps/showimage/ShowImageView.h create mode 100644 src/apps/showimage/ShowImageWindow.cpp create mode 100644 src/apps/showimage/ShowImageWindow.h create mode 100755 src/apps/showimage/ShowImageX create mode 100644 src/apps/showimage/ShowImageX.proj create mode 100644 src/apps/showimage/makefile diff --git a/src/apps/showimage/ShowImage.rsrc b/src/apps/showimage/ShowImage.rsrc new file mode 100644 index 0000000000000000000000000000000000000000..dfc7ad7d2dcf85afa8916db90faf7237e620ddab GIT binary patch literal 4239 zcmeHK&2JJ>5TB)>4QSduc%q5ijBWU6V$?J-2o%UBg(Y3mq$d{J#S$wJT0iQkH~xcq zGmTzs((E7M$)hLZzu?Ju@hJZ0y$4JAXsofu1GC+{dGq_tyxDoPOW(RhMDynA6%4C< zv+@VRz69T|Gcv}GCUrJpLMihW&w2SXq1wkMSnkW`^({58KR8!G{+oJIR+$B!W+X zZPLSp)OCmLS5pM>%p%B&Bw;`M}>;UyV>(Yd{; z*jT(JYEEbs?(6;(_4W7Kr;8o71u9`~AX*Ze#>-)fonJ!V2pYR2$pPNUmLNY}NO+nvrcMV(!+TJN0(;Lh=7|^5JlPukhXdhR(Om zkKfH6mN$#3;1lPd^5|Ku=Cnz>sYQGrj(wzsN3MD8-&~wu(aabQM%L#koi(kMwH2$p zS}`(aQN6|8ZZTsNn8in0#VU-ltb$SCI4C_`m$6c%QpGaz{XqG=B`Da9UZ9+@maUXG vOIfSW+9;J$90)bUmqsMTfi|-1mNAf3PSN-Uobzb8wN&1VwcNe+8aVv|JBNT= literal 0 HcmV?d00001 diff --git a/src/apps/showimage/ShowImageApp.cpp b/src/apps/showimage/ShowImageApp.cpp new file mode 100644 index 0000000000..82004ec1d6 --- /dev/null +++ b/src/apps/showimage/ShowImageApp.cpp @@ -0,0 +1,159 @@ +/* + OBOS ShowImage 0.1 - 17/02/2002 - 22:22 - Fernando Francisco de Oliveira +*/ + +#include +#include +#include + +#include "ShowImageConstants.h" +#include "ShowImageApp.h" +#include "ShowImageWindow.h" + +int main(int, char**) +{ + ShowImageApp theApp; + theApp.Run(); + return 0; +} + +ShowImageApp::ShowImageApp() + : BApplication(APP_SIG), m_pOpenPanel(0) +{ } + +void ShowImageApp::AboutRequested() +{ + BAlert* pAlert = new BAlert( "About ShowImage", + "OBOS ShowImage\n\nRecreated by Fernando F.Oliveira", "OK"); + pAlert->Go(); +} + +void ShowImageApp::ReadyToRun() +{ + int32 count = ShowImageWindow::CountWindows(); + if (count < 1) + OnOpen(); +} + +void ShowImageApp::ArgvReceived(int32 argc, char** argv) +{ + BMessage* message = 0; + for (int32 i=1; iwhat = B_REFS_RECEIVED; + } + message->AddRef("refs", &ref); + } + } + if (message) { + RefsReceived(message); + } +} + +void ShowImageApp::MessageReceived(BMessage* message) +{ + switch (message->what) { + case MSG_FILE_OPEN: + OnOpen(); + break; + case B_CANCEL: + if (ShowImageWindow::CountWindows() < 1) + PostMessage(B_QUIT_REQUESTED); + break; + default: + BApplication::MessageReceived(message); + break; + } +} + +bool ShowImageApp::QuitRequested() +{ + // Attempt to close all the document windows. + bool ok = QuitDudeWinLoop(); + if (ok) + // Everything's been saved, and only unimportant windows should remain. + // Now we can forcibly blow those away. + CloseAllWindows(); + + return ok; +} + +void ShowImageApp::RefsReceived(BMessage* message) +{ + uint32 type; + int32 count; + entry_ref ref; + + message->GetInfo("refs", &type, &count); + if (type != B_REF_TYPE) + return; + + for (int32 i = --count; i >= 0; --i) { + if (message->FindRef("refs", i, &ref) == B_OK) { + Open(&ref); + } + } +} + +void ShowImageApp::OnOpen() +{ + if (! m_pOpenPanel) { + m_pOpenPanel = new BFilePanel; + m_pOpenPanel->Window()->SetTitle("Open Image File"); + } + m_pOpenPanel->Show(); +} + +bool ShowImageApp::QuitDudeWinLoop() +{ + bool ok = true; + status_t err; + int32 i=0; + while (ok) { + BWindow* pWin = WindowAt(i++); + if (! pWin) + break; + + ShowImageWindow* pShowImageWindow = dynamic_cast(pWin); + if (pShowImageWindow && pShowImageWindow->Lock()) { + BMessage quitMsg(B_QUIT_REQUESTED); + BMessage reply; + BMessenger winMsgr(pShowImageWindow); + pShowImageWindow->Unlock(); + err = winMsgr.SendMessage(&quitMsg, &reply); + if (err == B_OK) { + bool result; + err = reply.FindBool("result", &result); + if (err == B_OK) { + ok = result; + } + } + } + } + return ok; +} + +void ShowImageApp::CloseAllWindows() +{ + int32 i = 0; + BWindow* pWin; + for (pWin = WindowAt(i++); pWin && pWin->Lock(); pWin = WindowAt(i++)) { + // don't take no for an answer + pWin->Quit(); + } +} + +void ShowImageApp::Open(const entry_ref* ref) +{ + if (ShowImageWindow::NewWindow(ref) != B_OK) { + char errStr[B_FILE_NAME_LENGTH + 50]; + sprintf(errStr, "Couldn't open file: %s", + (ref && ref->name) ? ref->name : "???"); + BAlert* pAlert = new BAlert("file i/o error", errStr, "OK"); + pAlert->Go(); + } +} diff --git a/src/apps/showimage/ShowImageApp.h b/src/apps/showimage/ShowImageApp.h new file mode 100644 index 0000000000..8bb6551b00 --- /dev/null +++ b/src/apps/showimage/ShowImageApp.h @@ -0,0 +1,33 @@ +/* + OBOS ShowImage 0.1 - 17/02/2002 - 22:22 - Fernando Francisco de Oliveira +*/ + +#ifndef _ShowImageApp_h +#define _ShowImageApp_h + +#include + +class ShowImageApp : public BApplication +{ +public: + ShowImageApp(); + +public: + virtual void AboutRequested(); + virtual void ArgvReceived(int32 argc, char** argv); + virtual void MessageReceived(BMessage* message); + virtual bool QuitRequested(); + virtual void ReadyToRun(); + virtual void RefsReceived(BMessage* message); + +private: + void OnOpen(); + bool QuitDudeWinLoop(); + void CloseAllWindows(); + void Open(const entry_ref* ref); + +private: + BFilePanel* m_pOpenPanel; +}; + +#endif /* _ShowImageApp_h */ diff --git a/src/apps/showimage/ShowImageConstants.cpp b/src/apps/showimage/ShowImageConstants.cpp new file mode 100644 index 0000000000..e350432fef --- /dev/null +++ b/src/apps/showimage/ShowImageConstants.cpp @@ -0,0 +1,7 @@ +/* + OBOS ShowImage 0.1 - 17/02/2002 - 22:22 - Fernando Francisco de Oliveira +*/ + +#include "ShowImageConstants.h" + +extern const char* APP_SIG = "application/x-vnd.FFO-ShowImage"; diff --git a/src/apps/showimage/ShowImageConstants.h b/src/apps/showimage/ShowImageConstants.h new file mode 100644 index 0000000000..80a990d174 --- /dev/null +++ b/src/apps/showimage/ShowImageConstants.h @@ -0,0 +1,21 @@ +/* + OBOS ShowImage 0.1 - 17/02/2002 - 22:22 - Fernando Francisco de Oliveira +*/ + +#ifndef _ShowImageConstants_ +#define _ShowImageConstants_ + +#include + +const uint32 MSG_CAPTURE_MOUSE = 'mCPM'; +const uint32 MSG_CHANGE_FOCUS = 'mCFS'; +const uint32 MSG_FILE_OPEN = 'mFOP'; +const uint32 MSG_FILE_SAVE = 'mFSA'; +const uint32 MSG_CLEAR_SELECT = 'mCSL'; +const uint32 MSG_SELECT_ALL = 'mSAL'; +const uint32 MSG_DITHER_IMAGE = 'mDIM'; + +extern const char* APP_SIG; + + +#endif /* _ShowImageConstants_ */ diff --git a/src/apps/showimage/ShowImageStatusView.cpp b/src/apps/showimage/ShowImageStatusView.cpp new file mode 100644 index 0000000000..f127135987 --- /dev/null +++ b/src/apps/showimage/ShowImageStatusView.cpp @@ -0,0 +1,22 @@ +/* + OBOS ShowImage 0.1 - 17/02/2002 - 22:22 - Fernando Francisco de Oliveira +*/ + +#include "ShowImageStatusView.h" + +ShowImageStatusView::ShowImageStatusView(BRect r, const char* name, uint32 resizingMode, uint32 flags) + : BView(r, name, resizingMode, flags) +{ + m_caption = ""; +} + +void ShowImageStatusView::Draw(BRect updateRect) +{ + DrawString( m_caption, BPoint( 3, 11) ); +} + +void ShowImageStatusView::SetCaption( char * Caption ) +{ + m_caption = Caption; + Invalidate(); +} \ No newline at end of file diff --git a/src/apps/showimage/ShowImageStatusView.h b/src/apps/showimage/ShowImageStatusView.h new file mode 100644 index 0000000000..f279622b68 --- /dev/null +++ b/src/apps/showimage/ShowImageStatusView.h @@ -0,0 +1,23 @@ +/* + OBOS ShowImage 0.1 - 17/02/2002 - 22:22 - Fernando Francisco de Oliveira +*/ + +#ifndef _ShowImageStatusView_h +#define _ShowImageStatusView_h + +#include + +class ShowImageStatusView : public BView +{ +public: + ShowImageStatusView(BRect r, const char* name, uint32 resizingMode, uint32 flags); + + virtual void Draw(BRect updateRect); + + void SetCaption( char * Caption ); + +private: + char * m_caption; +}; + +#endif /* _ShowImageStatusView_h */ diff --git a/src/apps/showimage/ShowImageView.cpp b/src/apps/showimage/ShowImageView.cpp new file mode 100644 index 0000000000..00e5356c1c --- /dev/null +++ b/src/apps/showimage/ShowImageView.cpp @@ -0,0 +1,171 @@ +/* + OBOS ShowImage 0.1 - 17/02/2002 - 22:22 - Fernando Francisco de Oliveira +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ShowImageConstants.h" +#include "ShowImageView.h" + +ShowImageView::ShowImageView(BRect r, const char* name, uint32 resizingMode, uint32 flags) + : BView(r, name, resizingMode, flags), m_pBitmap(NULL) +{ + Selecting = false; + Selected = false; + PointOn = false; + + SetViewColor( ui_color( B_PANEL_BACKGROUND_COLOR ) ); +} + +ShowImageView::~ShowImageView() +{ + delete m_pBitmap; +} + +void ShowImageView::SetBitmap(BBitmap* pBitmap) +{ + m_pBitmap = pBitmap; +} + +void ShowImageView::AttachedToWindow() +{ + FixupScrollBars(); +} + +void ShowImageView::Draw(BRect updateRect) +{ + if ( m_pBitmap ) + { + DrawBitmap( m_pBitmap, updateRect, updateRect ); + + if ( Selected && PointOn ) { + SetDrawingMode( B_OP_INVERT /*B_OP_ALPHA */); + + StrokeRect( BRect( IniPoint, EndPoint ), B_MIXED_COLORS ); + + SetDrawingMode(B_OP_COPY); + } + } +} + +void ShowImageView::FrameResized(float /* width */, float /* height */) +{ + FixupScrollBars(); +} + +void ShowImageView::MessageReceived(BMessage* msg) +{ + switch (msg->what) { + default: + BView::MessageReceived(msg); + break; + } +} + +void ShowImageView::FixupScrollBars() +{ + if (! m_pBitmap) + return; + + BRect vBds = Bounds(), bBds = m_pBitmap->Bounds(); + float prop; + float range; + + BScrollBar* sb = ScrollBar(B_HORIZONTAL); + if (sb) { + range = bBds.Width() - vBds.Width(); + if (range < 0) range = 0; + prop = vBds.Width() / bBds.Width(); + if (prop > 1.0f) prop = 1.0f; + sb->SetRange(0, range); + sb->SetProportion(prop); + sb->SetSteps(10, 100); + } + sb = ScrollBar(B_VERTICAL); + if (sb) { + range = bBds.Height() - vBds.Height(); + if (range < 0) range = 0; + prop = vBds.Height() / bBds.Height(); + if (prop > 1.0f) prop = 1.0f; + sb->SetRange(0, range); + sb->SetProportion(prop); + sb->SetSteps(10, 100); + } +} + +void ShowImageView::MouseDown( BPoint point ) +{ + if ( Selected && SelectedRect.Contains( point ) ) { + return; + } + + uint32 buttons; + + GetMouse(&point, &buttons); + + if ( buttons == B_PRIMARY_MOUSE_BUTTON ) { + + if ( Selected ) { + Selected = false; + Invalidate( BRect( IniPoint, EndPoint ) ); + } + + BRect rect(point, point); + BeginRectTracking(rect, B_TRACK_RECT_CORNER); + + IniPoint = point; + do { + snooze(30 * 1000); + GetMouse(&point, &buttons); + } while ( buttons ); + + EndRectTracking(); + + Selected = true; + + rect.SetRightBottom(point); + + EndPoint = point; + + SelectedRect = BRect( IniPoint, EndPoint ); + + Invalidate( SelectedRect ); + + PointOn = true; + + BMenuItem * pMenuCopy; + pMenuCopy = pBar->FindItem( B_COPY ); + pMenuCopy->SetEnabled( true ); + } +} + +void ShowImageView::MouseUp( BPoint point ) +{ +} + +void ShowImageView::MouseMoved( BPoint point, uint32 transit, const BMessage *message ) +{ +} + +void ShowImageView::Pulse(void) +{ + if ( Selected ) { + PushState(); + + PointOn = ! PointOn; + + SetDrawingMode( B_OP_INVERT ); + + StrokeRect( SelectedRect, B_MIXED_COLORS ); + + //SetDrawingMode(B_OP_COPY); + PopState(); + } +} diff --git a/src/apps/showimage/ShowImageView.h b/src/apps/showimage/ShowImageView.h new file mode 100644 index 0000000000..b5088d62b3 --- /dev/null +++ b/src/apps/showimage/ShowImageView.h @@ -0,0 +1,43 @@ +/* + OBOS ShowImage 0.1 - 17/02/2002 - 22:22 - Fernando Francisco de Oliveira +*/ + +#ifndef _ShowImageView_h +#define _ShowImageView_h + +#include + +class OffscreenView; + +class ShowImageView : public BView +{ +public: + ShowImageView(BRect r, const char* name, uint32 resizingMode, uint32 flags); + ~ShowImageView(); + + void SetBitmap(BBitmap* pBitmap); + + virtual void AttachedToWindow(); + virtual void Draw(BRect updateRect); + virtual void FrameResized(float width, float height); + virtual void MessageReceived(BMessage* message); + + virtual void MouseDown( BPoint point ); + virtual void MouseUp( BPoint point ); + virtual void MouseMoved( BPoint point, uint32 transit, const BMessage *message ); + virtual void Pulse(void); + + void FixupScrollBars(); + + BMenuBar* pBar; + +private: + bool Selecting, Selected, PointOn; + + BRect SelectedRect, LastPoint, PointRecOn; + BPoint IniPoint, EndPoint; + + BBitmap* m_pBitmap; +}; + +#endif /* _ShowImageView_h */ diff --git a/src/apps/showimage/ShowImageWindow.cpp b/src/apps/showimage/ShowImageWindow.cpp new file mode 100644 index 0000000000..353a5e29fb --- /dev/null +++ b/src/apps/showimage/ShowImageWindow.cpp @@ -0,0 +1,348 @@ +/* + OBOS ShowImage 0.1 - 17/02/2002 - 22:22 - Fernando Francisco de Oliveira +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ShowImageConstants.h" +#include "ShowImageWindow.h" +#include "ShowImageView.h" +#include "ShowImageStatusView.h" + +BLocker ShowImageWindow::s_winListLocker("ShowImageWindow list lock"); +BList ShowImageWindow::s_winList; + +status_t ShowImageWindow::NewWindow(const entry_ref* ref) +{ + BEntry entry(ref); + if (entry.InitCheck() == B_OK) { + BPath path; + entry.GetPath(&path); + if (path.InitCheck() == B_OK) { + BBitmap* pBitmap = BTranslationUtils::GetBitmap(path.Path()); + if (pBitmap) { + ShowImageWindow* pWin = new ShowImageWindow(ref, pBitmap); + return pWin->InitCheck(); + } + } + } + return B_ERROR; +} + +int32 ShowImageWindow::CountWindows() +{ + int32 count = -1; + if (s_winListLocker.Lock()) { + count = s_winList.CountItems(); + s_winListLocker.Unlock(); + } + return count; +} + +ShowImageWindow::ShowImageWindow(const entry_ref* ref, BBitmap* pBitmap) + : BWindow(BRect(50, 50, 350, 250), "", B_DOCUMENT_WINDOW, 0), + m_pReferences(0) +{ + SetPulseRate( 200000.0 ); + + // create menu bar + pBar = new BMenuBar( BRect(0,0, Bounds().right, 20), "menu_bar"); + LoadMenus(pBar); + AddChild(pBar); + + BRect viewFrame = Bounds(); +// viewFrame.left += 20; + viewFrame.top = pBar->Bounds().bottom+1; + viewFrame.right -= B_V_SCROLL_BAR_WIDTH; + viewFrame.bottom -= B_H_SCROLL_BAR_HEIGHT; + + // create the image view + m_PrivateView = new ShowImageView(viewFrame, "image_view", B_FOLLOW_ALL, + B_WILL_DRAW | B_FRAME_EVENTS | B_PULSE_NEEDED); + m_PrivateView->SetBitmap(pBitmap); + + // wrap a scroll view around the view + BScrollView* pScrollView = new BScrollView("image_scroller", m_PrivateView, B_FOLLOW_ALL, + 0, false, false, B_PLAIN_BORDER); + + AddChild(pScrollView); + + BScrollBar *hor_scroll; + + BRect rect; + + rect = Bounds(); + rect.top = viewFrame.bottom + 1; + rect.left = viewFrame.left + 160; + rect.right = viewFrame.right; + + hor_scroll = new BScrollBar( rect, "hor_scroll", m_PrivateView, 0,150, B_HORIZONTAL ); + AddChild( hor_scroll ); + + ShowImageStatusView * status_bar; + + rect.left = 0; + rect.right = 159; + + status_bar = new ShowImageStatusView( rect, "status_bar", B_FOLLOW_BOTTOM, B_WILL_DRAW ); + status_bar->SetViewColor( ui_color( B_MENU_BACKGROUND_COLOR ) ); + status_bar->SetCaption( "ImageShow" ); + + AddChild( status_bar ); + + BScrollBar *vert_scroll; + + rect = Bounds(); + rect.top = viewFrame.top; + rect.left = viewFrame.right + 1; + rect.bottom = viewFrame.bottom; + + vert_scroll = new BScrollBar( rect, "vert_scroll", m_PrivateView, 0,150, B_VERTICAL ); + AddChild( vert_scroll ); + + WindowRedimension( pBitmap ); + + // finish creating window + SetRef(ref); + UpdateTitle(); + if (s_winListLocker.Lock()) { + s_winList.AddItem(this); + s_winListLocker.Unlock(); + } + + m_PrivateView->pBar = pBar; + + Show(); +} + +ShowImageWindow::~ShowImageWindow() +{ + if (m_pReferences) { + delete m_pReferences; + } + + if (s_winListLocker.Lock()) { + s_winList.RemoveItem(this); + s_winListLocker.Unlock(); + } + if (CountWindows() < 1) { + be_app->PostMessage(B_QUIT_REQUESTED); + } +} + +void ShowImageWindow::WindowActivated(bool active) +{ +// WindowRedimension( pBitmap ); +} + +status_t ShowImageWindow::InitCheck() +{ + if (! m_pReferences) { + return B_ERROR; + } else { + return B_OK; + } +} + +void ShowImageWindow::SetRef(const entry_ref* ref) +{ + if (! m_pReferences) { + m_pReferences = new entry_ref(*ref); + } else { + *m_pReferences = *ref; + } +} + +void ShowImageWindow::UpdateTitle() +{ + BEntry entry(m_pReferences); + if (entry.InitCheck() == B_OK) { + BPath path; + entry.GetPath(&path); + if (path.InitCheck() == B_OK) { + SetTitle(path.Path()); + } + } +} + +void ShowImageWindow::LoadMenus(BMenuBar* pBar) +{ + long unsigned int MSG_QUIT = B_QUIT_REQUESTED; + long unsigned int MSG_ABOUT = B_ABOUT_REQUESTED; + + BMenu* pMenu = new BMenu("File"); + + AddItemMenu( pMenu, "Open", MSG_FILE_OPEN, 'O', 0, 'A', true ); + pMenu->AddSeparatorItem(); + +// BMenuItem * pMenuSaveAs = AddItemMenu( pMenu, "Save As...", MSG_FILE_SAVE, 'S', 0, 'W', true); + + BMenu* pMenuSaveAs = new BMenu( "Save As...", B_ITEMS_IN_COLUMN ); + + pMenu->AddItem( pMenuSaveAs ); + + + BTranslatorRoster *roster = BTranslatorRoster::Default(); + + int32 num_translators, i; + translator_id *translators; + const char *translator_name, *translator_info; + int32 translator_version; + + roster->GetAllTranslators(&translators, &num_translators); + + for (i=0;iGetTranslatorInfo(translators[i], &translator_name, + &translator_info, &translator_version); + + BMenuItem * pSubMenu = new BMenuItem( translator_name , NULL ); + + pMenuSaveAs->AddItem( pSubMenu ); + //printf("%s: %s (%.2f)n", translator_name, translator_info, translator_version/100.); + } + + delete [] translators; // clean up our droppings + + AddItemMenu( pMenu, "Close", MSG_QUIT, 'W', 0, 'A', true); + pMenu->AddSeparatorItem(); + AddItemMenu( pMenu, "About ShowImage...", MSG_ABOUT, 0, 0, 'A', true); + pMenu->AddSeparatorItem(); + AddItemMenu( pMenu, "Quit", MSG_QUIT, 'Q', 0, 'A', true); + + pBar->AddItem(pMenu); + + pMenu = new BMenu("Edit"); + + AddItemMenu( pMenu, "Undo", B_UNDO, 'Z', 0, 'W', false); + pMenu->AddSeparatorItem(); + AddItemMenu( pMenu, "Cut", B_CUT, 'X', 0, 'W', false); + AddItemMenu( pMenu, "Copy", B_COPY, 'C', 0, 'W', false); + AddItemMenu( pMenu, "Paste", B_PASTE, 'V', 0, 'W', false); + AddItemMenu( pMenu, "Clear", MSG_CLEAR_SELECT, 0, 0, 'W', false); + pMenu->AddSeparatorItem(); + AddItemMenu( pMenu, "Select All", MSG_SELECT_ALL, 'A', 0, 'W', true); + + pBar->AddItem(pMenu); + + pMenu = new BMenu("Image"); + AddItemMenu( pMenu, "Dither Image", MSG_DITHER_IMAGE, 0, 0, 'W', true); + pBar->AddItem(pMenu); +} + +BMenuItem * ShowImageWindow::AddItemMenu( BMenu *pMenu, char *Caption, long unsigned int msg, + char shortcut, uint32 modifier, char target, bool enabled ) { + + BMenuItem* pItem; + + pItem = new BMenuItem( Caption, new BMessage(msg), shortcut ); + + if ( target == 'A' ) + pItem->SetTarget(be_app); + + pItem->SetEnabled( enabled ); + pMenu->AddItem(pItem); + + return( pItem ); +} + +void ShowImageWindow::WindowRedimension( BBitmap *pBitmap ) +{ + // set the window's min & max size limits + // based on document's data bounds + float maxWidth = pBitmap->Bounds().Width() + B_V_SCROLL_BAR_WIDTH; + float maxHeight = pBitmap->Bounds().Height() + + pBar->Frame().Height() + + B_H_SCROLL_BAR_HEIGHT + 1; + float minWidth = min(maxWidth, 100.0f); + float minHeight = min(maxHeight, 100.0f); + + // adjust the window's current size based on new min/max values + float curWidth = Bounds().Width(); + float curHeight = Bounds().Height(); + if (curWidth < minWidth) { + curWidth = minWidth; + } else if (curWidth > maxWidth) { + curWidth = maxWidth; + } + if (curHeight < minHeight) { + curHeight = minHeight; + } else if (curHeight > maxHeight) { + curHeight = maxHeight; + } + if ( minWidth < 250 ) { + minWidth = 250; + } + SetSizeLimits(minWidth, maxWidth, minHeight, maxHeight); + ResizeTo(curWidth, curHeight); +} + +void ShowImageWindow::FrameResized( float new_width, float new_height ) +{ +} + +void ShowImageWindow::MessageReceived(BMessage* message) +{ + BAlert* pAlert; + + switch (message->what) { + case MSG_FILE_SAVE : + pAlert = new BAlert( "File/Save", + "File/Save not implemented yet", "OK"); + pAlert->Go(); + break; + case B_UNDO : + pAlert = new BAlert( "Edit/Undo", + "Edit/Undo not implemented yet", "OK"); + pAlert->Go(); + break; + case B_CUT : + pAlert = new BAlert( "Edit/Cut", + "Edit/Cut not implemented yet", "OK"); + pAlert->Go(); + break; + case B_COPY : + pAlert = new BAlert( "Edit/Copy", + "Edit/Copy not implemented yet", "OK"); + pAlert->Go(); + break; + case B_PASTE : + pAlert = new BAlert( "Edit/Paste", + "Edit/Paste not implemented yet", "OK"); + pAlert->Go(); + break; + case MSG_CLEAR_SELECT : + pAlert = new BAlert( "Edit/Clear Select", + "Edit/Clear Select not implemented yet", "OK"); + pAlert->Go(); + break; + case MSG_SELECT_ALL : + pAlert = new BAlert( "Edit/Select All", + "Edit/Select All not implemented yet", "OK"); + pAlert->Go(); + break; + case MSG_DITHER_IMAGE : + BMenuItem * pMenuDither; + pMenuDither = pBar->FindItem( message->what ); + pMenuDither->SetMarked( ! pMenuDither->IsMarked() ); + + break; + + default: + BWindow::MessageReceived(message); + break; + } +} +// BMenu* pMenuDither = ; diff --git a/src/apps/showimage/ShowImageWindow.h b/src/apps/showimage/ShowImageWindow.h new file mode 100644 index 0000000000..e814509c58 --- /dev/null +++ b/src/apps/showimage/ShowImageWindow.h @@ -0,0 +1,44 @@ +/* + OBOS ShowImage 0.1 - 17/02/2002 - 22:22 - Fernando Francisco de Oliveira +*/ + +#ifndef _ShowImageWindow_h +#define _ShowImageWindow_h + +#include +class ShowImageView; + +class ShowImageWindow : public BWindow +{ +public: + static status_t NewWindow(const entry_ref* ref); + static int32 CountWindows(); + + ShowImageWindow(const entry_ref* ref, BBitmap* pBitmap); + virtual ~ShowImageWindow(); + + virtual void WindowActivated(bool active); + virtual void FrameResized( float new_width, float new_height ); + virtual void MessageReceived(BMessage* message); + + status_t InitCheck(); + ShowImageView* GetShowImageView() const { return m_PrivateView; } + + void SetRef(const entry_ref* ref); + void UpdateTitle(); + void LoadMenus(BMenuBar* pBar); + void WindowRedimension( BBitmap *pBitmap ); + + BMenuBar* pBar; +private: + BMenuItem * AddItemMenu( BMenu *pMenu, char *Caption, long unsigned int msg, + char shortcut, uint32 modifier, char target, bool enabled ); + + entry_ref* m_pReferences; + ShowImageView* m_PrivateView; + + static BLocker s_winListLocker; + static BList s_winList; +}; + +#endif /* _ShowImageWindow_h */ \ No newline at end of file diff --git a/src/apps/showimage/ShowImageX b/src/apps/showimage/ShowImageX new file mode 100755 index 0000000000000000000000000000000000000000..68aecc0bb3de553c29f8d7ebff3c674b5d89e5e8 GIT binary patch literal 73922 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∨Xv(zZa@zwfj(5ZAn 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 P#&Lb`*6+O&bnpKF0hTFP literal 0 HcmV?d00001 diff --git a/src/apps/showimage/ShowImageX.proj b/src/apps/showimage/ShowImageX.proj new file mode 100644 index 0000000000000000000000000000000000000000..3116f6588db14d552ad927582de4aac4ab9babcb GIT binary patch literal 13677 zcmeHN&2Jk;6rUxAMks}prcG!AbyeEZkB#|I5mG@YP14XRX{{QX-oko4vA3*ut=&!H zf{=XZ0VMtaBvdYN<-otdnH!g=aNr++69+g{<@aXZex!-0V;h>*9%a_EoA>6u_nWtG z-pmQLlqLPMPf8XKu{|DkqtPc|z|1!AX!xPi z>=#7-1rOIL_X`TCo!j71mVQ_WZ-tSp7y1s9Vj53}j87YZe^c7gXDMF&*7_i*Rxt(r z3Ay`qFT0NSamQE;rJUXNWi=YEV_T8qdxfUC=2fOHNK?8ivMKG=$SS)J zoBW;oyhgGa6;5}^Ol+jfnKP<`U7-uZu`6`pIeT~LqLq2%y1-K^es?~r zoDG+*eHVSmW^WR!Ug(0PxF@A2xtis|_k-kqSrW=j9iWB)kF_0^v$_wc8bz@`W{MzZ|Uz^AzGr_IlNT!*Duwrs=NU)ofX#g2^YLA^ zf?-ND>8plDXNdiFNcn9xHWCH?nRK5SI12s-;WY5j*2hujg{wz2S*%i$v+PHK>6Vwo#c zT9_*h$IhEqU(1`-%DNS-m~Z6GCChbj^?b9w>PC)TvnXF5lmP+*1fDPibQHA2xK%n0c z;P`S#XEl$QlN;BDN0zz#QSmo{3haBOnT}8 z(id@mAR(Q>3RGlyQ8<+_oOpoYAnspC7?!Y<@2`XUQdMbEroCb+iVK$(@0zt|bvuS= ze2rHC;U^Gq8#RYYk_g|8_9VSZEL0e>2{gwZG%Ew~j&ajR#nLf31OeDHa6c}V@u)mS9ZXcA@0zY-I0Lh3!b%f{08Z^6Va49hm|oTM@CRF z7MyZm1rDs}*bw?AKv!E%DYi%e3LA0~&10Jl+4f*DTXd9I32?S(ADVk{kcJM=m*o^r zbFthln=vg=Qt3>tLNX&)P3bI`mV7gkZ)rK{wZ+ZOB&*jnBUw#cEIA4+FLYHtl~G_d Y6|Gy{DWGP6i~?!~NENVgoQZ`01I%_t9RL6T literal 0 HcmV?d00001 diff --git a/src/apps/showimage/makefile b/src/apps/showimage/makefile new file mode 100644 index 0000000000..cd2b55ec7e --- /dev/null +++ b/src/apps/showimage/makefile @@ -0,0 +1,107 @@ +## BeOS Generic Makefile v2.0 ## + +## Fill in this file to specify the project being created, and the referenced +## makefile-engine will do all of the hard work for you. This handles both +## Intel and PowerPC builds of the BeOS. + +## Application Specific Settings --------------------------------------------- + +# specify the name of the binary +NAME= PotApp + +# specify the type of binary +# APP: Application +# SHARED: Shared library or add-on +# STATIC: Static library archive +# DRIVER: Kernel Driver +TYPE= APP + +# specify the source files to use +# full paths or paths relative to the makefile can be included +# all files, regardless of directory, will have their object +# files created in the common object directory. +# Note that this means this makefile will not work correctly +# if two source files with the same name (source.c or source.cpp) +# are included from different directories. Also note that spaces +# in folder names do not work well with this makefile. +SRCS= colorutils.cpp \ + constants.cpp \ + drawutils.cpp \ + offscreenview.cpp \ + pot.cpp \ + potapp.cpp \ + potview.cpp \ + potwin.cpp \ + testview.cpp \ + testwin.cpp \ +# end of srcs + +# specify the resource files to use +# full path or a relative path to the resource file can be used. +RSRCS= pot.rsrc + +# specify additional libraries to link against +# there are two acceptable forms of library specifications +# - if your library follows the naming pattern of: +# libXXX.so or libXXX.a you can simply specify XXX +# library: libbe.so entry: be +# +# - if your library does not follow the standard library +# naming scheme you need to specify the path to the library +# and it's name +# library: my_lib.a entry: my_lib.a or path/my_lib.a +LIBS= be translation tracker + +# specify additional paths to directories following the standard +# libXXX.so or libXXX.a naming scheme. You can specify full paths +# or paths relative to the makefile. The paths included may not +# be recursive, so include all of the paths where libraries can +# be found. Directories where source files are found are +# automatically included. +LIBPATHS= + +# additional paths to look for system headers +# thes use the form: #include
+# source file directories are NOT auto-included here +SYSTEM_INCLUDE_PATHS = + +# additional paths to look for local headers +# thes use the form: #include "header" +# source file directories are automatically included +LOCAL_INCLUDE_PATHS = + +# specify the level of optimization that you desire +# NONE, SOME, FULL +OPTIMIZE= + +# specify any preprocessor symbols to be defined. The symbols +# will be set to a value of 1. For example specify DEBUG if you want +# DEBUG=1 to be set when compiling. +DEFINES= + +# specify special warning levels +# if unspecified default warnings will be used +# NONE = supress all warnings +# ALL = enable all warnings +WARNINGS = ALL + +# specify whether image symbols will be created +# so that stack crawls in the debugger are meaningful +# if TRUE symbols will be created +SYMBOLS = TRUE + +# specify debug settings +# if TRUE will allow application to be run from +# a source-level debugger +DEBUGGER = + +# specify additional compiler flags for all files +COMPILER_FLAGS = + +# specify additional linker flags +LINKER_FLAGS = + + +## include the makefile-engine +include /boot/develop/etc/makefile-engine +