gtkdemo.pp 4.1 KB

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