* Display a tool bar by default (setting can be toggled in the
View menu) * The previous/next, selection mode, zoom actions and full screen mode are accessible via tool bar. * The tool bar can currently not be shown in full screen mode. Eventually, I want it to work like in MediaPlayer when it is generally enabled. * Fixed capitalization "Selection Mode" into "Selection mode" (needs catalogs update for all languages). * When leaving selection mode, clear the selection. Especially with the new tool bar icon, it looked really weird and irritating when the selection persisted. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41055 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -21,6 +21,7 @@ Application ShowImage :
|
|||||||
ShowImageView.cpp
|
ShowImageView.cpp
|
||||||
ShowImageWindow.cpp
|
ShowImageWindow.cpp
|
||||||
ToolBarIcons.cpp
|
ToolBarIcons.cpp
|
||||||
|
ToolBarView.cpp
|
||||||
: libshared.a be tracker translation $(HAIKU_LOCALE_LIBS)
|
: libshared.a be tracker translation $(HAIKU_LOCALE_LIBS)
|
||||||
$(TARGET_LIBSTDC++) $(TARGET_LIBSUPC++)
|
$(TARGET_LIBSTDC++) $(TARGET_LIBSUPC++)
|
||||||
: ShowImage.rdef
|
: ShowImage.rdef
|
||||||
|
|||||||
@@ -52,6 +52,8 @@
|
|||||||
#include "ShowImageConstants.h"
|
#include "ShowImageConstants.h"
|
||||||
#include "ShowImageStatusView.h"
|
#include "ShowImageStatusView.h"
|
||||||
#include "ShowImageView.h"
|
#include "ShowImageView.h"
|
||||||
|
#include "ToolBarIcons.h"
|
||||||
|
#include "ToolBarView.h"
|
||||||
|
|
||||||
|
|
||||||
// BMessage field names used in Save messages
|
// BMessage field names used in Save messages
|
||||||
@@ -94,7 +96,8 @@ enum {
|
|||||||
kMsgFitToWindow = 'mFtW',
|
kMsgFitToWindow = 'mFtW',
|
||||||
kMsgOriginalSize = 'mOSZ',
|
kMsgOriginalSize = 'mOSZ',
|
||||||
kMsgStretchToWindow = 'mStW',
|
kMsgStretchToWindow = 'mStW',
|
||||||
kMsgNextSlide = 'mNxS'
|
kMsgNextSlide = 'mNxS',
|
||||||
|
kMsgToggleToolBar = 'mTTB'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -117,6 +120,10 @@ bs_printf(BString* string, const char* format, ...)
|
|||||||
// #pragma mark -- ShowImageWindow
|
// #pragma mark -- ShowImageWindow
|
||||||
|
|
||||||
|
|
||||||
|
#undef B_TRANSLATE_CONTEXT
|
||||||
|
#define B_TRANSLATE_CONTEXT "Menus"
|
||||||
|
|
||||||
|
|
||||||
ShowImageWindow::ShowImageWindow(BRect frame, const entry_ref& ref,
|
ShowImageWindow::ShowImageWindow(BRect frame, const entry_ref& ref,
|
||||||
const BMessenger& trackerMessenger)
|
const BMessenger& trackerMessenger)
|
||||||
:
|
:
|
||||||
@@ -127,12 +134,14 @@ ShowImageWindow::ShowImageWindow(BRect frame, const entry_ref& ref,
|
|||||||
fBrowseMenu(NULL),
|
fBrowseMenu(NULL),
|
||||||
fGoToPageMenu(NULL),
|
fGoToPageMenu(NULL),
|
||||||
fSlideShowDelayMenu(NULL),
|
fSlideShowDelayMenu(NULL),
|
||||||
|
fToolBarView(NULL),
|
||||||
fImageView(NULL),
|
fImageView(NULL),
|
||||||
fStatusView(NULL),
|
fStatusView(NULL),
|
||||||
fProgressWindow(new ProgressWindow()),
|
fProgressWindow(new ProgressWindow()),
|
||||||
fModified(false),
|
fModified(false),
|
||||||
fFullScreen(false),
|
fFullScreen(false),
|
||||||
fShowCaption(true),
|
fShowCaption(true),
|
||||||
|
fShowToolBar(true),
|
||||||
fPrintSettings(NULL),
|
fPrintSettings(NULL),
|
||||||
fSlideShowRunner(NULL),
|
fSlideShowRunner(NULL),
|
||||||
fSlideShowDelay(kDefaultSlideShowDelay)
|
fSlideShowDelay(kDefaultSlideShowDelay)
|
||||||
@@ -146,6 +155,45 @@ ShowImageWindow::ShowImageWindow(BRect frame, const entry_ref& ref,
|
|||||||
|
|
||||||
BRect viewFrame = Bounds();
|
BRect viewFrame = Bounds();
|
||||||
viewFrame.top = fBar->Bounds().Height() + 1;
|
viewFrame.top = fBar->Bounds().Height() + 1;
|
||||||
|
viewFrame.bottom = viewFrame.top + 30;
|
||||||
|
|
||||||
|
fToolBarView = new ToolBarView(viewFrame);
|
||||||
|
|
||||||
|
// Add the tool icons.
|
||||||
|
|
||||||
|
// fToolBarView->AddAction(MSG_FILE_OPEN, be_app,
|
||||||
|
// tool_bar_icon(kIconDocumentOpen), B_TRANSLATE("Open"B_UTF8_ELLIPSIS));
|
||||||
|
fToolBarView->AddAction(MSG_FILE_PREV, this, tool_bar_icon(kIconGoUp),
|
||||||
|
B_TRANSLATE("Previous file"));
|
||||||
|
fToolBarView->AddAction(MSG_FILE_NEXT, this, tool_bar_icon(kIconGoDown),
|
||||||
|
B_TRANSLATE("Next file"));
|
||||||
|
fToolBarView->AddSeparator();
|
||||||
|
fToolBarView->AddAction(MSG_SELECTION_MODE, this,
|
||||||
|
tool_bar_icon(kIconDrawRectangularSelection),
|
||||||
|
B_TRANSLATE("Selection mode"));
|
||||||
|
fToolBarView->AddSeparator();
|
||||||
|
fToolBarView->AddAction(kMsgOriginalSize, this,
|
||||||
|
tool_bar_icon(kIconZoomOriginal), B_TRANSLATE("Original size"));
|
||||||
|
fToolBarView->AddAction(kMsgFitToWindow, this,
|
||||||
|
tool_bar_icon(kIconZoomFitBest), B_TRANSLATE("Fit to window"));
|
||||||
|
fToolBarView->AddAction(MSG_ZOOM_IN, this, tool_bar_icon(kIconZoomIn),
|
||||||
|
B_TRANSLATE("Zoom in"));
|
||||||
|
fToolBarView->AddAction(MSG_ZOOM_OUT, this, tool_bar_icon(kIconZoomOut),
|
||||||
|
B_TRANSLATE("Zoom out"));
|
||||||
|
fToolBarView->AddSeparator();
|
||||||
|
fToolBarView->AddAction(MSG_FULL_SCREEN, this,
|
||||||
|
tool_bar_icon(kIconViewFullScreen), B_TRANSLATE("Full screen"));
|
||||||
|
|
||||||
|
fToolBarView->ResizeTo(viewFrame.Width(), fToolBarView->MinSize().height);
|
||||||
|
|
||||||
|
AddChild(fToolBarView);
|
||||||
|
|
||||||
|
if (fShowToolBar)
|
||||||
|
viewFrame.top = fToolBarView->Frame().bottom + 1;
|
||||||
|
else
|
||||||
|
fToolBarView->Hide();
|
||||||
|
|
||||||
|
viewFrame.bottom = Bounds().bottom;
|
||||||
viewFrame.right -= B_V_SCROLL_BAR_WIDTH;
|
viewFrame.right -= B_V_SCROLL_BAR_WIDTH;
|
||||||
viewFrame.bottom -= B_H_SCROLL_BAR_HEIGHT;
|
viewFrame.bottom -= B_H_SCROLL_BAR_HEIGHT;
|
||||||
|
|
||||||
@@ -154,9 +202,9 @@ ShowImageWindow::ShowImageWindow(BRect frame, const entry_ref& ref,
|
|||||||
B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE | B_PULSE_NEEDED
|
B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE | B_PULSE_NEEDED
|
||||||
| B_FRAME_EVENTS);
|
| B_FRAME_EVENTS);
|
||||||
// wrap a scroll view around the view
|
// wrap a scroll view around the view
|
||||||
BScrollView* scrollView = new BScrollView("image_scroller", fImageView,
|
fScrollView = new BScrollView("image_scroller", fImageView,
|
||||||
B_FOLLOW_ALL, 0, false, false, B_PLAIN_BORDER);
|
B_FOLLOW_ALL, 0, false, false, B_PLAIN_BORDER);
|
||||||
AddChild(scrollView);
|
AddChild(fScrollView);
|
||||||
|
|
||||||
const int32 kstatusWidth = 190;
|
const int32 kstatusWidth = 190;
|
||||||
BRect rect;
|
BRect rect;
|
||||||
@@ -181,9 +229,9 @@ ShowImageWindow::ShowImageWindow(BRect frame, const entry_ref& ref,
|
|||||||
rect.left = viewFrame.right + 1;
|
rect.left = viewFrame.right + 1;
|
||||||
rect.bottom = viewFrame.bottom + 1;
|
rect.bottom = viewFrame.bottom + 1;
|
||||||
rect.right += 1;
|
rect.right += 1;
|
||||||
BScrollBar* verticalScrollBar = new BScrollBar(rect, "vscroll", fImageView,
|
fVerticalScrollBar = new BScrollBar(rect, "vscroll", fImageView,
|
||||||
0, 150, B_VERTICAL);
|
0, 150, B_VERTICAL);
|
||||||
AddChild(verticalScrollBar);
|
AddChild(fVerticalScrollBar);
|
||||||
|
|
||||||
SetSizeLimits(250, 100000, 100, 100000);
|
SetSizeLimits(250, 100000, 100, 100000);
|
||||||
|
|
||||||
@@ -232,10 +280,6 @@ ShowImageWindow::BuildContextMenu(BMenu* menu)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#undef B_TRANSLATE_CONTEXT
|
|
||||||
#define B_TRANSLATE_CONTEXT "Menus"
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ShowImageWindow::_BuildViewMenu(BMenu* menu, bool popupMenu)
|
ShowImageWindow::_BuildViewMenu(BMenu* menu, bool popupMenu)
|
||||||
{
|
{
|
||||||
@@ -290,6 +334,13 @@ ShowImageWindow::_BuildViewMenu(BMenu* menu, bool popupMenu)
|
|||||||
_MarkMenuItem(menu, MSG_SCALE_BILINEAR, fImageView->ScaleBilinear());
|
_MarkMenuItem(menu, MSG_SCALE_BILINEAR, fImageView->ScaleBilinear());
|
||||||
_MarkMenuItem(menu, kMsgStretchToWindow, fImageView->StretchesToBounds());
|
_MarkMenuItem(menu, kMsgStretchToWindow, fImageView->StretchesToBounds());
|
||||||
|
|
||||||
|
if (!popupMenu) {
|
||||||
|
_AddItemMenu(menu, B_TRANSLATE("Show tool bar"), kMsgToggleToolBar, 0,
|
||||||
|
0, this);
|
||||||
|
_MarkMenuItem(menu, kMsgToggleToolBar,
|
||||||
|
!fToolBarView->IsHidden(fToolBarView));
|
||||||
|
}
|
||||||
|
|
||||||
if (popupMenu) {
|
if (popupMenu) {
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
_AddItemMenu(menu, B_TRANSLATE("Use as background" B_UTF8_ELLIPSIS),
|
_AddItemMenu(menu, B_TRANSLATE("Use as background" B_UTF8_ELLIPSIS),
|
||||||
@@ -353,7 +404,7 @@ ShowImageWindow::_AddMenus(BMenuBar* bar)
|
|||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
_AddItemMenu(menu, B_TRANSLATE("Copy"), B_COPY, 'C', 0, this, false);
|
_AddItemMenu(menu, B_TRANSLATE("Copy"), B_COPY, 'C', 0, this, false);
|
||||||
menu->AddSeparatorItem();
|
menu->AddSeparatorItem();
|
||||||
_AddItemMenu(menu, B_TRANSLATE("Selection Mode"), MSG_SELECTION_MODE, 0, 0,
|
_AddItemMenu(menu, B_TRANSLATE("Selection mode"), MSG_SELECTION_MODE, 0, 0,
|
||||||
this);
|
this);
|
||||||
_AddItemMenu(menu, B_TRANSLATE("Clear selection"),
|
_AddItemMenu(menu, B_TRANSLATE("Clear selection"),
|
||||||
MSG_CLEAR_SELECT, 0, 0, this, false);
|
MSG_CLEAR_SELECT, 0, 0, this, false);
|
||||||
@@ -482,6 +533,7 @@ ShowImageWindow::_ToggleMenuItem(uint32 what)
|
|||||||
marked = !item->IsMarked();
|
marked = !item->IsMarked();
|
||||||
item->SetMarked(marked);
|
item->SetMarked(marked);
|
||||||
}
|
}
|
||||||
|
fToolBarView->SetActionPressed(what, marked);
|
||||||
return marked;
|
return marked;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -492,6 +544,7 @@ ShowImageWindow::_EnableMenuItem(BMenu* menu, uint32 what, bool enable)
|
|||||||
BMenuItem* item = menu->FindItem(what);
|
BMenuItem* item = menu->FindItem(what);
|
||||||
if (item && item->IsEnabled() != enable)
|
if (item && item->IsEnabled() != enable)
|
||||||
item->SetEnabled(enable);
|
item->SetEnabled(enable);
|
||||||
|
fToolBarView->SetActionEnabled(what, enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -501,6 +554,7 @@ ShowImageWindow::_MarkMenuItem(BMenu* menu, uint32 what, bool marked)
|
|||||||
BMenuItem* item = menu->FindItem(what);
|
BMenuItem* item = menu->FindItem(what);
|
||||||
if (item && item->IsMarked() != marked)
|
if (item && item->IsMarked() != marked)
|
||||||
item->SetMarked(marked);
|
item->SetMarked(marked);
|
||||||
|
fToolBarView->SetActionPressed(what, marked);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -712,8 +766,13 @@ ShowImageWindow::MessageReceived(BMessage* message)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case MSG_SELECTION_MODE:
|
case MSG_SELECTION_MODE:
|
||||||
fImageView->SetSelectionMode(_ToggleMenuItem(MSG_SELECTION_MODE));
|
{
|
||||||
|
bool selectionMode = _ToggleMenuItem(MSG_SELECTION_MODE);
|
||||||
|
fImageView->SetSelectionMode(selectionMode);
|
||||||
|
if (!selectionMode)
|
||||||
|
fImageView->ClearSelection();
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case MSG_CLEAR_SELECT:
|
case MSG_CLEAR_SELECT:
|
||||||
fImageView->ClearSelection();
|
fImageView->ClearSelection();
|
||||||
@@ -860,7 +919,8 @@ ShowImageWindow::MessageReceived(BMessage* message)
|
|||||||
_ToggleFullScreen();
|
_ToggleFullScreen();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MSG_SHOW_CAPTION: {
|
case MSG_SHOW_CAPTION:
|
||||||
|
{
|
||||||
fShowCaption = _ToggleMenuItem(message->what);
|
fShowCaption = _ToggleMenuItem(message->what);
|
||||||
ShowImageSettings* settings = my_app->Settings();
|
ShowImageSettings* settings = my_app->Settings();
|
||||||
|
|
||||||
@@ -924,6 +984,20 @@ ShowImageWindow::MessageReceived(BMessage* message)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case kMsgToggleToolBar:
|
||||||
|
{
|
||||||
|
fShowToolBar = _ToggleMenuItem(message->what);
|
||||||
|
_SetToolBarVisible(fShowToolBar);
|
||||||
|
|
||||||
|
ShowImageSettings* settings = my_app->Settings();
|
||||||
|
|
||||||
|
if (settings->Lock()) {
|
||||||
|
settings->SetBool("ShowToolBar", fShowToolBar);
|
||||||
|
settings->Unlock();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
BWindow::MessageReceived(message);
|
BWindow::MessageReceived(message);
|
||||||
break;
|
break;
|
||||||
@@ -1140,6 +1214,9 @@ ShowImageWindow::_ToggleFullScreen()
|
|||||||
SetFlags(Flags() & ~(B_NOT_RESIZABLE | B_NOT_MOVABLE));
|
SetFlags(Flags() & ~(B_NOT_RESIZABLE | B_NOT_MOVABLE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fToolBarView->SetActionPressed(MSG_FULL_SCREEN, fFullScreen);
|
||||||
|
_SetToolBarVisible(!fFullScreen && fShowToolBar);
|
||||||
|
|
||||||
MoveTo(frame.left, frame.top);
|
MoveTo(frame.left, frame.top);
|
||||||
ResizeTo(frame.Width(), frame.Height());
|
ResizeTo(frame.Width(), frame.Height());
|
||||||
|
|
||||||
@@ -1170,6 +1247,8 @@ ShowImageWindow::_ApplySettings()
|
|||||||
fPrintOptions.SetHeight(
|
fPrintOptions.SetHeight(
|
||||||
settings->GetFloat("PO:Height", fPrintOptions.Height()));
|
settings->GetFloat("PO:Height", fPrintOptions.Height()));
|
||||||
|
|
||||||
|
fShowToolBar = settings->GetBool("ShowToolBar", fShowToolBar);
|
||||||
|
|
||||||
settings->Unlock();
|
settings->Unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1356,6 +1435,28 @@ ShowImageWindow::_UpdateRatingMenu()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ShowImageWindow::_SetToolBarVisible(bool visible)
|
||||||
|
{
|
||||||
|
if (visible == !fToolBarView->IsHidden())
|
||||||
|
return;
|
||||||
|
|
||||||
|
float diff = fToolBarView->Bounds().Height() + 1;
|
||||||
|
if (!visible) {
|
||||||
|
diff = -diff;
|
||||||
|
fToolBarView->Hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
fScrollView->ResizeBy(0, -diff);
|
||||||
|
fScrollView->MoveBy(0, diff);
|
||||||
|
fVerticalScrollBar->ResizeBy(0, -diff);
|
||||||
|
fVerticalScrollBar->MoveBy(0, diff);
|
||||||
|
|
||||||
|
if (visible)
|
||||||
|
fToolBarView->Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ShowImageWindow::QuitRequested()
|
ShowImageWindow::QuitRequested()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -22,9 +22,12 @@ class BMenu;
|
|||||||
class BMenuBar;
|
class BMenuBar;
|
||||||
class BMenuItem;
|
class BMenuItem;
|
||||||
class BMessageRunner;
|
class BMessageRunner;
|
||||||
|
class BScrollBar;
|
||||||
|
class BScrollView;
|
||||||
class ProgressWindow;
|
class ProgressWindow;
|
||||||
class ShowImageView;
|
class ShowImageView;
|
||||||
class ShowImageStatusView;
|
class ShowImageStatusView;
|
||||||
|
class ToolBarView;
|
||||||
|
|
||||||
|
|
||||||
// public message constants
|
// public message constants
|
||||||
@@ -98,6 +101,8 @@ private:
|
|||||||
|
|
||||||
void _UpdateRatingMenu();
|
void _UpdateRatingMenu();
|
||||||
|
|
||||||
|
void _SetToolBarVisible(bool visible);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ImageFileNavigator fNavigator;
|
ImageFileNavigator fNavigator;
|
||||||
BFilePanel* fSavePanel;
|
BFilePanel* fSavePanel;
|
||||||
@@ -106,12 +111,16 @@ private:
|
|||||||
BMenu* fGoToPageMenu;
|
BMenu* fGoToPageMenu;
|
||||||
BMenu* fSlideShowDelayMenu;
|
BMenu* fSlideShowDelayMenu;
|
||||||
BMenu* fRatingMenu;
|
BMenu* fRatingMenu;
|
||||||
|
ToolBarView* fToolBarView;
|
||||||
|
BScrollView* fScrollView;
|
||||||
|
BScrollBar* fVerticalScrollBar;
|
||||||
ShowImageView* fImageView;
|
ShowImageView* fImageView;
|
||||||
ShowImageStatusView* fStatusView;
|
ShowImageStatusView* fStatusView;
|
||||||
ProgressWindow* fProgressWindow;
|
ProgressWindow* fProgressWindow;
|
||||||
bool fModified;
|
bool fModified;
|
||||||
bool fFullScreen;
|
bool fFullScreen;
|
||||||
bool fShowCaption;
|
bool fShowCaption;
|
||||||
|
bool fShowToolBar;
|
||||||
BRect fWindowFrame;
|
BRect fWindowFrame;
|
||||||
BMessage* fPrintSettings;
|
BMessage* fPrintSettings;
|
||||||
PrintOptions fPrintOptions;
|
PrintOptions fPrintOptions;
|
||||||
|
|||||||
@@ -0,0 +1,104 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2011 Stephan Aßmus <superstippi@gmx.de>
|
||||||
|
* All rights reserved. Distributed under the terms of the MIT license.
|
||||||
|
*/
|
||||||
|
#include "ToolBarView.h"
|
||||||
|
|
||||||
|
#include <ControlLook.h>
|
||||||
|
#include <IconButton.h>
|
||||||
|
#include <Message.h>
|
||||||
|
#include <SeparatorView.h>
|
||||||
|
#include <SpaceLayoutItem.h>
|
||||||
|
|
||||||
|
|
||||||
|
ToolBarView::ToolBarView(BRect frame)
|
||||||
|
:
|
||||||
|
BGroupView(B_HORIZONTAL)
|
||||||
|
{
|
||||||
|
float inset = ceilf(be_control_look->DefaultItemSpacing() / 2);
|
||||||
|
GroupLayout()->SetInsets(inset, inset, inset, inset);
|
||||||
|
|
||||||
|
GroupLayout()->AddItem(BSpaceLayoutItem::CreateGlue());
|
||||||
|
|
||||||
|
MoveTo(frame.LeftTop());
|
||||||
|
ResizeTo(frame.Width(), frame.Height());
|
||||||
|
SetResizingMode(B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ToolBarView::~ToolBarView()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ToolBarView::AddAction(uint32 command, BHandler* target, const BBitmap* icon,
|
||||||
|
const char* toolTipText)
|
||||||
|
{
|
||||||
|
AddAction(new BMessage(command), target, icon, toolTipText);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ToolBarView::AddAction(BMessage* message, BHandler* target, const BBitmap* icon,
|
||||||
|
const char* toolTipText)
|
||||||
|
{
|
||||||
|
BIconButton* button = new BIconButton(NULL, 0, NULL, message, target);
|
||||||
|
button->SetIcon(icon);
|
||||||
|
if (toolTipText != NULL)
|
||||||
|
button->SetToolTip(toolTipText);
|
||||||
|
_AddView(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ToolBarView::AddSeparator()
|
||||||
|
{
|
||||||
|
_AddView(new BSeparatorView(B_VERTICAL, B_PLAIN_BORDER));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ToolBarView::SetActionEnabled(uint32 command, bool enabled)
|
||||||
|
{
|
||||||
|
if (BIconButton* button = _FindIconButton(command))
|
||||||
|
button->SetEnabled(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ToolBarView::SetActionPressed(uint32 command, bool pressed)
|
||||||
|
{
|
||||||
|
if (BIconButton* button = _FindIconButton(command))
|
||||||
|
button->SetPressed(pressed);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ToolBarView::_AddView(BView* view)
|
||||||
|
{
|
||||||
|
// Add before the space layout item at the end
|
||||||
|
GroupLayout()->AddView(GroupLayout()->CountItems() - 1, view);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BIconButton*
|
||||||
|
ToolBarView::_FindIconButton(uint32 command) const
|
||||||
|
{
|
||||||
|
for (int32 i = 0; BView* view = ChildAt(i); i++) {
|
||||||
|
BIconButton* button = dynamic_cast<BIconButton*>(view);
|
||||||
|
if (button == NULL)
|
||||||
|
continue;
|
||||||
|
BMessage* message = button->Message();
|
||||||
|
if (message == NULL)
|
||||||
|
continue;
|
||||||
|
if (message->what == command) {
|
||||||
|
return button;
|
||||||
|
// Assumes there is only one button with this message...
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2011 Stephan Aßmus <superstippi@gmx.de>
|
||||||
|
* All rights reserved. Distributed under the terms of the MIT license.
|
||||||
|
*/
|
||||||
|
#ifndef TOOL_BAR_VIEW_H
|
||||||
|
#define TOOL_BAR_VIEW_H
|
||||||
|
|
||||||
|
#include <GroupView.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace BPrivate {
|
||||||
|
class BIconButton;
|
||||||
|
}
|
||||||
|
|
||||||
|
using BPrivate::BIconButton;
|
||||||
|
|
||||||
|
|
||||||
|
class ToolBarView : public BGroupView {
|
||||||
|
public:
|
||||||
|
ToolBarView(BRect frame);
|
||||||
|
virtual ~ToolBarView();
|
||||||
|
|
||||||
|
void AddAction(uint32 command, BHandler* target,
|
||||||
|
const BBitmap* icon,
|
||||||
|
const char* toolTipText = NULL);
|
||||||
|
void AddAction(BMessage* message, BHandler* target,
|
||||||
|
const BBitmap* icon,
|
||||||
|
const char* toolTipText = NULL);
|
||||||
|
void AddSeparator();
|
||||||
|
|
||||||
|
void SetActionEnabled(uint32 command, bool enabled);
|
||||||
|
void SetActionPressed(uint32 command, bool pressed);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void _AddView(BView* view);
|
||||||
|
BIconButton* _FindIconButton(uint32 command) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // TOOL_BAR_VIEW_H
|
||||||
Reference in New Issue
Block a user