gtkdemo.pp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. {
  2. GTK (demo) implementation for shedit
  3. Copyright (C) 1999-2000 by Sebastian Guenther ([email protected])
  4. See the file COPYING.FPC, included in this distribution,
  5. for details about the copyright.
  6. This program is distributed in the hope that it will be useful,
  7. but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  9. }
  10. {$MODE objfpc}
  11. {$H+}
  12. program GTKDemo;
  13. uses
  14. SysUtils, Classes,
  15. Doc_text, shedit, sh_pas, sh_xml,
  16. GDK, GTK, GtkSHEdit;
  17. function CreateTextEditWidget(ADoc: TTextDoc): TGtkSHWidget;
  18. begin
  19. Result := TGtkSHWidget.Create(ADoc, TSHTextEdit);
  20. end;
  21. function CreatePasEditWidget(ADoc: TTextDoc): TGtkSHWidget;
  22. var
  23. e: TSHPasEdit;
  24. begin
  25. Result := TGtkSHWidget.Create(ADoc, TSHPasEdit);
  26. e := Result.Edit as TSHPasEdit;
  27. e.shSymbol := Result.AddSHStyle('Symbol', colBrown, colDefault, fsNormal);
  28. e.shKeyword := Result.AddSHStyle('Keyword', colBlack, colDefault, fsBold);
  29. e.shComment := Result.AddSHStyle('Comment', colDarkCyan, colDefault, fsItalics);
  30. e.shDirective := Result.AddSHStyle('Directive', colRed, colDefault, fsItalics);
  31. e.shNumbers := Result.AddSHStyle('Numbers', colDarkMagenta, colDefault, fsNormal);
  32. e.shCharacters := Result.AddSHStyle('Characters', colDarkBlue, colDefault, fsNormal);
  33. e.shStrings := Result.AddSHStyle('Strings', colBlue, colDefault, fsNormal);
  34. e.shAssembler := Result.AddSHStyle('Assembler', colDarkGreen, colDefault, fsNormal);
  35. end;
  36. function CreateXMLEditWidget(ADoc: TTextDoc): TGtkSHWidget;
  37. var
  38. e: TSHXMLEdit;
  39. begin
  40. Result := TGtkSHWidget.Create(ADoc, TSHXMLEdit);
  41. e := Result.Edit as TSHXMLEdit;
  42. e.shTag := Result.AddSHStyle('Tag', colBlack, colDefault, fsBold);
  43. e.shTagName := Result.AddSHStyle('Tag Name', colBlack, colDefault, fsBold);
  44. e.shDefTagName := Result.AddSHStyle('Definition Tag Name', colDarkGreen, colDefault, fsBold);
  45. e.shArgName := Result.AddSHStyle('Argument Name', colBrown, colDefault, fsNormal);
  46. e.shString := Result.AddSHStyle('String', colBlue, colDefault, fsNormal);
  47. e.shReference := Result.AddSHStyle('Reference', colDarkMagenta, colDefault, fsNormal);
  48. e.shInvalid := Result.AddSHStyle('Invalid', colRed, colDefault, fsNormal);
  49. e.shComment := Result.AddSHStyle('Comment', colDarkCyan, colDefault, fsItalics);
  50. e.shCDATA := Result.AddSHStyle('CDATA', colDarkGreen, colDefault, fsNormal);
  51. end;
  52. var
  53. MainWindow, Notebook: PGtkWidget;
  54. Pages: array[0..2] of TGtkSHWidget;
  55. PasDoc, XMLDoc, TxtDoc: TTextDoc;
  56. procedure OnMainWindowDestroyed; cdecl;
  57. begin
  58. gtk_main_quit;
  59. end;
  60. begin
  61. gtk_init(@argc, @argv);
  62. // Create main window
  63. MainWindow := gtk_window_new(GTK_WINDOW_TOPLEVEL);
  64. gtk_widget_set_usize(MainWindow, 600, 400);
  65. gtk_window_set_title(PGtkWindow(MainWindow), 'FPC SHEdit GTK Demo');
  66. gtk_signal_connect(PGtkObject(MainWindow), 'destroy', GTK_SIGNAL_FUNC(@OnMainWindowDestroyed), nil);
  67. // Set up documents
  68. PasDoc := TTextDoc.Create; PasDoc.LoadFromFile('gtkdemo.pp');
  69. XMLDoc := TTextDoc.Create; XMLDoc.LoadFromFile('simple.xml');
  70. TxtDoc := TTextDoc.Create; TxtDoc.LoadFromFile('gtkshedit.pp');
  71. // Create notebook pages (editor widgets)
  72. Pages[0] := CreatePasEditWidget (PasDoc);
  73. Pages[1] := CreateXMLEditWidget (XMLDoc);
  74. Pages[2] := CreateTextEditWidget(TxtDoc);
  75. // Create notebook
  76. Notebook := gtk_notebook_new;
  77. gtk_notebook_append_page(PGtkNotebook(Notebook), Pages[0].Widget, gtk_label_new('Pascal'));
  78. gtk_notebook_append_page(PGtkNotebook(Notebook), Pages[1].Widget, gtk_label_new('XML'));
  79. gtk_notebook_append_page(PGtkNotebook(Notebook), Pages[2].Widget, gtk_label_new('Text'));
  80. gtk_container_add(PGtkContainer(MainWindow), Notebook);
  81. gtk_widget_show(Notebook);
  82. gtk_widget_show(MainWindow);
  83. Pages[0].SetFocus;
  84. gtk_main;
  85. Pages[2].Free;
  86. Pages[1].Free;
  87. Pages[0].Free;
  88. end.