1 /* 2 * Copyright 2017 Julian Harnath <julian.harnath@rwth-aachen.de> 3 * Copyright 2020-2021 Andrew Lindesay <apl@lindesay.co.nz> 4 * All rights reserved. Distributed under the terms of the MIT license. 5 */ 6 7 8 #include "WorkStatusView.h" 9 10 #include <CardLayout.h> 11 #include <Catalog.h> 12 #include <LayoutBuilder.h> 13 #include <SeparatorView.h> 14 #include <StatusBar.h> 15 #include <StringFormat.h> 16 #include <StringView.h> 17 18 #include <stdio.h> 19 20 #include "BarberPole.h" 21 22 23 #undef B_TRANSLATION_CONTEXT 24 #define B_TRANSLATION_CONTEXT "WorkStatusView" 25 26 #define VIEW_INDEX_BARBER_POLE (int32) 0 27 #define VIEW_INDEX_PROGRESS_BAR (int32) 1 28 29 30 static const BSize kStatusBarSize = BSize(100,20); 31 32 33 WorkStatusView::WorkStatusView(const char* name) 34 : 35 BView(name, 0), 36 fProgressBar(new BStatusBar("progress bar")), 37 fBarberPole(new BarberPole("barber pole")), 38 fProgressLayout(new BCardLayout()), 39 fProgressView(new BView("progress view", 0)), 40 fStatusText(new BStringView("status text", NULL)) 41 { 42 fProgressView->SetLayout(fProgressLayout); 43 fProgressLayout->AddView(fBarberPole); 44 fProgressLayout->AddView(fProgressBar); 45 46 fBarberPole->SetExplicitSize(kStatusBarSize); 47 fProgressBar->SetMaxValue(1.0f); 48 fProgressBar->SetBarHeight(kStatusBarSize.Height()); 49 fProgressBar->SetExplicitSize(kStatusBarSize); 50 51 fStatusText->SetFontSize(be_plain_font->Size() * 0.9f); 52 53 BLayoutBuilder::Group<>(this, B_VERTICAL, 0) 54 .Add(new BSeparatorView()) 55 .AddGroup(B_HORIZONTAL) 56 .SetInsets(5, 2, 5, 2) 57 .Add(fProgressLayout, 0.2f) 58 .Add(fStatusText) 59 .AddGlue() 60 .End() 61 ; 62 } 63 64 65 WorkStatusView::~WorkStatusView() 66 { 67 } 68 69 70 void 71 WorkStatusView::SetBusy(const BString& text) 72 { 73 SetText(text); 74 SetBusy(); 75 } 76 77 78 void 79 WorkStatusView::SetBusy() 80 { 81 fBarberPole->Start(); 82 if (fProgressLayout->VisibleIndex() != VIEW_INDEX_BARBER_POLE) 83 fProgressLayout->SetVisibleItem(VIEW_INDEX_BARBER_POLE); 84 } 85 86 87 void 88 WorkStatusView::SetIdle() 89 { 90 fBarberPole->Stop(); 91 fProgressLayout->SetVisibleItem(VIEW_INDEX_BARBER_POLE); 92 SetText(NULL); 93 } 94 95 96 void 97 WorkStatusView::SetProgress(float value) 98 { 99 fProgressBar->SetTo(value); 100 if (fProgressLayout->VisibleIndex() != VIEW_INDEX_PROGRESS_BAR) 101 fProgressLayout->SetVisibleItem(VIEW_INDEX_PROGRESS_BAR); 102 } 103 104 105 void 106 WorkStatusView::SetText(const BString& text) 107 { 108 fStatusText->SetText(text); 109 } 110