Fix invalid implicit conversion from wxString to std::string
[SCSI2SD-V6.git] / src / scsi2sd-util6 / TargetPanel.hh
1 //      Copyright (C) 2014 Michael McMaster <michael@codesrc.com>
2 //
3 //      This file is part of SCSI2SD.
4 //
5 //      SCSI2SD is free software: you can redistribute it and/or modify
6 //      it under the terms of the GNU General Public License as published by
7 //      the Free Software Foundation, either version 3 of the License, or
8 //      (at your option) any later version.
9 //
10 //      SCSI2SD is distributed in the hope that it will be useful,
11 //      but WITHOUT ANY WARRANTY; without even the implied warranty of
12 //      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 //      GNU General Public License for more details.
14 //
15 //      You should have received a copy of the GNU General Public License
16 //      along with SCSI2SD.  If not, see <http://www.gnu.org/licenses/>.
17 #ifndef TargetPanel_hh
18 #define TargetPanel_hh
19
20 #include "scsi2sd.h"
21
22
23 #include <wx/wx.h>
24 #include <wx/valnum.h>
25
26 #include <wx/checkbox.h>
27 #include <wx/choice.h>
28 #include <wx/spinctrl.h>
29 #include <wx/textctrl.h>
30
31 #if __cplusplus >= 201103L
32 #include <cstdint>
33 #else
34 #include <stdint.h>
35 #endif
36
37 #include <utility>
38
39 namespace SCSI2SD
40 {
41
42 // A parent class needs to call evaluate on all SCSI targets to sort
43 // out conflicting SCSI IDs and overlapping memory card use.
44 // Our custom event is fired whenever a new evaluation is required.
45 wxDECLARE_EVENT(ConfigChangedEvent, wxCommandEvent);
46
47 class TargetPanel : public wxPanel
48 {
49 public:
50         TargetPanel(wxWindow* parent, const S2S_TargetCfg& initialConfig);
51
52         S2S_TargetCfg getConfig() const;
53         void setConfig(const S2S_TargetCfg& config);
54
55         bool evaluate(); // Return true if current config is valid.
56
57         bool isEnabled() const;
58         uint8_t getSCSIId() const;
59         std::pair<uint32_t, uint64_t> getSDSectorRange() const;
60
61         // Error messages set by external validation
62         void setDuplicateID(bool duplicate);
63         void setSDSectorOverlap(bool overlap);
64         void setAutoStartSector(uint32_t start);
65
66 private:
67         template<typename EvtType> void onInput(EvtType& event);
68         void onSizeInput(wxCommandEvent& event);
69         void evaluateSize();
70
71         std::pair<uint32_t, bool> convertUnitsToSectors() const;
72
73         void initConfig();
74
75         enum
76         {
77                 ID_enableCtrl = wxID_HIGHEST + 1,
78                 ID_scsiIdCtrl,
79                 ID_deviceTypeCtrl,
80                 ID_startSDSectorCtrl,
81                 ID_autoStartSectorCtrl,
82                 ID_sectorSizeCtrl,
83                 ID_numSectorCtrl,
84                 ID_sizeCtrl,
85                 ID_sizeUnitCtrl,
86                 ID_vendorCtrl,
87                 ID_productCtrl,
88                 ID_revisionCtrl,
89                 ID_serialCtrl
90         };
91
92         enum // Must match the order given to the mySizeUnitCtrl ctor.
93         {
94                 UNIT_KB,
95                 UNIT_MB,
96                 UNIT_GB
97         };
98
99         wxWindow* myParent;
100         wxWindow* myChangedEventHandler;
101
102         S2S_TargetCfg myConfig;
103         uint32_t myAutoStartSector;
104
105         wxCheckBox* myEnableCtrl;
106         wxSpinCtrl* myScsiIdCtrl;
107         wxStaticText* myScsiIdMsg;
108
109         wxChoice* myDeviceTypeCtrl;
110
111         wxIntegerValidator<uint32_t>* myStartSDSectorValidator;
112         wxTextCtrl* myStartSDSectorCtrl;
113         wxCheckBox* myAutoStartSectorCtrl;
114         wxStaticText* myStartSDSectorMsg;
115
116         wxIntegerValidator<uint16_t>* mySectorSizeValidator;
117         wxTextCtrl* mySectorSizeCtrl;
118         wxStaticText* mySectorSizeMsg;
119
120         wxIntegerValidator<uint32_t>* myNumSectorValidator;
121         wxTextCtrl* myNumSectorCtrl;
122         wxStaticText* myNumSectorMsg;
123
124         wxFloatingPointValidator<float>* mySizeValidator;
125         wxTextCtrl* mySizeCtrl;
126         wxChoice* mySizeUnitCtrl;
127
128         wxTextCtrl* myVendorCtrl;
129         wxStaticText* myVendorMsg;
130         wxTextCtrl* myProductCtrl;
131         wxStaticText* myProductMsg;
132         wxTextCtrl* myRevisionCtrl;
133         wxStaticText* myRevisionMsg;
134         wxTextCtrl* mySerialCtrl;
135         wxStaticText* mySerialMsg;
136 };
137
138 } // namespace SCSI2SD
139 #endif