Changeset 13
- Timestamp:
- 11/25/06 20:38:14 (2 years ago)
- Files:
-
- trunk/luigi/adaptor/base.d (modified) (1 diff)
- trunk/luigi/adaptor/glfw.d (modified) (2 diffs)
- trunk/luigi/example1.d (modified) (2 diffs)
- trunk/luigi/gui.d (modified) (3 diffs)
- trunk/luigi/signalobj.d (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/luigi/adaptor/base.d
r11 r13 122 122 123 123 // Implementation of InputAdaptor 124 void addKeyCallback(KeyEventFn cb) {_lsig.key. fconnect(cb);}125 void addMouseButtonCallback(MouseButtonEventFn cb) {_lsig.mouseButton. fconnect(cb);}126 void addMouseMoveCallback(MouseMoveEventFn cb) {_lsig.mouseMove. fconnect(cb);}127 void addMouseWheelCallback(MouseWheelEventFn cb) {_lsig.mouseWheel. fconnect(cb);}128 void addWindowSizeCallback(WindowSizeEventFn cb) {_lsig.windowSize. fconnect(cb);}129 void addWindowCloseCallback(WindowCloseEventFn cb) {_lsig.windowClose. fconnect(cb);}124 void addKeyCallback(KeyEventFn cb) {_lsig.key.connect(cb);} 125 void addMouseButtonCallback(MouseButtonEventFn cb) {_lsig.mouseButton.connect(cb);} 126 void addMouseMoveCallback(MouseMoveEventFn cb) {_lsig.mouseMove.connect(cb);} 127 void addMouseWheelCallback(MouseWheelEventFn cb) {_lsig.mouseWheel.connect(cb);} 128 void addWindowSizeCallback(WindowSizeEventFn cb) {_lsig.windowSize.connect(cb);} 129 void addWindowCloseCallback(WindowCloseEventFn cb) {_lsig.windowClose.connect(cb);} 130 130 131 131 // And again for delegates... 132 void addKeyCallback(KeyEventDg cb) {_lsig.key. fconnect(cb);}133 void addMouseButtonCallback(MouseButtonEventDg cb) {_lsig.mouseButton. fconnect(cb);}134 void addMouseMoveCallback(MouseMoveEventDg cb) {_lsig.mouseMove. fconnect(cb);}135 void addMouseWheelCallback(MouseWheelEventDg cb) {_lsig.mouseWheel. fconnect(cb);}136 void addWindowSizeCallback(WindowSizeEventDg cb) {_lsig.windowSize. fconnect(cb);}137 void addWindowCloseCallback(WindowCloseEventDg cb) {_lsig.windowClose. fconnect(cb);}132 void addKeyCallback(KeyEventDg cb) {_lsig.key.connect(cb);} 133 void addMouseButtonCallback(MouseButtonEventDg cb) {_lsig.mouseButton.connect(cb);} 134 void addMouseMoveCallback(MouseMoveEventDg cb) {_lsig.mouseMove.connect(cb);} 135 void addMouseWheelCallback(MouseWheelEventDg cb) {_lsig.mouseWheel.connect(cb);} 136 void addWindowSizeCallback(WindowSizeEventDg cb) {_lsig.windowSize.connect(cb);} 137 void addWindowCloseCallback(WindowCloseEventDg cb) {_lsig.windowClose.connect(cb);} 138 138 139 139 } trunk/luigi/adaptor/glfw.d
r11 r13 112 112 class GLFWAdaptor : InputAdaptor 113 113 { 114 // Singleton access via GLFWAdaptor()114 // Singleton access via static opCall GLFWAdaptor() 115 115 static GLFWAdaptor opCall() { 116 116 static GLFWAdaptor myinstance = null; … … 121 121 return myinstance; 122 122 } 123 // Singleton access via 'inst' property 123 124 static GLFWAdaptor inst() { 124 125 return GLFWAdaptor(); trunk/luigi/example1.d
r11 r13 87 87 with(luigui) { 88 88 Luigi().adaptor = GLFWAdaptor(); 89 StdTheme theme = cast(StdTheme)Luigi().theme;90 89 gui = new Overlay; 91 90 … … 98 97 alias Alignment A; 99 98 100 Panel eastGroup = gui.add_widget(new GridPanel(1,0, Gaps(2))); 101 gui.arranger.add(eastGroup, Region.East); 99 auto eastGroup = 100 arranged(gui.add_widget(new GridPanel(1,0, Gaps(2))), Region.East); 101 auto westGroup = 102 arranged(gui.add_widget(new GridPanel(2,0, Gaps(2))), Region.West); 103 auto northGroup = arranged(gui.add_widget(new FlowPanel), Region.North); 104 auto southGroup = arranged(gui.add_widget(new FlowPanel), Region.South); 105 102 106 with(eastGroup) { 103 107 alias eastGroup g; // workaround for http://tinyurl.com/u5eal 104 Button b3= g.add_widget(new Button("Luigi"));108 auto b0 = g.add_widget(new Button("Luigi")); 105 109 g.add_widget(new Button("Is")); 106 110 g.add_widget(new Button("My")); 107 111 g.add_widget(new Button("Pal")); 108 b3.disable(); 109 } 110 111 Panel northGroup = arranged(gui.add_widget(new FlowPanel), Region.North); 112 auto b1 = g.add_widget(new Button("Hide West")); 113 114 b0.disable(); 115 b1.clicked.connect( &westGroup.toggle_shown ); 116 } 117 112 118 with (northGroup) { 113 119 alias northGroup g; // workaround for http://tinyurl.com/u5eal 114 Button b10 = g.add_widget(new Button("File")); 115 Button b11 = g.add_widget(new Button("Edit")); 116 Button b12 = g.add_widget(new Button("View")); 117 Button b13 = g.add_widget(new Button("Favorites")); 118 Button b14 = g.add_widget(new Button("Tools")); 119 Button b15 = g.add_widget(new Button("Options")); 120 Checkbox c15 = g.add_widget(new Checkbox("Check it out!")); 121 Button b16 = g.add_widget(new Button("Help")); 122 123 /* 120 auto b10 = g.add_widget(new Button("File")); 121 auto b11 = g.add_widget(new Button("Edit")); 122 auto b12 = g.add_widget(new Button("View")); 123 auto b13 = g.add_widget(new Button("Favorites")); 124 auto b14 = g.add_widget(new Button("Tools")); 125 auto b15 = g.add_widget(new Button("Options")); 126 auto c15 = g.add_widget(new Checkbox("Check it out!")); 127 auto b16 = g.add_widget(new Button("Help")); 128 124 129 c15.value_changed.connect( (Widget w, bool onoff) 125 130 { 126 131 writefln(onoff?"checked!":"unchecked!"); 127 132 }); 128 */ 129 auto T = new DelegateSlot!(Widget,bool)( 130 (Widget w, bool onoff) 131 { 132 writefln(onoff?"checked!":"unchecked!"); 133 }); 134 c15.value_changed.connect( &T.slot ); 135 } 136 137 Panel southGroup = arranged(gui.add_widget(new FlowPanel), Region.South); 133 } 134 138 135 with(southGroup) { 139 136 alias southGroup g; // workaround for http://tinyurl.com/u5eal 140 137 //Button b0 = add_widget(new Button("Hohoho!")); 141 Labell0 = g.add_widget(new Label( "FirstName:"));142 TextFieldt0 = g.add_widget(new TextField);143 TextFieldt1 = g.add_widget(new TextField("Last name:"));138 auto l0 = g.add_widget(new Label( "FirstName:")); 139 auto t0 = g.add_widget(new TextField); 140 auto t1 = g.add_widget(new TextField("Last name:")); 144 141 t1.text = "Rumplestilskin"; 145 Button b4 = g.add_widget(new Button("Click me!")); 146 //b4.clicked.connect( (Widget w){ writefln("Ouch! Not so hard!"); } ); 147 auto T = new DelegateSlot!(Widget)((Widget w){ writefln("Ouch! Not so hard!"); } ); 148 b4.clicked.connect( &T.slot ); 149 } 150 151 152 Panel westGroup = gui.add_widget(new GridPanel(2,0, Gaps(2))); 153 gui.arranger.add(westGroup, Region.West); 154 //Panel westGroup = arranged(gui.add_widget( new GridPanel(2,0, Gaps(2))) , Region.West); 142 auto b4 = g.add_widget(new Button("Click me!")); 143 b4.clicked.connect((Widget w){ writefln("Ouch! Not so hard!"); } ); 144 } 155 145 156 146 with (westGroup) { 157 147 alias westGroup g; // workaround for http://tinyurl.com/u5eal 158 Button b20 = arranged( g.add_widget(new Button("Tool0")));159 Button b21 = arranged( g.add_widget(new Button("Tool1")));160 Button b22 = arranged( g.add_widget(new Button("Tool2")));161 Button b23 = arranged( g.add_widget(new Button("Tool3")));162 Button b24 = arranged( g.add_widget(new Button("LongNameTool4")));163 Button b25 = arranged( g.add_widget(new Button("Tool5")));164 Button b26 = arranged( g.add_widget(new Button("Tool6")));165 Button b27 = arranged( g.add_widget(new Button("Tool7")));166 Button b28 = arranged( g.add_widget(new Button("Tool8")));167 Button b29 = arranged( g.add_widget(new Button("Tool9")));168 Slider s01 = arranged( g.add_widget(new Slider("Thingy")));169 Slider s02 = arranged( g.add_widget(new Slider("Thingy")));148 auto b20 = arranged( g.add_widget(new Button("Tool0")) ); 149 auto b21 = arranged( g.add_widget(new Button("Tool1")) ); 150 auto b22 = arranged( g.add_widget(new Button("Tool2")) ); 151 auto b23 = arranged( g.add_widget(new Button("Tool3")) ); 152 auto b24 = arranged( g.add_widget(new Button("LongNameTool4")) ); 153 auto b25 = arranged( g.add_widget(new Button("Tool5")) ); 154 auto b26 = arranged( g.add_widget(new Button("Tool6")) ); 155 auto b27 = arranged( g.add_widget(new Button("Tool7")) ); 156 auto b28 = arranged( g.add_widget(new Button("Tool8")) ); 157 auto b29 = arranged( g.add_widget(new Button("Tool9")) ); 158 auto s01 = arranged( g.add_widget(new Slider("Thingy")) ); 159 auto s02 = arranged( g.add_widget(new Slider("Thingy")) ); 170 160 s02.vertical = true; 171 161 s01.precision = 0.1; 172 162 s02.precision = 0.1; 173 auto T = new DelegateSlot!(double)((double d){ writefln("Slider now %s",d); } ); 174 s01.value_changed. fconnect2nd(&T.slot);175 s02.value_changed. fconnect2nd(&T.slot);176 s02.value_changed. fconnect2nd(&s01.value);177 s01.value_changed. fconnect2nd(&s02.value);163 164 s01.value_changed.connect2nd( (double d){ writefln("Slider now %s",d); } ); 165 s02.value_changed.connect2nd( (double d){ writefln("Slider now %s",d); } ); 166 s02.value_changed.connect2nd(&s01.value); 167 s01.value_changed.connect2nd(&s02.value); 178 168 } 179 169 180 170 /* 181 171 // This is my ideal version, but it requires more smarts from D IFTI 182 // And from using auto with return value from templates183 172 184 173 Button b3 = gui.add_widget(new Button("Mate!")).arranged(Region.East); trunk/luigi/gui.d
r12 r13 33 33 34 34 /* 35 WARNING: Because of how overloading works in D as of 0.17 4,35 WARNING: Because of how overloading works in D as of 0.175, 36 36 ** ALL SETTERS SHOULD COME BEFORE GETTERS ** 37 37 I.e. … … 43 43 int value() 44 44 45 Otherwise, signal. fconnect will connect to the getter rather45 Otherwise, signal.connect will connect to the getter rather 46 46 than the setter. 47 47 */ … … 297 297 bool shown(bool show_) { return m_shown = show_; } 298 298 bool shown() { return m_shown; } 299 299 void toggle_shown() { m_shown = !m_shown; } 300 300 301 301 /** Return the parent of this item or null if it has no parent. trunk/luigi/signalobj.d
r11 r13 70 70 /** FlexSignal is a more flexible version of a signal object wrapper. 71 71 * 72 * Using the fconnect/fdisconnect methods it is possible to connect the72 * Using the connect/disconnect methods it is possible to connect the 73 73 * signal to most any callable entity with a signature that is 'compatible'. 74 74 * with the signal's signature. … … 100 100 * Returns: the slot passed in. 101 101 */ 102 slot_t connect (slot_t f) {102 slot_t connect_exact(slot_t f) { 103 103 s.connect(f); 104 104 return f; … … 109 109 * Returns: the slot passed in. 110 110 */ 111 slot_t disconnect (slot_t f) {111 slot_t disconnect_exact(slot_t f) { 112 112 s.disconnect(f); 113 113 return f; … … 133 133 * have it.) 134 134 */ 135 slot_key fconnect(DT,int arg_offset=0)(DT f)135 slot_key connect(DT,int arg_offset=0)(DT f) 136 136 { 137 137 // make the key … … 150 150 } 151 151 /** Some simple wrappers for the most comment skipped argument 152 * versions of fconnect. These work around the implicit152 * versions of connect. These work around the implicit 153 153 * instantiation problem. 154 154 */ 155 slot_key fconnect1st(DT)(DT f) { return fconnect!(DT,0)(f); }156 slot_key fconnect2nd(DT)(DT f) { return fconnect!(DT,1)(f); }157 slot_key fconnect3rd(DT)(DT f) { return fconnect!(DT,2)(f); }158 slot_key fconnect4th(DT)(DT f) { return fconnect!(DT,3)(f); }159 slot_key fconnect5th(DT)(DT f) { return fconnect!(DT,4)(f); }155 slot_key connect1st(DT)(DT f) { return connect!(DT,0)(f); } 156 slot_key connect2nd(DT)(DT f) { return connect!(DT,1)(f); } 157 slot_key connect3rd(DT)(DT f) { return connect!(DT,2)(f); } 158 slot_key connect4th(DT)(DT f) { return connect!(DT,3)(f); } 159 slot_key connect5th(DT)(DT f) { return connect!(DT,4)(f); } 160 160 // this doesn't quite work yet because of DMD bug #540 161 // Name also has to be different from ' fconnect' for what also looks161 // Name also has to be different from 'connect' for what also looks 162 162 // to be a compiler bug. They should be able to co-exist. 163 template fconnecti(int arg_offset) {164 slot_key fconnecti(DT)(DT f)163 template connecti(int arg_offset) { 164 slot_key connecti(DT)(DT f) 165 165 { 166 return fconnect!(DT,arg_offset)(f);166 return connect!(DT,arg_offset)(f); 167 167 } 168 168 } 169 169 170 170 /** Disconnect a slot of any type */ 171 void fdisconnect(DT)(DT f) {171 void disconnect(DT)(DT f) { 172 172 static if( is(DT==slot_t) ) { 173 s.disconnect (f);173 s.disconnect_exact(f); 174 174 } 175 175 else { … … 184 184 185 185 if (f_key in thunkMap) { 186 s.disconnect (thunkMap[f_key]);186 s.disconnect_exact(thunkMap[f_key]); 187 187 } else { 188 188 debug writefln("FlexSignal.fdisconnect: Slot not found"); … … 346 346 347 347 auto sig1 = new SignalObj!(int); 348 sig1.connect (&s1.slot1);349 //sig1.connect (&s1.slot0); // error mismatch348 sig1.connect_exact(&s1.slot1); 349 //sig1.connect_exact(&s1.slot0); // error mismatch 350 350 351 351 writefln(">>> SignalObject EMIT"); … … 371 371 372 372 373 fsig. fconnect(&s1.slot3);374 fsig. fconnect(&s1.slot2);375 fsig. fconnect(&s1.slot1);376 fsig. fconnect(&s1.slot0);377 fsig. fconnect(&s2.slot3);378 fsig. fconnect(&s2.slot2);379 fsig. fconnect(&s2.slot1);380 fsig. fconnect(&s2.slot0);381 382 fsig. fconnect(&func0);383 fsig. fconnect(&func1);384 fsig. fconnect(&func2);385 fsig. fconnect(&func3);386 fsig. fconnect(&func3ldr);373 fsig.connect(&s1.slot3); 374 fsig.connect(&s1.slot2); 375 fsig.connect(&s1.slot1); 376 fsig.connect(&s1.slot0); 377 fsig.connect(&s2.slot3); 378 fsig.connect(&s2.slot2); 379 fsig.connect(&s2.slot1); 380 fsig.connect(&s2.slot0); 381 382 fsig.connect(&func0); 383 fsig.connect(&func1); 384 fsig.connect(&func2); 385 fsig.connect(&func3); 386 fsig.connect(&func3ldr); 387 387 388 388 // Connect, but skip the first arg of the signal 389 389 // I.e. just subscribe to the string part of the message. 390 390 // This IFTI limitation is annoying! 391 // fsig. fconnecti!(1)(&func1s);392 //fsig. fconnect!(typeof(&func1s),1)(&func1s);393 fsig. fconnect2nd(&func1s);391 // fsig.connecti!(1)(&func1s); 392 //fsig.connect!(typeof(&func1s),1)(&func1s); 393 fsig.connect2nd(&func1s); 394 394 395 395 slot_key literal = 396 fsig. fconnect( (int i){ writefln("@@@ Hello from delegate literal! int=",i); });396 fsig.connect( (int i){ writefln("@@@ Hello from delegate literal! int=",i); }); 397 397 398 398 writefln("\n>>> FlexSignal EMIT (3,\"A three\",9.9)"); 399 399 fsig.emit(3,"A three!",9.9); 400 400 401 fsig. fdisconnect(&s2.slot0);401 fsig.disconnect(&s2.slot0); 402 402 fsig.disconnect(&s1.slot3); 403 403 404 fsig. fdisconnect(&func0);405 fsig. fdisconnect(&func1);406 fsig. fdisconnect(&func2);407 408 fsig. fdisconnect(literal);404 fsig.disconnect(&func0); 405 fsig.disconnect(&func1); 406 fsig.disconnect(&func2); 407 408 fsig.disconnect(literal); 409 409 410 410 writefln("\n>>> FlexSignal EMIT (4,\"A four!\",8.8)");
