diff --git a/components/virtualtreeview-unstable/demos/unicode/fmain.lfm b/components/virtualtreeview-unstable/demos/unicode/fmain.lfm new file mode 100644 index 000000000..289749d62 --- /dev/null +++ b/components/virtualtreeview-unstable/demos/unicode/fmain.lfm @@ -0,0 +1,176 @@ +object MainForm: TMainForm + Left = 379 + Height = 504 + Top = 166 + Width = 613 + Caption = 'Unicode Demo' + ClientHeight = 504 + ClientWidth = 613 + OnCreate = FormCreate + LCLVersion = '0.9.27' + object MainNotebook: TNotebook + Height = 504 + Width = 613 + Align = alClient + PageIndex = 0 + TabOrder = 0 + object WelcomePage: TPage + Caption = 'Welcome Translations' + ClientWidth = 605 + ClientHeight = 478 + object WelcomeTree: TVirtualStringTree + Left = 3 + Height = 444 + Top = 31 + Width = 599 + Align = alClient + BorderSpacing.Around = 3 + BorderStyle = bsSingle + Header.Options = [hoColumnResize, hoDrag, hoVisible] + TabOrder = 0 + OnFreeNode = WelcomeTreeFreeNode + OnGetText = WelcomeTreeGetText + Columns = < + item + Width = 200 + WideText = 'Language' + end + item + Position = 1 + Width = 200 + WideText = 'Translation' + end> + end + object WelcomeTopPanel: TPanel + Height = 28 + Width = 605 + Align = alTop + BevelOuter = bvNone + ClientHeight = 28 + ClientWidth = 605 + TabOrder = 1 + object ChooseWelcomeFontButton: TButton + Left = 4 + Height = 25 + Top = 2 + Width = 120 + BorderSpacing.Left = 3 + BorderSpacing.Around = 1 + Caption = 'Choose Font' + OnClick = ChooseWelcomeFontButtonClick + TabOrder = 0 + end + end + end + object LCLTextPage: TPage + Caption = 'LCL Text' + ClientWidth = 605 + ClientHeight = 478 + object LCLTextTree: TVirtualStringTree + Left = 3 + Height = 440 + Top = 3 + Width = 272 + BorderSpacing.Around = 3 + BorderStyle = bsSingle + Header.MainColumn = -1 + Header.Options = [hoColumnResize, hoDrag] + TabOrder = 0 + TreeOptions.MiscOptions = [toAcceptOLEDrop, toEditable, toFullRepaintOnResize, toInitOnSave, toToggleOnDblClick, toWheelPanning] + OnFreeNode = LCLTextTreeFreeNode + OnGetText = LCLTextTreeGetText + OnNewText = LCLTextTreeNewText + Columns = <> + end + object AddEditTextButton: TButton + Left = 476 + Height = 25 + Top = 2 + Width = 120 + Caption = 'Add Text' + OnClick = AddEditTextButtonClick + TabOrder = 1 + end + object TextEdit: TEdit + Left = 284 + Height = 23 + Top = 2 + Width = 184 + TabOrder = 2 + end + object TextComboBox: TComboBox + Left = 284 + Height = 21 + Top = 58 + Width = 184 + ItemHeight = 13 + Items.Strings = ( + 'Não' + 'Coração' + 'Sim' + ) + TabOrder = 3 + end + object AddComboTextButton: TButton + Left = 476 + Height = 25 + Top = 58 + Width = 120 + Caption = 'Add Text' + OnClick = AddComboTextButtonClick + TabOrder = 4 + end + object TextListBox: TListBox + Left = 284 + Height = 112 + Top = 98 + Width = 184 + Items.Strings = ( + 'Não' + 'Coração' + 'Sim' + ) + ItemHeight = 13 + TabOrder = 5 + end + object AddListTextButton: TButton + Left = 476 + Height = 25 + Top = 98 + Width = 120 + Caption = 'Add Text' + OnClick = AddListTextButtonClick + TabOrder = 6 + end + object TextMemo: TMemo + Left = 284 + Height = 138 + Top = 234 + Width = 184 + TabOrder = 7 + end + object AddMemoTextButton: TButton + Left = 476 + Height = 25 + Top = 234 + Width = 120 + Caption = 'Add Text' + OnClick = AddMemoTextButtonClick + TabOrder = 8 + end + object ClearLCLTextTreeButton: TButton + Left = 3 + Height = 25 + Top = 449 + Width = 97 + Caption = 'Clear' + OnClick = ClearLCLTextTreeButtonClick + TabOrder = 9 + end + end + end + object FontDialog1: TFontDialog + left = 136 + top = 24 + end +end diff --git a/components/virtualtreeview-unstable/demos/unicode/fmain.pas b/components/virtualtreeview-unstable/demos/unicode/fmain.pas new file mode 100644 index 000000000..090e18006 --- /dev/null +++ b/components/virtualtreeview-unstable/demos/unicode/fmain.pas @@ -0,0 +1,217 @@ +unit fMain; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, + ExtCtrls, VirtualTrees, StdCtrls, LCLProc; + +type + + { TMainForm } + + TMainForm = class(TForm) + AddEditTextButton: TButton; + AddComboTextButton: TButton; + AddListTextButton: TButton; + AddMemoTextButton: TButton; + ClearLCLTextTreeButton: TButton; + ChooseWelcomeFontButton: TButton; + TextMemo: TMemo; + TextListBox: TListBox; + TextComboBox: TComboBox; + TextEdit: TEdit; + FontDialog1: TFontDialog; + MainNotebook: TNotebook; + LCLTextPage: TPage; + LCLTextTree: TVirtualStringTree; + WelcomeTopPanel: TPanel; + WelcomeTree: TVirtualStringTree; + WelcomePage: TPage; + procedure AddComboTextButtonClick(Sender: TObject); + procedure AddEditTextButtonClick(Sender: TObject); + procedure AddListTextButtonClick(Sender: TObject); + procedure AddMemoTextButtonClick(Sender: TObject); + procedure ChooseWelcomeFontButtonClick(Sender: TObject); + procedure ClearLCLTextTreeButtonClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure LCLTextTreeFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); + procedure LCLTextTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; + Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); + procedure LCLTextTreeNewText(Sender: TBaseVirtualTree; Node: PVirtualNode; + Column: TColumnIndex; const NewText: WideString); + procedure WelcomeTreeFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); + procedure WelcomeTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; + Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString); + private + procedure AddLCLText(const AText: String); + { private declarations } + procedure AddWelcomeString(const WelcomeString: String); + public + { public declarations } + end; + +var + MainForm: TMainForm; + +implementation + +uses + strutils; + +type + TWelcomeData = record + Language: String; + Translation: String; + end; + PWelcomeData = ^TWelcomeData; + + TLCLTextData = record + Text: String; + end; + PLCLTextData = ^TLCLTextData; + +{ TMainForm } + +procedure TMainForm.FormCreate(Sender: TObject); +var + WelcomeList: TStrings; + i: Integer; +begin + LCLTextTree.NodeDataSize := SizeOf(TLCLTextData); + WelcomeTree.NodeDataSize := SizeOf(TWelcomeData); + //Load the welcome list from an UTF-8 encoded file + WelcomeList := TStringList.Create; + try + WelcomeList.LoadFromFile('welcome.txt'); + WelcomeTree.BeginUpdate; + for i := 0 to WelcomeList.Count - 1 do + AddWelcomeString(WelcomeList[i]); + WelcomeTree.EndUpdate; + finally + WelcomeList.Destroy; + end; +end; + +procedure TMainForm.LCLTextTreeFreeNode(Sender: TBaseVirtualTree; + Node: PVirtualNode); +var + Data: PLCLTextData; +begin + Data := Sender.GetNodeData(Node); + Data^.Text := ''; +end; + +procedure TMainForm.LCLTextTreeGetText(Sender: TBaseVirtualTree; + Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; + var CellText: WideString); +var + Data: PLCLTextData; +begin + Data := Sender.GetNodeData(Node); + CellText := UTF8Decode(Data^.Text); +end; + +procedure TMainForm.LCLTextTreeNewText(Sender: TBaseVirtualTree; + Node: PVirtualNode; Column: TColumnIndex; const NewText: WideString); +var + Data: PLCLTextData; +begin + Data := Sender.GetNodeData(Node); + Data^.Text := NewText; +end; + +procedure TMainForm.ChooseWelcomeFontButtonClick(Sender: TObject); +begin + if FontDialog1.Execute then + WelcomeTree.Font := FontDialog1.Font; +end; + +procedure TMainForm.ClearLCLTextTreeButtonClick(Sender: TObject); +begin + LCLTextTree.Clear; +end; + +procedure TMainForm.AddEditTextButtonClick(Sender: TObject); +begin + AddLCLText(TextEdit.Text); +end; + +procedure TMainForm.AddListTextButtonClick(Sender: TObject); +begin + if TextListBox.ItemIndex <> -1 then + AddLCLText(TextListBox.Items[TextListBox.ItemIndex]); +end; + +procedure TMainForm.AddMemoTextButtonClick(Sender: TObject); +var + i: Integer; +begin + for i := 0 to TextMemo.Lines.Count - 1 do + AddLCLText(TextMemo.Lines[i]); +end; + +procedure TMainForm.AddComboTextButtonClick(Sender: TObject); +begin + AddLCLText(TextComboBox.Text); +end; + +procedure TMainForm.WelcomeTreeFreeNode(Sender: TBaseVirtualTree; + Node: PVirtualNode); +var + Data: PWelcomeData; +begin + Data := Sender.GetNodeData(Node); + Data^.Language := ''; + Data^.Translation := ''; +end; + +procedure TMainForm.WelcomeTreeGetText(Sender: TBaseVirtualTree; + Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; + var CellText: WideString); +var + Data: PWelcomeData; +begin + Data := Sender.GetNodeData(Node); + case Column of + 0: CellText := UTF8Decode(Data^.Language); + 1: CellText := UTF8Decode(Data^.Translation); + end; +end; + +procedure TMainForm.AddLCLText(const AText: String); +var + Data: PLCLTextData; + Node: PVirtualNode; +begin + with LCLTextTree do + begin + Node := AddChild(nil); + Data := GetNodeData(Node); + Data^.Text := AText; + ValidateNode(Node, False); + end; +end; + +procedure TMainForm.AddWelcomeString(const WelcomeString: String); +var + Data: PWelcomeData; + Node: PVirtualNode; +begin + with WelcomeTree do + begin + Node := AddChild(nil); + Data := GetNodeData(Node); + Data^.Language := ExtractWord(1, WelcomeString, [Chr(9)]); + Data^.Translation := ExtractWord(2, WelcomeString, [Chr(9)]); + ValidateNode(Node, False); + end; +end; + +initialization + {$I fmain.lrs} + +end. + diff --git a/components/virtualtreeview-unstable/demos/unicode/unicode.lpi b/components/virtualtreeview-unstable/demos/unicode/unicode.lpi new file mode 100644 index 000000000..a3f8bd650 --- /dev/null +++ b/components/virtualtreeview-unstable/demos/unicode/unicode.lpi @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/components/virtualtreeview-unstable/demos/unicode/unicode.lpr b/components/virtualtreeview-unstable/demos/unicode/unicode.lpr new file mode 100644 index 000000000..9f6ce1934 --- /dev/null +++ b/components/virtualtreeview-unstable/demos/unicode/unicode.lpr @@ -0,0 +1,21 @@ +program unicode; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms + { you can add units after this }, fMain, LResources, virtualtreeview_package; + +{$IFDEF WINDOWS}{$R unicode.rc}{$ENDIF} + +begin + {$I unicode.lrs} + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. + diff --git a/components/virtualtreeview-unstable/demos/unicode/welcome.txt b/components/virtualtreeview-unstable/demos/unicode/welcome.txt new file mode 100644 index 000000000..f95c60bab --- /dev/null +++ b/components/virtualtreeview-unstable/demos/unicode/welcome.txt @@ -0,0 +1,35 @@ +Arabic مرحباً +Armenian բարի գալուստ +Azeri xoş gəlmişsiniz +Catalan benvinguts +Cherokee ᎤᎵᎮᎵᏍᏗ +Chinese (trad.) 歡迎 +Chinese (simp.) 欢迎 +Czech vítejte +Danish velkommen +Dutch welkom +English welcome +Esperanto bonveno +Estonian tere tulemast +Finnish tervetuloa +French bienvenue +German willkommen +Greek καλώς ορίσατε +Hebrew ברוכים הבאים +Italian benvenuti +Japanese ようこそ +Latin salve +Norwegian velkommen +Persian خوش آمدید +Polish zapraszamy +Portuguese bem-vindo +Romanian bun venit +Sindhi ڀلي ڪري آيا +Slovak víta vás +Slovenian dobrodošli +Spanish bienvenido +Swahili karibu +Swedish välkommen +Turkish hoş geldiniz +Uyghur خۇش كەپسىز +Zulu sawubona