duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

cocoa_progress_callback.h (1801B)


      1 // SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
      2 // SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
      3 
      4 #pragma once
      5 
      6 #include "common/progress_callback.h"
      7 
      8 #include <AppKit/AppKit.h>
      9 #include <Cocoa/Cocoa.h>
     10 
     11 #ifndef __OBJC__
     12 #error This file needs to be compiled with Objective C++.
     13 #endif
     14 
     15 #if __has_feature(objc_arc)
     16 #error ARC should not be enabled.
     17 #endif
     18 
     19 class CocoaProgressCallback final : public ProgressCallback
     20 {
     21 public:
     22   CocoaProgressCallback();
     23   ~CocoaProgressCallback();
     24 
     25   void PushState() override;
     26   void PopState() override;
     27 
     28   void SetCancellable(bool cancellable) override;
     29   void SetTitle(const std::string_view title) override;
     30   void SetStatusText(const std::string_view text) override;
     31   void SetProgressRange(u32 range) override;
     32   void SetProgressValue(u32 value) override;
     33 
     34   void DisplayError(const std::string_view message) override;
     35   void DisplayWarning(const std::string_view message) override;
     36   void DisplayInformation(const std::string_view message) override;
     37   void DisplayDebugMessage(const std::string_view message) override;
     38 
     39   void ModalError(const std::string_view message) override;
     40   bool ModalConfirmation(const std::string_view message) override;
     41   void ModalInformation(const std::string_view message) override;
     42   
     43 private:
     44   enum : int
     45   {
     46     WINDOW_WIDTH = 600,
     47     WINDOW_HEIGHT = 300,
     48     WINDOW_MARGIN = 20,
     49     SUBWINDOW_PADDING = 10,
     50     SUBWINDOW_WIDTH = WINDOW_WIDTH - WINDOW_MARGIN - WINDOW_MARGIN,
     51   };
     52 
     53   bool Create();
     54   void Destroy();
     55   void UpdateProgress();
     56   void AppendMessage(const std::string_view message);
     57 
     58   NSWindow* m_window = nil;
     59   NSView* m_view = nil;
     60   NSTextField* m_status = nil;
     61   NSProgressIndicator* m_progress = nil;
     62   NSScrollView* m_text_scroll = nil;
     63   NSTextView* m_text = nil;
     64 };