1 module calcface; 2 3 import bindbc.cocoa; 4 5 import calcbrain; 6 7 struct CalcFace 8 { 9 NSWindow parent; 10 alias parent this; 11 mixin NSObjectTemplate!(NSWindow, "NSWindow"); 12 13 NSButton[18] buttons; 14 NSTextField display; 15 16 void build(){ 17 display = NSTextField.alloc; display.initWithFrame(NSMakeRect (40, 84, 182, 24)); 18 display.setEditable(NO); 19 display.setBezeled(YES); 20 display.setDrawsBackground(YES); 21 display.setAlignment(right); 22 display.setSelectable(NO); 23 24 buttons[0] = NSButton.alloc; buttons[0].initWithFrame(NSMakeRect (77, 3, 34, 24)); 25 buttons[0].setButtonType(NSToggleButton); 26 buttons[0].setTitle(NSString.stringWith("0"w)); 27 buttons[0].setTag(0); 28 buttons[0].setState(NO); 29 buttons[0].setKeyEquivalent(NSString.stringWith("0"w)); 30 31 buttons[1] = NSButton.alloc; buttons[1].initWithFrame(NSMakeRect (114, 3, 34, 24)); 32 buttons[1].setButtonType(NSToggleButton); 33 buttons[1].setTitle(NSString.stringWith("1"w)); 34 buttons[1].setTag(1); 35 buttons[1].setState(NO); 36 buttons[1].setKeyEquivalent(NSString.stringWith("1"w)); 37 38 buttons[2] = NSButton.alloc; buttons[2].initWithFrame(NSMakeRect (151, 3, 34, 24)); 39 buttons[2].setButtonType(NSToggleButton); 40 buttons[2].setTitle(NSString.stringWith("2"w)); 41 buttons[2].setTag(2); 42 buttons[2].setState(NO); 43 buttons[2].setKeyEquivalent(NSString.stringWith("2"w)); 44 45 buttons[3] = NSButton.alloc; buttons[3].initWithFrame(NSMakeRect (188, 3, 34, 24)); 46 buttons[3].setButtonType(NSToggleButton); 47 buttons[3].setTitle(NSString.stringWith("3"w)); 48 buttons[3].setTag(3); 49 buttons[3].setState(NO); 50 buttons[3].setKeyEquivalent(NSString.stringWith("3"w)); 51 52 buttons[4] = NSButton.alloc; buttons[4].initWithFrame(NSMakeRect (114, 30, 34, 24)); 53 buttons[4].setButtonType(NSToggleButton); 54 buttons[4].setTitle(NSString.stringWith("4"w)); 55 buttons[4].setTag(4); 56 buttons[4].setState(NO); 57 buttons[4].setKeyEquivalent(NSString.stringWith("4"w)); 58 59 buttons[5] = NSButton.alloc; buttons[5].initWithFrame(NSMakeRect (151, 30, 34, 24)); 60 buttons[5].setButtonType(NSToggleButton); 61 buttons[5].setTitle(NSString.stringWith("5"w)); 62 buttons[5].setTag(5); 63 buttons[5].setState(NO); 64 buttons[5].setKeyEquivalent(NSString.stringWith("5"w)); 65 66 buttons[6] = NSButton.alloc; buttons[6].initWithFrame(NSMakeRect (188, 30, 34, 24)); 67 buttons[6].setButtonType(NSToggleButton); 68 buttons[6].setTitle(NSString.stringWith("6"w)); 69 buttons[6].setTag(6); 70 buttons[6].setState(NO); 71 buttons[6].setKeyEquivalent(NSString.stringWith("6"w)); 72 73 buttons[7] = NSButton.alloc; buttons[7].initWithFrame(NSMakeRect (114, 57, 34, 24)); 74 buttons[7].setButtonType(NSToggleButton); 75 buttons[7].setTitle(NSString.stringWith("7"w)); 76 buttons[7].setTag(7); 77 buttons[7].setState(NO); 78 buttons[7].setKeyEquivalent(NSString.stringWith("7"w)); 79 80 buttons[8] = NSButton.alloc; buttons[8].initWithFrame(NSMakeRect (151, 57, 34, 24)); 81 buttons[8].setButtonType(NSToggleButton); 82 buttons[8].setTitle(NSString.stringWith("8"w)); 83 buttons[8].setTag(8); 84 buttons[8].setState(NO); 85 buttons[8].setKeyEquivalent(NSString.stringWith("8"w)); 86 87 buttons[9] = NSButton.alloc; buttons[9].initWithFrame(NSMakeRect (188, 57, 34, 24)); 88 buttons[9].setButtonType(NSToggleButton); 89 buttons[9].setTitle(NSString.stringWith("9"w)); 90 buttons[9].setTag(9); 91 buttons[9].setState(NO); 92 buttons[9].setKeyEquivalent(NSString.stringWith("9"w)); 93 94 foreach (i; 0..10){ 95 buttons[i].setAction(&calcbrain.digit); 96 } 97 98 buttons[10] = NSButton.alloc; buttons[10].initWithFrame(NSMakeRect (77, 30, 34, 24)); 99 buttons[10].setButtonType(NSToggleButton); 100 buttons[10].setTitle(NSString.stringWith("."w)); 101 buttons[10].setState(NO); 102 buttons[10].setKeyEquivalent(NSString.stringWith("."w)); 103 buttons[10].setAction(&calcbrain.decimalSeparator); 104 105 buttons[11] = NSButton.alloc; buttons[11].initWithFrame(NSMakeRect (77, 57, 34, 24)); 106 buttons[11].setButtonType(NSToggleButton); 107 buttons[11].setTitle(NSString.stringWith("SQR"w)); 108 buttons[11].setState(NO); 109 buttons[11].setKeyEquivalent(NSString.stringWith("S"w)); 110 buttons[11].setAction(&calcbrain.squareRoot); 111 112 buttons[12] = NSButton.alloc; buttons[12].initWithFrame(NSMakeRect (3, 30, 34, 24)); 113 buttons[12].setButtonType(NSToggleButton); 114 buttons[12].setTitle(NSString.stringWith("+"w)); 115 buttons[12].setTag(addition); 116 buttons[12].setState(NO); 117 buttons[12].setKeyEquivalent(NSString.stringWith("+"w)); 118 buttons[12].setAction(&calcbrain.operation); 119 120 buttons[13] = NSButton.alloc; buttons[13].initWithFrame(NSMakeRect (40, 30, 34, 24)); 121 buttons[13].setButtonType(NSToggleButton); 122 buttons[13].setTitle(NSString.stringWith("-"w)); 123 buttons[13].setTag(subtraction); 124 buttons[13].setState(NO); 125 buttons[13].setKeyEquivalent(NSString.stringWith("-"w)); 126 buttons[13].setAction(&calcbrain.operation); 127 128 buttons[14] = NSButton.alloc; buttons[14].initWithFrame(NSMakeRect (3, 57, 34, 24)); 129 buttons[14].setButtonType(NSToggleButton); 130 buttons[14].setTitle(NSString.stringWith("*"w)); 131 buttons[14].setTag(multiplication); 132 buttons[14].setState(NO); 133 buttons[14].setKeyEquivalent(NSString.stringWith("*"w)); 134 buttons[14].setAction(&calcbrain.operation); 135 136 buttons[15] = NSButton.alloc; buttons[15].initWithFrame(NSMakeRect (40, 57, 34, 24)); 137 buttons[15].setButtonType(NSToggleButton); 138 buttons[15].setTitle(NSString.stringWith("/"w)); 139 buttons[15].setTag(division); 140 buttons[15].setState(NO); 141 buttons[15].setKeyEquivalent(NSString.stringWith("/"w)); 142 buttons[15].setAction(&calcbrain.operation); 143 144 buttons[16] = NSButton.alloc; buttons[16].initWithFrame(NSMakeRect (3, 84, 34, 24)); 145 buttons[16].setButtonType(NSToggleButton); 146 buttons[16].setTitle(NSString.stringWith("CL"w)); 147 buttons[16].setState(NO); 148 buttons[16].setKeyEquivalent(NSString.stringWith("C"w)); 149 buttons[16].setAction(&calcbrain.clear); 150 151 buttons[17] = NSButton.alloc; buttons[17].initWithFrame(NSMakeRect (3, 3, 34, 24)); 152 buttons[17].setButtonType(NSToggleButton); 153 buttons[17].setTitle(NSString.stringWith("="w)); 154 buttons[17].setState(NO); 155 buttons[17].setKeyEquivalent(NSString.stringWith("="w)); 156 buttons[17].setAction(&calcbrain.equal); 157 158 this.makeFirstResponder(NSResponder(buttons[17]._id)); 159 160 foreach (ref but; buttons) 161 { 162 this.contentView().addSubview(but.contentView()); 163 but.release; 164 } 165 166 this.contentView().addSubview(display.contentView()); 167 display.release; 168 169 this.setTitle(NSString.stringWith("Calculator"w)); 170 171 this.center(); 172 173 calcbrain.setFace(this); 174 } 175 176 void setDisplayedNumber(double aNumber, BOOL displayDecimalSeparator, int fractionalDigits) 177 { 178 import std.format, std.conv; 179 if (displayDecimalSeparator) 180 { 181 display.setStringValue(NSString.stringWith(format(format!"%%#.%df"(fractionalDigits), aNumber).to!wstring)); 182 } 183 else // !displayDecimalSeparator 184 display.setStringValue(NSString.stringWith(format("%.0f", aNumber).to!wstring)); 185 186 } 187 188 void setError(){ 189 display.setStringValue(NSString.stringWith("Error"w)); 190 } 191 } 192 193 /* 194 void onClicked(id self, SEL sel, ...){ 195 import std.conv; 196 import std.stdio; 197 writefln("You clicked the button with title `%s`", NSButton(self).title.UTF8String.to!string); 198 } 199 */ 200 enum : NSInteger{ 201 none = 0, 202 addition = 1, 203 subtraction = 2, 204 multiplication = 3, 205 division = 4 206 }