1{$mode objfpc}{$h+} 2unit lister; 3 4interface 5 6uses glib, gdk, gtk, FPgtk, classes, fpgtkext, sysutils; 7 8type 9 10 TListWindow = class (TFPgtkWindow) 11 private 12 pb : TFPgtkProgressBar; 13 spin : TFPgtkSpinButton; 14 notebook : TFPgtkNotebook; 15 bar : TFPgtkStatusbar; 16 EContext, EMessage : TFPgtkEntry; 17 IDContext, IDMessage : TFPgtkSpinButton; 18 List : TFPgtkScrollList; 19 ListText : TFPgtkScrollText; 20 CList : TFPgtkScrollCList; 21 CListText : TFPgtkScrollText; 22 Key : TFPgtkSpinButton; 23 ModCtrl, ModAlt, ModShift : TFPgtkToggleButton; 24 KeyName : TFPgtkEntry; 25 AKeyName : TFPgtkAccelLabel; 26 TheAG : guint; 27 AccelBut : TFPgtkButton; 28 VButtons, HButtons : TFPgtkButtonBox; 29 TheLayout : TFPgtkLayout; 30 LayoutX, LayoutY : integer; 31 cal : TFPgtkCalendar; 32 MessageButtons : TMsgDlgButtons; 33 Msg : TFPgtkEntry; 34 DialogType : TFPgtkMenu; 35 procedure AddRemoveButton (Sender:TFPgtkObject; data:pointer); 36 procedure ShowMessageDialog (Sender:TFPgtkObject; data:pointer); 37 procedure Calendar_ShowDate (Sender:TFPgtkObject; data:pointer); 38 procedure Layout_runaway (Sender:TFPgtkObject; data:pointer); 39 procedure ButBox_AddThem (Sender:TFPgtkObject; data:pointer); 40 procedure Accel_Parse (Sender : TFPgtkObject; data : pointer); 41 procedure Accel_AddAccel (Sender : TFPgtkObject; data : pointer); 42 procedure Accel_ConvertToName (Sender : TFPgtkObject; data : pointer); 43 procedure ProgressBar_ShowItToMe (Sender : TFPgtkObject; data : pointer); 44 procedure ProgressBar_SetActivityMode (Sender : TFPgtkObject; data : pointer); 45 procedure ProgressBar_FormatString (Sender : TFPgtkObject; data : pointer); 46 procedure Spinbutton_ClimbRate (Sender : TFPgtkObject; data : pointer); 47 procedure Spinbutton_Digits (Sender : TFPgtkObject; data : pointer); 48 procedure Spinbutton_UpdatePolicy (Sender : TFPgtkObject; data : pointer); 49 procedure Spinbutton_Numeric (Sender : TFPgtkObject; data : pointer); 50 procedure Spinbutton_Wrap (Sender : TFPgtkObject; data : pointer); 51 procedure Spinbutton_SnapToTicks (Sender : TFPgtkObject; data : pointer); 52 procedure MemoMessage_Show (Sender : TFPgtkObject; data : pointer); 53 procedure StatusBar_GetContext (Sender : TFPgtkObject; data : pointer); 54 procedure StatusBar_Push (Sender : TFPgtkObject; data : pointer); 55 procedure StatusBar_Pop (Sender : TFPgtkObject; data : pointer); 56 procedure StatusBar_Remove (Sender : TFPgtkObject; data : pointer); 57 procedure List_ShowSignal (Sender : TFPgtkObject; data : pointer); 58 procedure List_ShowWidgetSignal (Sender : TFPgtkObject; Widget:TFPgtkWidget; data : pointer); 59 procedure List_AddToList (Sender : TFPgtkObject; data : pointer); 60 procedure List_SelectionMode (Sender : TFPgtkObject; data : pointer); 61 procedure List_ClearAll (Sender : TFPgtkObject; data : pointer); 62 procedure List_Clear1_5 (Sender : TFPgtkObject; data : pointer); 63 procedure List_AddCount (Sender : TFPgtkObject; data : pointer); 64 procedure CList_AddToList (Sender : TFPgtkObject; data : pointer); 65 procedure CList_SelectionMode (Sender : TFPgtkObject; data : pointer); 66 public 67 constructor create; 68 end; 69 70 71implementation 72 73const 74 Init_ProgressBar_FormatString = '%p%% (%v of %u)'; 75 76constructor TListWindow.Create; 77var b, h : TFPgtkBox; 78 but : TFPgtkButton; 79 tbut : TFPgtkToggleButton; 80 e : TFPgtkEntry; 81 sp : TFPgtkSpinButton; 82 t : TFPgtkScrollText; 83 f : TFPgtkFrame; 84 p : TFPgtkPaned; 85 om : TFPgtkOptionMenu; 86 bb : TFPgtkButtonBox; 87begin 88 inherited create (gtk_window_dialog); 89 border := 10; 90 modal := TRUE; 91 Position := gtk_win_pos_mouse; 92 93 Notebook := TFPgtkNotebook.Create; 94 Notebook.homogenous := false; 95 Notebook.scrollable := true; 96 Add (Notebook); 97 98 // ******* MessageDialog 99 100 writeln (' MessageDialog'); 101 b := TFPgtkVBox.Create; 102 Notebook.AppendPage (b, TFPgtkLabel.Create('MessageDialog')); 103 104 Msg := TFpgtkEntry.Create; 105 Msg.Text := 'This is normal message text'; 106 b.packstart (msg, false, false, 0); 107 108 om := TFPgtkOptionMenu.Create; 109 DialogType := NewMenu ('DialogType', [NewMenuItem ('Warning'),NewMenuItem ('Error'), 110 NewMenuItem ('Information'),NewMenuItem ('Confirmation'),NewMenuItem ('Custom')]); 111 om.Menu := DialogType; 112 om.SetHistory (0); 113 b.Packstart (om, false, false, 0); 114 115 bb := TFPgtkHButtonBox.create; 116 tbut := TFPgtkCheckedButton.CreateWithLabel ('Yes'); 117 tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbYes))); 118 bb.PackStart (tbut); 119 tbut := TFPgtkCheckedButton.CreateWithLabel ('No'); 120 tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbNo))); 121 bb.PackStart (tbut); 122 tbut := TFPgtkCheckedButton.CreateWithLabel ('Ok'); 123 tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbOk))); 124 bb.PackStart (tbut); 125 tbut := TFPgtkCheckedButton.CreateWithLabel ('Cancel'); 126 tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbCancel))); 127 bb.PackStart (tbut); 128 b.packstart (bb, false, false, 0); 129 130 bb := TFPgtkHButtonBox.create; 131 tbut := TFPgtkCheckedButton.CreateWithLabel ('Abort'); 132 tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbAbort))); 133 bb.PackStart (tbut); 134 tbut := TFPgtkCheckedButton.CreateWithLabel ('Retry'); 135 tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbRetry))); 136 bb.PackStart (tbut); 137 tbut := TFPgtkCheckedButton.CreateWithLabel ('Ignore'); 138 tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbIgnore))); 139 bb.PackStart (tbut); 140 tbut := TFPgtkCheckedButton.CreateWithLabel ('Help'); 141 tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbHelp))); 142 bb.PackStart (tbut); 143 b.packstart (bb, false, false, 0); 144 145 bb := TFPgtkHButtonBox.create; 146 tbut := TFPgtkCheckedButton.CreateWithLabel ('All'); 147 tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbAll))); 148 bb.PackStart (tbut); 149 tbut := TFPgtkCheckedButton.CreateWithLabel ('NoToALl'); 150 tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbNoToAll))); 151 bb.PackStart (tbut); 152 tbut := TFPgtkCheckedButton.CreateWithLabel ('YesToAll'); 153 tbut.connectClicked (@AddRemoveButton, inttopointer(ord(mbYesToAll))); 154 bb.PackStart (tbut); 155 b.packstart (bb, false, false, 0); 156 157 bb := TFPgtkHButtonBox.create; 158 but := TFPgtkButton.CreateWithLabel ('Show Message Dialog !!'); 159 but.ConnectClicked (@ShowMessageDialog, nil); 160 bb.Packstart (but); 161 b.packstart (bb, false, false, 0); 162 163 // ******* Calendar 164 165 writeln (' Calendar'); 166 b := TFPgtkVBox.Create; 167 Notebook.AppendPage (b, TFPgtkLabel.Create('Calendar')); 168 169 cal := TFPgtkCalendar.Create; 170 cal.date := encodeDate (2000,1,1); 171 b.PackStart (Cal); 172 173 but := TFPgtkButton.CreateWithLabel ('Show Date'); 174 but.ConnectClicked (@Calendar_ShowDate, nil); 175 b.PackEnd (but, false, false, 0); 176 177 // ******* Layout 178 179 writeln (' Layout'); 180 TheLayout := TFPgtkLayout.Create; 181 Notebook.AppendPage (TheLayout, TFPgtkLabel.Create('Layout')); 182 TheLayout.Freeze; 183 e := TFPgtkEntry.Create; 184 e.Text := 'Entry on 25,10 to clearly show where the edges end'; 185 TheLayout.Put (e, 25,10); 186 e := TFPgtkEntry.Create; 187 e.Text := 'Entry on 5,50'; 188 e.SetUSize (300, 24); 189 TheLayout.Put (e, 5,30); 190 but := TFPgtkButton.CreateWithLabel ('Catch me with doubleclick !!'); 191 but.ConnectClicked (@Layout_runaway, nil); 192 but.CanDefault:= true; 193 but.SetUSize (200, 50); 194 TheLayout.put (but, 75, 75); 195 LayoutY := 75; 196 LayoutX := 75; 197 TheLayout.SetSize (350, 400); 198 TheLayout.Thaw; 199 200 // ******* ButtonBox 201 202 writeln (' ButtonBox'); 203 b := TFPgtkVBox.Create; 204 Notebook.AppendPage (b, TFPgtkLabel.Create('Buttonboxes')); 205 206 HButtons := TFPgtkHButtonBox.Create; 207 HButtons.Layout := GTK_BUTTONBOX_end; 208 HButtons.Spacing := 3; 209 b.PackEnd (HButtons, false, false, 0); 210 211 h := TFPgtkHBox.Create; 212 b.PackStart (h, true, true, 0); 213 214 but := TFPgtkButton.CreateWithLabel ('Add a button'); 215 but.ConnectClicked (@ButBox_AddThem, nil); 216 h.PackStart (but, false, false, 3); 217 218 VButtons := TFPgtkVButtonBox.Create; 219 VButtons.Layout := GTK_Buttonbox_Start; 220 VButtons.Spacing := 15; 221 h.PackEnd (VButtons, false, false,0); 222 223 // ******* Accelerator 224 225 writeln (' Accelerator'); 226 b := TFPgtkVBox.Create; 227 Notebook.AppendPage (b, TFPgtkLabel.Create('Accelorators')); 228 229 TheAG := AccelGroupNew; 230 231 h := TFPgtkHBox.Create; 232 b.PackStart (h, false, false, 0); 233 but := TFPgtkButton.CreateWithLabel('Parse'); 234 but.ConnectClicked (@Accel_Parse, nil); 235 h.PackStart (but, false, false, 0); 236 Key := TFPgtkSpinButton.Create; 237 h.PackStart (Key); 238 Key.adjustment.configure (0, $FFFF, GDK_Delete, 1, 256, 0); 239 Key.Configure (nil, 100, 0); 240 241 h := TFPgtkHBox.Create; 242 b.PackStart (h, false, false, 0); 243 h.homogeneous := true; 244 ModShift := TFPgtkCheckedButton.CreateWithLabel('Shift'); 245 h.PackStart (ModShift); 246 ModCtrl := TFPgtkCheckedButton.CreateWithLabel('Ctrl'); 247 ModCtrl.active := true; 248 h.Packstart(ModCtrl); 249 ModAlt := TFPgtkCheckedButton.CreateWithLabel('Alt'); 250 h.Packstart (ModAlt); 251 252 h := TFPgtkHBox.create; 253 b.PackStart (h, false, false, 0); 254 AccelBut := TFPgtkButton.createwithLabel ('Show'); 255 Accelbut.ConnectClicked (@Accel_ConvertToName, nil); 256 //AcceleratorAdd (TheAG, Accelbut, sgClicked, Gdk_S, Gdk_Control_mask, GTK_ACCEL_VISIBLE); 257 h.PackStart (Accelbut,false,false,0); 258 KeyName := TFPgtkEntry.Create; 259 h.Packstart (KeyName); 260 261 h := TFPgtkHBox.create; 262 but := TFPgtkButton.CreateWithLabel ('Add'); 263 but.ConnectClicked (@Accel_AddAccel, nil); 264 h.PackStart (but, false, false, 0); 265 but := TFPgtkButton.Create; 266 AKeyName := TFPgtkAccelLabel.create ('Accellerators'); 267 but.Add (AKeyName); 268 AKeyName.accelwidget := AccelBut; 269 AKeyname.refetch; 270 h.PackStart (but, true, true, 0); 271 b.PackStart (h, false, false, 0); 272 273 // ******* CList 274 275 writeln (' CList'); 276 p := TFPgtkVPaned.Create; 277 Notebook.AppendPage (p, TFPgtkLabel.Create('CList')); 278 279 CList := TFPgtkScrollCList.Create (1); 280 p.Pack1 (CList, true, true); 281 b := TFPgtkVBox.Create; 282 p.Pack2 (b, false, true); 283 p.handleSize := 5; 284 p.ComputePosition (100, 60, 50); 285 286 CListText := TFPgtkScrollText.create; 287 b.Packstart (CListText); 288 289 h := TFPgtkHBox.Create; 290 b.PackStart (h, false, false, 0); 291 292 but := TFPGtkButton.CreateWithLabel('Add'); 293 but.ConnectClicked (@CList_AddToList, CListText.TheText); 294 h.PackStart (but, false, false, 0); 295 296 h := TFPgtkHBox.Create; 297 h.PackStart (TFPGtkLabel.Create('Selection Mode'), false, false, 2); 298 om := TFPgtkOptionMenu.Create; 299 om.Menu := NewMenu ('Selection Mode', [ 300 NewMenuItem ('Single',@CList_SelectionMode, inttopointer(0)), 301 NewMenuItem ('Browse',@CList_SelectionMode, inttopointer(1)), 302 NewMenuItem ('Mutiple',@CList_SelectionMode, inttopointer(2)), 303 NewMenuItem ('Extended',@CList_SelectionMode, inttopointer(3))]); 304 om.SetHistory (0); 305 CList.CList.SelectionMode := GTK_SELECTION_SINGLE; 306 h.Packstart (om, true, true, 0); 307 308 b.PackStart (h, false, false, 0); 309 310 // ******* List 311 312 writeln (' List'); 313 p := TFPgtkVPaned.Create; 314 Notebook.AppendPage (p, TFPgtkLabel.Create('List')); 315 316 List := TFPgtkScrollList.Create; 317 p.Pack1 (List, true, true); 318 b := TFPgtkVBox.Create; 319 p.Pack2 (b, false, true); 320 p.handleSize := 5; 321 p.ComputePosition (100, 60, 50); 322 323 ListText := TFPgtkScrollText.create; 324 b.Packstart (ListText); 325 326 h := TFPgtkHBox.Create; 327 b.PackStart (h, false, false, 0); 328 329 but := TFPGtkButton.CreateWithLabel('Add'); 330 but.ConnectClicked (@List_AddToList, ListText.TheText); 331 h.PackStart (but, false, false, 0); 332 333 but := TFPGtkButton.CreateWithLabel('Add Count'); 334 but.ConnectClicked (@List_AddCount, ListText.TheText); 335 h.PackStart (but, false, false, 0); 336 337 but := TFPGtkButton.CreateWithLabel('Clear 1-5'); 338 but.ConnectClicked (@List_Clear1_5, ListText.TheText); 339 h.PackStart (but, false, false, 0); 340 341 but := TFPGtkButton.CreateWithLabel('Clear all'); 342 but.ConnectClicked (@List_ClearAll, ListText.TheText); 343 h.PackStart (but, false, false, 0); 344 345 h := TFPgtkHBox.Create; 346 h.PackStart (TFPGtkLabel.Create('Selection Mode'), false, false, 2); 347 om := TFPgtkOptionMenu.Create; 348 om.Menu := NewMenu ('Selection Mode', [ 349 NewMenuItem ('Single','','',@List_SelectionMode, inttopointer(0)), 350 NewMenuItem ('Browse','','',@List_SelectionMode, inttopointer(1)), 351 NewMenuItem ('Mutiple','','',@List_SelectionMode, inttopointer(2)), 352 NewMenuItem ('Extended','','',@List_SelectionMode, inttopointer(3))]); 353 om.SetHistory (0); 354 List.List.SelectionMode := GTK_SELECTION_SINGLE; 355 h.Packstart (om, true, true, 0); 356 357 b.PackStart (h, false, false, 0); 358 359 // ******* Statusbar 360 361 writeln (' Statusbar'); 362 b := TFPgtkVBox.Create; 363 Notebook.appendPage (b, TFPgtkLabel.Create('Statusbar')); 364 365 bar := TFPgtkStatusbar.Create; 366 b.Packend (bar, false, true, 0); 367 368 f := TFPgtkFrame.Create; 369 f.Text := 'Context'; 370 h := TFPgtkHbox.Create; 371 IDContext := TFPgtkSpinbutton.Create; 372 IDContext.configure (nil, 1000, 0); 373 IDContext.adjustment.configure (-maxint, maxint, 0, 1, 100,0); 374 EContext := TFPgtkEntry.Create; 375 EContext.ConnectChanged (@StatusBar_GetContext, IDContext); 376 h.Packstart (EContext, true, true, 0); 377 h.packstart (TFPgtkLabel.Create('ID'), false, false, 2); 378 h.packstart (IDContext, false, false, 0); 379 f.add (h); 380 b.Packstart (f, false, true, 0); 381 382 f := TFPgtkFrame.Create; 383 f.Text := 'Message'; 384 h := TFPgtkHbox.Create; 385 IDMessage := TFPgtkSpinbutton.Create; 386 IDMessage.configure (nil, 1000, 0); 387 IDMessage.adjustment.configure (-maxint, maxint, 0, 1, 100,0); 388 EMessage := TFPgtkEntry.Create; 389 h.Packstart (EMessage, true, true, 0); 390 h.packstart (TFPgtkLabel.Create('ID'), false, false, 2); 391 h.packstart (IDMessage, false, false, 0); 392 f.add (h); 393 b.Packstart (f, false, true, 0); 394 395 h := TFPgtkHBox.Create; 396 h.homogeneous := true; 397 b.Packstart (h, false, false, 2); 398 399 but := TFPgtkButton.CreateWithLabel ('Push'); 400 but.ConnectClicked (@statusbar_Push, EMessage); 401 h.Packstart (but, false, true, 2); 402 403 but := TFPgtkButton.CreateWithLabel ('Pop'); 404 but.ConnectClicked (@statusbar_Pop, EMessage); 405 h.Packstart (but, false, true, 2); 406 407 but := TFPgtkButton.CreateWithLabel ('Remove'); 408 but.ConnectClicked (@statusbar_Remove, EMessage); 409 h.Packstart (but, false, true, 2); 410 411 // ******* Memo and ShowMessage 412 413 writeln (' Memo / ShowMessage'); 414 b := TFPgtkVBox.Create; 415 Notebook.appendPageFull (b, TFPgtkLabel.Create('Memo Message'), TFPgtkLabel.Create('Memo and ShowMessage'),true); 416 417 t := TFPgtkScrollText.Create; 418 b.PackStart (t, true, true, 10); 419 420 but := TFPgtkButton.CreateWithLabel ('Show text'); 421 but.ConnectClicked (@MemoMessage_Show, t); 422 b.PackStart (but, false, false, 2); 423 424 // ******* File Selection 425 426 writeln (' File selection'); 427 b := TFPgtkVBox.Create; 428 Notebook.appendPageFull (b, TFPgtkLabel.Create('File selection'), TFPgtkLabel.Create('File selection dialog'),true); 429 430 b.PackStart (TFPgtkFileEntry.Create, false, true, 10); 431 432 // ******* Progress bar page 433 434 b := TFPgtkVBox.Create; 435 Notebook.appendPageFull (b, TFPgtkLabel.Create('Progress'), TFPgtkLabel.Create('The Progressbar'),true); 436 437 pb := TFPgtkProgressBar.Create (nil); 438 with pb do 439 begin 440 formatstring := Init_ProgressBar_FormatString; 441 showText := true; 442 configure (50.0, 0.0, 500.0); 443 end; 444 b.Packstart (pb, false, false, 3); 445 446 but := TFPgtkButton.createWithLabel ('Run the bar'); 447 but.ConnectClicked (@ProgressBar_ShowItToMe, nil); 448 b.PackStart (but, false, false, 3); 449 450 but := TFPgtkCheckbutton.CreateWithLabel ('Activity mode'); 451 but.ConnectClicked (@ProgressBar_SetActivityMode, pb); 452 b.PackStart (but, false, false, 3); 453 454 b.Packstart (TFPgtkLabel.Create ('Format text'), false, false, 10); 455 456 e := TFPgtkEntry.Create; 457 e.Text := Init_ProgressBar_FormatString; 458 e.ConnectChanged (@ProgressBar_FormatString, pb); 459 b.Packstart(e, false, false, 0); 460 461 // ******* Spinbutton 462 writeln (' page creation'); 463 b := TFPgtkVBox.Create; 464 Notebook.appendPageFull (b, TFPgtkLabel.Create('SpinButton'), TFPgtkLabel.Create('Spinbuttons'),true); 465 466 Spin := TFPgtkSPinButton.Create; 467 Spin.Configure (nil,0.01,3); 468 Spin.Adjustment.configure (-100.0, 100.0, 10.25, 0.01, 0.1, 1.0); 469 Spin.digits := 2; 470 Spin.numeric := false; 471 Spin.Wrap := false; 472 Spin.SnapToTicks := false; 473 b.PackStart (spin, false, false, 0); 474 475 b.PackStart (TFPgtkLabel.Create('Climb rate'), false, false, 0); 476 sp := TFPgtkSpinButton.Create; 477 with sp do 478 begin 479 with Adjustment do 480 begin 481 Configure (0.0, 1.0, 0.01, 0.01, 0.20, 0.0); 482 ConnectValueChanged (@Spinbutton_ClimbRate, sp); 483 end; 484 digits := 3; 485 ClimbRate := 0.01; 486 SnapToTicks := False; 487 end; 488 b.PackStart (sp, false, false, 0); 489 490 b.PackStart (TFPgtkLabel.Create('Digits'), false, false, 0); 491 sp := TFPgtkSpinButton.Create; 492 with sp do 493 begin 494 with adjustment do 495 begin 496 Configure (0.0, 5.0, 2.0, 1.0, 1.0, 0.0); 497 ConnectValueChanged (@Spinbutton_Digits, sp); 498 end; 499 Configure (nil,1,0); 500 SnapToTicks := True; 501 end; 502 b.PackStart (sp, false, false, 0); 503 504 tbut := TFPgtkToggleButton.CreateWithLabel ('Numeric'); 505 tbut.ConnectToggled (@SpinButton_numeric, Spin); 506 b.PackStart (tbut, false, false, 0); 507 508 tbut := TFPgtkToggleButton.CreateWithLabel ('Wrap'); 509 tbut.ConnectToggled (@SpinButton_Wrap, Spin); 510 b.PackStart (tbut, false, false, 0); 511 512 tbut := TFPgtkToggleButton.CreateWithLabel ('Snap to ticks'); 513 tbut.ConnectToggled (@SpinButton_SnapToTicks, Spin); 514 b.PackStart (tbut, false, false, 0); 515 516 // ******* Last empty page 517 518 writeln (' Empty page'); 519 Notebook.appendPageFull (TFPgtkLabel.Create('This page is left intentionally blank'), TFPgtkLabel.Create('Empty'), nil, true); 520 521 Notebook.enablePopup; 522 523end; 524 525// ******* Progressbar 526 527procedure TListWindow.ProgressBar_ShowItToMe (Sender : TFPgtkObject; data : pointer); 528var k, r, t : integer; 529begin 530 for r := 0 to 500 do 531 begin 532 pb.CurrentValue := (r + 0.1); 533 for t := 0 to random(5) do 534 k := random(1000)*5 div 2542 + 15; 535 end; 536end; 537 538procedure TListWindow.ProgressBar_SetActivityMode (Sender : TFPgtkObject; data : pointer); 539begin 540 TFPgtkProgressBar(data).ActivityMode := TFPgtkCheckButton(Sender).Active; 541end; 542 543procedure TListWindow.ProgressBar_FormatString (Sender : TFPgtkObject; data : pointer); 544begin 545 TFPgtkProgressBar(data).Formatstring := TFPgtkEntry(Sender).Text; 546end; 547 548// ******* Spinbutton 549 550procedure TListWindow.Spinbutton_ClimbRate (Sender : TFPgtkObject; data : pointer); 551begin 552 spin.climbrate := TFPgtkSpinbutton(data).asFloat; 553end; 554 555procedure TListWindow.Spinbutton_Digits (Sender : TFPgtkObject; data : pointer); 556begin 557 spin.digits := TFPgtkSpinbutton(data).asinteger; 558end; 559 560procedure TListWindow.Spinbutton_UpdatePolicy (Sender : TFPgtkObject; data : pointer); 561begin 562end; 563 564procedure TListWindow.Spinbutton_Numeric (Sender : TFPgtkObject; data : pointer); 565begin 566 TFPgtkSpinbutton(data).Numeric := (Sender as TFPgtkToggleButton).Active; 567end; 568 569procedure TListWindow.Spinbutton_Wrap (Sender : TFPgtkObject; data : pointer); 570begin 571 TFPgtkSpinbutton(data).Wrap := (Sender as TFPgtkToggleButton).Active; 572end; 573 574procedure TListWindow.Spinbutton_SnapToTicks (Sender : TFPgtkObject; data : pointer); 575begin 576 TFPgtkSpinbutton(data).SnapToTicks := (Sender as TFPgtkToggleButton).Active; 577end; 578 579{ Memo and ShowMessage } 580 581procedure TListWindow.MemoMessage_Show (Sender : TFPgtkObject; data : pointer); 582begin 583 ShowMessage ('You typed:', TFPgtkScrollText(data).Text); 584end; 585 586{ Statusbar } 587 588procedure TListWindow.StatusBar_Push (Sender : TFPgtkObject; data : pointer); 589begin 590 IDMessage.asinteger := bar.push (IDContext.asinteger, EMessage.Text); 591end; 592 593procedure TListWindow.StatusBar_Pop (Sender : TFPgtkObject; data : pointer); 594begin 595 bar.pop (IDContext.asinteger); 596end; 597 598procedure TListWindow.StatusBar_Remove (Sender : TFPgtkObject; data : pointer); 599begin 600 bar.Remove (IDContext.asinteger, IDMessage.asinteger); 601end; 602 603procedure TListWindow.StatusBar_GetContext (Sender : TFPgtkObject; data : pointer); 604begin 605 IDContext.asinteger := bar.GetContextID (EContext.Text); 606end; 607 608{ List } 609 610const ListSignalNames : array[0..15] of string = 611 (sgSelectionChanged,sgSelectChild,sgUnselectChild, 612 sgToggleFocusRow,sgSelectAll,sgUnselectAll,sgUndoSelection, 613 sgStartSelection,sgEndSelection,sgToggleAddMode, 614 sgExtendSelection,sgScrollVertical,sgScrollHorizontal, 615 sgSelect,sgDeselect,sgToggle); 616 617procedure TListWindow.List_ShowSignal (Sender : TFPgtkObject; data : pointer); 618var r : integer; 619begin 620 r := PointerToInt (data); 621 writeln (Sender.Classname, ' emitted signal ',ListSignalNames[r]); 622end; 623 624procedure TListWindow.List_ShowWidgetSignal (Sender : TFPgtkObject; widget:TFPgtkWidget; data : pointer); 625var r : integer; 626begin 627 r := PointerToInt (data); 628 writeln (Sender.Classname, ' emitted signal ',ListSignalNames[r]); 629end; 630 631procedure TListWindow.List_AddToList (Sender : TFPgtkObject; data : pointer); 632var t : TFPgtkText; 633 l : TFPgtkListItemGroup; 634begin 635 l := TFPgtkListItemGroup.Create; 636 try 637 t := TFPgtkText(data); 638 l.FillFromList (t.Lines); 639 List.List.AppendItems (l); 640 finally 641 l.free; 642 end; 643end; 644 645procedure TListWindow.List_SelectionMode (Sender : TFPgtkObject; data : pointer); 646var r : integer; 647begin 648 r := pointertoint(data); 649 List.List.SelectionMode := TGtkSelectionMode(r); 650end; 651 652procedure TListWindow.List_ClearAll (Sender : TFPgtkObject; data : pointer); 653begin 654 List.List.ClearAll; 655end; 656 657procedure TListWindow.List_Clear1_5 (Sender : TFPgtkObject; data : pointer); 658begin 659 List.List.ClearItems(1,5); 660end; 661 662procedure TListWindow.List_AddCount (Sender : TFPgtkObject; data : pointer); 663var li : TFPgtkListItem; 664begin 665 li := TFPgtkListItem.CreateWithLabel ('Count'); 666 List.List.Add (li); 667end; 668 669{ CList } 670 671procedure TListWindow.CList_AddToList (Sender : TFPgtkObject; data : pointer); 672var t : TFPgtkText; 673 l : TStrings; 674 r : integer; 675begin 676 t := TFPgtkText(data); 677 l := t.Lines; 678 writeln ('Going to add... (',l.commatext,')'); 679 with l do 680 for r := 0 to count-1 do 681 CList.CList.Append (l[r],''); 682end; 683 684procedure TListWindow.CList_SelectionMode (Sender : TFPgtkObject; data : pointer); 685var r : integer; 686begin 687 r := pointertoint(data); 688 CList.CList.SelectionMode := TGtkSelectionMode(r); 689end; 690 691{ Accelerators } 692 693procedure Tlistwindow.Accel_ConvertToName (Sender : TFPgtkObject; data : pointer); 694var Mods : TGdkModifierType; 695begin 696 Mods := 0; 697 if ModCtrl.active then 698 Mods := Mods + Gdk_Control_Mask; 699 if ModShift.active then 700 Mods := Mods + Gdk_Shift_Mask; 701 if ModAlt.active then 702 Mods := Mods + Gdk_Mod1_Mask; 703 KeyName.Text := AccelKeyName (Key.asinteger, mods); 704end; 705 706procedure TListWindow.Accel_Parse (Sender : TFPgtkObject; data : pointer); 707var Mods : TGdkModifierType; 708 K : guint; 709begin 710 AccelKeyParse (KeyName.Text, K, Mods); 711 ModCtrl.active := (Mods and Gdk_Control_mask) <> 0; 712 ModShift.active := (Mods and Gdk_Shift_mask) <> 0; 713 ModAlt.active := (Mods and Gdk_Mod1_mask) <> 0; 714 Key.Asinteger := k; 715end; 716 717procedure TListWindow.Accel_AddAccel (Sender : TFPgtkObject; data : pointer); 718var Mods : TGdkModifierType; 719begin 720 Mods := 0; 721 if ModCtrl.active then 722 Mods := Mods + Gdk_Control_Mask; 723 if ModShift.active then 724 Mods := Mods + Gdk_Shift_Mask; 725 if ModAlt.active then 726 Mods := Mods + Gdk_Mod1_Mask; 727 AcceleratorAdd (TheAG, AccelBut, sgClicked, Key.Asinteger, mods, GTK_ACCEL_VISIBLE); 728 AKeyName.refetch; 729end; 730 731const ButBoxCount : integer = 0; 732 733procedure TListWindow.ButBox_AddThem (Sender:TFPgtkObject; data:pointer); 734begin 735 inc (ButBoxCount); 736 VButtons.PackStart (TFPgtkButton.CreateWithLabel (format ('But %d',[ButBoxCount])),false,false,1); 737 HButtons.PackStart (TFPgtkButton.CreateWithLabel (format ('But %d',[ButBoxCount])),false,false,1); 738end; 739 740procedure TListWindow.Layout_runaway (Sender:TFPgtkObject; data:pointer); 741begin 742 randomize; 743 LayoutX := LayoutX + 100 - random(200); 744 if LayoutX < 0 then 745 LayoutX := random(200); 746 LayoutY := LayoutY + 100 - random(200); 747 if LayoutY < 0 then 748 LayoutY := random(200); 749 TheLayout.move (Sender as TFPgtkWidget, LayoutX, LayoutY); 750end; 751 752procedure TListWindow.Calendar_ShowDate (Sender:TFPgtkObject; data:pointer); 753begin 754 ShowMessage ('Calendar', 'Date selected: ' + formatdatetime ('dd/mm/yyyy', cal.date)); 755end; 756 757procedure TlistWindow.AddRemoveButton (Sender:TFPgtkObject; data:pointer); 758var mdb : TMsgDlgBtn; 759begin 760 mdb := TMsgDlgBtn(data); 761 if (Sender as TFPgtkToggleButton).Active then 762 MessageButtons := MessageButtons + [mdb] 763 else 764 MessageButtons := MessageButtons - [mdb]; 765end; 766 767procedure TlistWindow.ShowMessageDialog (Sender:TFPgtkObject; data:pointer); 768begin 769 MessageDlg (Msg.Text, TMsgDlgType(DialogType.ActiveIndex), MessageButtons, 0); 770end; 771 772end. 773