# CutBox.app

## Coverage Report

#### Created: 2024-03-12 03:40

    .../Source/Components/DialogFactory.swift

    Line

    Count

    Source (jump to first uncovered line)

    1

    //

    2

    //  ConfirmationDialog.swift

    3

    //  CutBox

    4

    //

    5

    //  Created by Jason Milkins on 15/4/18.

    6

    //  Copyright © 2018-2023 ocodo. All rights reserved.

    7

    //

    8

    9

    import Cocoa

    10

    11

    enum SuppressibleDialog: String, Equatable, CaseIterable {

    12

        case clearHistoryActionClicked

    13

        case destructiveLimitChangeWarning

    14

        case clearHistoryWarning

    15

    16

    14

        var defaultSuppressionKey: String {

    17

    14

            return "\(self)_CutBoxSuppressed"

    18

    14

        }

    19

    20

    7

        var defaultChoiceKey: String {

    21

    7

            return "\(defaultSuppressionKey)Choice"

    22

    7

        }

    23

    24

    2

        static var all: [SuppressibleDialog] {

    25

    2

            return Self.allCases

    26

    2

        }

    27

    }

    28

    29

    class DialogAlert: NSAlert {}

    30

    31

    class DialogFactory {

    32

        static var testing: Bool = false

    33

        static var testResponse: Bool = false

    34

        static var madeDialog: String = ""

    35

    36

        private func makeDialog(messageText: String,

    37

                                informativeText: String,

    38

                                ok: String,

    39

                                cancel: String,

    40

    8

                                alert: DialogAlert = DialogAlert()) -> DialogAlert {

    41

    8

            if Self.testing { Self.madeDialog = messageText }

    42

    8

            alert.messageText = messageText

    43

    8

            alert.informativeText = informativeText

    44

    8

            alert.addButton(withTitle: ok)

    45

    8

            alert.addButton(withTitle: cancel)

    46

    8

            return alert

    47

    8

        }

    48

    49

        func suppressibleConfirmationDialog(messageText: String,

    50

                                            informativeText: String,

    51

                                            dialogName: SuppressibleDialog,

    52

                                            ok: String = "ok".l7n,

    53

                                            cancel: String = "cancel".l7n,

    54

                                            defaults: UserDefaults = UserDefaults.standard,

    55

    9

                                            alert: DialogAlert = DialogAlert()) -> Bool {

    56

    9

    57

    9

            let suppressionKey = "\(dialogName)_CutBoxSuppressed"

    58

    9

            let suppressionChoiceKey = "\(dialogName)_CutBoxSuppressedChoice"

    59

    9

    60

    9

            if defaults.bool(forKey: suppressionKey) {

    61

    2

                return defaults.bool(forKey: suppressionChoiceKey)

    62

    7

            }

    63

    7

    64

    7

            let alert: DialogAlert = makeDialog(messageText: messageText,

    65

    7

                                                informativeText: informativeText,

    66

    7

                                                ok: ok,

    67

    7

                                                cancel: cancel,

    68

    7

                                                alert: alert)

    69

    7

    70

    7

            alert.showsSuppressionButton = true

    71

    7

    72

    7

            let alertResponse = Self.testing ? Self.testResponse : alert.runModal() == .alertFirstButtonReturn

    73

    7

    74

    7

            if alert.suppressionButton?.state == .on {

    75

    2

                defaults.set(true, forKey: suppressionKey)

    76

    2

                defaults.set(alertResponse, forKey: suppressionChoiceKey)

    77

    7

            }

    78

    7

    79

    7

            return alertResponse

    80

    7

        }

    81

    82

        func confirmationDialog(messageText: String,

    83

                                informativeText: String,

    84

                                ok: String = "ok".l7n,

    85

    1

                                cancel: String = "cancel".l7n) -> Bool {

    86

    1

    87

    1

            let alert = makeDialog(messageText: messageText,

    88

    1

                                   informativeText: informativeText,

    89

    1

                                   ok: ok, cancel: cancel)

    90

    1

    91

    1

            let alertResponse = Self.testing ? Self.testResponse : alert.runModal() == .alertFirstButtonReturn

    92

    1

    93

    1

            return alertResponse

    94

    1

        }

    95

    }