diff --git a/components/aggpas/lazarus/example/AggPasPango_example/AggPasPango_example.ex-meta b/components/aggpas/lazarus/example/AggPasPango_example/AggPasPango_example.ex-meta index f177c2dc41..e74b273f39 100644 --- a/components/aggpas/lazarus/example/AggPasPango_example/AggPasPango_example.ex-meta +++ b/components/aggpas/lazarus/example/AggPasPango_example/AggPasPango_example.ex-meta @@ -1,5 +1,13 @@ -{ "AggPasPango_example" : { - "Category" : "Techniques", - "Keywords" : ["Pango","AGG","textout", "Anti-Grain Geometry", "2D Vector Graphics"], - "Description" : "Demonstrates using Pango to write text on a bitmap and display it in a Lazarus widget.\n\nAggPas is an Object Pascal port of the Anti-Grain Geometry library - AGG,\n originally written by Maxim Shemanarev in industrially standard C++. \n AGG as well as AggPas is Open Source and free of charge 2D vector graphic\n library.\n\nFor further information, see the readme.txt file in /components/aggpas."} -} \ No newline at end of file +{ + "AggPasPango_example" : { + "Category" : "General", + "Keywords" : [ + "Pango", + "AGG", + "textout", + "Anti-Grain Geometry", + "2D Vector Graphics" + ], + "Description" : "Demonstrates using Pango to write text on a bitmap and display it in a Lazarus widget.\n\nAggPas is an Object Pascal port of the Anti-Grain Geometry library - AGG,\n originally written by Maxim Shemanarev in industrially standard C++. \n AGG as well as AggPas is Open Source and free of charge 2D vector graphic\n library.\n\nFor further information, see the readme.txt file in /components/aggpas." + } +} diff --git a/components/aggpas/lazarus/example/AggPas_LCLDemo1_example/AggPas_LCLDemo1_example.ex-meta b/components/aggpas/lazarus/example/AggPas_LCLDemo1_example/AggPas_LCLDemo1_example.ex-meta index 6127ed6673..cb0a12795d 100644 --- a/components/aggpas/lazarus/example/AggPas_LCLDemo1_example/AggPas_LCLDemo1_example.ex-meta +++ b/components/aggpas/lazarus/example/AggPas_LCLDemo1_example/AggPas_LCLDemo1_example.ex-meta @@ -1,5 +1,13 @@ -{ "AggPas_LCLDemo1_example" : { - "Category" : "Techniques", - "Keywords" : ["AggPas","2d vector","Graphics","AGG","Textout"], - "Description" : "Draws and writes some text on a AggLCLCanvas.\n\nAggPas is an Object Pascal port of the Anti-Grain Geometry library - AGG, originally written by Maxim Shemanarev in industrially standard C++. \n AGG as well as AggPas is Open Source and free of charge 2D vector graphic\n library.\n\nFor further information, see the readme.txt file in /components/aggpas."} -} \ No newline at end of file +{ + "AggPas_LCLDemo1_example" : { + "Category" : "General", + "Keywords" : [ + "AggPas", + "2d vector", + "Graphics", + "AGG", + "Textout" + ], + "Description" : "Draws and writes some text on a AggLCLCanvas.\n\nAggPas is an Object Pascal port of the Anti-Grain Geometry library - AGG, originally written by Maxim Shemanarev in industrially standard C++. \n AGG as well as AggPas is Open Source and free of charge 2D vector graphic\n library.\n\nFor further information, see the readme.txt file in /components/aggpas." + } +} diff --git a/components/aggpas/lazarus/example/AggPas_LCLDemo2_example/AggPas_LCLDemo2_example.ex-meta b/components/aggpas/lazarus/example/AggPas_LCLDemo2_example/AggPas_LCLDemo2_example.ex-meta index d300823d08..5d8ba21392 100644 --- a/components/aggpas/lazarus/example/AggPas_LCLDemo2_example/AggPas_LCLDemo2_example.ex-meta +++ b/components/aggpas/lazarus/example/AggPas_LCLDemo2_example/AggPas_LCLDemo2_example.ex-meta @@ -1,5 +1,13 @@ -{ "AggPas_LCLDemo2_example" : { - "Category" : "Techniques", - "Keywords" : ["AGG","Canvas","shapes", "Anti-Grain Geometry", "2D Vector Graphics"], - "Description" : "Demonstrates writing text and a range of shapes to a canvas using AGG.\n\nAggPas is an Object Pascal port of the Anti-Grain Geometry library - AGG,\n originally written by Maxim Shemanarev in industrially standard C++. \n AGG as well as AggPas is Open Source and free of charge 2D vector graphic\n library.\n\nFor further information, see the readme.txt file in /components/aggpas."} -} \ No newline at end of file +{ + "AggPas_LCLDemo2_example" : { + "Category" : "General", + "Keywords" : [ + "AGG", + "Canvas", + "shapes", + "Anti-Grain Geometry", + "2D Vector Graphics" + ], + "Description" : "Demonstrates writing text and a range of shapes to a canvas using AGG.\n\nAggPas is an Object Pascal port of the Anti-Grain Geometry library - AGG,\n originally written by Maxim Shemanarev in industrially standard C++. \n AGG as well as AggPas is Open Source and free of charge 2D vector graphic\n library.\n\nFor further information, see the readme.txt file in /components/aggpas." + } +} diff --git a/components/cairocanvas/example/cairocanvas_example.ex-meta b/components/cairocanvas/example/cairocanvas_example.ex-meta index 1b07b93783..ecdd4e13f1 100644 --- a/components/cairocanvas/example/cairocanvas_example.ex-meta +++ b/components/cairocanvas/example/cairocanvas_example.ex-meta @@ -1,5 +1,5 @@ { "cairocanvas_example" : { - "Category" : "Techniques", + "Category" : "General", "Keywords" : ["Cairo","PDF","Postscript","svg","png"], - "Description" : "Package for use libcairo in fpc. This example does NOT display a GUI, it writes out a number of files, PDF, PS, SVG and PNG the content of which generated within the example.\n\nThis cairocanvas example require the Cairo Graphics and Pango libraries.\n\nSee the associated readme.txt file.\n\n"} + "Description" : "Package for use libcairo in fpc. This example does NOT display a GUI, it writes out a number of files, PDF, PS, SVG and PNG the content of which are generated within the example.\n\nThis cairocanvas example require the Cairo Graphics and Pango libraries.\n\nSee the associated readme.txt file.\n\n"} } \ No newline at end of file diff --git a/components/dbexport/demo/simple/dbexport_demo.ex-meta b/components/dbexport/demo/simple/dbexport_demo.ex-meta index c3b16d4413..94824a257f 100644 --- a/components/dbexport/demo/simple/dbexport_demo.ex-meta +++ b/components/dbexport/demo/simple/dbexport_demo.ex-meta @@ -1,5 +1,5 @@ { "dbexport_demo" : { "Category" : "DBase", - "Keywords" : ["dbase","database","export","Needs work"], - "Description" : "Demonstrates exporting a small database in a number of formats. Accepts an input file of your choice so may even be a useful utility.\nRequires the dbflaz package.\nSee also stdexports.\nAppears to have some UTF8 issues, char may not be displayed correctly and some Pango errors reported to console."} + "Keywords" : ["dbase","database","export"], + "Description" : "Demonstrates exporting a small database in a number of formats. Accepts an input file of your choice so may even be a useful utility.\nRequires the dbflaz package (part of bigide).\nRequires the package LazDBExport be installed.\nSee also stdexports.\n\n"} } \ No newline at end of file diff --git a/components/dbexport/demo/stdexports/stdexports.ex-meta b/components/dbexport/demo/stdexports/stdexports.ex-meta index 322d0a0489..df277911b9 100644 --- a/components/dbexport/demo/stdexports/stdexports.ex-meta +++ b/components/dbexport/demo/stdexports/stdexports.ex-meta @@ -1,5 +1,5 @@ { "stdexports" : { "Category" : "DBase", "Keywords" : ["dbase","database","export","Needs work"], - "Description" : "Demonstrates exporting a small database in a number of formats. Accepts an input file of your choice s may even be a useful utility.\nSee also dbexport_demo.\nPlease see the associated readme.txt file.\nAppears to have some UTF8 issues, char may not be displayed correctly and some Pango errors reported to console."} + "Description" : "Demonstrates exporting a small database in a number of formats. Accepts an input file of your choice s may even be a useful utility.\nSee also dbexport_demo.\nPlease see the associated readme.txt file.\nAppears to have some UTF8 issues, char may not be displayed correctly and some Pango errors reported to console when opening its own test file."} } \ No newline at end of file diff --git a/components/googleapis/demo/calendar/Google_calendar_demo.ex-meta b/components/googleapis/demo/calendar/Google_calendar_demo.ex-meta index 677b27a5f1..20ea25e784 100644 --- a/components/googleapis/demo/calendar/Google_calendar_demo.ex-meta +++ b/components/googleapis/demo/calendar/Google_calendar_demo.ex-meta @@ -1,5 +1,12 @@ -{ "Google_calendar_demo" : { - "Category" : "Techniques", - "Keywords" : ["google api","calendar","Synapse", "Needs Work"], - "Description" : "Demonstrates access to the Google API, as long as Synapse is installed, compiles and starts up fine but not tested because I don't have a Google API Access Code. Its possible that Google no longer supports the OAuth mode that is used here as testing generates a Google Invalid Client rather than a signing request. And does not behave very well on a 'cancel'. \nRequires Synapse from OPM\nRequires the use of a Google API Access Code"} -} \ No newline at end of file +{ + "Google_calendar_demo" : { + "Category" : "General", + "Keywords" : [ + "google api", + "calendar", + "Synapse", + "Needs Work" + ], + "Description" : "Demonstrates access to the Google API, as long as Synapse is installed, compiles and starts up fine but not tested because I don't have a Google API Access Code. Its possible that Google no longer supports the OAuth mode that is used here as testing generates a Google Invalid Client rather than a signing request. And does not behave very well on a 'cancel'. \nRequires Synapse from OPM\nRequires the use of a Google API Access Code" + } +} diff --git a/components/googleapis/demo/discovery/Google_discovery_demo.ex-meta b/components/googleapis/demo/discovery/Google_discovery_demo.ex-meta index 0e749c61f8..b9a4648e39 100644 --- a/components/googleapis/demo/discovery/Google_discovery_demo.ex-meta +++ b/components/googleapis/demo/discovery/Google_discovery_demo.ex-meta @@ -1,5 +1,11 @@ -{ "Google_discovery_demo" : { - "Category" : "Techniques", - "Keywords" : ["Google API", "discovery", "Synapse"], - "Description" : "Finds and displays the Google API Services.\nRequires the synapse package from the OPM."} -} \ No newline at end of file +{ + "Google_discovery_demo" : { + "Category" : "General", + "Keywords" : [ + "Google API", + "discovery", + "Synapse" + ], + "Description" : "Finds and displays the Google API Services.\nRequires the synapse package from the OPM." + } +} diff --git a/components/googleapis/demo/drive/google_drive.ex-meta b/components/googleapis/demo/drive/google_drive.ex-meta index 72b5d8dcec..7fa311f9dd 100644 --- a/components/googleapis/demo/drive/google_drive.ex-meta +++ b/components/googleapis/demo/drive/google_drive.ex-meta @@ -1,5 +1,12 @@ -{ "google_drive" : { - "Category" : "Techniques", - "Keywords" : ["Google API","Synapse","Google Drive", "Needs Work"], - "Description" : "Demonstrates access to the Google API, as long as Synapse is installed, compiles and starts up fine but not tested because I don't have a Google API Access Code. Its possible that Google no longer supports the OAuth mode that is used here as testing generates a Google Invalid Client rather than a signing request. And does not behave very well on a 'cancel'. \nRequires Synapse from OPM\nRequires the use of a Google API Access Code"} -} \ No newline at end of file +{ + "google_drive" : { + "Category" : "General", + "Keywords" : [ + "Google API", + "Synapse", + "Google Drive", + "Needs Work" + ], + "Description" : "Demonstrates access to the Google API, as long as Synapse is installed, compiles and starts up fine but not tested because I don't have a Google API Access Code. Its possible that Google no longer supports the OAuth mode that is used here as testing generates a Google Invalid Client rather than a signing request. And does not behave very well on a 'cancel'. \nRequires Synapse from OPM\nRequires the use of a Google API Access Code" + } +} diff --git a/components/googleapis/demo/gmail/google_gmail.ex-meta b/components/googleapis/demo/gmail/google_gmail.ex-meta index a16626698a..f073179bcb 100644 --- a/components/googleapis/demo/gmail/google_gmail.ex-meta +++ b/components/googleapis/demo/gmail/google_gmail.ex-meta @@ -1,5 +1,12 @@ -{ "google_gmail" : { - "Category" : "Techniques", - "Keywords" : ["Google API","Synapse","gmail", "Needs Work"], - "Description" : "Demonstrates access to the Google API, as long as Synapse is installed, compiles and starts up fine but not tested because I don't have a Google API Access Code. Its possible that Google no longer supports the OAuth mode that is used here as testing generates a Google Invalid Client rather than a signing request. And does not behave very well on a 'cancel'. \nRequires Synapse from OPM\nRequires the use of a Google API Access Code"} -} \ No newline at end of file +{ + "google_gmail" : { + "Category" : "General", + "Keywords" : [ + "Google API", + "Synapse", + "gmail", + "Needs Work" + ], + "Description" : "Demonstrates access to the Google API, as long as Synapse is installed, compiles and starts up fine but not tested because I don't have a Google API Access Code. Its possible that Google no longer supports the OAuth mode that is used here as testing generates a Google Invalid Client rather than a signing request. And does not behave very well on a 'cancel'. \nRequires Synapse from OPM\nRequires the use of a Google API Access Code" + } +} diff --git a/components/googleapis/demo/tasks/Google_tasks_demo.ex-meta b/components/googleapis/demo/tasks/Google_tasks_demo.ex-meta index cfc19932ed..06870f2d85 100644 --- a/components/googleapis/demo/tasks/Google_tasks_demo.ex-meta +++ b/components/googleapis/demo/tasks/Google_tasks_demo.ex-meta @@ -1,5 +1,12 @@ -{ "Google_tasks_demo" : { - "Category" : "Techniques", - "Keywords" : ["Google API","Synapse","Tasks", "Needs Work"], - "Description" : "Demonstrates access to the Google API, as long as Synapse is installed, compiles and starts up fine but not tested because I don't have a Google API Access Code. Its possible that Google no longer supports the OAuth mode that is used here as testing generates a Google Invalid Client rather than a signing request. And does not behave very well on a 'cancel'. \nRequires Synapse from OPM.\nRequires the use of a Google API Access Code"} -} \ No newline at end of file +{ + "Google_tasks_demo" : { + "Category" : "General", + "Keywords" : [ + "Google API", + "Synapse", + "Tasks", + "Needs Work" + ], + "Description" : "Demonstrates access to the Google API, as long as Synapse is installed, compiles and starts up fine but not tested because I don't have a Google API Access Code. Its possible that Google no longer supports the OAuth mode that is used here as testing generates a Google Invalid Client rather than a signing request. And does not behave very well on a 'cancel'. \nRequires Synapse from OPM.\nRequires the use of a Google API Access Code" + } +} diff --git a/components/lazreport/samples/ChildBand_Example/Laz_Report_ChildBand_Example.ex-meta b/components/lazreport/samples/ChildBand_Example/Laz_Report_ChildBand_Example.ex-meta new file mode 100644 index 0000000000..1294aa2276 --- /dev/null +++ b/components/lazreport/samples/ChildBand_Example/Laz_Report_ChildBand_Example.ex-meta @@ -0,0 +1,5 @@ +{ "Laz_Report_ChildBand_Example" : { + "Category" : "LazReport", + "Keywords" : ["LazReport","child","filter","TfrBand"], + "Description" : "Demonstrates filtering LazReport content using the Band approach.\n\nRequires the LazReport package be installed. \n"} +} \ No newline at end of file diff --git a/components/lazreport/samples/Demo_CrossTab/Demo_CrossTab.ex-meta b/components/lazreport/samples/Demo_CrossTab/Demo_CrossTab.ex-meta new file mode 100644 index 0000000000..94636a058e --- /dev/null +++ b/components/lazreport/samples/Demo_CrossTab/Demo_CrossTab.ex-meta @@ -0,0 +1,5 @@ +{ "Demo_CrossTab" : { + "Category" : "DBase", + "Keywords" : ["Interbase", "Firebird", "crosstab"], + "Description" : "Builds but not tested.\nRequires Interbase/Firebird to be installed before running."} +} \ No newline at end of file diff --git a/components/lazreport/samples/console_cgi_http/LazReport_console_cgi_http.ex-meta b/components/lazreport/samples/console_cgi_http/LazReport_console_cgi_http.ex-meta new file mode 100644 index 0000000000..20c63f1a21 --- /dev/null +++ b/components/lazreport/samples/console_cgi_http/LazReport_console_cgi_http.ex-meta @@ -0,0 +1,12 @@ +{ + "LazReport_console_cgi_http" : { + "Category" : "LazReport", + "Keywords" : [ + "LazReport", + "http server", + "console", + "powerpdf" + ], + "Description" : "Builds an http server and several versions of a client console app that work with a database and LazReport. \n\nRequires the powerpdf package from On Line Package manager.\nNote: Select a build mode (other than 'Default') before building.\nNote: There is an extensive readme.txt that you almost certainly need to read.\n\n" + } +} diff --git a/components/lazreport/samples/detail_reports/countries.dbf b/components/lazreport/samples/detail_reports/countries.dbf new file mode 100644 index 0000000000..9e87aec864 Binary files /dev/null and b/components/lazreport/samples/detail_reports/countries.dbf differ diff --git a/components/lazreport/samples/detail_reports/detail_reports.ex-meta b/components/lazreport/samples/detail_reports/detail_reports.ex-meta new file mode 100644 index 0000000000..f543e59378 --- /dev/null +++ b/components/lazreport/samples/detail_reports/detail_reports.ex-meta @@ -0,0 +1,5 @@ +{ "detail_reports" : { + "Category" : "LazReport", + "Keywords" : ["LazReport","Interbase"], + "Description" : "Demonstrates importing data from databases and speadsheets into a LazReport.\n\nRequires lazReport, lr_OfficeImport, lr_tdbf, lr_SqlDB packages.\nRequires FPSpreadsheet from OPM (yes, including dcpcrypt).\nRequires the Firebird libraries to run the Firebird part of demo but builds fine without.\n"} +} \ No newline at end of file diff --git a/components/lazreport/samples/editor/LazReport_editor.ex-meta b/components/lazreport/samples/editor/LazReport_editor.ex-meta new file mode 100644 index 0000000000..4d13377bed --- /dev/null +++ b/components/lazreport/samples/editor/LazReport_editor.ex-meta @@ -0,0 +1,5 @@ +{ "LazReport_editor" : { + "Category" : "LazReport", + "Keywords" : ["LazReport","editor","printing"], + "Description" : "A quite expansive demonstration of LazReport including preparing the report in a number of views and printing.\n\nRequires that LazReport, lr_tdbf, lr_add_function and lr_extexp be installed before building.\nHas an extensive readme.txt file.\n\n"} +} \ No newline at end of file diff --git a/components/lazreport/samples/enduser_reports/dbf_demo/LazReport_dbf_demo.ex-meta b/components/lazreport/samples/enduser_reports/dbf_demo/LazReport_dbf_demo.ex-meta new file mode 100644 index 0000000000..03c59e99a6 --- /dev/null +++ b/components/lazreport/samples/enduser_reports/dbf_demo/LazReport_dbf_demo.ex-meta @@ -0,0 +1,5 @@ +{ "LazReport_dbf_demo" : { + "Category" : "LazReport", + "Keywords" : ["LazReport","DBf"], + "Description" : "Demonstrates a simple LazReport obtaining data from a DBf file.\n\nRequires LazReport, lr_tdbf , lr_dialogdesign package to build."} +} \ No newline at end of file diff --git a/components/lazreport/samples/enduser_reports/dbf_demo/list.dbf b/components/lazreport/samples/enduser_reports/dbf_demo/list.dbf index f5b79d906a..2153be9f8f 100644 Binary files a/components/lazreport/samples/enduser_reports/dbf_demo/list.dbf and b/components/lazreport/samples/enduser_reports/dbf_demo/list.dbf differ diff --git a/components/lazreport/samples/enduser_reports/dbf_demo/list.mdx b/components/lazreport/samples/enduser_reports/dbf_demo/list.mdx new file mode 100644 index 0000000000..bcb302628d Binary files /dev/null and b/components/lazreport/samples/enduser_reports/dbf_demo/list.mdx differ diff --git a/components/lazreport/samples/enduser_reports/sql_demo/LazReport_sql_demo.ex-meta b/components/lazreport/samples/enduser_reports/sql_demo/LazReport_sql_demo.ex-meta new file mode 100644 index 0000000000..c0ce3894a2 --- /dev/null +++ b/components/lazreport/samples/enduser_reports/sql_demo/LazReport_sql_demo.ex-meta @@ -0,0 +1,5 @@ +{ "LazReport_sql_demo" : { + "Category" : "LazReport", + "Keywords" : ["LazReport","Interbase","Firebird"], + "Description" : "Requires lr_tdbf, lr_SqlDB, lr_dialogdesign packages to build.\nRequires InterBase / Firebird client libraries to run.\n"} +} \ No newline at end of file diff --git a/components/lazreport/samples/enduser_reports/test_lr_formstorage/test_lr_formstorage.ex-meta b/components/lazreport/samples/enduser_reports/test_lr_formstorage/test_lr_formstorage.ex-meta new file mode 100644 index 0000000000..d025d99724 --- /dev/null +++ b/components/lazreport/samples/enduser_reports/test_lr_formstorage/test_lr_formstorage.ex-meta @@ -0,0 +1,11 @@ +{ + "test_lr_formstorage" : { + "Category" : "LazReport", + "Keywords" : [ + "LazReport", + "prompt", + "input" + ], + "Description" : "Demonstrates prompting the end user for input that is used in a LazReport\n\nRequires lr_DialogDesign package be installed.\n" + } +} diff --git a/components/lazreport/samples/report_url/Laz_report_url.ex-meta b/components/lazreport/samples/report_url/Laz_report_url.ex-meta new file mode 100644 index 0000000000..4d4e670324 --- /dev/null +++ b/components/lazreport/samples/report_url/Laz_report_url.ex-meta @@ -0,0 +1,5 @@ +{ "Laz_report_url" : { + "Category" : "LazReport", + "Keywords" : ["LazReport","URL"], + "Description" : "Demonstrates a basic report that contains several URLs. The person reading the report can click a URL and its content is acted on by the report. \n\nRequires the LazReport package.\n"} +} \ No newline at end of file diff --git a/components/lazreport/samples/stringgrid/LazReport_stringgrid.ex-meta b/components/lazreport/samples/stringgrid/LazReport_stringgrid.ex-meta new file mode 100644 index 0000000000..117d7d0216 --- /dev/null +++ b/components/lazreport/samples/stringgrid/LazReport_stringgrid.ex-meta @@ -0,0 +1,5 @@ +{ "LazReport_stringgrid" : { + "Category" : "LazReport", + "Keywords" : ["LazReport","stringgrid","basic"], + "Description" : "A very basic LazReport project, no database and the data is not saved. But does demonstrate basic use of LazReport.\n\nDoes require the LazReport package.\n\n"} +} \ No newline at end of file diff --git a/components/lazreport/samples/userds/LazReport_userds.ex-meta b/components/lazreport/samples/userds/LazReport_userds.ex-meta new file mode 100644 index 0000000000..2f668f2a35 --- /dev/null +++ b/components/lazreport/samples/userds/LazReport_userds.ex-meta @@ -0,0 +1,5 @@ +{ "LazReport_userds" : { + "Category" : "Beginner", + "Keywords" : ["LazReport","userds"], + "Description" : "This sample demonstrates several LazReport features: how to build a custom Crosstab report using TfrUserDatasets only, using format script to control color and text content of cell report, and also how to use runtime events to modify report item look. See in app notes !\n\nIt requires the package LazReport be installed, from the Main Menu, 'Packages'->'Install/Uninstall Packages', enter 'LazReport' on RHS, select it in the list and click \"Install Selection\", 'Save and Rebuild IDE', 'Continue'. \n\nThere are more LazReport examples under the LazReport category.\n\n"} +} \ No newline at end of file diff --git a/components/lazreport/source/addons/lrFclPDFExport/demo/lrFclPDFExport_demo.ex-meta b/components/lazreport/source/addons/lrFclPDFExport/demo/lrFclPDFExport_demo.ex-meta index 6a6e536f5d..24c873eacc 100644 --- a/components/lazreport/source/addons/lrFclPDFExport/demo/lrFclPDFExport_demo.ex-meta +++ b/components/lazreport/source/addons/lrFclPDFExport/demo/lrFclPDFExport_demo.ex-meta @@ -1,5 +1,5 @@ { "lrFclPDFExport_demo" : { - "Category" : "Components", - "Keywords" : ["LazReport","PDF","lrPDFExport","lr_pdfexport", "needs work"], - "Description" : "Demonstrates how to generate PDF reports from LazReport.\nRequires the package lr_PDFExport be installed before loading.\nNote that it generates an eror while starting up, clGray is not a valid integer. Its coming from the LRF file, needs fixing."} + "Category" : "LazReport", + "Keywords" : ["LazReport","PDF","lrPDFExport","lr_pdfexport"], + "Description" : "Demonstrates how to generate PDF reports from LazReport.\nRequires the package lr_PDFExport be installed before loading.\n"} } \ No newline at end of file diff --git a/components/lazreport/source/addons/lrcodereport/sample/lr_codereport_sample.ex-meta b/components/lazreport/source/addons/lrcodereport/sample/lr_codereport_sample.ex-meta index 27fbde934a..ddac6f9f99 100644 --- a/components/lazreport/source/addons/lrcodereport/sample/lr_codereport_sample.ex-meta +++ b/components/lazreport/source/addons/lrcodereport/sample/lr_codereport_sample.ex-meta @@ -1,5 +1,5 @@ { "lr_codereport_sample" : { - "Category" : "Components", + "Category" : "LazReport", "Keywords" : ["LazReport","CodeReport","PDF"], - "Description" : "Generates a report and can export it as a PDF.\nRequires LazReportPDFExport and lr_CodeReport\n\n "} + "Description" : "Generates a report and can export it as a PDF.\nRequires LazReportPDFExport and lr_CodeReport\nRequires powerPDF from the OnLine Package Manager (OPM)."} } \ No newline at end of file diff --git a/components/lazreport/source/addons/lrspreadsheetexport/demo/lrspreadsheetexport_demo.ex-meta b/components/lazreport/source/addons/lrspreadsheetexport/demo/lrspreadsheetexport_demo.ex-meta index 5daf76d939..e9e3547a50 100644 --- a/components/lazreport/source/addons/lrspreadsheetexport/demo/lrspreadsheetexport_demo.ex-meta +++ b/components/lazreport/source/addons/lrspreadsheetexport/demo/lrspreadsheetexport_demo.ex-meta @@ -1,5 +1,11 @@ -{ "lrspreadsheetexport_demo" : { - "Category" : "Components", - "Keywords" : ["lazreport","spreadsheet","export"], - "Description" : "Demonstrates creating and exporting a spreadsheet in several formats, ODS, XLS, XLSX\n\nDepends on fpspreadsheet in OPM, install FIRST !\nDepends on lrSpreadSheetExport.\n\n"} -} \ No newline at end of file +{ + "lrspreadsheetexport_demo" : { + "Category" : "General", + "Keywords" : [ + "lazreport", + "spreadsheet", + "export" + ], + "Description" : "Demonstrates creating and exporting a spreadsheet in several formats, ODS, XLS, XLSX\n\nDepends on fpspreadsheet in OPM, install FIRST !\nDepends on lrSpreadSheetExport.\n\n" + } +} diff --git a/components/mouseandkeyinput/example/mouseandkeyinput_example.ex-meta b/components/mouseandkeyinput/example/mouseandkeyinput_example.ex-meta index 2f62a6c639..5427108723 100644 --- a/components/mouseandkeyinput/example/mouseandkeyinput_example.ex-meta +++ b/components/mouseandkeyinput/example/mouseandkeyinput_example.ex-meta @@ -1,5 +1,5 @@ { "mouseandkeyinput_example" : { - "Category" : "Techniques", - "Keywords" : ["mouse", "keyboard", "input", "simulate"], - "Description" : "Shows how to simulate mouse and keyboard input programatically, for example triggered by the press of a button."} + "Category" : "General", + "Keywords" : ["mouse","keyboard","input","simulate"], + "Description" : "Shows how to simulate mouse and keyboard input programmatically, for example triggered by the press of a button."} } \ No newline at end of file diff --git a/components/mrumenu/demo/mrumenu_demo.ex-meta b/components/mrumenu/demo/mrumenu_demo.ex-meta index 6e74468093..a97206d273 100644 --- a/components/mrumenu/demo/mrumenu_demo.ex-meta +++ b/components/mrumenu/demo/mrumenu_demo.ex-meta @@ -1,5 +1,11 @@ -{ "mrumenu_demo" : { - "Category" : "Techniques", - "Keywords" : ["MRU", "most recently used", "open"], - "Description" : "Appears to demonstrate a most recently used file open behaviour. Perhaps for Operating Systems that don't have that available in their normal file manager interface ? "} -} \ No newline at end of file +{ + "mrumenu_demo" : { + "Category" : "General", + "Keywords" : [ + "MRU", + "most recently used", + "open" + ], + "Description" : "Appears to demonstrate a most recently used file open behaviour. Perhaps for Operating Systems that don't have that available in their normal file manager interface ? " + } +} diff --git a/components/opengl/rotate_example/rotate_example.ex-meta b/components/opengl/rotate_example/rotate_example.ex-meta index b4622631ce..9b61acd2c3 100644 --- a/components/opengl/rotate_example/rotate_example.ex-meta +++ b/components/opengl/rotate_example/rotate_example.ex-meta @@ -1,5 +1,11 @@ -{ "rotate_example" : { - "Category" : "Techniques", - "Keywords" : ["opengl", "graphics", "rotating cube"], - "Description" : "Demo, using OpenGL of the classic rotating colored cube. "} -} \ No newline at end of file +{ + "rotate_example" : { + "Category" : "General", + "Keywords" : [ + "opengl", + "graphics", + "rotating cube" + ], + "Description" : "Demo, using OpenGL of the classic rotating colored cube. " + } +} diff --git a/components/opengl/usergui_example/usergui_example.ex-meta b/components/opengl/usergui_example/usergui_example.ex-meta index 8cd5bb03d9..0e347bce3b 100644 --- a/components/opengl/usergui_example/usergui_example.ex-meta +++ b/components/opengl/usergui_example/usergui_example.ex-meta @@ -1,5 +1,11 @@ -{ "usergui_example" : { - "Category" : "Techniques", - "Keywords" : ["opengl", "OpenGlContext", "Controls"], - "Description" : "Includes a unit, OpenGLContext that has a number of controls build using OpenGL and demonstrates a basic (and quite retro looking) user interface, buttons, sliders etc."} +{ + "usergui_example" : { + "Category" : "General", + "Keywords" : [ + "opengl", + "OpenGlContext", + "Controls" + ], + "Description" : "Includes a unit, OpenGLContext that has a number of controls build using OpenGL and demonstrates a basic (and quite retro looking) user interface, buttons, sliders etc." + } } diff --git a/components/paradox/demo/paradox_demo.ex-meta b/components/paradox/demo/paradox_demo.ex-meta index 4f082443ab..c7efadf85b 100644 --- a/components/paradox/demo/paradox_demo.ex-meta +++ b/components/paradox/demo/paradox_demo.ex-meta @@ -1,5 +1,5 @@ { "paradox_demo" : { "Category" : "DBase", "Keywords" : ["paradox","dbase","db","Needs Work"], - "Description" : "Appears to demonstrate basic use of Paradox Database.\nRequires the lazparadox package (in Laz SRC Tree) to be installed.\nRequires Paradox library on your system, eg on Debian pxlib1.\nGenerates a message \"unable to find TDatasource...\" despite it being in the use db unit and compiling and running fine.\n\n"} + "Description" : "Appears to demonstrate basic use of Paradox Database.\nRequires the lazparadox package (in Laz SRC Tree) to be installed.\nRequires Paradox library on your system, eg on Debian pxlib1.\nGenerates a message \"unable to find TDatasource...\", probably looking for a design time component that it cannot find, neither can I.\n\nIt does compile and run fine, but you cannot view the form or see it in the Object Inspector. Needs fixing !\n\n"} } \ No newline at end of file diff --git a/components/plotfunction/demo/event/plotevent_demo.ex-meta b/components/plotfunction/demo/event/plotevent_demo.ex-meta index f0147cb559..3a0f3f19ea 100644 --- a/components/plotfunction/demo/event/plotevent_demo.ex-meta +++ b/components/plotfunction/demo/event/plotevent_demo.ex-meta @@ -1,5 +1,11 @@ -{ "plotevent_demo" : { - "Category" : "Components", - "Keywords" : ["plotpanel","event driven","plotting data"], - "Description" : "Demonstrates plotting data obtained from a procedure. That procedure could be a Lazarus Event (but is not in the example).\n"} -} \ No newline at end of file +{ + "plotevent_demo" : { + "Category" : "General", + "Keywords" : [ + "plotpanel", + "event driven", + "plotting data" + ], + "Description" : "Demonstrates plotting data obtained from a procedure. That procedure could be a Lazarus Event (but is not in the example).\n" + } +} diff --git a/components/plotfunction/demo/expression/plotfunction_expression.ex-meta b/components/plotfunction/demo/expression/plotfunction_expression.ex-meta index 87552bd117..d52f064d05 100644 --- a/components/plotfunction/demo/expression/plotfunction_expression.ex-meta +++ b/components/plotfunction/demo/expression/plotfunction_expression.ex-meta @@ -1,5 +1,11 @@ -{ "plotfunction_expression" : { - "Category" : "Components", - "Keywords" : ["fpexprpars", "plot", "expression"], - "Description" : "Plots a square function with adjustable values."} -} \ No newline at end of file +{ + "plotfunction_expression" : { + "Category" : "General", + "Keywords" : [ + "fpexprpars", + "plot", + "expression" + ], + "Description" : "Plots a square function with adjustable values." + } +} diff --git a/components/printers/samples/dialogs/Printer_dialogs.ex-meta b/components/printers/samples/dialogs/Printer_dialogs.ex-meta new file mode 100644 index 0000000000..4c339ca6de --- /dev/null +++ b/components/printers/samples/dialogs/Printer_dialogs.ex-meta @@ -0,0 +1,5 @@ +{ "Printer_dialogs" : { + "Category" : "Beginner", + "Keywords" : ["Printer","dialogs","settings"], + "Description" : "Demonstrates how to display various printer dialogs and how to get printer data.\n\nAppears to be a issue in this project where you need to (manually) build before clicking run. \n\n"} +} \ No newline at end of file diff --git a/components/printers/samples/rawmode/Printer_rawmode.ex-meta b/components/printers/samples/rawmode/Printer_rawmode.ex-meta new file mode 100644 index 0000000000..388dc0d834 --- /dev/null +++ b/components/printers/samples/rawmode/Printer_rawmode.ex-meta @@ -0,0 +1,11 @@ +{ + "Printer_rawmode" : { + "Category" : "General", + "Keywords" : [ + "Printer", + "raw", + "dot matrix" + ], + "Description" : "Shows how to write to a dot matrix in raw mode. Probably not very useful (or safe) on the more modern page orientated printers. So, please take care !" + } +} diff --git a/components/tachart/demo/3d/TAChart_3d.ex-meta b/components/tachart/demo/3d/TAChart_3d.ex-meta new file mode 100644 index 0000000000..c13b9dea37 --- /dev/null +++ b/components/tachart/demo/3d/TAChart_3d.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_3d" : { + "Category" : "TAChart", + "Keywords" : ["TAChart","3d"], + "Description" : "Demonstrates some 3d charts using randomly generated data. Chart1 has three 'series' properties, each one has a data 'source' set to a TRandomChartSource."} +} \ No newline at end of file diff --git a/components/tachart/demo/aggpas/TAChart_aggpas.ex-meta b/components/tachart/demo/aggpas/TAChart_aggpas.ex-meta index 029c096b03..d449cbc257 100644 --- a/components/tachart/demo/aggpas/TAChart_aggpas.ex-meta +++ b/components/tachart/demo/aggpas/TAChart_aggpas.ex-meta @@ -1,5 +1,5 @@ { "TAChart_aggpas" : { "Category" : "TAChart", "Keywords" : ["TAChart","aggpas","Needs Work"], - "Description" : "\n\nrequires the package tachartaggpas be installed before loading.\n\nRaises an Exception, SIGFPE at startup.\n"} + "Description" : "requires the package tachartaggpas be installed before loading.\n\nRaises an Exception, SIGFPE at startup.\n"} } \ No newline at end of file diff --git a/components/tachart/demo/axis/TAChart_axis.ex-meta b/components/tachart/demo/axis/TAChart_axis.ex-meta new file mode 100644 index 0000000000..7dd3fecb2c --- /dev/null +++ b/components/tachart/demo/axis/TAChart_axis.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_axis" : { + "Category" : "TAChart", + "Keywords" : ["TAChart", "Axis"], + "Description" : "Demonstrates a range of styles and types of axis on a chart."} +} \ No newline at end of file diff --git a/components/tachart/demo/barseriesshapes/barseriesshapes.ex-meta b/components/tachart/demo/barseriesshapes/barseriesshapes.ex-meta new file mode 100644 index 0000000000..eea53550ac --- /dev/null +++ b/components/tachart/demo/barseriesshapes/barseriesshapes.ex-meta @@ -0,0 +1,5 @@ +{ "barseriesshapes" : { + "Category" : "TAChart", + "Keywords" : ["TAChart", "bar chart", "shapes"], + "Description" : "Demonstrates the different shapes that can be used to draw the bars in a bar chart."} +} \ No newline at end of file diff --git a/components/tachart/demo/basic/TAChart_basic.ex-meta b/components/tachart/demo/basic/TAChart_basic.ex-meta new file mode 100644 index 0000000000..8c4e7916c1 --- /dev/null +++ b/components/tachart/demo/basic/TAChart_basic.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_basic" : { + "Category" : "Beginner", + "Keywords" : ["TAChart","basic"], + "Description" : "A good introduction to using TAChart, will draw a number of different charts (based on random data) in just over 300 lines of code.\n\nThere are more TAChart examples under the TAChart category."} +} \ No newline at end of file diff --git a/components/tachart/demo/bgra/TAChart_bgra.ex-meta b/components/tachart/demo/bgra/TAChart_bgra.ex-meta new file mode 100644 index 0000000000..575888912a --- /dev/null +++ b/components/tachart/demo/bgra/TAChart_bgra.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_bgra" : { + "Category" : "TAChart", + "Keywords" : ["TAChart","bgra","bitmap","bgrabitmappack","TAGUIConnectorBGRA","BGRAGradients"], + "Description" : "Demonstrates using bgra to enhance the appearance of charts.\nThis demo requires both BGRABitmap from the OnLine Package Manager and TACharBGRA from the Lazarus supplied packages.\n"} +} \ No newline at end of file diff --git a/components/tachart/demo/charteditor/TAChart_editor.ex-meta b/components/tachart/demo/charteditor/TAChart_editor.ex-meta new file mode 100644 index 0000000000..936d1c984f --- /dev/null +++ b/components/tachart/demo/charteditor/TAChart_editor.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_editor" : { + "Category" : "TAChart", + "Keywords" : ["TAChart","Chart Editor","Interactive","Attributes"], + "Description" : "Has a chart with several data series displayed, click on some aspect of it and see an interactive dialog allowing you to alter the relevant attributes. "} +} \ No newline at end of file diff --git a/components/tachart/demo/datapointtools/TAChart_datapointtools.ex-meta b/components/tachart/demo/datapointtools/TAChart_datapointtools.ex-meta new file mode 100644 index 0000000000..1e0218b54c --- /dev/null +++ b/components/tachart/demo/datapointtools/TAChart_datapointtools.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_datapointtools" : { + "Category" : "TAChart", + "Keywords" : ["TAChart","data point tools","cross hair","hints"], + "Description" : "Demonstrates a number of tools that allow you to examine and alter data points for a range of plot types."} +} \ No newline at end of file diff --git a/components/tachart/demo/db/TAChart_db.ex-meta b/components/tachart/demo/db/TAChart_db.ex-meta new file mode 100644 index 0000000000..9e93cbf9d6 --- /dev/null +++ b/components/tachart/demo/db/TAChart_db.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_db" : { + "Category" : "TAChart", + "Keywords" : ["TAChart", "dbase", "MemDataset"], + "Description" : "Demonstrates plotting a TAChart from data from a database."} +} \ No newline at end of file diff --git a/components/tachart/demo/distance/TAChart_distance.ex-meta b/components/tachart/demo/distance/TAChart_distance.ex-meta new file mode 100644 index 0000000000..0a3a944181 --- /dev/null +++ b/components/tachart/demo/distance/TAChart_distance.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_distance" : { + "Category" : "TAChart", + "Keywords" : ["TAChart", "measure", "distance"], + "Description" : "How to measure distances on a chart using the mouse."} +} \ No newline at end of file diff --git a/components/tachart/demo/dragdrop/TAChart_dragdrop.ex-meta b/components/tachart/demo/dragdrop/TAChart_dragdrop.ex-meta new file mode 100644 index 0000000000..ef273e87a5 --- /dev/null +++ b/components/tachart/demo/dragdrop/TAChart_dragdrop.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_dragdrop" : { + "Category" : "TAChart", + "Keywords" : ["TAChart", "Drag and Drop", "DragDrop"], + "Description" : "Demonstrates dragging chart data points for both line and bar chart."} +} \ No newline at end of file diff --git a/components/tachart/demo/events/TAChart_events.ex-meta b/components/tachart/demo/events/TAChart_events.ex-meta new file mode 100644 index 0000000000..9e9e76cf1e --- /dev/null +++ b/components/tachart/demo/events/TAChart_events.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_events" : { + "Category" : "TAChart", + "Keywords" : ["TAChart","events","OnBeforeDrawBackground","OnBeforeDrawBackWall","BeforeDrawBar"], + "Description" : "Demonstrates how to respond to some TAChart drawing events."} +} \ No newline at end of file diff --git a/components/tachart/demo/fpvectorial/fpvectorial.ex-meta b/components/tachart/demo/fpvectorial/fpvectorial.ex-meta index f8c73f2cd7..fa31dc9344 100644 --- a/components/tachart/demo/fpvectorial/fpvectorial.ex-meta +++ b/components/tachart/demo/fpvectorial/fpvectorial.ex-meta @@ -1,5 +1,5 @@ { "fpvectorial" : { "Category" : "TAChart", "Keywords" : ["TaChart","TvVectorialFormat","TFPVectorialDrawer"], - "Description" : "Uses Vectorial to display (and export) some line and block charts.\n\nNote, generates a message that it has failed to open a particular TrueTypeFont that is definitly available but works anyway. "} + "Description" : "Uses Vectorial to display (and export) some line and block charts.\n\nNote, generates a message that it has failed to open a particular TrueTypeFont that is definitely available but works anyway. "} } \ No newline at end of file diff --git a/components/tachart/demo/func/TAChart_func.ex-meta b/components/tachart/demo/func/TAChart_func.ex-meta new file mode 100644 index 0000000000..17c7d130a4 --- /dev/null +++ b/components/tachart/demo/func/TAChart_func.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_func" : { + "Category" : "TAChart", + "Keywords" : ["TAChart", "function"], + "Description" : "Plot a number of functions in TAChart."} +} \ No newline at end of file diff --git a/components/tachart/demo/html/TAChart_html.ex-meta b/components/tachart/demo/html/TAChart_html.ex-meta new file mode 100644 index 0000000000..79ea0aac8e --- /dev/null +++ b/components/tachart/demo/html/TAChart_html.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_html" : { + "Category" : "TAChart", + "Keywords" : ["TAChart", "html", "export", "svg", "Needs Work"], + "Description" : "Draws a chart with some HTML components although its not clear why it does so. Can save or export that chart in WMF (Windows only) or SVG. Can copy that chart, as a bitmap to clipboard (but see below).\n\nHas problems on Linux (at least).\n1. When click the SVG button, fails to load a FreeType font when running in the IDE. OK when standalone.\n2. When click \"copy to clipboard\", a crash is triggered (it should copy a bitmap image).\n3. Horiz size needs to be increased."} +} \ No newline at end of file diff --git a/components/tachart/demo/lazreport/TAChart_lazreport.ex-meta b/components/tachart/demo/lazreport/TAChart_lazreport.ex-meta index 0793e28aaf..2dfc488282 100644 --- a/components/tachart/demo/lazreport/TAChart_lazreport.ex-meta +++ b/components/tachart/demo/lazreport/TAChart_lazreport.ex-meta @@ -1,5 +1,10 @@ -{ "TAChart_lazreport" : { - "Category" : "TAChart", - "Keywords" : ["TAChart","LazReport"], - "Description" : "Load a LazReport into a TAChart.\n\nRequires the package LazReport\n\n"} -} \ No newline at end of file +{ + "TAChart_lazreport" : { + "Category" : "LazReport", + "Keywords" : [ + "TAChart", + "LazReport" + ], + "Description" : "Load a LazReport into a TAChart.\n\nRequires the package LazReport\n\n" + } +} diff --git a/components/tachart/demo/legend/TAChart_legend.ex-meta b/components/tachart/demo/legend/TAChart_legend.ex-meta new file mode 100644 index 0000000000..a48c6b7a1a --- /dev/null +++ b/components/tachart/demo/legend/TAChart_legend.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_legend" : { + "Category" : "TAChart", + "Keywords" : ["TAChart","Legend"], + "Description" : "Demonstrates various legend styles in a TAChart. Alignment, text attributes etc."} +} \ No newline at end of file diff --git a/components/tachart/demo/line/TAChart_line.ex-meta b/components/tachart/demo/line/TAChart_line.ex-meta new file mode 100644 index 0000000000..b84806f1b6 --- /dev/null +++ b/components/tachart/demo/line/TAChart_line.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_line" : { + "Category" : "TAChart", + "Keywords" : ["TAChart","line chart","pointers"], + "Description" : "Demonstrates a line chart and the various pointers it might use."} +} \ No newline at end of file diff --git a/components/tachart/demo/liveview/TAChart_liveview.ex-meta b/components/tachart/demo/liveview/TAChart_liveview.ex-meta new file mode 100644 index 0000000000..59ec1616d0 --- /dev/null +++ b/components/tachart/demo/liveview/TAChart_liveview.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_liveview" : { + "Category" : "TAChart", + "Keywords" : ["TAChart", "live view", "add data"], + "Description" : "Demonstrates adding data points to a chart, in this case from a user click and a random number but obvious how to do so from some other process. "} +} \ No newline at end of file diff --git a/components/tachart/demo/nan/TAChart_nan.ex-meta b/components/tachart/demo/nan/TAChart_nan.ex-meta new file mode 100644 index 0000000000..511a550202 --- /dev/null +++ b/components/tachart/demo/nan/TAChart_nan.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_nan" : { + "Category" : "TAChart", + "Keywords" : ["TAChart", "nan", "not a number"], + "Description" : "Demonstrates how TAChart deals with a data series that contain a nan (not a number). "} +} \ No newline at end of file diff --git a/components/tachart/demo/navigate/TAChart_navigate.ex-meta b/components/tachart/demo/navigate/TAChart_navigate.ex-meta index 6fa3989260..1d948652e7 100644 --- a/components/tachart/demo/navigate/TAChart_navigate.ex-meta +++ b/components/tachart/demo/navigate/TAChart_navigate.ex-meta @@ -1,5 +1,5 @@ { "TAChart_navigate" : { "Category" : "TAChart", "Keywords" : ["TAChart","navigate","zoom"], - "Description" : "Demonstrates how to navigate and zoom around a chart.\n\nHas a small navpanel that does not appear to work as expected."} + "Description" : "Demonstrates how to navigate and zoom around a chart.\n\n"} } \ No newline at end of file diff --git a/components/tachart/demo/nogui/TAChart_nogui.ex-meta b/components/tachart/demo/nogui/TAChart_nogui.ex-meta index a450d380ce..371349d8e5 100644 --- a/components/tachart/demo/nogui/TAChart_nogui.ex-meta +++ b/components/tachart/demo/nogui/TAChart_nogui.ex-meta @@ -1,5 +1,5 @@ { "TAChart_nogui" : { "Category" : "TAChart", "Keywords" : ["TAChart","nogui","console mode"], - "Description" : "This demo does not have a GUI, when run, its writes its chart out to a png file in the working dir.\n\nNote: It used a unit, TADrawerFPCanv in ../../TADrawerFPCanvas.pas, I have now added that unit directly the demo directory to maintain stand alone status, DRB.\n\nNote: Window users must see the readme.txt about putting freetype.dll in current directory.\n\n"} + "Description" : "This demo does not have a GUI, when run, its writes its chart out to a png file in the working dir.\n\nNote: Window users must see the readme.txt about putting freetype.dll in current directory.\n\n"} } \ No newline at end of file diff --git a/components/tachart/demo/rotate/TAChart_rotate.ex-meta b/components/tachart/demo/rotate/TAChart_rotate.ex-meta new file mode 100644 index 0000000000..bd5ceb7b57 --- /dev/null +++ b/components/tachart/demo/rotate/TAChart_rotate.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_rotate" : { + "Category" : "TAChart", + "Keywords" : ["TAChart", "rotate"], + "Description" : "How to rotate some parts of a combined bar and line chart."} +} \ No newline at end of file diff --git a/components/tachart/demo/save/TAChart_save.ex-meta b/components/tachart/demo/save/TAChart_save.ex-meta new file mode 100644 index 0000000000..28302fc98f --- /dev/null +++ b/components/tachart/demo/save/TAChart_save.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_save" : { + "Category" : "TAChart", + "Keywords" : ["TAChart","save file","PNG","SVG","BMP","JPG","JPEG"], + "Description" : "Shows how to save a chart as a BMP, SVG, JPEG or PNG."} +} \ No newline at end of file diff --git a/components/tachart/demo/script/TAChart_script.ex-meta b/components/tachart/demo/script/TAChart_script.ex-meta new file mode 100644 index 0000000000..0020129b04 --- /dev/null +++ b/components/tachart/demo/script/TAChart_script.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_script" : { + "Category" : "TAChart", + "Keywords" : ["TAChart", "Pascal Script", "PSCompiler"], + "Description" : "Demonstrates plotting the output of a short Pascal Script. "} +} \ No newline at end of file diff --git a/components/tachart/demo/sorted_source/TAChart_sorted_source.ex-meta b/components/tachart/demo/sorted_source/TAChart_sorted_source.ex-meta new file mode 100644 index 0000000000..d95f863176 --- /dev/null +++ b/components/tachart/demo/sorted_source/TAChart_sorted_source.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_sorted_source" : { + "Category" : "TAChart", + "Keywords" : ["TAChart","sorting"], + "Description" : "Demonstrates sorting the data that is the source for a number of different chart plots."} +} \ No newline at end of file diff --git a/components/tachart/demo/tools/TAChart_tools.ex-meta b/components/tachart/demo/tools/TAChart_tools.ex-meta new file mode 100644 index 0000000000..c339799e19 --- /dev/null +++ b/components/tachart/demo/tools/TAChart_tools.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_tools" : { + "Category" : "TAChart", + "Keywords" : ["TAChart", "Panning", "Zooming"], + "Description" : "Demonstrates some TAChart tools, zooming and panning in various modes."} +} \ No newline at end of file diff --git a/components/tachart/demo/userdrawn_series/TAChart_userdrawn.ex-meta b/components/tachart/demo/userdrawn_series/TAChart_userdrawn.ex-meta new file mode 100644 index 0000000000..4ae122f8af --- /dev/null +++ b/components/tachart/demo/userdrawn_series/TAChart_userdrawn.ex-meta @@ -0,0 +1,5 @@ +{ "TAChart_userdrawn" : { + "Category" : "TAChart", + "Keywords" : ["TAChart", "userdrawn"], + "Description" : "Demonstrates defining your own series draw method. The chart has a 'series' of type TUserDrawnSeries whose OnDraw event is set to call the procedure TMainForm.SeriesDraw. "} +} \ No newline at end of file diff --git a/components/vlc/example/VLC_test.ex-meta b/components/vlc/example/VLC_test.ex-meta new file mode 100644 index 0000000000..d39953b16e --- /dev/null +++ b/components/vlc/example/VLC_test.ex-meta @@ -0,0 +1,11 @@ +{ + "VLC_test" : { + "Category" : "General", + "Keywords" : [ + "VLC", + "video", + "mp4" + ], + "Description" : "Makes a small app that uses the VLC libraries, to display video content.\n\nNote that it generates a number of warnings to console and does not seem to be particularly happy working under the debugger in the IDE. \nNote that the Qt option is Qt4.\n\n" + } +} diff --git a/components/vlc/test/frmmain.lfm b/components/vlc/example/frmmain.lfm similarity index 100% rename from components/vlc/test/frmmain.lfm rename to components/vlc/example/frmmain.lfm diff --git a/components/vlc/test/frmmain.pp b/components/vlc/example/frmmain.pp similarity index 100% rename from components/vlc/test/frmmain.pp rename to components/vlc/example/frmmain.pp diff --git a/components/vlc/example/lclvlc.pp b/components/vlc/example/lclvlc.pp new file mode 100644 index 0000000000..3def7b5e85 --- /dev/null +++ b/components/vlc/example/lclvlc.pp @@ -0,0 +1,108 @@ +{ + + Copyright (C) 2012 Michael Van Canneyt (michael@freepascal.org) + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version with the following modification: + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules,and + to copy and distribute the resulting executable under terms of your choice, + provided that you also meet, for each linked independent module, the terms + and conditions of the license of that module. An independent module is a + module which is not derived from or based on this library. If you modify + this library, you may extend this exception to your version of the library, + but you are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA. +} +unit lclvlc; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, libvlc, vlc, controls; + +Type + + { TLCLVLCPlayer } + + TLCLVLCPlayer = Class(TVLCMediaPlayer) + private + FParentWindow: TWinControl; + procedure SetLCLParentWindow(AValue: TWinControl); + Protected + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + Procedure SetParentWindow; override; + Procedure SetParentWindowSize(AWidth,AHeight : Cardinal); override; + Published + Property ParentWindow : TWinControl Read FParentWindow Write SetLCLParentWindow; + end; + +implementation + +{$ifdef Unix} +{$ifdef lclgtk2} +{$I vlcgtk2.inc} +{$endif} +{$ifdef lclqt} +{$I vlcqt.inc} +{$endif} +{$endif} + +{ TLCLVLCPlayer } + +procedure TLCLVLCPlayer.SetLCLParentWindow(AValue: TWinControl); +begin + if FParentWindow=AValue then Exit; + If Assigned(FParentWindow) then + FParentWindow.RemoveFreeNotification(Self); + FParentWindow:=AValue; + If Assigned(FParentWindow) then + FParentWindow.FreeNotification(Self); +end; + +procedure TLCLVLCPlayer.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if (Operation=opRemove) and (AComponent=FParentWindow) then + FParentWindow:=Nil; +end; + +procedure TLCLVLCPlayer.SetParentWindow; +begin + if Assigned(ParentWindow) then + begin + {$IFDEF UNIX} + libvlc_media_player_set_xwindow(Instance, GetXHandle(ParentWindow)); + {$else} + {$IFDEF MSWINDOWS} + libvlc_media_player_set_hwnd(Instance, Pointer(ParentWindow.Handle)); + {$else} + {$ERROR This platform is currently not supported by the VLC player component} + {$ENDIF} + {$endif} + end; +end; + +procedure TLCLVLCPlayer.SetParentWindowSize(AWidth, AHeight: Cardinal); +begin + if AWidth=0 then ; + if AHeight=0 then ; +end; + +end. diff --git a/components/vlc/test/testlcl.ico b/components/vlc/example/testlcl.ico similarity index 100% rename from components/vlc/test/testlcl.ico rename to components/vlc/example/testlcl.ico diff --git a/components/vlc/test/testlcl.lpi b/components/vlc/example/testlcl.lpi similarity index 100% rename from components/vlc/test/testlcl.lpi rename to components/vlc/example/testlcl.lpi diff --git a/components/vlc/test/testlcl.lpr b/components/vlc/example/testlcl.lpr similarity index 100% rename from components/vlc/test/testlcl.lpr rename to components/vlc/example/testlcl.lpr diff --git a/components/vlc/test/testlcl.res b/components/vlc/example/testlcl.res similarity index 100% rename from components/vlc/test/testlcl.res rename to components/vlc/example/testlcl.res diff --git a/components/vlc/example/vlcgtk2.inc b/components/vlc/example/vlcgtk2.inc new file mode 100644 index 0000000000..5386f95bd2 --- /dev/null +++ b/components/vlc/example/vlcgtk2.inc @@ -0,0 +1,16 @@ +{%MainUnit lclvlc.pp} + +uses gtk2proc, gtk2extra, ctypes, gtk2; + +Function GetXHandle(AWinControl : TWinControl) : culong; + +var + Widget: PGtkWidget; +begin + Result:=0; + if (AWinControl=nil) or (not AWinControl.HandleAllocated) then exit; + Widget:={%H-}PGtkWidget(AWinControl.Handle); + if Widget^.window = nil then exit; + Result := gdk_window_xwindow(Widget^.window); +end; + diff --git a/components/vlc/example/vlcqt.inc b/components/vlc/example/vlcqt.inc new file mode 100644 index 0000000000..c0dd3b250a --- /dev/null +++ b/components/vlc/example/vlcqt.inc @@ -0,0 +1,14 @@ +{%MainUnit lclvlc.pp} + +uses qt45; + +Function GetXHandle(AWinControl : TWinControl) : culong; + +var + Widget: PGtkWidget; +begin + Result:=0; + if (AWinControl=nil) or (not AWinControl.HandleAllocated) then exit; + Result:=QWidget_winID(TQtWidget(AWinControl.Handle).Widget); +end; + diff --git a/examples/Beginner/customhint/customhint.ex-meta b/examples/Beginner/customhint/CustomHint.ex-meta similarity index 78% rename from examples/Beginner/customhint/customhint.ex-meta rename to examples/Beginner/customhint/CustomHint.ex-meta index f86442bdc7..da3f50e223 100644 --- a/examples/Beginner/customhint/customhint.ex-meta +++ b/examples/Beginner/customhint/CustomHint.ex-meta @@ -1,5 +1,5 @@ { "CustomHint" : { "Category" : "Beginner", "Keywords" : ["Hint","Timeout","Format","TTrackBar"], - "Description" : "Shows how to control the shown Hint, Timeout etc. Demonstrates performing a function in the Hint (showing updated time of day). Also incidently demonstrates TTrackBar."} + "Description" : "Shows how to control the shown Hint, Timeout etc. Demonstrates performing a function in the Hint (showing updated time of day). Also incidentally demonstrates TTrackBar."} } \ No newline at end of file diff --git a/examples/Beginner/laz_scalable/unit1.lfm b/examples/Beginner/laz_scalable/unit1.lfm index d75875b23f..74a940a656 100644 --- a/examples/Beginner/laz_scalable/unit1.lfm +++ b/examples/Beginner/laz_scalable/unit1.lfm @@ -1,51 +1,22 @@ object Form1: TForm1 - Left = 515 - Height = 226 - Top = 174 - Width = 467 + Left = 323 + Height = 240 + Top = 239 + Width = 320 Caption = 'Form1' - ClientHeight = 226 - ClientWidth = 467 + ClientHeight = 240 + ClientWidth = 320 LCLVersion = '2.3.0.0' - object ButtonHello: TButton - AnchorSideLeft.Control = Owner - AnchorSideBottom.Control = Owner - AnchorSideBottom.Side = asrBottom - Left = 10 - Height = 41 - Top = 175 - Width = 103 - Anchors = [akLeft, akBottom] - BorderSpacing.Left = 10 - BorderSpacing.Bottom = 10 - Caption = 'Say Hello' - OnClick = ButtonHelloClick - TabOrder = 0 - end - object ButtonClose: TButton - AnchorSideRight.Control = Memo1 - AnchorSideRight.Side = asrBottom - AnchorSideBottom.Control = ButtonHello - AnchorSideBottom.Side = asrBottom - Left = 320 - Height = 41 - Top = 175 - Width = 137 - Anchors = [akRight, akBottom] - Caption = 'Close' - OnClick = ButtonCloseClick - TabOrder = 1 - end object Memo1: TMemo AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom - AnchorSideBottom.Control = ButtonHello + AnchorSideBottom.Side = asrBottom Left = 10 - Height = 155 + Height = 174 Top = 10 - Width = 447 + Width = 300 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 10 BorderSpacing.Top = 10 @@ -54,7 +25,37 @@ object Form1: TForm1 Lines.Strings = ( 'Memo1' ) - ScrollBars = ssAutoVertical + TabOrder = 0 + end + object ButtonHello: TButton + AnchorSideLeft.Control = Owner + AnchorSideBottom.Control = Owner + AnchorSideBottom.Side = asrBottom + Left = 10 + Height = 30 + Top = 200 + Width = 118 + Anchors = [akLeft, akBottom] + BorderSpacing.Left = 10 + BorderSpacing.Bottom = 10 + Caption = 'Say Hello' + OnClick = ButtonHelloClick + TabOrder = 1 + end + object ButtonClose: TButton + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = Owner + AnchorSideBottom.Side = asrBottom + Left = 176 + Height = 30 + Top = 200 + Width = 134 + Anchors = [akRight, akBottom] + BorderSpacing.Right = 10 + BorderSpacing.Bottom = 10 + Caption = 'Close' + OnClick = ButtonCloseClick TabOrder = 2 end end diff --git a/examples/Beginner/laz_scalable/unit1.pas b/examples/Beginner/laz_scalable/unit1.pas index 2790bf5df8..e67cf2a3f8 100644 --- a/examples/Beginner/laz_scalable/unit1.pas +++ b/examples/Beginner/laz_scalable/unit1.pas @@ -5,26 +5,26 @@ unit Unit1; interface uses - Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls; + Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls; type - { TForm1 } + { TForm1 } - TForm1 = class(TForm) - ButtonHello: TButton; - ButtonClose: TButton; - Memo1: TMemo; - procedure ButtonCloseClick(Sender: TObject); - procedure ButtonHelloClick(Sender: TObject); - private + TForm1 = class(TForm) + ButtonHello: TButton; + ButtonClose: TButton; + Memo1: TMemo; + procedure ButtonCloseClick(Sender: TObject); + procedure ButtonHelloClick(Sender: TObject); + private - public + public - end; + end; var - Form1: TForm1; + Form1: TForm1; implementation @@ -34,12 +34,12 @@ implementation procedure TForm1.ButtonHelloClick(Sender: TObject); begin - Memo1.Append('Hello World'); + Memo1.Append('Hello'); end; procedure TForm1.ButtonCloseClick(Sender: TObject); begin - close; + Close; end; end. diff --git a/examples/Beginner/lclversion/lclversion.ex-meta b/examples/Beginner/lclversion/lclversion.ex-meta index 37034a8ba0..543aa71742 100644 --- a/examples/Beginner/lclversion/lclversion.ex-meta +++ b/examples/Beginner/lclversion/lclversion.ex-meta @@ -1,5 +1,5 @@ { "lclversion" : { "Category" : "Beginner", "Keywords" : ["LCL Version","Version String"], - "Description" : "Small app that demonstrates how to read the LCL version defined in every Lazarus app.\n"} + "Description" : "Small app that demonstrates how to read the LCL version defined in every Lazarus app.\nAlso shows a couple of other useful strings, CPU, OS etc and how to compare LCL versions."} } \ No newline at end of file diff --git a/examples/Beginner/lclversion/unit1.lfm b/examples/Beginner/lclversion/unit1.lfm index 6cf16749ec..4b41a84633 100644 --- a/examples/Beginner/lclversion/unit1.lfm +++ b/examples/Beginner/lclversion/unit1.lfm @@ -1,19 +1,19 @@ object VersionForm: TVersionForm Left = 290 - Height = 300 + Height = 316 Top = 164 Width = 400 HorzScrollBar.Page = 399 VertScrollBar.Page = 299 ActiveControl = Memo1 Caption = 'VersionForm' - ClientHeight = 300 + ClientHeight = 316 ClientWidth = 400 OnCreate = FormCreate - LCLVersion = '1.7' + LCLVersion = '2.3.0.0' object Memo1: TMemo Left = 29 - Height = 130 + Height = 253 Top = 19 Width = 349 Lines.Strings = ( @@ -22,9 +22,9 @@ object VersionForm: TVersionForm TabOrder = 0 end object Button1: TButton - Left = 36 + Left = 29 Height = 25 - Top = 181 + Top = 280 Width = 75 Caption = 'Button1' OnClick = Button1Click diff --git a/examples/Beginner/lclversion/unit1.pas b/examples/Beginner/lclversion/unit1.pas index 537bc533c4..e435e60f9c 100644 --- a/examples/Beginner/lclversion/unit1.pas +++ b/examples/Beginner/lclversion/unit1.pas @@ -47,6 +47,14 @@ begin {$else} Memo1.Append('No lcl version information available'); {$endif} + {$ifdef LCLQT5} Memo1.Append('QT5 widget set'); {$endif} + {$ifdef LCLGTK3}Memo1.Append('GTK3 widget set'); {$endif} + {$ifdef LCLGTK2}Memo1.Append('GTK2 widget set'); {$endif} + Memo1.Append('CPU Target - ' + {$i %FPCTARGETCPU%}); + Memo1.Append('Operating System - ' + {$i %FPCTARGETOS%}); + {$IFDEF LINUX} + Memo1.Append('Desktop - ' + GetEnvironmentVariable('XDG_CURRENT_DESKTOP')); + {$endif} end; procedure TVersionForm.Button1Click(Sender: TObject); diff --git a/examples/Beginner/listview/listview.ex-meta b/examples/Beginner/listview/listview.ex-meta index 676bf204fe..cd44c293a2 100644 --- a/examples/Beginner/listview/listview.ex-meta +++ b/examples/Beginner/listview/listview.ex-meta @@ -1,5 +1,5 @@ { "listview" : { "Category" : "Beginner", - "Keywords" : ["TListView"], + "Keywords" : ["TListView", "SubItems"], "Description" : "Demonstrates TListView, how to add and remove items and sub items."} } \ No newline at end of file diff --git a/examples/Beginner/notebook/notebook.ex-meta b/examples/Beginner/notebook/notebook.ex-meta index 00b5e65eab..2859c2d08c 100644 --- a/examples/Beginner/notebook/notebook.ex-meta +++ b/examples/Beginner/notebook/notebook.ex-meta @@ -1,5 +1,5 @@ { "notebook" : { "Category" : "Beginner", "Keywords" : ["TNoteBook"], - "Description" : "Demonstrates TNoteBook"} + "Description" : "Demonstrates TNoteBook, a multipage GUI element."} } \ No newline at end of file diff --git a/examples/Components/BitButton/bitbutton.ex-meta b/examples/Components/BitButton/bitbutton.ex-meta index b7e0dfd35a..bcafb04aa4 100644 --- a/examples/Components/BitButton/bitbutton.ex-meta +++ b/examples/Components/BitButton/bitbutton.ex-meta @@ -1,7 +1,9 @@ { -"BitButton" : { - "Category" : "Components", - "Keywords" : ["TBitButton"], - "Description" : "This example shows how a BitButton, that is a button with a small bitmap, can be used."} + "BitButton" : { + "Category" : "General", + "Keywords" : [ + "TBitButton" + ], + "Description" : "This example shows how a BitButton, that is a button with a small bitmap, can be used." + } } - diff --git a/examples/Components/Completion/Completion.ex-meta b/examples/Components/Completion/Completion.ex-meta index 2668ca3073..44aa3d52d9 100644 --- a/examples/Components/Completion/Completion.ex-meta +++ b/examples/Components/Completion/Completion.ex-meta @@ -1,5 +1,11 @@ -{ "Completion" : { - "Category" : "Components", - "Keywords" : ["SynEdit", "Auto Completion", "TSynAutoComplete"], - "Description" : "Example for SynEdit's auto-completion features. As used in the Lazarus IDE, provides 2 different auto-completion features."} -} \ No newline at end of file +{ + "Completion" : { + "Category" : "General", + "Keywords" : [ + "SynEdit", + "Auto Completion", + "TSynAutoComplete" + ], + "Description" : "Example for SynEdit's auto-completion features. As used in the Lazarus IDE, provides 2 different auto-completion features." + } +} diff --git a/examples/Components/NewHighlighterTutorial/NewHighlighterTutorial.ex-meta b/examples/Components/NewHighlighterTutorial/NewHighlighterTutorial.ex-meta index ca8c14c4e9..8a4644123d 100644 --- a/examples/Components/NewHighlighterTutorial/NewHighlighterTutorial.ex-meta +++ b/examples/Components/NewHighlighterTutorial/NewHighlighterTutorial.ex-meta @@ -1,5 +1,12 @@ -{ "NewHighlighterTutorial" : { - "Category" : "Components", - "Keywords" : ["TSynEdit", "wiki", "highlighter", "TSynHighlighterAttributes"], - "Description" : "Example for the \"Create your own SynEdit Highlighter\" tutorial on the wiki http://wiki.lazarus.freepascal.org/SynEdit_Highlighter"} -} \ No newline at end of file +{ + "NewHighlighterTutorial" : { + "Category" : "General", + "Keywords" : [ + "TSynEdit", + "wiki", + "highlighter", + "TSynHighlighterAttributes" + ], + "Description" : "Example for the \"Create your own SynEdit Highlighter\" tutorial on the wiki http://wiki.lazarus.freepascal.org/SynEdit_Highlighter" + } +} diff --git a/examples/Components/SearchAndReplace/SearchAndReplace.ex-meta b/examples/Components/SearchAndReplace/SearchAndReplace.ex-meta index 7dc8dd721e..f49a9aaab8 100644 --- a/examples/Components/SearchAndReplace/SearchAndReplace.ex-meta +++ b/examples/Components/SearchAndReplace/SearchAndReplace.ex-meta @@ -1,5 +1,10 @@ -{ "SearchAndReplace" : { - "Category" : "Components", - "Keywords" : ["TSynEdit", "SearchAndReplace"], - "Description" : "Demonstrates TSynEdit's Searc and Replace capability, and the range of options it can use."} -} \ No newline at end of file +{ + "SearchAndReplace" : { + "Category" : "General", + "Keywords" : [ + "TSynEdit", + "SearchAndReplace" + ], + "Description" : "Demonstrates TSynEdit's Searc and Replace capability, and the range of options it can use." + } +} diff --git a/examples/Components/SynAnyHighlighter/SynAnyHighlighter.ex-meta b/examples/Components/SynAnyHighlighter/SynAnyHighlighter.ex-meta index 1bf24cb48f..00a2cb6acc 100644 --- a/examples/Components/SynAnyHighlighter/SynAnyHighlighter.ex-meta +++ b/examples/Components/SynAnyHighlighter/SynAnyHighlighter.ex-meta @@ -1,7 +1,10 @@ -{ "SynAnyHighlighter" : { - "Category" : "Components", - "Keywords" : ["TSynEdit", "runtime"], - "Description" : "This example shows, how the the Keywords, Objects and Constants properties of the class TSynAnySyn can be controlled at runtime. Text can be highlighted following a number of rules. - -"} -} \ No newline at end of file +{ + "SynAnyHighlighter" : { + "Category" : "General", + "Keywords" : [ + "TSynEdit", + "runtime" + ], + "Description" : "This example shows, how the the Keywords, Objects and Constants properties of the class TSynAnySyn can be controlled at runtime. Text can be highlighted following a number of rules.\n\n" + } +} diff --git a/examples/Components/SynGutterMarks/SynGutterMarks.ex-meta b/examples/Components/SynGutterMarks/SynGutterMarks.ex-meta index e5f747c490..ea3ed97ec0 100644 --- a/examples/Components/SynGutterMarks/SynGutterMarks.ex-meta +++ b/examples/Components/SynGutterMarks/SynGutterMarks.ex-meta @@ -1,5 +1,11 @@ -{ "SynGutterMarks" : { - "Category" : "Components", - "Keywords" : ["TSynEdit", "Gutter", "Bookmarks"], - "Description" : "Example for SynEdit's Bookmarks, SynEdit is the editor used by the Lazarus IDE. This example shows how to display Bookmarks and other marks/icons in the gutter of the editor."} -} \ No newline at end of file +{ + "SynGutterMarks" : { + "Category" : "General", + "Keywords" : [ + "TSynEdit", + "Gutter", + "Bookmarks" + ], + "Description" : "Example for SynEdit's Bookmarks, SynEdit is the editor used by the Lazarus IDE. This example shows how to display Bookmarks and other marks/icons in the gutter of the editor." + } +} diff --git a/examples/Components/SynPositionHighlighter/SynPositionHighlighter.ex-meta b/examples/Components/SynPositionHighlighter/SynPositionHighlighter.ex-meta index 40fc90520c..d3cc950bd2 100644 --- a/examples/Components/SynPositionHighlighter/SynPositionHighlighter.ex-meta +++ b/examples/Components/SynPositionHighlighter/SynPositionHighlighter.ex-meta @@ -1,7 +1,10 @@ -{ "SynPositionHighlighter" : { - "Category" : "Components", - "Keywords" : ["TSynEdit", "TSynPositionHighlighter"], - "Description" : "Example for SynEdit's Highlighter: TSynPositionHighlighter. SynEdit is the editor used by the IDE. - -TSynPositionHighlighter allows one to highlight text at one or more fixed position(s). For example, it can be used to highlight the first 3 letters of the 2nd line of text, in a specific color."} -} \ No newline at end of file +{ + "SynPositionHighlighter" : { + "Category" : "General", + "Keywords" : [ + "TSynEdit", + "TSynPositionHighlighter" + ], + "Description" : "Example for SynEdit's Highlighter: TSynPositionHighlighter. SynEdit is the editor used by the IDE.\n\nTSynPositionHighlighter allows one to highlight text at one or more fixed position(s). For example, it can be used to highlight the first 3 letters of the 2nd line of text, in a specific color." + } +} diff --git a/examples/Components/cell_overflow/cell_overflow.ex-meta b/examples/Components/cell_overflow/cell_overflow.ex-meta index f075d89c7b..cf71c2f5f2 100644 --- a/examples/Components/cell_overflow/cell_overflow.ex-meta +++ b/examples/Components/cell_overflow/cell_overflow.ex-meta @@ -1,10 +1,12 @@ -{ "Cell_OverFlow" : { - "Category" : "Components", - "Keywords" : ["Grid", "Cell", "Overflow", "TStringGrid"], - "Description" : "This sample project implements overflowing text in a StringGrid descendant. This means that text which is longer than the width of the column is not truncated at the cell border, but is allowed to flow into adjacent empty cells. - -The code is based on a forum contribution by user Geepster -(http://forum.lazarus.freepascal.org/index.php/topic,35869.msg238079.html#msg238079) - -It was extended to correctly handle left, right and centered text alignments."} -} \ No newline at end of file +{ + "Cell_OverFlow" : { + "Category" : "General", + "Keywords" : [ + "Grid", + "Cell", + "Overflow", + "TStringGrid" + ], + "Description" : "This sample project implements overflowing text in a StringGrid descendant. This means that text which is longer than the width of the column is not truncated at the cell border, but is allowed to flow into adjacent empty cells.\n\nThe code is based on a forum contribution by user Geepster \n(http://forum.lazarus.freepascal.org/index.php/topic,35869.msg238079.html#msg238079)\n\nIt was extended to correctly handle left, right and centered text alignments." + } +} diff --git a/examples/Components/columneditors/columneditors.ex-meta b/examples/Components/columneditors/columneditors.ex-meta index 22b0afd006..c175d3e56f 100644 --- a/examples/Components/columneditors/columneditors.ex-meta +++ b/examples/Components/columneditors/columneditors.ex-meta @@ -1,8 +1,13 @@ -{ "ColumnEditors" : { - "Category" : "Components", - "Keywords" : ["grid","TStringGrid","editor", "columns", "Wiki"], - "Description" : "Demonstrates a number of things relating to Column Editors, EditMask, changing colour of cells, triggering events. - -See the included readme.txt and wiki page http://wiki.freepascal.org/Grids_Reference_Page -"} -} \ No newline at end of file +{ + "ColumnEditors" : { + "Category" : "General", + "Keywords" : [ + "grid", + "TStringGrid", + "editor", + "columns", + "Wiki" + ], + "Description" : "Demonstrates a number of things relating to Column Editors, EditMask, changing colour of cells, triggering events.\n\nSee the included readme.txt and wiki page http://wiki.freepascal.org/Grids_Reference_Page\n" + } +} diff --git a/examples/Components/cooltoolbar/CoolToolBar.ex-meta b/examples/Components/cooltoolbar/CoolToolBar.ex-meta new file mode 100644 index 0000000000..beef1e4ba8 --- /dev/null +++ b/examples/Components/cooltoolbar/CoolToolBar.ex-meta @@ -0,0 +1,5 @@ +{ "CoolToolBar" : { + "Category" : "General", + "Keywords" : ["TCoolBar","TToolBar","TActionList","TAction","IniFile"], + "Description" : "Demonstrates TCoolBar and TToolBar in a number of modes. Also uses TAction and TActionList. Saves and loads the coolbar to and from an ini file."} +} \ No newline at end of file diff --git a/examples/Components/cooltoolbar/cooltoolbar.ex-meta b/examples/Components/cooltoolbar/cooltoolbar.ex-meta deleted file mode 100644 index 5afb20caec..0000000000 --- a/examples/Components/cooltoolbar/cooltoolbar.ex-meta +++ /dev/null @@ -1,6 +0,0 @@ -{ -"CoolToolBar" : { - "Category" : "Components", - "Keywords" : ["TCoolBar", "TToolBar", "TActionList", "TAction"], - "Description" : "Demonstrates TCoolBar and TToolBar in a number of modes. Also uses TAction and TActionList."} -} diff --git a/examples/Components/cursors/cursors.ex-meta b/examples/Components/cursors/cursors.ex-meta index bddbeed0a0..0197049aa9 100644 --- a/examples/Components/cursors/cursors.ex-meta +++ b/examples/Components/cursors/cursors.ex-meta @@ -1,6 +1,13 @@ { -"Cursors" : { - "Category" : "Components", - "Keywords" : ["Cursor", "crHourGlass", "ctSQLWait", "crNoDrop", "crDrag"], - "Description" : "Demonstrates changing and using Cursor to display various states. Includes Dragging cursors, Drop and NoDrop, HourGlass and custom cursors."} + "Cursors" : { + "Category" : "General", + "Keywords" : [ + "Cursor", + "crHourGlass", + "ctSQLWait", + "crNoDrop", + "crDrag" + ], + "Description" : "Demonstrates changing and using Cursor to display various states. Includes Dragging cursors, Drop and NoDrop, HourGlass and custom cursors." + } } diff --git a/examples/Components/embedded_images/cheetah.jpg b/examples/Components/embedded_images/cheetah.jpg new file mode 100644 index 0000000000..f73b372d92 Binary files /dev/null and b/examples/Components/embedded_images/cheetah.jpg differ diff --git a/examples/Components/embedded_images/da_block.png b/examples/Components/embedded_images/da_block.png new file mode 100644 index 0000000000..20be97b99d Binary files /dev/null and b/examples/Components/embedded_images/da_block.png differ diff --git a/examples/Components/embedded_images/embedded_images.ex-meta b/examples/Components/embedded_images/embedded_images.ex-meta index 122b7ab99c..759016adc1 100644 --- a/examples/Components/embedded_images/embedded_images.ex-meta +++ b/examples/Components/embedded_images/embedded_images.ex-meta @@ -1,5 +1,11 @@ -{ "embedded_images" : { - "Category" : "Components", - "Keywords" : ["Grid", "TStringGrid", "Image"], - "Description" : "Demonstrates how to embed an image in a StringGrid."} -} \ No newline at end of file +{ + "embedded_images" : { + "Category" : "General", + "Keywords" : [ + "Grid", + "TStringGrid", + "Image" + ], + "Description" : "Demonstrates how to embed an image in a StringGrid." + } +} diff --git a/examples/Components/embedded_images/imgmain.pas b/examples/Components/embedded_images/imgmain.pas index 7808e8d484..b9591b2f4e 100644 --- a/examples/Components/embedded_images/imgmain.pas +++ b/examples/Components/embedded_images/imgmain.pas @@ -98,9 +98,14 @@ uses Types, LCLIntf; const - JPEG_FILE = '../../../images/splash_source/cheetah.jpg'; - PNG_FILE1 = '../../../images/codetoolsdefines/da_block.png'; - PNG_FILE2 = '../../../images/icons/lazarus256x256.png'; + //JPEG_FILE = '../../../images/splash_source/cheetah.jpg'; + //PNG_FILE1 = '../../../images/codetoolsdefines/da_block.png'; + //PNG_FILE2 = '../../../images/icons/lazarus256x256.png'; + + JPEG_FILE = 'cheetah.jpg'; + PNG_FILE1 = 'da_block.png'; + PNG_FILE2 = 'lazarus256x256.png'; + { TForm1 } diff --git a/examples/Components/embedded_images/lazarus256x256.png b/examples/Components/embedded_images/lazarus256x256.png new file mode 100644 index 0000000000..a264cd14e0 Binary files /dev/null and b/examples/Components/embedded_images/lazarus256x256.png differ diff --git a/examples/Components/gridcelleditor/gridcelleditor.ex-meta b/examples/Components/gridcelleditor/gridcelleditor.ex-meta index fad74f2dc1..4c7808a173 100644 --- a/examples/Components/gridcelleditor/gridcelleditor.ex-meta +++ b/examples/Components/gridcelleditor/gridcelleditor.ex-meta @@ -1,5 +1,11 @@ -{ "GridCellEditor" : { - "Category" : "Components", - "Keywords" : ["Grid", "TStringGrid", "Cell Editor"], - "Description" : "Demonstrates a simple Cell Editor model using a String Grid"} -} \ No newline at end of file +{ + "GridCellEditor" : { + "Category" : "General", + "Keywords" : [ + "Grid", + "TStringGrid", + "Cell Editor" + ], + "Description" : "Demonstrates a simple Cell Editor model using a String Grid" + } +} diff --git a/examples/Components/groupedcontrol/groupedcontrol.ex-meta b/examples/Components/groupedcontrol/groupedcontrol.ex-meta index ea2534859a..7bd6cb3c8d 100644 --- a/examples/Components/groupedcontrol/groupedcontrol.ex-meta +++ b/examples/Components/groupedcontrol/groupedcontrol.ex-meta @@ -1,5 +1,12 @@ -{ "GroupedControl" : { - "Category" : "Components", - "Keywords" : ["RTTI", "RTTIGrids", "TTIPropertyGrid", "TGroupBox"], - "Description" : "Compares the use of a TGroupBox with some other techniques using RTTI components TTIPropertyGroup to group controls. Also introduces a self defined TCustomTransparentPanel and TCustomGroupedEditButton. "} -} \ No newline at end of file +{ + "GroupedControl" : { + "Category" : "General", + "Keywords" : [ + "RTTI", + "RTTIGrids", + "TTIPropertyGrid", + "TGroupBox" + ], + "Description" : "Compares the use of a TGroupBox with some other techniques using RTTI components TTIPropertyGroup to group controls. Also introduces a self defined TCustomTransparentPanel and TCustomGroupedEditButton. " + } +} diff --git a/examples/Components/imagelist_highdpi_designtime/imagelist_highdpi_designtime.ex-meta b/examples/Components/imagelist_highdpi_designtime/imagelist_highdpi_designtime.ex-meta index 08db659a34..0902b51131 100644 --- a/examples/Components/imagelist_highdpi_designtime/imagelist_highdpi_designtime.ex-meta +++ b/examples/Components/imagelist_highdpi_designtime/imagelist_highdpi_designtime.ex-meta @@ -1,5 +1,11 @@ -{ "ImageList_HighDPI_DesignTime" : { - "Category" : "Components", - "Keywords" : ["TImageList", "TToolBar", "HighDPI"], - "Description" : "Demonstrates using an ImageList to populate a TToolBar, TTreeView, TListView and TPageControl. Including use with HighDPI. "} -} \ No newline at end of file +{ + "ImageList_HighDPI_DesignTime" : { + "Category" : "General", + "Keywords" : [ + "TImageList", + "TToolBar", + "HighDPI" + ], + "Description" : "Demonstrates using an ImageList to populate a TToolBar, TTreeView, TListView and TPageControl. Including use with HighDPI. " + } +} diff --git a/examples/Components/imagelist_highdpi_runtime/imagelist_highdpi_runtime.ex-meta b/examples/Components/imagelist_highdpi_runtime/imagelist_highdpi_runtime.ex-meta index ade8d36759..57a26a03fa 100644 --- a/examples/Components/imagelist_highdpi_runtime/imagelist_highdpi_runtime.ex-meta +++ b/examples/Components/imagelist_highdpi_runtime/imagelist_highdpi_runtime.ex-meta @@ -1,6 +1,10 @@ -{ "Imagelist_HighDPI_RunTime" : { - "Category" : "Components", - "Keywords" : ["TImageList", "Run Time"], - "Description" : "Demonstrates how to use a TImageList at Run Time to put images on TPageControl, TToolBar, TListView, TMainMenu. -"} -} \ No newline at end of file +{ + "Imagelist_HighDPI_RunTime" : { + "Category" : "General", + "Keywords" : [ + "TImageList", + "Run Time" + ], + "Description" : "Demonstrates how to use a TImageList at Run Time to put images on TPageControl, TToolBar, TListView, TMainMenu.\n" + } +} diff --git a/examples/Components/imagelist_highdpi_runtime/mainiconproject.ico b/examples/Components/imagelist_highdpi_runtime/mainiconproject.ico new file mode 100644 index 0000000000..10c5fc1a3d Binary files /dev/null and b/examples/Components/imagelist_highdpi_runtime/mainiconproject.ico differ diff --git a/examples/Components/imagelist_highdpi_runtime/menu_redo.png b/examples/Components/imagelist_highdpi_runtime/menu_redo.png new file mode 100644 index 0000000000..7b8e4e3c65 Binary files /dev/null and b/examples/Components/imagelist_highdpi_runtime/menu_redo.png differ diff --git a/examples/Components/imagelist_highdpi_runtime/menu_redo_150.png b/examples/Components/imagelist_highdpi_runtime/menu_redo_150.png new file mode 100644 index 0000000000..292d4d9c25 Binary files /dev/null and b/examples/Components/imagelist_highdpi_runtime/menu_redo_150.png differ diff --git a/examples/Components/imagelist_highdpi_runtime/menu_redo_200.png b/examples/Components/imagelist_highdpi_runtime/menu_redo_200.png new file mode 100644 index 0000000000..7ef2e7ffaa Binary files /dev/null and b/examples/Components/imagelist_highdpi_runtime/menu_redo_200.png differ diff --git a/examples/Components/imagelist_highdpi_runtime/menu_undo.png b/examples/Components/imagelist_highdpi_runtime/menu_undo.png new file mode 100644 index 0000000000..51f67d0be3 Binary files /dev/null and b/examples/Components/imagelist_highdpi_runtime/menu_undo.png differ diff --git a/examples/Components/imagelist_highdpi_runtime/menu_undo_150.png b/examples/Components/imagelist_highdpi_runtime/menu_undo_150.png new file mode 100644 index 0000000000..858f301a15 Binary files /dev/null and b/examples/Components/imagelist_highdpi_runtime/menu_undo_150.png differ diff --git a/examples/Components/imagelist_highdpi_runtime/menu_undo_200.png b/examples/Components/imagelist_highdpi_runtime/menu_undo_200.png new file mode 100644 index 0000000000..9051d8e378 Binary files /dev/null and b/examples/Components/imagelist_highdpi_runtime/menu_undo_200.png differ diff --git a/examples/Components/imagelist_highdpi_runtime/unit1.pas b/examples/Components/imagelist_highdpi_runtime/unit1.pas index 8b67dc422f..c39b774c28 100644 --- a/examples/Components/imagelist_highdpi_runtime/unit1.pas +++ b/examples/Components/imagelist_highdpi_runtime/unit1.pas @@ -72,7 +72,8 @@ procedure TImageListHelper.AddLazarusPNGs(const aBaseFileName: string); var A: array of string; const - BaseDir = '..'+PathDelim+'..'+PathDelim+'images'+PathDelim+'menu'+PathDelim; + //BaseDir = '..'+PathDelim+'..'+PathDelim+'images'+PathDelim+'menu'+PathDelim; + BaseDir = ''; begin SetLength(A, 3); A[0] := BaseDir+aBaseFileName+'.png'; @@ -103,7 +104,8 @@ begin IL.RegisterResolutions([16, 24, 32]); IL.AddLazarusPNGs('menu_undo'); IL.AddLazarusPNGs('menu_redo'); - IL.AddIconFromFile('..'+PathDelim+'..'+PathDelim+'images'+PathDelim+'mainiconproject.ico'); + IL.AddIconFromFile('mainiconproject.ico'); + //IL.AddIconFromFile('..'+PathDelim+'..'+PathDelim+'images'+PathDelim+'mainiconproject.ico'); IL.OnGetWidthForPPI := @ILOnGetWidthForImagePPI; IL.Scaled := True; diff --git a/examples/Components/levelgraph/levelgraph.ex-meta b/examples/Components/levelgraph/levelgraph.ex-meta index 33278cdc7a..f6d8a7ed22 100644 --- a/examples/Components/levelgraph/levelgraph.ex-meta +++ b/examples/Components/levelgraph/levelgraph.ex-meta @@ -1,6 +1,10 @@ -{ "levelgraph" : { - "Category" : "Components", - "Keywords" : ["TLvlGraphControl", "TTIPropertyGrid"], - "Description" : "Demonstrates use of TLvlGraphControl (LazControls tab) to display a level graph, used to show the relationship between a number of interrelated entities. -"} -} \ No newline at end of file +{ + "levelgraph" : { + "Category" : "General", + "Keywords" : [ + "TLvlGraphControl", + "TTIPropertyGrid" + ], + "Description" : "Demonstrates use of TLvlGraphControl (LazControls tab) to display a level graph, used to show the relationship between a number of interrelated entities.\n" + } +} diff --git a/examples/Components/listview/listview.ex-meta b/examples/Components/listview/listview.ex-meta deleted file mode 100644 index f990757d56..0000000000 --- a/examples/Components/listview/listview.ex-meta +++ /dev/null @@ -1,5 +0,0 @@ -{ "listview" : { - "Category" : "Components", - "Keywords" : ["listview", "Needs Work"], - "Description" : "Demonstrates some of the attributes of listview. Could have at least sort indictors added."} -} \ No newline at end of file diff --git a/examples/Components/listview/listview_example.ex-meta b/examples/Components/listview/listview_example.ex-meta new file mode 100644 index 0000000000..83e400a268 --- /dev/null +++ b/examples/Components/listview/listview_example.ex-meta @@ -0,0 +1,10 @@ +{ + "listview_example" : { + "Category" : "General", + "Keywords" : [ + "listview", + "Needs Work" + ], + "Description" : "Demonstrates some of the attributes of listview. Could perhaps do a bit more." + } +} diff --git a/examples/Components/merged_cells/merged_cells.ex-meta b/examples/Components/merged_cells/merged_cells.ex-meta index f95bf187a8..e8d3dec72a 100644 --- a/examples/Components/merged_cells/merged_cells.ex-meta +++ b/examples/Components/merged_cells/merged_cells.ex-meta @@ -1,5 +1,10 @@ -{ "Merged_Cells" : { - "Category" : "Components", - "Keywords" : ["Grid","Merge Cells"], - "Description" : "In this sample project you'll find a derived stringgrid which allows to combine adjacent cells to a larger block (\"merge\") easily.\n\nSee the included readme.txt for details on how to use it.\n\n\n"} -} \ No newline at end of file +{ + "Merged_Cells" : { + "Category" : "General", + "Keywords" : [ + "Grid", + "Merge Cells" + ], + "Description" : "In this sample project you'll find a derived stringgrid which allows to combine adjacent cells to a larger block (\"merge\") easily.\n\nSee the included readme.txt for details on how to use it.\n\n\n" + } +} diff --git a/examples/Components/objectinspector/objectinspector.ex-meta b/examples/Components/objectinspector/objectinspector.ex-meta index 12949eb9f1..1504562af3 100644 --- a/examples/Components/objectinspector/objectinspector.ex-meta +++ b/examples/Components/objectinspector/objectinspector.ex-meta @@ -1,5 +1,11 @@ -{ "objectinspector" : { - "Category" : "Components", - "Keywords" : ["ObjectInspector", "TOIPropertyGrid", "IDE Components"], - "Description" : "Demonstrates how the ObjectInspector works, uses TOIPropertyGrid to display the attributes of its own form in an ObjectInspector mode. "} -} \ No newline at end of file +{ + "objectinspector" : { + "Category" : "General", + "Keywords" : [ + "ObjectInspector", + "TOIPropertyGrid", + "IDE Components" + ], + "Description" : "Demonstrates how the ObjectInspector works, uses TOIPropertyGrid to display the attributes of its own form in an ObjectInspector mode. " + } +} diff --git a/examples/Components/openglcontrol/openglcontrol.ex-meta b/examples/Components/openglcontrol/openglcontrol.ex-meta index 638e8cde3e..819206f8f8 100644 --- a/examples/Components/openglcontrol/openglcontrol.ex-meta +++ b/examples/Components/openglcontrol/openglcontrol.ex-meta @@ -1,5 +1,5 @@ { "openglcontrol" : { - "Category" : "Components", - "Keywords" : ["OpenGL","Effects","Rotate","TOpenGLControl","Drawing", "No Object Inspector"], - "Description" : "Demonstrates a number of effects using the TOpenGLControl.\n\nNote, written before Lazarus had an ObjectInspector so components are created 'one the fly' in user code. You don't need to do that now."} + "Category" : "General", + "Keywords" : ["OpenGL","Effects","Rotate","TOpenGLControl","Drawing","No Object Inspector"], + "Description" : "Demonstrates a number of effects using the TOpenGLControl.\n\nNote, written before Lazarus had an ObjectInspector so components are created 'on the fly' in user code. You don't need to do that now."} } \ No newline at end of file diff --git a/examples/Components/pascalstream/pascalstream.ex-meta b/examples/Components/pascalstream/pascalstream.ex-meta index bdec244b29..92d5575aa7 100644 --- a/examples/Components/pascalstream/pascalstream.ex-meta +++ b/examples/Components/pascalstream/pascalstream.ex-meta @@ -1,5 +1,10 @@ -{ "pascalstream" : { - "Category" : "Components", - "Keywords" : ["Needs Work", "component stream"], - "Description" : "Might be about writing a component to a stream. Seems to create a non-visual component and stream that. This description (and maybe the demo) needs to be improved."} -} \ No newline at end of file +{ + "pascalstream" : { + "Category" : "General", + "Keywords" : [ + "Needs Work", + "component stream" + ], + "Description" : "Might be about writing a component to a stream. Seems to create a non-visual component and stream that. This description (and maybe the demo) needs to be improved." + } +} diff --git a/examples/Components/popupnotifier/popupnotifier.ex-meta b/examples/Components/popupnotifier/popupnotifier.ex-meta index 17681415ce..f482104458 100644 --- a/examples/Components/popupnotifier/popupnotifier.ex-meta +++ b/examples/Components/popupnotifier/popupnotifier.ex-meta @@ -1,9 +1,5 @@ { "popupnotifier" : { - "Category" : "Components", - "Keywords" : ["TPopupNotifier"], - "Description" : "Shows how to us TPopupNotifier. - -(You may, as an alternative use Libnotify on Linux, other more OS friendy notification tools exist on other OSs, just a suggestion) - -"} + "Category" : "General", + "Keywords" : ["TPopupNotifier", "message"], + "Description" : "Shows how to use TPopupNotifier, pops up a small yellow (?) window with a message for the user.\n\n(You may, as an alternative use Libnotify on Linux, other more OS friendy notification tools exist on other OSs, just a suggestion)\n\n"} } \ No newline at end of file diff --git a/examples/Components/postscript/postscript.ex-meta b/examples/Components/postscript/postscript.ex-meta index f67cb64ebe..5b81b716e5 100644 --- a/examples/Components/postscript/postscript.ex-meta +++ b/examples/Components/postscript/postscript.ex-meta @@ -1,6 +1,13 @@ -{ "postscript" : { - "Category" : "Components", - "Keywords" : ["Postscript", "png", "xpm", "bmp", "Drawing"], - "Description" : "How to create a Postscript file, displaying images, text and polygons on it. -(Note that some functions don't work unless you have specific tools installed but creating the PS file requires nothing but Lazarus.)"} -} \ No newline at end of file +{ + "postscript" : { + "Category" : "General", + "Keywords" : [ + "Postscript", + "png", + "xpm", + "bmp", + "Drawing" + ], + "Description" : "How to create a Postscript file, displaying images, text and polygons on it.\n(Note that some functions don't work unless you have specific tools installed but creating the PS file requires nothing but Lazarus.)" + } +} diff --git a/examples/Components/postscript/usamplepostscriptcanvas.pas b/examples/Components/postscript/usamplepostscriptcanvas.pas index a0fd98a4b4..6304948ced 100644 --- a/examples/Components/postscript/usamplepostscriptcanvas.pas +++ b/examples/Components/postscript/usamplepostscriptcanvas.pas @@ -223,7 +223,8 @@ begin png := TPortableNetworkGraphic.Create; try - png.LoadFromFile('../../images/splash_logo.png'); + png.LoadFromFile('splash_logo.png'); + //png.LoadFromFile('../../images/splash_logo.png'); StretchDraw(bounds(Sx(190), Sy(590), Sx(round(png.Width*0.60)),Sy(round(png.height*0.60))),png); finally png.Free; diff --git a/examples/Components/propstorage/propstorage.ex-meta b/examples/Components/propstorage/propstorage.ex-meta index cc30ad4e79..bcb4559f44 100644 --- a/examples/Components/propstorage/propstorage.ex-meta +++ b/examples/Components/propstorage/propstorage.ex-meta @@ -1,5 +1,12 @@ -{ "propstorage" : { - "Category" : "Components", - "Keywords" : ["TIniPropStorage", "TXMLPropStorage", "config file", "configuration file"], - "Description" : "Records the size, location and contents (ie the Properties) of a TMemo in both an xml and ini file for later retrival."} -} \ No newline at end of file +{ + "propstorage" : { + "Category" : "General", + "Keywords" : [ + "TIniPropStorage", + "TXMLPropStorage", + "config file", + "configuration file" + ], + "Description" : "Records the size, location and contents (ie the Properties) of a TMemo in both an xml and ini file for later retrival." + } +} diff --git a/examples/Components/spreadsheet/spreadsheet.ex-meta b/examples/Components/spreadsheet/spreadsheet.ex-meta index b46d293b13..6cddec7f76 100644 --- a/examples/Components/spreadsheet/spreadsheet.ex-meta +++ b/examples/Components/spreadsheet/spreadsheet.ex-meta @@ -1,5 +1,11 @@ -{ "SpreadSheet" : { - "Category" : "Components", - "Keywords" : ["Grid", "TStringGrid", "SpreadSheet"], - "Description" : "Builds a basic spreadsheet."} -} \ No newline at end of file +{ + "SpreadSheet" : { + "Category" : "General", + "Keywords" : [ + "Grid", + "TStringGrid", + "SpreadSheet" + ], + "Description" : "Builds a basic spreadsheet." + } +} diff --git a/examples/Components/std_actions/std_actions.ex-meta b/examples/Components/std_actions/std_actions.ex-meta index 6440e019f5..7f26d38c77 100644 --- a/examples/Components/std_actions/std_actions.ex-meta +++ b/examples/Components/std_actions/std_actions.ex-meta @@ -1,5 +1,11 @@ -{ "std_actions" : { - "Category" : "Components", - "Keywords" : ["TToolBar", "TActionList", "TToolButton"], - "Description" : "Demonstrates how a TToolBar can work with a TActionList to implement the standard editing actions (Copy, Paste, delete, find etc)."} -} \ No newline at end of file +{ + "std_actions" : { + "Category" : "General", + "Keywords" : [ + "TToolBar", + "TActionList", + "TToolButton" + ], + "Description" : "Demonstrates how a TToolBar can work with a TActionList to implement the standard editing actions (Copy, Paste, delete, find etc)." + } +} diff --git a/examples/Components/stock_images/stock_images.ex-meta b/examples/Components/stock_images/stock_images.ex-meta index 54ac944038..7327dfa15e 100644 --- a/examples/Components/stock_images/stock_images.ex-meta +++ b/examples/Components/stock_images/stock_images.ex-meta @@ -1,5 +1,5 @@ { "stock_images" : { - "Category" : "Components", - "Keywords" : ["Images", "Dialog Images", "Button Images"], + "Category" : "General", + "Keywords" : ["Images","Dialog Images","Button Images", "TTrackBar"], "Description" : "Displayes, interactivly, the \"stock Images\" that Lazarus uses in Dialogs and Buttons."} } \ No newline at end of file diff --git a/examples/Components/title_images/title_images.ex-meta b/examples/Components/title_images/title_images.ex-meta index adeb4d8bfe..f6c65289a3 100644 --- a/examples/Components/title_images/title_images.ex-meta +++ b/examples/Components/title_images/title_images.ex-meta @@ -1,5 +1,11 @@ -{ "title_images" : { - "Category" : "Components", - "Keywords" : ["Grid", "TStringGrid", "Sort Indicator" ], - "Description" : "Demonstrates managing location and image of a String List's Sort Indicators."} -} \ No newline at end of file +{ + "title_images" : { + "Category" : "General", + "Keywords" : [ + "Grid", + "TStringGrid", + "Sort Indicator" + ], + "Description" : "Demonstrates managing location and image of a String List's Sort Indicators." + } +} diff --git a/examples/Components/trayicon/TrayIcon.ex-meta b/examples/Components/trayicon/TrayIcon.ex-meta new file mode 100644 index 0000000000..7d82cf9d32 --- /dev/null +++ b/examples/Components/trayicon/TrayIcon.ex-meta @@ -0,0 +1,5 @@ +{ "TrayIcon" : { + "Category" : "General", + "Keywords" : ["trayicon","systray"], + "Description" : "This project demonstrates how to use the TrayIcon, it places a small Icon in the System Tray that the user can use to interact with the application through. "} +} \ No newline at end of file diff --git a/examples/Components/trayicon/frmtest.pas b/examples/Components/trayicon/frmtest.pas index fd0d6abc35..45bdb99ba0 100644 --- a/examples/Components/trayicon/frmtest.pas +++ b/examples/Components/trayicon/frmtest.pas @@ -13,7 +13,16 @@ ***************************************************************************** Author: Felipe Monteiro de Carvalho + + Import Nate for Linux users. + Around 2020 Linux distributions started shipping systems either without a System + Tray or with one that has strictly limited capabilities. All in the name of + "reducing clutter". This means you may not be able to get different events + for Left and Right click, possibly no Hints or animated icons. See the FPC + wiki pages for more information. + DRB April, 2022 } + unit frmtest; {$ifdef fpc} diff --git a/examples/Components/trayicon/trayicon.ex-meta b/examples/Components/trayicon/trayicon.ex-meta deleted file mode 100644 index db789af650..0000000000 --- a/examples/Components/trayicon/trayicon.ex-meta +++ /dev/null @@ -1,10 +0,0 @@ -{ -"TrayIcon" : { - "Category" : "Components", - "Keywords" : ["trayicon", "systray", "needs work"], - "Description" : "This project demonstrates how the use the TrayIcon, places a small Icon in the System Tray that the user can interact with the application through. Note that it includes functionality that is not available anymore in many Linux distributions."} -} - - - - diff --git a/examples/Components/treeview/treeview.ex-meta b/examples/Components/treeview/treeview.ex-meta index b1927cd889..712a54b4ff 100644 --- a/examples/Components/treeview/treeview.ex-meta +++ b/examples/Components/treeview/treeview.ex-meta @@ -1,7 +1,10 @@ -{ "treeview" : { - "Category" : "Components", - "Keywords" : ["TTreeView", "Needs Work"], - "Description" : "Demonstrates adding and removing nodes from a TTreeView. - -Note that the readme.txt refers to a tutorial that no longer is available, can we find its new home ?"} -} \ No newline at end of file +{ + "treeview" : { + "Category" : "General", + "Keywords" : [ + "TTreeView", + "Needs Work" + ], + "Description" : "Demonstrates adding and removing nodes from a TTreeView.\n\nNote that the readme.txt refers to a tutorial that no longer is available, can we find its new home ?" + } +} diff --git a/examples/Components/turbopower_ipro/turbopower_ipro.ex-meta b/examples/Components/turbopower_ipro/turbopower_ipro.ex-meta index e0d95b0697..3d34ff7061 100644 --- a/examples/Components/turbopower_ipro/turbopower_ipro.ex-meta +++ b/examples/Components/turbopower_ipro/turbopower_ipro.ex-meta @@ -1,8 +1,11 @@ -{ "turbopower_ipro" : { - "Category" : "Components", - "Keywords" : ["TurboPower", "html", "renderer"], - "Description" : "This directory contains two programs to test the package -TurboPower Internet Professional. -1. tpiproexample: Basic function to display and print a html page. -2. tpiprohtmltree: Displays the hierarchy of html nodes of a html document in a treeview."} -} \ No newline at end of file +{ + "turbopower_ipro" : { + "Category" : "General", + "Keywords" : [ + "TurboPower", + "html", + "renderer" + ], + "Description" : "This directory contains two programs to test the package \nTurboPower Internet Professional. \n1. tpiproexample: Basic function to display and print a html page.\n2. tpiprohtmltree: Displays the hierarchy of html nodes of a html document in a treeview." + } +} diff --git a/examples/Components/vst_advanced/vst_advanced.ex-meta b/examples/Components/vst_advanced/vst_advanced.ex-meta index 0fafc4986a..210cf05943 100644 --- a/examples/Components/vst_advanced/vst_advanced.ex-meta +++ b/examples/Components/vst_advanced/vst_advanced.ex-meta @@ -1,7 +1,11 @@ -{ "vst_advanced" : { - "Category" : "Components", - "Keywords" : ["TLazVirtualStringTree", "TVirtualTreeView", "Advanced Features"], - "Description" : "This is about TLazVirtualStringTree, a component renamed from TVirtualTreeView that exists in the LazControls Component Tab. - -This example demonstrates some advanced features such as Extended Characters, Property Page, Syncing Trees, Grid Extensions, A Draw Tree (showing images), bidi ability, Painting the tree under a specific theme (ie WinXP style), Spanning Columns and Advanced drawing of Headers."} -} \ No newline at end of file +{ + "vst_advanced" : { + "Category" : "General", + "Keywords" : [ + "TLazVirtualStringTree", + "TVirtualTreeView", + "Advanced Features" + ], + "Description" : "This is about TLazVirtualStringTree, a component renamed from TVirtualTreeView that exists in the LazControls Component Tab. \n\nThis example demonstrates some advanced features such as Extended Characters, Property Page, Syncing Trees, Grid Extensions, A Draw Tree (showing images), bidi ability, Painting the tree under a specific theme (ie WinXP style), Spanning Columns and Advanced drawing of Headers." + } +} diff --git a/examples/Components/vst_dragdrop/vst_dragdrop.ex-meta b/examples/Components/vst_dragdrop/vst_dragdrop.ex-meta index 608da60b75..5b015ad9db 100644 --- a/examples/Components/vst_dragdrop/vst_dragdrop.ex-meta +++ b/examples/Components/vst_dragdrop/vst_dragdrop.ex-meta @@ -1,7 +1,11 @@ -{ "vst_dragdrop" : { - "Category" : "Components", - "Keywords" : ["TLazVirtualStringTree", "TVirtualTreeView", "Drag and Drop"], - "Description" : "This is about TLazVirtualStringTree, a component renamed from TVirtualTreeView that exists in the LazControls Component Tab. - -This example shows drag and drop (from a TListBox) to the TLazVirtualStringTree."} -} \ No newline at end of file +{ + "vst_dragdrop" : { + "Category" : "General", + "Keywords" : [ + "TLazVirtualStringTree", + "TVirtualTreeView", + "Drag and Drop" + ], + "Description" : "This is about TLazVirtualStringTree, a component renamed from TVirtualTreeView that exists in the LazControls Component Tab. \n\nThis example shows drag and drop (from a TListBox) to the TLazVirtualStringTree." + } +} diff --git a/examples/Components/vst_minimal/vst_minimal.ex-meta b/examples/Components/vst_minimal/vst_minimal.ex-meta index e52657653a..c4208cdc64 100644 --- a/examples/Components/vst_minimal/vst_minimal.ex-meta +++ b/examples/Components/vst_minimal/vst_minimal.ex-meta @@ -1,7 +1,10 @@ -{ "vst_minimal" : { - "Category" : "Components", - "Keywords" : ["TLazVirtualStringTree", "TVirtualTreeView"], - "Description" : "This is about TLazVirtualStringTree, a component renamed from TVirtualTreeView that exists in the LazControls Component Tab. - -This example shows it most basic use."} -} \ No newline at end of file +{ + "vst_minimal" : { + "Category" : "General", + "Keywords" : [ + "TLazVirtualStringTree", + "TVirtualTreeView" + ], + "Description" : "This is about TLazVirtualStringTree, a component renamed from TVirtualTreeView that exists in the LazControls Component Tab. \n\nThis example shows it most basic use." + } +} diff --git a/examples/Components/widestringstreaming/widestringstreaming.ex-meta b/examples/Components/widestringstreaming/widestringstreaming.ex-meta index 748e503f81..4f34235d1d 100644 --- a/examples/Components/widestringstreaming/widestringstreaming.ex-meta +++ b/examples/Components/widestringstreaming/widestringstreaming.ex-meta @@ -1,5 +1,10 @@ -{ "widestringstreaming" : { - "Category" : "Components", - "Keywords" : ["Stream", "Components"], - "Description" : "This example demonstrates, how to stream a component to a stream in binary format and then recreate that component elsewhere from the stream."} -} \ No newline at end of file +{ + "widestringstreaming" : { + "Category" : "General", + "Keywords" : [ + "Stream", + "Components" + ], + "Description" : "This example demonstrates, how to stream a component to a stream in binary format and then recreate that component elsewhere from the stream." + } +} diff --git a/examples/Components/xmlreader/xmlreader.ex-meta b/examples/Components/xmlreader/xmlreader.ex-meta index 637629cf86..1db52f4aff 100644 --- a/examples/Components/xmlreader/xmlreader.ex-meta +++ b/examples/Components/xmlreader/xmlreader.ex-meta @@ -1,5 +1,12 @@ -{ "xmlreader" : { - "Category" : "Components", - "Keywords" : ["xml", "xml reader", "ReadXMLFile", "TTreeView"], - "Description" : "Shows how to read an XML file, displaying the data on its various nodes."} -} \ No newline at end of file +{ + "xmlreader" : { + "Category" : "General", + "Keywords" : [ + "xml", + "xml reader", + "ReadXMLFile", + "TTreeView" + ], + "Description" : "Shows how to read an XML file, displaying the data on its various nodes." + } +} diff --git a/examples/Components/xmlstreaming/xmlstreaming.ex-meta b/examples/Components/xmlstreaming/xmlstreaming.ex-meta index c0ce253c68..bc446fb6f6 100644 --- a/examples/Components/xmlstreaming/xmlstreaming.ex-meta +++ b/examples/Components/xmlstreaming/xmlstreaming.ex-meta @@ -1,7 +1,5 @@ { "xmlstreaming" : { - "Category" : "Components", - "Keywords" : ["xml", "xml streaming", "components", "Needs work"], - "Description" : "Writes a component to an XML stream then uses that stream to create more such components. - -I am not sure its useful to use the word Stream here, further, it appears the rewritten components do not popup where they should, that is in the Destination box."} + "Category" : "General", + "Keywords" : ["xml","xml streaming","components","Needs work"], + "Description" : "Writes a component to an XML stream then uses that stream to create more such components. \n\nI am not sure the rewritten components popup where they should, that is in the Destination box ?"} } \ No newline at end of file diff --git a/examples/DBase/address_book/Address_book.ex-meta b/examples/DBase/address_book/Address_book.ex-meta new file mode 100644 index 0000000000..4d9a9a9a0c --- /dev/null +++ b/examples/DBase/address_book/Address_book.ex-meta @@ -0,0 +1,5 @@ +{ "Address_book" : { + "Category" : "DBase", + "Keywords" : ["DBGrids","DBCtrls"], + "Description" : "Demonstrates making a simple database based Address Book.\nOpen the demo datafile from the 'File' menu to see it work."} +} \ No newline at end of file diff --git a/examples/DBase/address_book/address_book.ex-meta b/examples/DBase/address_book/address_book.ex-meta deleted file mode 100644 index c878417095..0000000000 --- a/examples/DBase/address_book/address_book.ex-meta +++ /dev/null @@ -1,6 +0,0 @@ -{ -"Address_book" : { - "Category" : "DBase", - "Keywords" : ["DBGrids", "DBCtrls"], - "Description" : "Demonstrates making a simple database based Address Book."} -} diff --git a/examples/DBase/dblookup/dblookup.ex-meta b/examples/DBase/dblookup/dBLookup.ex-meta similarity index 74% rename from examples/DBase/dblookup/dblookup.ex-meta rename to examples/DBase/dblookup/dBLookup.ex-meta index 8132722827..64e506f2f8 100644 --- a/examples/DBase/dblookup/dblookup.ex-meta +++ b/examples/DBase/dblookup/dBLookup.ex-meta @@ -1,5 +1,5 @@ { "dBLookup" : { "Category" : "DBase", "Keywords" : ["dbase","Tdbf","TBataSource"], - "Description" : "Demonstrates some basic database functions using Tdbf and TDataSource"} -} + "Description" : "Demonstrates some basic database functions using Tdbf and TDataSource and its own dbase files."} +} \ No newline at end of file diff --git a/examples/DBase/fbadmin/fbadmin.ex-meta b/examples/DBase/fbadmin/FBAdmin.ex-meta similarity index 100% rename from examples/DBase/fbadmin/fbadmin.ex-meta rename to examples/DBase/fbadmin/FBAdmin.ex-meta diff --git a/examples/DBase/image_mushrooms/image_mushrooms.ex-meta b/examples/DBase/image_mushrooms/Image_Mushrooms.ex-meta similarity index 62% rename from examples/DBase/image_mushrooms/image_mushrooms.ex-meta rename to examples/DBase/image_mushrooms/Image_Mushrooms.ex-meta index f1e1da0b04..c6f5ebd9cd 100644 --- a/examples/DBase/image_mushrooms/image_mushrooms.ex-meta +++ b/examples/DBase/image_mushrooms/Image_Mushrooms.ex-meta @@ -1,7 +1,5 @@ { "Image_Mushrooms" : { - "Category" : "DBase", - "Keywords" : ["DBase","SQLIte3","DBNavigator","Images","SQLQuery","Firebird", "LazReport"], - "Description" : "Makes a small app that displays images of mushrooms and some text about each. Uses SQLite or Firebird, SqlDB, LazReport and FBAdmin. Demonstrates creating tables and running multiple SQLStatements. - -See the included readme.txt file."} + "Category" : "LazReport", + "Keywords" : ["DBase","SQLIte3","DBNavigator","Images","SQLQuery","Firebird","LazReport"], + "Description" : "Makes a small app that displays images of mushrooms and some text about each. Uses SQLite or Firebird, SqlDB, LazReport and FBAdmin. Demonstrates creating tables and running multiple SQLStatements.\nEasy to get going and impressive demo.\n\nSee the included readme.txt file."} } \ No newline at end of file diff --git a/examples/DBase/sqldbtutorial3/SQLdBTutorial3.ex-meta b/examples/DBase/sqldbtutorial3/SQLdBTutorial3.ex-meta new file mode 100644 index 0000000000..8685057138 --- /dev/null +++ b/examples/DBase/sqldbtutorial3/SQLdBTutorial3.ex-meta @@ -0,0 +1,5 @@ +{ "SQLdBTutorial3" : { + "Category" : "DBase", + "Keywords" : ["DBase","SQLIte3","Tutorial","wiki"], + "Description" : "This directory has the accompanying code for -\nhttp://wiki.lazarus.freepascal.org/SQLdb_Tutorial3\nDoes not seem to connect flawlessly to sqlite3 so some reading of the wiki article might be a good idea. \n\nPlease see that article for instructions and requirements.\n"} +} \ No newline at end of file diff --git a/examples/DBase/sqldbtutorial3/sqldbtutorial3.ex-meta b/examples/DBase/sqldbtutorial3/sqldbtutorial3.ex-meta deleted file mode 100644 index 63bbdadf34..0000000000 --- a/examples/DBase/sqldbtutorial3/sqldbtutorial3.ex-meta +++ /dev/null @@ -1,9 +0,0 @@ -{ "SQLdBTutorial3" : { - "Category" : "DBase", - "Keywords" : ["DBase","SQLIte3","Tutorial", "wiki"], - "Description" : "This directory has the accompanying code for -http://wiki.lazarus.freepascal.org/SQLdb_Tutorial3 - -Please see that article for instructions and requirements. -"} -} \ No newline at end of file diff --git a/examples/DBase/sqlite_encryption_pragma/SQLite_Encryption_Pragma.ex-meta b/examples/DBase/sqlite_encryption_pragma/SQLite_Encryption_Pragma.ex-meta new file mode 100644 index 0000000000..32775df134 --- /dev/null +++ b/examples/DBase/sqlite_encryption_pragma/SQLite_Encryption_Pragma.ex-meta @@ -0,0 +1,5 @@ +{ "SQLite_Encryption_Pragma" : { + "Category" : "DBase", + "Keywords" : ["DBase","SQLite3","Encryption","Pragma","Needs Work"], + "Description" : "Simple SQLite3 Demo with Encryption and Pragma. Creation of an SQLite3 Database, Encrypting, Changing the key, Creating Tables, Index and adding rows, performing queries.\n\nIs, however, broken on Unix systems because its assumes the sqlite3 library is called sqlite3.dll ! Leaving it here for now as it probably works under Windows but needs fixing!\n\nSee the included readme.txt file.\n"} +} \ No newline at end of file diff --git a/examples/DBase/sqlite_encryption_pragma/sqlite_encryption_pragma.ex-meta b/examples/DBase/sqlite_encryption_pragma/sqlite_encryption_pragma.ex-meta deleted file mode 100644 index 7be5d4df2b..0000000000 --- a/examples/DBase/sqlite_encryption_pragma/sqlite_encryption_pragma.ex-meta +++ /dev/null @@ -1,8 +0,0 @@ -{ "SQLite_Encryption_Pragma" : { - "Category" : "DBase", - "Keywords" : ["DBase","SQLite3","Encryption","Pragma"], - "Description" : "Simple SQLite3 Demo with Encryption and Pragma. Creation of an SQLite3 Database, Encrypting, Changing the key, Creating Tables, Index and adding rows, performing queries. - -See the included readme.txt file. -"} -} \ No newline at end of file diff --git a/examples/DBase/tsqlscript/TSQLScript.ex-meta b/examples/DBase/tsqlscript/TSQLScript.ex-meta new file mode 100644 index 0000000000..353163ffcf --- /dev/null +++ b/examples/DBase/tsqlscript/TSQLScript.ex-meta @@ -0,0 +1,5 @@ +{ "TSQLScript" : { + "Category" : "DBase", + "Keywords" : ["DBase","TSQLScript","batch"], + "Description" : "This example shows how to use TSQLScript to run a batch of SQL statements.\n\nNot well tested and may have issues in connecting to (at least sqlite3). Further research indicated.\nFurther info in the included readme.txt file."} +} \ No newline at end of file diff --git a/examples/DBase/tsqlscript/tsqlscript.ex-meta b/examples/DBase/tsqlscript/tsqlscript.ex-meta deleted file mode 100644 index 752c226a3d..0000000000 --- a/examples/DBase/tsqlscript/tsqlscript.ex-meta +++ /dev/null @@ -1,7 +0,0 @@ -{ "TSQLScript" : { - "Category" : "DBase", - "Keywords" : ["DBase","TSQLScript","batch"], - "Description" : "This example shows how to use TSQLScript to run a batch of SQL statements. - -Further info in the included readme.txt file."} -} \ No newline at end of file diff --git a/examples/Techniques/NoteBk/NoteBk.ex-meta b/examples/Techniques/NoteBk/NoteBk.ex-meta new file mode 100644 index 0000000000..692002874c --- /dev/null +++ b/examples/Techniques/NoteBk/NoteBk.ex-meta @@ -0,0 +1,5 @@ +{ "NoteBk" : { + "Category" : "General", + "Keywords" : ["tabbed","notebook","No Object Inspector"], + "Description" : "This project was built without using the Lazarus IDE's Form designer because either the author preferred working that way or it was done before the Designer was available. It demonstrates how components can be placed on different pages of a notebook."} +} \ No newline at end of file diff --git a/examples/Techniques/NoteBk/notebk.ex-meta b/examples/Techniques/NoteBk/notebk.ex-meta deleted file mode 100644 index 9e9979461a..0000000000 --- a/examples/Techniques/NoteBk/notebk.ex-meta +++ /dev/null @@ -1,5 +0,0 @@ -{ "NoteBk" : { - "Category" : "Techniques", - "Keywords" : ["tabbed","notebook", "No Object Inspector"], - "Description" : "This project was built without using the Lazarus IDE's Form designer because either the author prefered working that way or it was done before the Designer was available. It demonstrates how components can be placed on different pages of a notebook."} -} \ No newline at end of file diff --git a/examples/Techniques/ReSizeImageDemo/ReSizeImageDemo.ex-meta b/examples/Techniques/ReSizeImageDemo/ReSizeImageDemo.ex-meta index 03e825a957..2113e9137b 100644 --- a/examples/Techniques/ReSizeImageDemo/ReSizeImageDemo.ex-meta +++ b/examples/Techniques/ReSizeImageDemo/ReSizeImageDemo.ex-meta @@ -1,8 +1,11 @@ -{ "ReSizeImageDemo" : { - "Category" : "Techniques", - "Keywords" : ["Needs Work", "Resize", "FormResize"], - "Description" : " LCL demo of redraw event order for images, panels and forms. it should work for all widget sets eg Windows, qt, OSX, GTK etc. - -Note: I cannot quite understand what this is demonstrating, maybe someone else can improve the metadata ? DRB -"} -} \ No newline at end of file +{ + "ReSizeImageDemo" : { + "Category" : "General", + "Keywords" : [ + "Needs Work", + "Resize", + "FormResize" + ], + "Description" : " LCL demo of redraw event order for images, panels and forms. it should work for all widget sets eg Windows, qt, OSX, GTK etc.\n\nNote: I cannot quite understand what this is demonstrating, maybe someone else can improve the metadata ? DRB\n" + } +} diff --git a/examples/Techniques/TDaemon/TDaemon.ex-meta b/examples/Techniques/TDaemon/TDaemon.ex-meta new file mode 100644 index 0000000000..f5b9b7e2b0 --- /dev/null +++ b/examples/Techniques/TDaemon/TDaemon.ex-meta @@ -0,0 +1,5 @@ +{ "TDaemon" : { + "Category" : "General", + "Keywords" : ["TDaemom","Server"], + "Description" : "These are supporting files that relate to the https://wiki.freepascal.org/Daemons_and_Services tutorial. While useful as is, reading the wiki article is strongly suggested. \nRequires that the package, LazDaemon be installed."} +} \ No newline at end of file diff --git a/examples/Techniques/TDaemon/TestDaemon.lpi b/examples/Techniques/TDaemon/TestDaemon.lpi new file mode 100644 index 0000000000..e958960c51 --- /dev/null +++ b/examples/Techniques/TDaemon/TestDaemon.lpi @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + <UseAppBundle Value="False"/> + <ResourceType Value="res"/> + </General> + <BuildModes> + <Item Name="Debug" Default="True"/> + <Item Name="Release"> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="$(TargetCPU)-$(TargetOS)\Release\TestDaemon"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <CodeGeneration> + <SmartLinkUnit Value="True"/> + <Optimizations> + <OptimizationLevel Value="3"/> + </Optimizations> + </CodeGeneration> + <Linking> + <Debugging> + <GenerateDebugInfo Value="False"/> + </Debugging> + <LinkSmart Value="True"/> + </Linking> + </CompilerOptions> + </Item> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + </RunParams> + <RequiredPackages> + <Item> + <PackageName Value="LazDaemon"/> + </Item> + <Item> + <PackageName Value="LCL"/> + </Item> + <Item> + <PackageName Value="FCL"/> + </Item> + </RequiredPackages> + <Units> + <Unit> + <Filename Value="TestDaemon.lpr"/> + <IsPartOfProject Value="True"/> + </Unit> + <Unit> + <Filename Value="daemonmapperunit.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="DaemonMapper1"/> + <HasResources Value="True"/> + </Unit> + <Unit> + <Filename Value="daemonunit.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="TestDaemon"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="DataModule"/> + <UnitName Value="DaemonUnit"/> + </Unit> + <Unit> + <Filename Value="daemonworkerthread.pas"/> + <IsPartOfProject Value="True"/> + <UnitName Value="DaemonWorkerThread"/> + </Unit> + <Unit> + <Filename Value="daemonsystemdinstallerunit.pas"/> + <IsPartOfProject Value="True"/> + <UnitName Value="DaemonSystemdInstallerUnit"/> + </Unit> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="$(TargetCPU)-$(TargetOS)\Debug\TestDaemon"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <IncludeAssertionCode Value="True"/> + </SyntaxOptions> + </Parsing> + <CodeGeneration> + <Checks> + <IOChecks Value="True"/> + <RangeChecks Value="True"/> + <OverflowChecks Value="True"/> + <StackChecks Value="True"/> + </Checks> + <VerifyObjMethodCallValidity Value="True"/> + </CodeGeneration> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf3"/> + <UseHeaptrc Value="True"/> + <TrashVariables Value="True"/> + <UseExternalDbgSyms Value="True"/> + </Debugging> + </Linking> + </CompilerOptions> + <Debugging> + <Exceptions> + <Item> + <Name Value="EAbort"/> + </Item> + <Item> + <Name Value="ECodetoolError"/> + </Item> + <Item> + <Name Value="EFOpenError"/> + </Item> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/examples/Techniques/TDaemon/TestDaemon.lpr b/examples/Techniques/TDaemon/TestDaemon.lpr new file mode 100644 index 0000000000..43d4700c08 --- /dev/null +++ b/examples/Techniques/TDaemon/TestDaemon.lpr @@ -0,0 +1,14 @@ +Program TestDaemon; + +Uses +{$IFDEF UNIX}{$IFDEF UseCThreads} + CThreads, +{$ENDIF}{$ENDIF} + DaemonApp, lazdaemonapp, daemonmapperunit, DaemonUnit, DaemonWorkerThread, + DaemonSystemdInstallerUnit + { add your units here }; + +begin + Application.Initialize; + Application.Run; +end. diff --git a/examples/Techniques/TDaemon/daemonmapperunit.lfm b/examples/Techniques/TDaemon/daemonmapperunit.lfm new file mode 100644 index 0000000000..0024bfd3b7 --- /dev/null +++ b/examples/Techniques/TDaemon/daemonmapperunit.lfm @@ -0,0 +1,20 @@ +object TestDaemonMapper: TTestDaemonMapper + DaemonDefs = < + item + DaemonClassName = 'TTestDaemon' + Name = 'testdaemon' + Description = 'My first Test Daemon' + DisplayName = 'Test Daemon' + Options = [doAllowStop, doAllowPause] + WinBindings.Dependencies = <> + WinBindings.StartType = stManual + WinBindings.WaitHint = 0 + WinBindings.IDTag = 0 + WinBindings.ServiceType = stWin32 + WinBindings.ErrorSeverity = esIgnore + WinBindings.AcceptedCodes = [] + LogStatusReport = False + end> + Left = 371 + Top = 31 +end diff --git a/examples/Techniques/TDaemon/daemonmapperunit.pas b/examples/Techniques/TDaemon/daemonmapperunit.pas new file mode 100644 index 0000000000..8edf6d4bd3 --- /dev/null +++ b/examples/Techniques/TDaemon/daemonmapperunit.pas @@ -0,0 +1,41 @@ +unit DaemonMapperUnit; + +{$mode objfpc}{$H+} + +interface + +{$R *.lfm} + +uses + Classes, SysUtils, DaemonApp; + +// --------------------------------------------------------------------- +// The mapper class holds the description of a daemon and provides the +// parameters for configuration, mostly required during the installation + +// For a basic daemon, there is absolutely nothing to do in code here +// the defaults and what the lfm file provide are just fine. +// --------------------------------------------------------------------- + +type + TTestDaemonMapper = class(TDaemonMapper) + private + + public + + end; + +implementation + +// ---------------------------------------- +// Mapper registration. Created by template +// ---------------------------------------- + +procedure RegisterMapper; +begin + RegisterDaemonMapper(TTestDaemonMapper); +end; + +initialization + RegisterMapper; +end. diff --git a/examples/Techniques/TDaemon/daemonsystemdinstallerunit.pas b/examples/Techniques/TDaemon/daemonsystemdinstallerunit.pas new file mode 100644 index 0000000000..f91e9e0d40 --- /dev/null +++ b/examples/Techniques/TDaemon/daemonsystemdinstallerunit.pas @@ -0,0 +1,65 @@ +unit DaemonSystemdInstallerUnit; + +{$mode ObjFPC}{$H+} + +interface + +uses + Classes, SysUtils, DaemonApp, IniFiles; + +// --------------------------------------------------------------------- +// Helper functions for Unix service install/uninstall support (systemd) +// 2/2022 by arminlinder@arminlinder.de +// --------------------------------------------------------------------- + +const + DAEMON_CONFIG_FILE_PATH = '/lib/systemd/system'; // Unix systemd config file path + +function GetSystemdControlFilePath(aDaemonName: string): string; +function CreateSystemdControlFile(aDaemon: TDaemon; aFilePath: string): boolean; +function RemoveSystemdControlFile(aFilePath: string): boolean; + +implementation + +function GetSystemdControlFilePath(aDaemonName: string): string; + +begin + Result := IncludetrailingBackslash(DAEMON_CONFIG_FILE_PATH) + aDaemonName + '.service'; +end; + +function CreateSystemdControlFile(aDaemon: TDaemon; aFilePath: string): boolean; + +var + f: TIniFile; + +begin + Result := False; + try + f := TIniFile.Create(aFilePath, []); + // We use the definition given in the mapper class + // The mapper class is assigned to the "Definition" property + f.WriteString('Unit', 'Description', aDaemon.Definition.Description); + f.WriteString('Unit', 'After', 'network.target'); + f.WriteString('Service', 'Type', 'simple'); + f.WriteString('Service', 'ExecStart', Application.ExeName + ' -r'); + f.WriteString('Install', 'WantedBy', 'multi-user.target'); + Result := True; + // Removed Taken from old file sample, IMHO not required + // f.WriteString('Service', 'TimeoutSec', '25'); + // f.WriteString('Service', 'RemainAfterExit', 'yes'); + finally + f.Free; + end; +end; + +function RemoveSystemdControlFile(aFilePath: string): boolean; + + // Remove the control file, if it does exist + +begin + Result := True; + if FileExists(aFilePath) then + Result := DeleteFile(aFilePath); +end; + +end. diff --git a/examples/Techniques/TDaemon/daemonunit.lfm b/examples/Techniques/TDaemon/daemonunit.lfm new file mode 100644 index 0000000000..adfb2ed605 --- /dev/null +++ b/examples/Techniques/TDaemon/daemonunit.lfm @@ -0,0 +1,13 @@ +object TestDaemon: TTestDaemon + OldCreateOrder = False + OnStart = DataModuleStart + OnStop = DataModuleStop + OnPause = DataModulePause + OnContinue = DataModuleContinue + AfterInstall = DataModuleAfterInstall + AfterUnInstall = DataModuleAfterUnInstall + Height = 150 + HorizontalOffset = 371 + VerticalOffset = 31 + Width = 150 +end diff --git a/examples/Techniques/TDaemon/daemonunit.pas b/examples/Techniques/TDaemon/daemonunit.pas new file mode 100644 index 0000000000..3b512c7020 --- /dev/null +++ b/examples/Techniques/TDaemon/daemonunit.pas @@ -0,0 +1,212 @@ +unit DaemonUnit; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, DaemonApp, DaemonWorkerThread + {$IFDEF UNIX} + , DaemonSystemdInstallerUnit // Some systemd installer support for -install | -ininstall + {$ENDIF}; + +// ------------------------------------------------------------------------------- +// Demo application on how to use the TDaemon application type +// 2/2022 by arminlinder@arminlinder.de + +// Based on document +// "Taming the daemon: Writing cross-platform service applications in FPC/Lazarus" +// by Michaƫl Van Canneyt, February 4, 2007 +// ------------------------------------------------------------------------------- + +const + DAEMON_VERSION = '1.2'; // Just for logging + +type + + { TTestDaemon } + + TTestDaemon = class(TDaemon) + procedure DataModuleAfterInstall(Sender: TCustomDaemon); + procedure DataModuleAfterUnInstall(Sender: TCustomDaemon); + procedure DataModuleContinue(Sender: TCustomDaemon; var OK: boolean); + procedure DataModulePause(Sender: TCustomDaemon; var OK: boolean); + procedure DataModuleStart(Sender: TCustomDaemon; var OK: boolean); + procedure DataModuleStop(Sender: TCustomDaemon; var OK: boolean); + private + FDaemonWorkerThread: TDaemonWorkerThread; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + end; + +procedure LogToFile(aMessage: string); + +var + TestDaemon: TTestDaemon; + +implementation + +{$R *.lfm} + +// --------------------------------------------------------------------- +// Quick and dirty write log message to file +// Note: TDaemonApplication has extensive logging capabilities built-in! +// --------------------------------------------------------------------- + +procedure LogToFile(aMessage: string); + + function TimeStamped(S: string): string; + // Return a timestamped copy of a string + + begin + Result := FormatDateTime('hh:mm:ss', now) + ' ' + S; + end; + +var + f: Text; + LogFilePath: string; + +begin + // create a daily log file in the .exe directory + LogFilePath := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + + FormatDateTime('YYYYMMDD', now) + '.log'; + AssignFile(f, LogFilePath); + try + if FileExists(LogFilePath) then + Append(f) + else + begin + Rewrite(f); + writeln(f, TimeStamped('Log created')); + end; + Writeln(f, TimeStamped(aMessage)); + finally + CloseFile(f); + end; +end; + +{ TTestDaemon } + +// ------------------------------- +// Installation and deinstallation +// ------------------------------- +// Note: Windows code is already in the DaemonApp unit +// Code here tries to approximate same functionality for Unix + +procedure TTestDaemon.DataModuleAfterInstall(Sender: TCustomDaemon); + +var + isInstalled: boolean; + FilePath: string; + +begin + isInstalled := True; + {$IFDEF UNIX} + FilePath := GetSystemdControlFilePath(self.Name); + isInstalled := CreateSystemdControlFile(self, FilePath); + if not isInstalled then + LogToFile('Error creating systemd control file: ' + FilePath); + {$ENDIF} + if isInstalled then + LogToFile('Daemon installed, version:' + DAEMON_VERSION); +end; + +procedure TTestDaemon.DataModuleAfterUnInstall(Sender: TCustomDaemon); + +var + isUnInstalled: boolean; + FilePath: string; + +begin + isUninstalled := True; + {$IFDEF UNIX} + FilePath := GetSystemdControlFilePath(self.Name); + isUnInstalled := RemoveSystemdControlFile(FilePath); + if not isUninstalled then + LogToFile('Error removing systemd control file: ' + FilePath); + {$ENDIF} + if isUninstalled then + LogToFile('Daemon uninstalled'); +end; + +// ----------------------- +// Service control signals +// ----------------------- + +procedure TTestDaemon.DataModuleStart(Sender: TCustomDaemon; var OK: boolean); + +begin + LogToFile(Format('Daemon received start signal, PID:%d', [GetProcessID])); + // Create a suspended worker thread + FDaemonWorkerThread := TDaemonWorkerThread.Create; + // Parametrize it + FDaemonWorkerThread.FreeOnTerminate := False; + // Start the worker + FDaemonWorkerThread.Start; + OK := True; +end; + +procedure TTestDaemon.DataModulePause(Sender: TCustomDaemon; var OK: boolean); +// Note: Pause and resume signals are provided by Windows only + +begin + LogToFile('Daemon recedived pause signal'); + FDaemonWorkerThread.Suspend; // deprecated, yet still working + OK := True; +end; + +procedure TTestDaemon.DataModuleContinue(Sender: TCustomDaemon; var OK: boolean); +// Note: Pause and resume signals are provided by Windows only + +begin + LogToFile('Daemon recedived continue signal'); + FDaemonWorkerThread.resume; // deprecated, yet still working + OK := True; +end; + +procedure TTestDaemon.DataModuleStop(Sender: TCustomDaemon; var OK: boolean); + +begin + LogToFile('Daemon received stop signal'); + // stop and terminate the worker + FDaemonWorkerThread.Terminate; + // Wait for the thread to terminate. + FDaemonWorkerThread.WaitFor; + FDaemonWorkerThread.Free; + LogToFile('Daemon stopped'); + OK := True; +end; + +// -------------------------- +// constructor and destructor +// -------------------------- + +constructor TTestDaemon.Create(AOwner: TComponent); + +begin + inherited Create(AOwner); + // Nothing to do here, just for logging + LogToFile('Daemon object created'); +end; + +destructor TTestDaemon.Destroy; + +begin + // Nothing to do here, just for logging + LogToFile('Daemon object destroyed'); + inherited Destroy; +end; + +// ---------------------------------------- +// Daemon registration. Created by template +// ---------------------------------------- + +procedure RegisterDaemon; +begin + RegisterDaemonClass(TTestDaemon); +end; + +initialization + RegisterDaemon; +end. diff --git a/examples/Techniques/TDaemon/daemonworkerthread.pas b/examples/Techniques/TDaemon/daemonworkerthread.pas new file mode 100644 index 0000000000..ee1154e13c --- /dev/null +++ b/examples/Techniques/TDaemon/daemonworkerthread.pas @@ -0,0 +1,85 @@ +unit DaemonWorkerThread; + +{$mode ObjFPC}{$H+} + +interface + +uses + Classes, SysUtils; + +// -------------------------------------------------------------------------------- +// This is the "workhorse" of the daemon, and just a normal therad, see the Lazarus +// docs about threads and mutlitasking for details. + +// Execute holds the main work code of the service +// Do not try the execute method of TDaemon, since it does not multitask, +// the service thread will stop responding to control messages if looping in the +// TDaemon execute method. Thus we need a worker thread. +// -------------------------------------------------------------------------------- + +type + TDaemonWorkerThread = class(TThread) + private + public + procedure Execute; override; // the actual worker thread code goes here + constructor Create; + destructor Destroy; override; + end; + +implementation + +uses DaemonUnit; + +// -------------------------------------------------------------------------- +// TThread.execute: this is the core of the workhorse, the routine which does +// actually hold the service's working code +// -------------------------------------------------------------------------- + +procedure TDaemonWorkerThread.Execute; + +var + i: integer; + +begin + LogToFile('Daemon worker thread executing'); + while not Terminated do + begin + // placeholder, put your actual service code here + // ... + LogToFile('Daemon worker thread running'); + // Thread- and CPUload friendly 5s delay loop + for i := 1 to 50 do + begin + if Terminated then break; + Sleep(100); + end; + // ... + // ---------------------------------------- + end; + LogToFile('Daemon worker thread terminated'); +end; + +// ------------------------------------------------- +// Construction and destruction of the worker thread +// ------------------------------------------------- + +constructor TDaemonWorkerThread.Create; + +begin + // Create a suspended worker thread to allow further parametrizon before it + // does actually start + // The thread will be started if the OS sends a "Start" Signal to TDaemon + // See OnStart event handler of the TDeamon class + inherited Create(True); + LogToFile('Daemon worker thread created'); +end; + +destructor TDaemonWorkerThread.Destroy; + +begin + // Nothing to do here, just for logging + LogToFile('Daemon worker thread destroyed'); + inherited Destroy; +end; + +end. diff --git a/examples/Techniques/TDaemon/laz_hello/TestDaemon.json b/examples/Techniques/TDaemon/laz_hello/TestDaemon.json new file mode 100644 index 0000000000..c2b64d5e3b --- /dev/null +++ b/examples/Techniques/TDaemon/laz_hello/TestDaemon.json @@ -0,0 +1,7 @@ +{ +"Laz_Hello" : { + "Category" : "Beginner", + "Keywords" : ["Lazarus", "TDaemon", "Tutorial"], + "Description" : "Sample Code for the TDaemon Tutorial" + "WikiRef" : "https://wiki.lazarus.freepascal.org/Daemons_and_Services" +} \ No newline at end of file diff --git a/examples/Techniques/affinetransforms/affinetransforms.ex-meta b/examples/Techniques/affinetransforms/affinetransforms.ex-meta index 16d2a4604a..4980c21b3e 100644 --- a/examples/Techniques/affinetransforms/affinetransforms.ex-meta +++ b/examples/Techniques/affinetransforms/affinetransforms.ex-meta @@ -1,5 +1,20 @@ -{ "Affinetransforms" : { - "Category" : "Techniques", - "Keywords" : ["Images", "bitmap","transforms","SetMapMode","MM_ANISOTROPIC","MM_ISOTROPIC","MM_LOENGLISH","MM_HIENGLISH","MM_LOMETRIC","MM_HIMETRIC","MM_TWIPS","MM_ANISOTROPIC"], - "Description" : "Demonstrates displaying a bitmap in a range of Map Modes."} -} \ No newline at end of file +{ + "Affinetransforms" : { + "Category" : "General", + "Keywords" : [ + "Images", + "bitmap", + "transforms", + "SetMapMode", + "MM_ANISOTROPIC", + "MM_ISOTROPIC", + "MM_LOENGLISH", + "MM_HIENGLISH", + "MM_LOMETRIC", + "MM_HIMETRIC", + "MM_TWIPS", + "MM_ANISOTROPIC" + ], + "Description" : "Demonstrates displaying a bitmap in a range of Map Modes." + } +} diff --git a/examples/Techniques/androidlcl/androidlcl.ex-meta b/examples/Techniques/androidlcl/androidlcl.ex-meta index cc36780f33..87bfcc0cd3 100644 --- a/examples/Techniques/androidlcl/androidlcl.ex-meta +++ b/examples/Techniques/androidlcl/androidlcl.ex-meta @@ -1,5 +1,13 @@ -{ "AndroidLCL" : { - "Category" : "Techniques", - "Keywords" : ["Android","SQLite","TButton","TMemo","Needs Work"], - "Description" : "Demonstrates and LCL based Android project. Two projects, one requires ARM (ie Android) cross compiler and other SQLite3. Needs a far better description than this."} -} \ No newline at end of file +{ + "AndroidLCL" : { + "Category" : "General", + "Keywords" : [ + "Android", + "SQLite", + "TButton", + "TMemo", + "Needs Work" + ], + "Description" : "Demonstrates and LCL based Android project. Two projects, one requires ARM (ie Android) cross compiler and other SQLite3. Needs a far better description than this." + } +} diff --git a/examples/Techniques/bidi/bidi.ex-meta b/examples/Techniques/bidi/bidi.ex-meta index db73927ff3..35cd7d8daf 100644 --- a/examples/Techniques/bidi/bidi.ex-meta +++ b/examples/Techniques/bidi/bidi.ex-meta @@ -1,6 +1,10 @@ { -"BiDi" : { - "Category" : "Techniques", - "Keywords" : ["Left to Right", "Right to Left"], - "Description" : "Demonstrates different BiDi Modes. Allows RTL languages such as Arabic and Hebrew to be used. In left-to-right, LTR, text entry starts at the left, text is almost left justified, and vertical scrollbars sit at the right side of the control. In right-to-left mode text entry starts at the right, text is almost right justified, and vertical scrollbars sit at the left side of the control. "} + "BiDi" : { + "Category" : "General", + "Keywords" : [ + "Left to Right", + "Right to Left" + ], + "Description" : "Demonstrates different BiDi Modes. Allows RTL languages such as Arabic and Hebrew to be used. In left-to-right, LTR, text entry starts at the left, text is almost left justified, and vertical scrollbars sit at the right side of the control. In right-to-left mode text entry starts at the right, text is almost right justified, and vertical scrollbars sit at the left side of the control. " + } } diff --git a/examples/Techniques/canvas_test/canvas_test.ex-meta b/examples/Techniques/canvas_test/canvas_test.ex-meta index 2042c194bb..1c01c2e033 100644 --- a/examples/Techniques/canvas_test/canvas_test.ex-meta +++ b/examples/Techniques/canvas_test/canvas_test.ex-meta @@ -1,6 +1,11 @@ { -"Canvas_Test" : { - "Category" : "Techniques", - "Keywords" : ["Drawing", "Canvas", "Needs Work"], - "Description" : "Demonstrates drawing directly on the canvas in a number of styles. Noted a crash when drawing Shaped Window."} + "Canvas_Test" : { + "Category" : "General", + "Keywords" : [ + "Drawing", + "Canvas", + "Needs Work" + ], + "Description" : "Demonstrates drawing directly on the canvas in a number of styles. Noted a crash when drawing Shaped Window." + } } diff --git a/examples/Techniques/childsizinglayout/childsizinglayout.ex-meta b/examples/Techniques/childsizinglayout/childsizinglayout.ex-meta index 5753783dfe..70d7c5dca5 100644 --- a/examples/Techniques/childsizinglayout/childsizinglayout.ex-meta +++ b/examples/Techniques/childsizinglayout/childsizinglayout.ex-meta @@ -1,6 +1,11 @@ { -"ChildSizingLayout" : { - "Category" : "Techniques", - "Keywords" : ["Layout", "Sizing", "ChildSizing"], - "Description" : "This is a demonstration of the TWinControl.ChildSizing.Layout property."} + "ChildSizingLayout" : { + "Category" : "General", + "Keywords" : [ + "Layout", + "Sizing", + "ChildSizing" + ], + "Description" : "This is a demonstration of the TWinControl.ChildSizing.Layout property." + } } diff --git a/examples/Techniques/cleandir/cleandir.ex-meta b/examples/Techniques/cleandir/cleandir.ex-meta index 45dd1e85a3..52a7ee9d1e 100644 --- a/examples/Techniques/cleandir/cleandir.ex-meta +++ b/examples/Techniques/cleandir/cleandir.ex-meta @@ -1,17 +1,11 @@ -{ "CleanDir" : { - "Category" : "Techniques", - "Keywords" : ["Needs Work","daemon","service application"], - "Description" : "This is the cleandirs demonstration program for Lazarus. - -Note - problem loading cleandirs that appears to relate to a redefinition of streams. - -It demonstrates 3 things: - -1. How to use services and the TEventLog component (cleandirs) -2. How to use RTTI controls (confcleandirs) -3. How to write a TCustomApplication descendent (cleandir) - -See the included README.TXT for much more information. - -"} -} \ No newline at end of file +{ + "CleanDir" : { + "Category" : "General", + "Keywords" : [ + "Needs Work", + "daemon", + "service application" + ], + "Description" : "This is the cleandirs demonstration program for Lazarus.\n\nNote - problem loading cleandirs that appears to relate to a redefinition of streams.\n\nIt demonstrates 3 things:\n\n1. How to use services and the TEventLog component (cleandirs)\n2. How to use RTTI controls (confcleandirs)\n3. How to write a TCustomApplication descendent (cleandir)\n\nSee the included README.TXT for much more information.\n\n" + } +} diff --git a/examples/Techniques/codepageconverter/codepageconverter.ex-meta b/examples/Techniques/codepageconverter/codepageconverter.ex-meta index 3021d2727a..8baa8ded9c 100644 --- a/examples/Techniques/codepageconverter/codepageconverter.ex-meta +++ b/examples/Techniques/codepageconverter/codepageconverter.ex-meta @@ -1,6 +1,12 @@ { -"CodePageConverter" : { - "Category" : "Techniques", - "Keywords" : ["DefaultTranslator", "Code Page", "TButton", "TMemo"], - "Description" : "Makes an app that will convert files between code pages."} + "CodePageConverter" : { + "Category" : "General", + "Keywords" : [ + "DefaultTranslator", + "Code Page", + "TButton", + "TMemo" + ], + "Description" : "Makes an app that will convert files between code pages." + } } diff --git a/examples/Techniques/componentstreaming/componentstreaming.ex-meta b/examples/Techniques/componentstreaming/componentstreaming.ex-meta index d7fcd90ea2..95639544d5 100644 --- a/examples/Techniques/componentstreaming/componentstreaming.ex-meta +++ b/examples/Techniques/componentstreaming/componentstreaming.ex-meta @@ -1,6 +1,10 @@ { -"ComponentStreaming" : { - "Category" : "Techniques", - "Keywords" : ["Stream", "Component"], - "Description" : "This example demonstrates how to stream a component to a stream in binary format and how to reconstruct the component from a stream. This technique can be used to save components to disk or to transfer them via network. Of course this also works for your own classes as long as they are descendants of TComponent."} + "ComponentStreaming" : { + "Category" : "General", + "Keywords" : [ + "Stream", + "Component" + ], + "Description" : "This example demonstrates how to stream a component to a stream in binary format and how to reconstruct the component from a stream. This technique can be used to save components to disk or to transfer them via network. Of course this also works for your own classes as long as they are descendants of TComponent." + } } diff --git a/examples/Techniques/designerbaseclass/designerbaseclass.ex-meta b/examples/Techniques/designerbaseclass/designerbaseclass.ex-meta index bdb7a1e06c..ac8fb3ef88 100644 --- a/examples/Techniques/designerbaseclass/designerbaseclass.ex-meta +++ b/examples/Techniques/designerbaseclass/designerbaseclass.ex-meta @@ -1,5 +1,11 @@ -{ "designerbaseclass" : { - "Category" : "Techniques", - "Keywords" : ["Base Class", "LCL", "Package"], - "Description" : "demonstrates how you might provide a new Base Class. The demo requires you install a package with that base class and the run a demo project. The demo project will not load if the Package has not been installed first.\n"} -} \ No newline at end of file +{ + "designerbaseclass" : { + "Category" : "General", + "Keywords" : [ + "Base Class", + "LCL", + "Package" + ], + "Description" : "demonstrates how you might provide a new Base Class. The demo requires you install a package with that base class and the run a demo project. The demo project will not load if the Package has not been installed first.\n" + } +} diff --git a/examples/Techniques/designnonlcl/designnonlcl.ex-meta b/examples/Techniques/designnonlcl/designnonlcl.ex-meta index 0d1eb3137b..11944c9d90 100644 --- a/examples/Techniques/designnonlcl/designnonlcl.ex-meta +++ b/examples/Techniques/designnonlcl/designnonlcl.ex-meta @@ -1,5 +1,11 @@ -{ "designnonlcl" : { - "Category" : "Techniques", - "Keywords" : ["Design", "non LCL", "Package"], - "Description" : "This package is an example how to to use the lazarus IDE form designer to design non LCL widgets like web pages, UML diagrams or other widgetsets like fpgui.\n\nIts a Package that must be installed, not a project."} -} \ No newline at end of file +{ + "designnonlcl" : { + "Category" : "General", + "Keywords" : [ + "Design", + "non LCL", + "Package" + ], + "Description" : "This package is an example how to to use the lazarus IDE form designer to design non LCL widgets like web pages, UML diagrams or other widgetsets like fpgui.\n\nIts a Package that must be installed, not a project." + } +} diff --git a/examples/Techniques/dragimagelist/DragImageList.ex-meta b/examples/Techniques/dragimagelist/DragImageList.ex-meta new file mode 100644 index 0000000000..9d8bd91a97 --- /dev/null +++ b/examples/Techniques/dragimagelist/DragImageList.ex-meta @@ -0,0 +1,5 @@ +{ "DragImageList" : { + "Category" : "General", + "Keywords" : ["drag and drop","drag","Images", "Needs Work"], + "Description" : "This example demonstrates the usage of DragImageList. Or perhaps Drag and Drop.\n\nYou will see Button image cursor while drag. This Button image is from the DragImageList. You can place any other image there to show it while drag operation.\n\nShould the cursor change when dragged image is over a valid target ?"} +} \ No newline at end of file diff --git a/examples/Techniques/dragimagelist/dragimagelist.ex-meta b/examples/Techniques/dragimagelist/dragimagelist.ex-meta deleted file mode 100644 index 62fa3a089a..0000000000 --- a/examples/Techniques/dragimagelist/dragimagelist.ex-meta +++ /dev/null @@ -1,7 +0,0 @@ -{ "DragImageList" : { - "Category" : "Techniques", - "Keywords" : ["drag and drop","drag","Images"], - "Description" : "This example demonstrates the usage of DragImageList. Or perhaps Drag and Drop. - -You will see Button image nearly cursor while drag. This Button image is from the DragImageList. You can place any other image there to show it while drag operation."} -} \ No newline at end of file diff --git a/examples/Techniques/dropfiles/dropfiles.ex-meta b/examples/Techniques/dropfiles/dropfiles.ex-meta index 1c3485ce0f..1e5414e556 100644 --- a/examples/Techniques/dropfiles/dropfiles.ex-meta +++ b/examples/Techniques/dropfiles/dropfiles.ex-meta @@ -1,5 +1,10 @@ -{ "DropFiles" : { - "Category" : "Techniques", - "Keywords" : ["drag files","drag and drop"], - "Description" : "Demonstrates dropping a file dragged from a file manager and displaying the result. "} -} \ No newline at end of file +{ + "DropFiles" : { + "Category" : "General", + "Keywords" : [ + "drag files", + "drag and drop" + ], + "Description" : "Demonstrates dropping a file dragged from a file manager and displaying the result. " + } +} diff --git a/examples/Techniques/easter/easter.ex-meta b/examples/Techniques/easter/easter.ex-meta index 8e15885f42..d45ee8f6b6 100644 --- a/examples/Techniques/easter/easter.ex-meta +++ b/examples/Techniques/easter/easter.ex-meta @@ -1,5 +1,11 @@ -{ "Easter" : { - "Category" : "Techniques", - "Keywords" : ["Dates","Easter","year"], - "Description" : "Demonstrates handling dates and calculating years in advance. Small that that calculates Dates for a number of Christian Feast Days in a year."} -} \ No newline at end of file +{ + "Easter" : { + "Category" : "General", + "Keywords" : [ + "Dates", + "Easter", + "year" + ], + "Description" : "Demonstrates handling dates and calculating years in advance. Small that that calculates Dates for a number of Christian Feast Days in a year." + } +} diff --git a/examples/Techniques/exploremenu/exploremenu.ex-meta b/examples/Techniques/exploremenu/exploremenu.ex-meta index 769b9eb7a8..2028033351 100644 --- a/examples/Techniques/exploremenu/exploremenu.ex-meta +++ b/examples/Techniques/exploremenu/exploremenu.ex-meta @@ -1,7 +1,11 @@ -{ "ExploreMenu" : { - "Category" : "Techniques", - "Keywords" : ["IDE","Register","Menu Item"], - "Description" : "Note : Not Tested. - -This example is a design time package. When installed it registers a new menu item in the IDE, which shows all the IDE menus as treeview."} -} \ No newline at end of file +{ + "ExploreMenu" : { + "Category" : "General", + "Keywords" : [ + "IDE", + "Register", + "Menu Item" + ], + "Description" : "Note : Not Tested.\n\nThis example is a design time package. When installed it registers a new menu item in the IDE, which shows all the IDE menus as treeview." + } +} diff --git a/examples/Techniques/fontenum/fontenum.ex-meta b/examples/Techniques/fontenum/fontenum.ex-meta index 1c9b6856db..80388e229b 100644 --- a/examples/Techniques/fontenum/fontenum.ex-meta +++ b/examples/Techniques/fontenum/fontenum.ex-meta @@ -1,5 +1,11 @@ -{ "FontEnum" : { - "Category" : "Techniques", - "Keywords" : ["fonts","monospace","character set"], - "Description" : "Application that demonstrates reading the existing fonts on your system and displaying styles and character sets. Can filter by, eg Monospace. "} -} \ No newline at end of file +{ + "FontEnum" : { + "Category" : "General", + "Keywords" : [ + "fonts", + "monospace", + "character set" + ], + "Description" : "Application that demonstrates reading the existing fonts on your system and displaying styles and character sets. Can filter by, eg Monospace. " + } +} diff --git a/examples/Techniques/helphtml/helphtml.ex-meta b/examples/Techniques/helphtml/helphtml.ex-meta index fb8e5d162d..c72c1d45ab 100644 --- a/examples/Techniques/helphtml/helphtml.ex-meta +++ b/examples/Techniques/helphtml/helphtml.ex-meta @@ -1,5 +1,11 @@ -{ "HelpHTML" : { - "Category" : "Techniques", - "Keywords" : ["Help", "HTML", "Browser"], - "Description" : "Shows how to open the Users default browser and display some help files of your choice."} -} \ No newline at end of file +{ + "HelpHTML" : { + "Category" : "General", + "Keywords" : [ + "Help", + "HTML", + "Browser" + ], + "Description" : "Shows how to open the Users default browser and display some help files of your choice." + } +} diff --git a/examples/Techniques/htmlhelp_ipro/html/html.ex-meta b/examples/Techniques/htmlhelp_ipro/html/html.ex-meta deleted file mode 100644 index 475bfef534..0000000000 --- a/examples/Techniques/htmlhelp_ipro/html/html.ex-meta +++ /dev/null @@ -1,6 +0,0 @@ -{ "html" : { - "Category" : "Techniques", - "Keywords" : ["Help", "Browser", "F1"], - "Description" : "How to start the user's default browser and point it at some HTML help files of your choosing. -"} -} \ No newline at end of file diff --git a/examples/Techniques/htmlhelp_ipro/htmlhelp_ipro.ex-meta b/examples/Techniques/htmlhelp_ipro/htmlhelp_ipro.ex-meta index 95f538e7ba..f988b8ed98 100644 --- a/examples/Techniques/htmlhelp_ipro/htmlhelp_ipro.ex-meta +++ b/examples/Techniques/htmlhelp_ipro/htmlhelp_ipro.ex-meta @@ -1,5 +1,10 @@ -{ "htmlhelp_ipro" : { - "Category" : "Techniques", - "Keywords" : ["Help","iPro Browser"], - "Description" : "This example demonstrates the html help components using the turbo power ipro browser component to show local html files. "} -} \ No newline at end of file +{ + "htmlhelp_ipro" : { + "Category" : "General", + "Keywords" : [ + "Help", + "iPro Browser" + ], + "Description" : "This example demonstrates the html help components using the turbo power ipro browser component to show local html files. " + } +} diff --git a/examples/Techniques/idehelp/idehelp.ex-meta b/examples/Techniques/idehelp/idehelp.ex-meta index 4af684c6f6..062726b24c 100644 --- a/examples/Techniques/idehelp/idehelp.ex-meta +++ b/examples/Techniques/idehelp/idehelp.ex-meta @@ -1,6 +1,10 @@ -{ "idehelp" : { - "Category" : "Techniques", - "Keywords" : ["IDE", "Help"], - "Description" : "Demo package to show the various help types of the IDE. -Note, its a package that needs to be installed in the IDE, it is not a project you can just open. Written for a very early version of the IDE and may not be useful with something current."} -} \ No newline at end of file +{ + "idehelp" : { + "Category" : "General", + "Keywords" : [ + "IDE", + "Help" + ], + "Description" : "Demo package to show the various help types of the IDE.\nNote, its a package that needs to be installed in the IDE, it is not a project you can just open. Written for a very early version of the IDE and may not be useful with something current." + } +} diff --git a/examples/Techniques/idequickfix/idequickfix.ex-meta b/examples/Techniques/idequickfix/idequickfix.ex-meta index d0f5a051c6..b9e5be7005 100644 --- a/examples/Techniques/idequickfix/idequickfix.ex-meta +++ b/examples/Techniques/idequickfix/idequickfix.ex-meta @@ -1,5 +1,10 @@ -{ "IDEQuickFix" : { - "Category" : "Techniques", - "Keywords" : ["IDE", "Package"], - "Description" : "This is an example of how to make an IDE Package. Its not a project you can run, is a package you install."} -} \ No newline at end of file +{ + "IDEQuickFix" : { + "Category" : "General", + "Keywords" : [ + "IDE", + "Package" + ], + "Description" : "This is an example of how to make an IDE Package. Its not a project you can run, is a package you install." + } +} diff --git a/examples/Techniques/imagelist/imagelist.ex-meta b/examples/Techniques/imagelist/imagelist.ex-meta index 78902b987e..cee045d650 100644 --- a/examples/Techniques/imagelist/imagelist.ex-meta +++ b/examples/Techniques/imagelist/imagelist.ex-meta @@ -1,5 +1,11 @@ -{ "imagelist" : { - "Category" : "Techniques", - "Keywords" : ["Images", "ImageList", "Effects"], - "Description" : "Shows how to load an image and display it in several \"effects\" modes, greyed, hilite, shadowed and 1 bit."} -} \ No newline at end of file +{ + "imagelist" : { + "Category" : "General", + "Keywords" : [ + "Images", + "ImageList", + "Effects" + ], + "Description" : "Shows how to load an image and display it in several \"effects\" modes, greyed, hilite, shadowed and 1 bit." + } +} diff --git a/examples/Techniques/imgviewer/imgviewer.ex-meta b/examples/Techniques/imgviewer/imgviewer.ex-meta index 28a878d7d7..cfa6c1e340 100644 --- a/examples/Techniques/imgviewer/imgviewer.ex-meta +++ b/examples/Techniques/imgviewer/imgviewer.ex-meta @@ -1,12 +1,13 @@ -{ "ImgViewer" : { - "Category" : "Techniques", - "Keywords" : ["Images", "TImage", "scaling", "FindFirstUTF8", "BeginWaitCursor"], - "Description" : "This example application shows how to load and show image/graphical files. - -It also demonstrates -- scaling images -- using the Lazarus functions FindFirstUTF8 and FindNextUTF8 to recursively seek files and directories -- dealing with key presses using the KeyDown event -- using BeginUpdate and EndUpdate to improve processing speed of certain controls (a ListBox in this case) -- setting the cursor to hourglass and reset it to indicate a long-running operation is going on (e.g. when recursively loading directories with a large amount of images)"} -} \ No newline at end of file +{ + "ImgViewer" : { + "Category" : "General", + "Keywords" : [ + "Images", + "TImage", + "scaling", + "FindFirstUTF8", + "BeginWaitCursor" + ], + "Description" : "This example application shows how to load and show image/graphical files.\n\nIt also demonstrates\n- scaling images\n- using the Lazarus functions FindFirstUTF8 and FindNextUTF8 to recursively seek files and directories\n- dealing with key presses using the KeyDown event\n- using BeginUpdate and EndUpdate to improve processing speed of certain controls (a ListBox in this case)\n- setting the cursor to hourglass and reset it to indicate a long-running operation is going on (e.g. when recursively loading directories with a large amount of images)" + } +} diff --git a/examples/Techniques/jpeg/jpeg.ex-meta b/examples/Techniques/jpeg/jpeg.ex-meta index c9134a911f..257b39ecbf 100644 --- a/examples/Techniques/jpeg/jpeg.ex-meta +++ b/examples/Techniques/jpeg/jpeg.ex-meta @@ -1,5 +1,5 @@ { "jpeg" : { - "Category" : "Techniques", + "Category" : "General", "Keywords" : ["Images","jpeg","jpg","TOpenPictureDialog","TImage","TJPEGImage"], - "Description" : "Opens and saves a JPEG image. Note, the SRC has a mention of the need to open the JPEG page first but that appears no longer needed. Further it mentions a README.txt but thats apparently no longer here."} + "Description" : "Opens and saves a JPEG image. Note, the SRC has a mention of the need to open the JPEG page first but that appears no longer needed. Further it mentions a README.txt but that is apparently no longer here."} } \ No newline at end of file diff --git a/examples/Techniques/jpeg_more/jpeg_more.ex-meta b/examples/Techniques/jpeg_more/jpeg_more.ex-meta index 23a041ebfa..bfdfabb1d1 100644 --- a/examples/Techniques/jpeg_more/jpeg_more.ex-meta +++ b/examples/Techniques/jpeg_more/jpeg_more.ex-meta @@ -1,8 +1,12 @@ -{ "jpeg_more" : { - "Category" : "Techniques", - "Keywords" : ["Images","jpeg","jpg","Scaling"], - "Description" : "Loads, displays and scales a JPEG file. - -Note : when altering scaling, press the \"Read\" button. I added its own copy of the cheetah image. DRB -"} -} \ No newline at end of file +{ + "jpeg_more" : { + "Category" : "General", + "Keywords" : [ + "Images", + "jpeg", + "jpg", + "Scaling" + ], + "Description" : "Loads, displays and scales a JPEG file. \n\nNote : when altering scaling, press the \"Read\" button. I added its own copy of the cheetah image. DRB\n" + } +} diff --git a/examples/Techniques/jumptoimplementation/jumptoimplementation.ex-meta b/examples/Techniques/jumptoimplementation/jumptoimplementation.ex-meta index 9b6804616b..3c8b0ed3be 100644 --- a/examples/Techniques/jumptoimplementation/jumptoimplementation.ex-meta +++ b/examples/Techniques/jumptoimplementation/jumptoimplementation.ex-meta @@ -1,6 +1,10 @@ { -"JumpToImplementation" : { - "Category" : "Techniques", - "Keywords" : ["IDE", "Menu"], - "Description" : "Demonstrates how to add a new menu item to the IDE. Its not a project, see the individual files. This example adds the Jump To Implementation menu item."} + "JumpToImplementation" : { + "Category" : "General", + "Keywords" : [ + "IDE", + "Menu" + ], + "Description" : "Demonstrates how to add a new menu item to the IDE. Its not a project, see the individual files. This example adds the Jump To Implementation menu item." + } } diff --git a/examples/Techniques/lazfreetype/lazfreetype.ex-meta b/examples/Techniques/lazfreetype/lazfreetype.ex-meta index f44648cce7..1c353e77fc 100644 --- a/examples/Techniques/lazfreetype/lazfreetype.ex-meta +++ b/examples/Techniques/lazfreetype/lazfreetype.ex-meta @@ -1,9 +1,10 @@ -{ "lazfreetype" : { - "Category" : "Techniques", - "Keywords" : ["Needs Work","Fonts"], - "Description" : "Appears to want to show nominated fonts on screen. - -However, defaults to Windows font names and does not seem to accept known locally available fonts on the command line as it claims it does. - -Probably fair to say it needs some work on its cross platform abilities and better error messages when something unexpected happens."} -} \ No newline at end of file +{ + "lazfreetype" : { + "Category" : "General", + "Keywords" : [ + "Needs Work", + "Fonts" + ], + "Description" : "Appears to want to show nominated fonts on screen.\n\nHowever, defaults to Windows font names and does not seem to accept known locally available fonts on the command line as it claims it does.\n\nProbably fair to say it needs some work on its cross platform abilities and better error messages when something unexpected happens." + } +} diff --git a/examples/Techniques/lazintfimage/LazarusForm.bmp b/examples/Techniques/lazintfimage/LazarusForm.bmp new file mode 100644 index 0000000000..9b77988140 Binary files /dev/null and b/examples/Techniques/lazintfimage/LazarusForm.bmp differ diff --git a/examples/Techniques/lazintfimage/lazintfimage.ex-meta b/examples/Techniques/lazintfimage/lazintfimage.ex-meta index d903def0d8..0fedbce31f 100644 --- a/examples/Techniques/lazintfimage/lazintfimage.ex-meta +++ b/examples/Techniques/lazintfimage/lazintfimage.ex-meta @@ -1,7 +1,12 @@ -{ "lazintfimage" : { - "Category" : "Techniques", - "Keywords" : ["Images","fade in","rotate","Needs Work"], - "Description" : "Proports to show how to display an image with a fade in. However, the image, on my system, seems to appear instantly. Maybe a case of today's hardware being faster ? - -Also demonstrates how to rotate that image to a particular angle."} -} \ No newline at end of file +{ + "lazintfimage" : { + "Category" : "General", + "Keywords" : [ + "Images", + "fade in", + "rotate", + "Needs Work" + ], + "Description" : "Proports to show how to display an image with a fade in. However, the image, on my system, seems to appear instantly. Maybe a case of today's hardware being faster ?\n\nAlso demonstrates how to rotate that image to a particular angle." + } +} diff --git a/examples/Techniques/lazintfimage/mainunit1.pas b/examples/Techniques/lazintfimage/mainunit1.pas index 7700b3a050..193ff1269a 100644 --- a/examples/Techniques/lazintfimage/mainunit1.pas +++ b/examples/Techniques/lazintfimage/mainunit1.pas @@ -56,7 +56,8 @@ procedure TForm1.Form1Create(Sender: TObject); begin FKind := 0; SampleBitmapABitmap:=TBitmap.Create; - SampleBitmapABitmap.LoadFromFile(SetDirSeparators('../../images/LazarusForm.bmp')); + //SampleBitmapABitmap.LoadFromFile(SetDirSeparators('../../images/LazarusForm.bmp')); + SampleBitmapABitmap.LoadFromFile(SetDirSeparators('LazarusForm.bmp')); end; procedure TForm1.Form1Destroy(Sender: TObject); diff --git a/examples/Techniques/lazresexplorer/lazresexplorer.ex-meta b/examples/Techniques/lazresexplorer/lazresexplorer.ex-meta index fc806a4872..0451c43fba 100644 --- a/examples/Techniques/lazresexplorer/lazresexplorer.ex-meta +++ b/examples/Techniques/lazresexplorer/lazresexplorer.ex-meta @@ -1,8 +1,5 @@ { "lazresexplorer" : { - "Category" : "Techniques", + "Category" : "General", "Keywords" : ["resources"], - "Description" : "Shows how to display the resources in a lazarus resource file or a binary, DLL or object file. -The actual content may not be particulary useful as it is but the techniques used do demonstrate how to read the mostly bitmap resources in these files might be. - -"} + "Description" : "Shows how to display the resources in a lazarus resource file or a binary, DLL or object file.\nThe actual content may not be particularly useful as it is but the techniques used do demonstrate how to read the mostly bitmap resources in these files might be.\n\n"} } \ No newline at end of file diff --git a/examples/Techniques/lclreport/LCLReport.ex-meta b/examples/Techniques/lclreport/LCLReport.ex-meta new file mode 100644 index 0000000000..ebb4fd9ed0 --- /dev/null +++ b/examples/Techniques/lclreport/LCLReport.ex-meta @@ -0,0 +1,5 @@ +{ "LCLReport" : { + "Category" : "General", + "Keywords" : ["Report","PDF","fpReport","Needs Work"], + "Description" : "Demonstrates generating a report (from some dummy data), displaying it and converting it to a PDF.\n\nNote: on test, showed a significent memory leak.\n\nIf the program did not compile or run, look if you have the correct freetype-6.dll/.so and zlib1.dll/.so installed or copied in the directory.\nAF 2018"} +} \ No newline at end of file diff --git a/examples/Techniques/lclreport/lclreport.ex-meta b/examples/Techniques/lclreport/lclreport.ex-meta deleted file mode 100644 index 2ad32a6a56..0000000000 --- a/examples/Techniques/lclreport/lclreport.ex-meta +++ /dev/null @@ -1,10 +0,0 @@ -{ "LCLReport" : { - "Category" : "Techniques", - "Keywords" : ["Report", "PDF", "fpReport", "Needs Work"], - "Description" : "Demonstrates generating a report (from some dummy data), displaying it and converting it to a PDF. - -Note: on test, showed a significent memory leak. - -If the programm didnt compile or run, look if you have the correct freetype-6.dll/.so and zlib1.dll/.so installed or copiued in the directory. -AF 2018"} -} diff --git a/examples/Techniques/lpicustomdata/lpicustomdata.ex-meta b/examples/Techniques/lpicustomdata/lpicustomdata.ex-meta index 273b21bfb4..e5b504f3dd 100644 --- a/examples/Techniques/lpicustomdata/lpicustomdata.ex-meta +++ b/examples/Techniques/lpicustomdata/lpicustomdata.ex-meta @@ -1,10 +1,11 @@ -{ "lpicustomdata" : { - "Category" : "Techniques", - "Keywords" : ["LPI File","Custom Data", "Needs Work"], - "Description" : "This example shows how to read the custom data of an .lpi file and how to change it. The .lpi file is given as first command line parameter. - -This example has not been tested because I simply don't understand what custom data belongs in an LPI file. If you do, please contribute. - - -"} -} \ No newline at end of file +{ + "lpicustomdata" : { + "Category" : "General", + "Keywords" : [ + "LPI File", + "Custom Data", + "Needs Work" + ], + "Description" : "This example shows how to read the custom data of an .lpi file and how to change it. The .lpi file is given as first command line parameter.\n\nThis example has not been tested because I simply don't understand what custom data belongs in an LPI file. If you do, please contribute.\n\n\n" + } +} diff --git a/examples/Techniques/messages/messages.ex-meta b/examples/Techniques/messages/messages.ex-meta index 7f1c583e73..fb58eacf95 100644 --- a/examples/Techniques/messages/messages.ex-meta +++ b/examples/Techniques/messages/messages.ex-meta @@ -1,10 +1,11 @@ -{ "messages" : { - "Category" : "Techniques", - "Keywords" : ["PostMessage", "SendMessage", "QueueSsyncCall"], - "Description" : "These two example demonstrates the usage of PostMessage, SendMessage and the message methods in Lazarus and FreePascal and its widgetset independent counterpart, the direct method call and QueueAsyncCall. - -There is a readme.txt file that explains the process that you should read when looking at this example. - - -"} -} \ No newline at end of file +{ + "messages" : { + "Category" : "General", + "Keywords" : [ + "PostMessage", + "SendMessage", + "QueueSsyncCall" + ], + "Description" : "These two example demonstrates the usage of PostMessage, SendMessage and the message methods in Lazarus and FreePascal and its widgetset independent counterpart, the direct method call and QueueAsyncCall.\n\nThere is a readme.txt file that explains the process that you should read when looking at this example.\n\n\n" + } +} diff --git a/examples/Techniques/motiongraphics/motiongraphics.ex-meta b/examples/Techniques/motiongraphics/motiongraphics.ex-meta index 229512e9a6..79a3bd101b 100644 --- a/examples/Techniques/motiongraphics/motiongraphics.ex-meta +++ b/examples/Techniques/motiongraphics/motiongraphics.ex-meta @@ -1,5 +1,13 @@ -{ "motiongraphics" : { - "Category" : "Techniques", - "Keywords" : ["Graphics","Polygon","Rotate","Speed", "Drawing"], - "Description" : "Shows you how to rotate a polygon and vary the speed of rotation."} -} \ No newline at end of file +{ + "motiongraphics" : { + "Category" : "General", + "Keywords" : [ + "Graphics", + "Polygon", + "Rotate", + "Speed", + "Drawing" + ], + "Description" : "Shows you how to rotate a polygon and vary the speed of rotation." + } +} diff --git a/examples/Techniques/mousebuttons/mousebuttons.ex-meta b/examples/Techniques/mousebuttons/mousebuttons.ex-meta index ff9051aa24..3ba2f68f63 100644 --- a/examples/Techniques/mousebuttons/mousebuttons.ex-meta +++ b/examples/Techniques/mousebuttons/mousebuttons.ex-meta @@ -1,7 +1,12 @@ -{ "mousebuttons" : { - "Category" : "Techniques", - "Keywords" : ["mouse", "buttons", "mouse wheel", "extra buttons"], - "Description" : "Demonstrates detecting the various mouse action including those of the more complicated multiple button mice. - -"} -} \ No newline at end of file +{ + "mousebuttons" : { + "Category" : "General", + "Keywords" : [ + "mouse", + "buttons", + "mouse wheel", + "extra buttons" + ], + "Description" : "Demonstrates detecting the various mouse action including those of the more complicated multiple button mice.\n\n" + } +} diff --git a/examples/Techniques/multithreading/mainunit.lfm b/examples/Techniques/multithread_basic/mainunit.lfm similarity index 100% rename from examples/Techniques/multithreading/mainunit.lfm rename to examples/Techniques/multithread_basic/mainunit.lfm diff --git a/examples/Techniques/multithreading/mainunit.pas b/examples/Techniques/multithread_basic/mainunit.pas similarity index 88% rename from examples/Techniques/multithreading/mainunit.pas rename to examples/Techniques/multithread_basic/mainunit.pas index aa386d3bd8..0f08b79356 100644 --- a/examples/Techniques/multithreading/mainunit.pas +++ b/examples/Techniques/multithread_basic/mainunit.pas @@ -21,8 +21,12 @@ Abstract: Demo to show, how to start a thread and how synchronize with the main thread. - Important: The cthread unint must be added to the uses section of the .lpr - file. See multithreadingexample1.lpr. + Important: In most (all?) Unix like systems, the cthread unit must be added + to the uses section of the .lpr file. Further, cmem is likely to + be significently faster so add it as well. Due to how the units + work a sensible order is cmem, cthreads and then perhaps cwstrings. + But note that heaptrc does not work with cmem so comment it out + while testing/debugging. } unit MainUnit; diff --git a/examples/Techniques/multithread_basic/multithread_basic.ex-meta b/examples/Techniques/multithread_basic/multithread_basic.ex-meta new file mode 100644 index 0000000000..43357845a9 --- /dev/null +++ b/examples/Techniques/multithread_basic/multithread_basic.ex-meta @@ -0,0 +1,5 @@ +{ "multithread_basic" : { + "Category" : "General", + "Keywords" : ["Multithreading"], + "Description" : "Basic Multithreading, just starts an app that immediately runs \none extra thread and updates the main form's caption. Close the form to stop it.\n"} +} \ No newline at end of file diff --git a/examples/Techniques/multithreading/multithreadingexample1.lpi b/examples/Techniques/multithread_basic/multithreadingexample1.lpi similarity index 100% rename from examples/Techniques/multithreading/multithreadingexample1.lpi rename to examples/Techniques/multithread_basic/multithreadingexample1.lpi diff --git a/examples/Techniques/multithreading/multithreadingexample1.lpr b/examples/Techniques/multithread_basic/multithreadingexample1.lpr similarity index 95% rename from examples/Techniques/multithreading/multithreadingexample1.lpr rename to examples/Techniques/multithread_basic/multithreadingexample1.lpr index 181cbf27c5..c01ffd7028 100644 --- a/examples/Techniques/multithreading/multithreadingexample1.lpr +++ b/examples/Techniques/multithread_basic/multithreadingexample1.lpr @@ -6,7 +6,7 @@ uses // for multi threading the cthreads unit must be used on unix systems: // for example: Linux, MacOSX, FreeBSD, Solaris {$IFDEF UNIX} - cthreads, + cmem, cthreads, {$ENDIF} Interfaces, // this includes the LCL widgetset Forms, MainUnit; diff --git a/examples/Techniques/multithreading/criticalsectionexample1.lpi b/examples/Techniques/multithread_critical/criticalsectionexample1.lpi similarity index 100% rename from examples/Techniques/multithreading/criticalsectionexample1.lpi rename to examples/Techniques/multithread_critical/criticalsectionexample1.lpi diff --git a/examples/Techniques/multithreading/criticalsectionexample1.lpr b/examples/Techniques/multithread_critical/criticalsectionexample1.lpr similarity index 94% rename from examples/Techniques/multithreading/criticalsectionexample1.lpr rename to examples/Techniques/multithread_critical/criticalsectionexample1.lpr index 63608e5e7f..28112cd847 100644 --- a/examples/Techniques/multithreading/criticalsectionexample1.lpr +++ b/examples/Techniques/multithread_critical/criticalsectionexample1.lpr @@ -4,7 +4,7 @@ program CriticalSectionExample1; uses {$IFDEF UNIX} - cthreads, + cmem, cthreads, {$ENDIF} Interfaces, // this includes the LCL widgetset Forms diff --git a/examples/Techniques/multithreading/criticalsectionunit1.lfm b/examples/Techniques/multithread_critical/criticalsectionunit1.lfm similarity index 100% rename from examples/Techniques/multithreading/criticalsectionunit1.lfm rename to examples/Techniques/multithread_critical/criticalsectionunit1.lfm diff --git a/examples/Techniques/multithreading/criticalsectionunit1.pas b/examples/Techniques/multithread_critical/criticalsectionunit1.pas similarity index 90% rename from examples/Techniques/multithreading/criticalsectionunit1.pas rename to examples/Techniques/multithread_critical/criticalsectionunit1.pas index 33aa021fb3..80a677c29b 100644 --- a/examples/Techniques/multithreading/criticalsectionunit1.pas +++ b/examples/Techniques/multithread_critical/criticalsectionunit1.pas @@ -25,6 +25,12 @@ With critical sections you will always get 50000. Without you will see different results on each run and depending on your system. + Important: In most (all?) Unix like systems, the cthread unit must be added + to the uses section of the .lpr file. Further, cmem is likely to + be significently faster so add it as well. Due to how the units + work a sensible order is cmem, cthreads and then perhaps cwstrings. + But note that heaptrc does not work with cmem so comment it out + while testing/debugging. } unit CriticalSectionUnit1; diff --git a/examples/Techniques/multithread_critical/multithread_critical.ex-meta b/examples/Techniques/multithread_critical/multithread_critical.ex-meta new file mode 100644 index 0000000000..d9c7729034 --- /dev/null +++ b/examples/Techniques/multithread_critical/multithread_critical.ex-meta @@ -0,0 +1,5 @@ +{ "multithread_critical" : { + "Category" : "General", + "Keywords" : ["Needs Work","Multithreading"], + "Description" : "Demonstrates how to use a CriticalSection in a multithreaded application and, incidentally, how important it might be ! \n\n\n\n"} +} \ No newline at end of file diff --git a/examples/Techniques/multithread_single/multithread_single.ex-meta b/examples/Techniques/multithread_single/multithread_single.ex-meta new file mode 100644 index 0000000000..0af2490b12 --- /dev/null +++ b/examples/Techniques/multithread_single/multithread_single.ex-meta @@ -0,0 +1,5 @@ +{ "multithread_single" : { + "Category" : "General", + "Keywords" : ["Multithreading"], + "Description" : "Demo to show, how to process a big file with the main thread while keeping the application responsive. \n"} +} \ No newline at end of file diff --git a/examples/Techniques/multithreading/processmessagesunit1.lfm b/examples/Techniques/multithread_single/processmessagesunit1.lfm similarity index 100% rename from examples/Techniques/multithreading/processmessagesunit1.lfm rename to examples/Techniques/multithread_single/processmessagesunit1.lfm diff --git a/examples/Techniques/multithreading/processmessagesunit1.pas b/examples/Techniques/multithread_single/processmessagesunit1.pas similarity index 89% rename from examples/Techniques/multithreading/processmessagesunit1.pas rename to examples/Techniques/multithread_single/processmessagesunit1.pas index dcd4a157bb..0ffe1305bc 100644 --- a/examples/Techniques/multithreading/processmessagesunit1.pas +++ b/examples/Techniques/multithread_single/processmessagesunit1.pas @@ -20,6 +20,12 @@ Abstract: Demo to show, how to process a big file with the main thread. + Important: In most (all?) Unix like systems, the cthread unit must be added + to the uses section of the .lpr file. Further, cmem is likely to + be significently faster so add it as well. Due to how the units + work a sensible order is cmem, cthreads and then perhaps cwstrings. + But note that heaptrc does not work with cmem so comment it out + while testing/debugging. } unit ProcessMessagesUnit1; diff --git a/examples/Techniques/multithreading/singlethreadingexample1.lpi b/examples/Techniques/multithread_single/singlethreadingexample1.lpi similarity index 100% rename from examples/Techniques/multithreading/singlethreadingexample1.lpi rename to examples/Techniques/multithread_single/singlethreadingexample1.lpi diff --git a/examples/Techniques/multithreading/singlethreadingexample1.lpr b/examples/Techniques/multithread_single/singlethreadingexample1.lpr similarity index 77% rename from examples/Techniques/multithreading/singlethreadingexample1.lpr rename to examples/Techniques/multithread_single/singlethreadingexample1.lpr index d3f93f4bc8..3fe45643c9 100644 --- a/examples/Techniques/multithreading/singlethreadingexample1.lpr +++ b/examples/Techniques/multithread_single/singlethreadingexample1.lpr @@ -3,9 +3,9 @@ program SingleThreadingExample1; {$mode objfpc}{$H+} uses - {$IFDEF UNIX}{$IFDEF UseCThreads} - cthreads, - {$ENDIF}{$ENDIF} + {$IFDEF UNIX}{xx$IFDEF UseCThreads} + cmem, cthreads, + {$ENDIF}{xx$ENDIF} Interfaces, // this includes the LCL widgetset Forms { add your units here }, ProcessMessagesUnit1; diff --git a/examples/Techniques/multithread_wait/multithread_wait.ex-meta b/examples/Techniques/multithread_wait/multithread_wait.ex-meta new file mode 100644 index 0000000000..80d84ab95d --- /dev/null +++ b/examples/Techniques/multithread_wait/multithread_wait.ex-meta @@ -0,0 +1,5 @@ +{ "multithread_wait" : { + "Category" : "General", + "Keywords" : ["Multithreading"], + "Description" : "Demo to show, how a Thread waits for another. \n"} +} \ No newline at end of file diff --git a/examples/Techniques/multithreading/waitforexample1.lpi b/examples/Techniques/multithread_wait/waitforexample1.lpi similarity index 100% rename from examples/Techniques/multithreading/waitforexample1.lpi rename to examples/Techniques/multithread_wait/waitforexample1.lpi diff --git a/examples/Techniques/multithreading/waitforexample1.lpr b/examples/Techniques/multithread_wait/waitforexample1.lpr similarity index 93% rename from examples/Techniques/multithreading/waitforexample1.lpr rename to examples/Techniques/multithread_wait/waitforexample1.lpr index 0bf10e2935..566cddbce0 100644 --- a/examples/Techniques/multithreading/waitforexample1.lpr +++ b/examples/Techniques/multithread_wait/waitforexample1.lpr @@ -4,7 +4,7 @@ program WaitForExample1; uses {$IFDEF UNIX} - cthreads, + cmem, cthreads, {$ENDIF} Interfaces, // this includes the LCL widgetset Forms diff --git a/examples/Techniques/multithreading/waitforunit1.lfm b/examples/Techniques/multithread_wait/waitforunit1.lfm similarity index 100% rename from examples/Techniques/multithreading/waitforunit1.lfm rename to examples/Techniques/multithread_wait/waitforunit1.lfm diff --git a/examples/Techniques/multithreading/waitforunit1.pas b/examples/Techniques/multithread_wait/waitforunit1.pas similarity index 89% rename from examples/Techniques/multithreading/waitforunit1.pas rename to examples/Techniques/multithread_wait/waitforunit1.pas index 4787bdf588..f2ca177850 100644 --- a/examples/Techniques/multithreading/waitforunit1.pas +++ b/examples/Techniques/multithread_wait/waitforunit1.pas @@ -20,6 +20,12 @@ Abstract: Demo to show, how a Thread waits for another. + Important: In most (all?) Unix like systems, the cthread unit must be added + to the uses section of the .lpr file. Further, cmem is likely to + be significently faster so add it as well. Due to how the units + work a sensible order is cmem, cthreads and then perhaps cwstrings. + But note that heaptrc does not work with cmem so comment it out + while testing/debugging. } unit WaitForUnit1; diff --git a/examples/Techniques/multithreading/multithreading.ex-meta b/examples/Techniques/multithreading/multithreading.ex-meta deleted file mode 100644 index 13c8a514e7..0000000000 --- a/examples/Techniques/multithreading/multithreading.ex-meta +++ /dev/null @@ -1,9 +0,0 @@ -{ "multithreading" : { - "Category" : "Techniques", - "Keywords" : ["Needs Work", "Multithreading"], - "Description" : "A set of examples looking at multithreading. - -Note the examples seem to predate cmem and some reference to it needs to be added. - -"} -} \ No newline at end of file diff --git a/examples/Techniques/openurltest/openurltest.ex-meta b/examples/Techniques/openurltest/openurltest.ex-meta index b26ad168cf..fa51df819c 100644 --- a/examples/Techniques/openurltest/openurltest.ex-meta +++ b/examples/Techniques/openurltest/openurltest.ex-meta @@ -1,5 +1,11 @@ -{ "openurltest" : { - "Category" : "Techniques", - "Keywords" : ["Open Browser", "Open application", "Open Document"], - "Description" : "Demonstrates how to open either your system's default browser or the system's default for a local document."} -} \ No newline at end of file +{ + "openurltest" : { + "Category" : "General", + "Keywords" : [ + "Open Browser", + "Open application", + "Open Document" + ], + "Description" : "Demonstrates how to open either your system's default browser or the system's default for a local document." + } +} diff --git a/examples/Techniques/pen_brush/pen_brush.ex-meta b/examples/Techniques/pen_brush/pen_brush.ex-meta index b799d607cb..663beccc42 100644 --- a/examples/Techniques/pen_brush/pen_brush.ex-meta +++ b/examples/Techniques/pen_brush/pen_brush.ex-meta @@ -1,5 +1,11 @@ -{ "pen_brush" : { - "Category" : "Techniques", - "Keywords" : ["Drawing", "styles", "lines"], - "Description" : "Demonstrates drawing (lines) in a range of styles, colours, widths etc."} -} \ No newline at end of file +{ + "pen_brush" : { + "Category" : "General", + "Keywords" : [ + "Drawing", + "styles", + "lines" + ], + "Description" : "Demonstrates drawing (lines) in a range of styles, colours, widths etc." + } +} diff --git a/examples/Techniques/scanline/scanline.ex-meta b/examples/Techniques/scanline/scanline.ex-meta index 999e11a441..0f22177cac 100644 --- a/examples/Techniques/scanline/scanline.ex-meta +++ b/examples/Techniques/scanline/scanline.ex-meta @@ -1,13 +1,12 @@ -{ "scanline" : { - "Category" : "Techniques", - "Keywords" : ["pf24bit", "ScanLine", "Images", "Delphi"], - "Description" : " This example demonstrates how to - - create an image with an internal format similar to Delphi's pf24bit - - convert it to current format and create a TBitmap from it - - use an approach similar to Delphi's TBitmap.ScanLine. - - Delphi's TBitmap implementation only supports windows formats. For example the TBitmap.ScanLine function gives a direct pointer to the memory. This is not possible under all widget sets. And even those who supports it, uses different formats than windows. So Delphi code using TBitmap.ScanLine has to be changed anyway. How much depends on how much speed is needed. - - If the goal is to quickly port some Delphi code using TBitmap.Scanline, then the this code gives some hints how to achieve it. -"} -} \ No newline at end of file +{ + "scanline" : { + "Category" : "General", + "Keywords" : [ + "pf24bit", + "ScanLine", + "Images", + "Delphi" + ], + "Description" : " This example demonstrates how to\n - create an image with an internal format similar to Delphi's pf24bit\n - convert it to current format and create a TBitmap from it\n - use an approach similar to Delphi's TBitmap.ScanLine.\n \n Delphi's TBitmap implementation only supports windows formats. For example the TBitmap.ScanLine function gives a direct pointer to the memory. This is not possible under all widget sets. And even those who supports it, uses different formats than windows. So Delphi code using TBitmap.ScanLine has to be changed anyway. How much depends on how much speed is needed.\n \n If the goal is to quickly port some Delphi code using TBitmap.Scanline, then the this code gives some hints how to achieve it.\n" + } +} diff --git a/examples/Techniques/shapedcontrols/shapedcontrols.ex-meta b/examples/Techniques/shapedcontrols/shapedcontrols.ex-meta index aad1f2024b..ee67d8d325 100644 --- a/examples/Techniques/shapedcontrols/shapedcontrols.ex-meta +++ b/examples/Techniques/shapedcontrols/shapedcontrols.ex-meta @@ -1,5 +1,10 @@ -{ "shapedcontrols" : { - "Category" : "Techniques", - "Keywords" : ["Shaped", "No rectangular"], - "Description" : "How to make controls, in this case a Button, a different shape than the traditional rectangle."} -} \ No newline at end of file +{ + "shapedcontrols" : { + "Category" : "General", + "Keywords" : [ + "Shaped", + "No rectangular" + ], + "Description" : "How to make controls, in this case a Button, a different shape than the traditional rectangle." + } +} diff --git a/examples/Techniques/sprites/sprites.ex-meta b/examples/Techniques/sprites/sprites.ex-meta index 5769818f4e..9983debb8c 100644 --- a/examples/Techniques/sprites/sprites.ex-meta +++ b/examples/Techniques/sprites/sprites.ex-meta @@ -1,5 +1,12 @@ -{ "sprites" : { - "Category" : "Techniques", - "Keywords" : ["TPicture", "Sprite", "Images", "png"], - "Description" : "Shows how to move a small bitmap (a sprite) over a background image. Moves randomly or under control of the mouse or keys."} -} \ No newline at end of file +{ + "sprites" : { + "Category" : "General", + "Keywords" : [ + "TPicture", + "Sprite", + "Images", + "png" + ], + "Description" : "Shows how to move a small bitmap (a sprite) over a background image. Moves randomly or under control of the mouse or keys." + } +} diff --git a/examples/Techniques/translation/translation.ex-meta b/examples/Techniques/translation/translation.ex-meta index f3961f367c..8f43bc3cc9 100644 --- a/examples/Techniques/translation/translation.ex-meta +++ b/examples/Techniques/translation/translation.ex-meta @@ -1,7 +1,12 @@ -{ "translation" : { - "Category" : "Techniques", - "Keywords" : ["Translations", "POEdit", "i18n", "Needs Work"], - "Description" : "Demonstrates internationalisation using po file. - -Note - appears to use a more complicated mechanism (LocalizedForms.*) than is now necessary, needs review."} -} \ No newline at end of file +{ + "translation" : { + "Category" : "General", + "Keywords" : [ + "Translations", + "POEdit", + "i18n", + "Needs Work" + ], + "Description" : "Demonstrates internationalisation using po file. \n\nNote - appears to use a more complicated mechanism (LocalizedForms.*) than is now necessary, needs review." + } +}