mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-10 19:56:21 +02:00
add csEdit to GTK2 interface to start removing use of GtkOldEditable
git-svn-id: trunk@4649 -
This commit is contained in:
parent
10e86b989c
commit
11880858a9
@ -3084,8 +3084,10 @@ begin
|
||||
case TControl(Sender).fCompStyle of
|
||||
csComboBox:
|
||||
Widget:= PGtkWidget(PGtkCombo(Handle)^.entry);
|
||||
{$IfDef GTK1}
|
||||
csEdit, csMemo:
|
||||
Widget:= GetWidgetInfo(Pointer(Handle), true)^.ImplementationWidget;
|
||||
{$EndIf}
|
||||
else
|
||||
Widget:= nil;
|
||||
end;
|
||||
@ -3107,11 +3109,13 @@ begin
|
||||
csComboBox:
|
||||
Result:= Abs(PGtkOldEditable(PGtkCombo(Handle)^.entry)^.selection_end_pos
|
||||
- PGtkOldEditable(PGtkCombo(Handle)^.entry)^.selection_start_pos);
|
||||
{$IfDef GTK1}
|
||||
csEdit, csMemo:
|
||||
begin
|
||||
Widget:= GetWidgetInfo(Pointer(Handle), true)^.ImplementationWidget;
|
||||
Result:= Abs(PGtkOldEditable(Widget)^.selection_end_pos - PGtkOldEditable(Widget)^.selection_start_pos);
|
||||
end;
|
||||
{$EndIf}
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -3132,8 +3136,10 @@ begin
|
||||
csComboBox:
|
||||
Widget:=PGtkCombo(Handle)^.entry;
|
||||
|
||||
{$IfDef GTK1}
|
||||
csEdit, csMemo:
|
||||
Widget:=GetWidgetInfo(Pointer(Handle), true)^.ImplementationWidget;
|
||||
{$EndIf}
|
||||
|
||||
else
|
||||
Widget:=nil;
|
||||
@ -3152,8 +3158,10 @@ begin
|
||||
csComboBox:
|
||||
Widget:=PGtkCombo(Handle)^.entry;
|
||||
|
||||
{$IfDef GTK1}
|
||||
csEdit, csMemo:
|
||||
Widget:=GetWidgetInfo(Pointer(Handle), true)^.ImplementationWidget;
|
||||
{$EndIf}
|
||||
|
||||
else
|
||||
Widget:=nil;
|
||||
@ -3416,6 +3424,7 @@ begin
|
||||
TComboBox(Sender).Handle)^.entry)));
|
||||
end;
|
||||
|
||||
{$IfDef GTK1}
|
||||
csEdit: Text:= StrPas(gtk_entry_get_text(PgtkEntry(TWinControl(Sender).Handle)));
|
||||
|
||||
csMemo : begin
|
||||
@ -3424,6 +3433,7 @@ begin
|
||||
Text := StrPas(CS);
|
||||
g_free(CS);
|
||||
end;
|
||||
{$EndIf}
|
||||
else
|
||||
Result := False;
|
||||
end;
|
||||
@ -3521,6 +3531,7 @@ begin
|
||||
if Str=nil then exit;
|
||||
|
||||
if (Sender is TWinControl) then begin
|
||||
{$IfDef GTK1}
|
||||
case TWinControl(Sender).fCompStyle of
|
||||
csMemo:
|
||||
begin
|
||||
@ -3531,7 +3542,8 @@ begin
|
||||
gtk_editable_insert_text(PGtkOldEditable(Widget),Str,StrLen(Str),@CurMemoLen);
|
||||
gtk_text_thaw(PGtkText(Widget));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
{$EndIf}
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -3698,6 +3710,7 @@ begin
|
||||
|
||||
csGroupBox : gtk_frame_set_label(pgtkFrame(P),pLabel);
|
||||
|
||||
{$IfDef GTK1}
|
||||
csEdit : begin
|
||||
LockOnChange(PGtkObject(p),+1);
|
||||
gtk_entry_set_text(pGtkEntry(P), pLabel);
|
||||
@ -3714,7 +3727,8 @@ begin
|
||||
gtk_text_thaw(PGtkText(P));
|
||||
end;
|
||||
|
||||
csPage:
|
||||
{$EndIf}
|
||||
csPage:
|
||||
SetNotebookPageTabLabel;
|
||||
|
||||
csComboBox :
|
||||
@ -4536,6 +4550,7 @@ begin
|
||||
SetCallback(LM_CHANGED,Sender);
|
||||
End;
|
||||
|
||||
{$IfDef GTK1}
|
||||
csEdit:
|
||||
begin
|
||||
SetCallback(LM_CHANGED, Sender);
|
||||
@ -4554,7 +4569,8 @@ begin
|
||||
SetCallback(LM_PASTEFROMCLIP, Sender);
|
||||
SetCallback(LM_INSERTTEXT, Sender);
|
||||
end;
|
||||
|
||||
{$EndIf}
|
||||
|
||||
csFixed :
|
||||
begin
|
||||
SetCallback(LM_HSCROLL,Sender);
|
||||
@ -5593,9 +5609,10 @@ begin
|
||||
csComboBox :
|
||||
p:=CreateComboBox(TComboBox(Sender));
|
||||
|
||||
{$IfDef GTK1}
|
||||
csEdit :
|
||||
p := gtk_entry_new();
|
||||
|
||||
{$EndIF}
|
||||
csFileDialog, csOpenFileDialog, csSaveFileDialog, csSelectDirectoryDialog,
|
||||
csPreviewFileDialog:
|
||||
InitializeFileDialog(TFileDialog(Sender),p,StrTemp);
|
||||
@ -5712,6 +5729,7 @@ begin
|
||||
gtk_widget_show(p);
|
||||
end;
|
||||
|
||||
{$IfDef GTK1}
|
||||
csMemo :
|
||||
begin
|
||||
P := gtk_scrolled_window_new(nil, nil);
|
||||
@ -5741,7 +5759,7 @@ begin
|
||||
|
||||
SetupProps:= true;
|
||||
end;
|
||||
|
||||
{$EndIF}
|
||||
csMenuBar :
|
||||
begin
|
||||
P := gtk_menu_bar_new();
|
||||
@ -6845,6 +6863,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
{$IfDef GTK1}
|
||||
csEdit :
|
||||
with TCustomEdit(Sender) do
|
||||
begin
|
||||
@ -6857,7 +6876,7 @@ begin
|
||||
(TCustomEdit(Sender).EchoMode = emNormal)
|
||||
and (TCustomEdit(Sender).PassWordChar=#0));
|
||||
end;
|
||||
|
||||
{$EndIf}
|
||||
csProgressBar :
|
||||
with TProgressBar(Sender) do
|
||||
begin
|
||||
@ -7045,6 +7064,7 @@ begin
|
||||
gtk_clist_thaw(GTK_CLIST(Widget));
|
||||
end;
|
||||
|
||||
{$IfDef GTK1}
|
||||
csMemo:
|
||||
begin
|
||||
ImplWidget:= GetWidgetInfo(wHandle, true)^.ImplementationWidget;
|
||||
@ -7087,7 +7107,8 @@ begin
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
{$EndIf}
|
||||
|
||||
csSpinEdit:
|
||||
Begin
|
||||
AnAdjustment:=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wHandle));
|
||||
@ -8172,6 +8193,9 @@ end;
|
||||
{ =============================================================================
|
||||
|
||||
$Log$
|
||||
Revision 1.419 2003/09/18 21:36:00 ajgenius
|
||||
add csEdit to GTK2 interface to start removing use of GtkOldEditable
|
||||
|
||||
Revision 1.418 2003/09/18 12:15:01 mattias
|
||||
fixed is checks for TCustomXXX controls
|
||||
|
||||
|
@ -70,7 +70,9 @@ type
|
||||
procedure AppendText(Sender: TObject; Str: PChar); override;
|
||||
function GetText(Sender: TComponent; var Text: String): Boolean; override;
|
||||
procedure SetLabel(Sender : TObject; Data : Pointer); override;
|
||||
|
||||
procedure HookSignals(Sender: TObject); override;
|
||||
function SetProperties(Sender : TObject) : integer; override;
|
||||
|
||||
function GetCursorPos(var lpPoint: TPoint ): Boolean; override;
|
||||
function LoadStockPixmap(StockID: longint) : HBitmap; override;
|
||||
end;
|
||||
@ -980,6 +982,13 @@ begin
|
||||
StrPCopy(strTemp, Caption);
|
||||
|
||||
case CompStyle of
|
||||
csEdit :
|
||||
begin
|
||||
p := gtk_entry_new();
|
||||
gtk_editable_set_editable (PGtkEditable(P), not TCustomEdit(Sender).ReadOnly);
|
||||
gtk_widget_show_all(P);
|
||||
end;
|
||||
|
||||
csMemo :
|
||||
begin
|
||||
P := gtk_scrolled_window_new(nil, nil);
|
||||
@ -1037,6 +1046,7 @@ var
|
||||
aTextIter1 : TGtkTextIter;
|
||||
aTextIter2 : TGtkTextIter;
|
||||
aTextBuffer : PGtkTextBuffer;
|
||||
Pos : Integer;
|
||||
begin
|
||||
Result := 0; //default value just in case nothing sets it
|
||||
|
||||
@ -1066,6 +1076,12 @@ begin
|
||||
gtk_text_buffer_get_selection_bounds(aTextBuffer, @aTextIter1, nil);
|
||||
result := gtk_text_iter_get_offset(@aTextIter1);
|
||||
end;
|
||||
csEdit:
|
||||
begin
|
||||
Widget:= GTK_WIDGET(Pointer(Handle));
|
||||
if not gtk_editable_get_selection_bounds(GTK_EDITABLE(Widget),@result, nil) then
|
||||
result := gtk_editable_get_position(GTK_EDITABLE(Widget));
|
||||
end;
|
||||
else begin
|
||||
result := inherited IntSendMessage3(LM_Message, Sender, data);
|
||||
exit;
|
||||
@ -1087,6 +1103,14 @@ begin
|
||||
gtk_text_buffer_get_selection_bounds(aTextBuffer, @aTextIter1, @aTextIter2);
|
||||
result:= Abs(gtk_text_iter_get_offset(@aTextIter2) - gtk_text_iter_get_offset(@aTextIter1));
|
||||
end;
|
||||
csEdit:
|
||||
begin
|
||||
Widget:= GTK_WIDGET(Pointer(Handle));
|
||||
if gtk_editable_get_selection_bounds(GTK_EDITABLE(Widget),@result, @Pos) then
|
||||
result := Pos - Result
|
||||
else
|
||||
result := 0;
|
||||
end;
|
||||
else begin
|
||||
result := inherited IntSendMessage3(LM_Message, Sender, data);
|
||||
exit;
|
||||
@ -1107,6 +1131,15 @@ begin
|
||||
{gtk_text_buffer_get_selection_bounds(aTextBuffer, @aTextIter1, nil);
|
||||
result := gtk_text_iter_get_offset(@aTextIter1);}
|
||||
end;
|
||||
|
||||
csEdit:
|
||||
begin
|
||||
Widget:= GTK_WIDGET(Pointer(Handle));
|
||||
if gtk_editable_get_selection_bounds(GTK_EDITABLE(Widget),nil, @Pos) then
|
||||
If (Integer(Data) >= 0) and (Integer(Data)<=Pos) then
|
||||
gtk_editable_select_region(GTK_EDITABLE(Widget), Integer(Data), Pos+1);
|
||||
end;
|
||||
|
||||
else begin
|
||||
result := inherited IntSendMessage3(LM_Message, Sender, data);
|
||||
exit;
|
||||
@ -1129,6 +1162,17 @@ begin
|
||||
{gtk_text_buffer_get_selection_bounds(aTextBuffer, @aTextIter1, @aTextIter2);
|
||||
result:= Abs(gtk_text_iter_get_offset(@aTextIter2) - gtk_text_iter_get_offset(@aTextIter1));}
|
||||
end;
|
||||
|
||||
csEdit:
|
||||
begin
|
||||
Widget:= GTK_WIDGET(Pointer(Handle));
|
||||
if gtk_editable_get_selection_bounds(GTK_EDITABLE(Widget),@Pos, nil) then
|
||||
gtk_editable_select_region(GTK_EDITABLE(Widget), Pos, Pos+Integer(Data)+1)
|
||||
else
|
||||
gtk_editable_select_region(GTK_EDITABLE(Widget), gtk_editable_get_position(GTK_EDITABLE(Widget)),
|
||||
gtk_editable_get_position(GTK_EDITABLE(Widget)) + Integer(Data)+1)
|
||||
end;
|
||||
|
||||
else begin
|
||||
result := inherited IntSendMessage3(LM_Message, Sender, data);
|
||||
exit;
|
||||
@ -1156,6 +1200,13 @@ var
|
||||
begin
|
||||
Result := True;
|
||||
case TControl(Sender).fCompStyle of
|
||||
csEdit: begin
|
||||
Widget:= GTK_WIDGET(Pointer(TWinControl(Sender).Handle));
|
||||
CS := gtk_editable_get_chars(GTK_EDITABLE(Widget), 0, -1);
|
||||
Text := StrPas(CS);
|
||||
g_free(CS);
|
||||
end;
|
||||
|
||||
csMemo : begin
|
||||
Widget:= GetWidgetInfo(Pointer(TWinControl(Sender).Handle), True)^.ImplementationWidget;
|
||||
aTextBuffer := gtk_text_view_get_buffer(GTK_TEXT_VIEW(Widget));
|
||||
@ -1233,6 +1284,14 @@ begin
|
||||
pLabel := pchar(Data);
|
||||
|
||||
case TControl(Sender).fCompStyle of
|
||||
csEdit : begin
|
||||
gtk_entry_set_text(pGtkEntry(Widget), pLabel);
|
||||
{LockOnChange(PGtkObject(Widget),+1);
|
||||
gtk_editable_delete_text(pGtkEditable(P), 0, -1);
|
||||
gtk_editable_insert_text(pGtkEditable(P), pLabel, StrLen(pLabel). 0);
|
||||
LockOnChange(PGtkObject(Widget),-1);}
|
||||
end;
|
||||
|
||||
csMemo : begin
|
||||
Widget:= PGtkWidget(GetWidgetInfo(Widget, True)^.ImplementationWidget);
|
||||
aTextBuffer := gtk_text_view_get_buffer(GTK_TEXT_VIEW(Widget));
|
||||
@ -1250,6 +1309,130 @@ begin
|
||||
Assert(False, Format('trace: [Tgtk2Object.SetLabel] %s --> END', [Sender.ClassName]));
|
||||
end;
|
||||
|
||||
procedure Tgtk2Object.HookSignals(Sender: TObject);
|
||||
begin
|
||||
if (Sender is TWinControl) then
|
||||
Begin
|
||||
inherited HookSignals(Sender);
|
||||
End;
|
||||
|
||||
if (Sender is TControl) then
|
||||
Begin
|
||||
case TControl(sender).FCompStyle of
|
||||
csEdit:
|
||||
begin
|
||||
SetCallback(LM_CHANGED, Sender);
|
||||
SetCallback(LM_ACTIVATE, Sender);
|
||||
SetCallback(LM_CUTTOCLIP, Sender);
|
||||
SetCallback(LM_COPYTOCLIP, Sender);
|
||||
SetCallback(LM_PASTEFROMCLIP, Sender);
|
||||
end;
|
||||
|
||||
csMemo:
|
||||
begin
|
||||
SetCallback(LM_CHANGED, Sender);
|
||||
SetCallback(LM_ACTIVATE, Sender);
|
||||
SetCallback(LM_CUTTOCLIP, Sender);
|
||||
SetCallback(LM_COPYTOCLIP, Sender);
|
||||
SetCallback(LM_PASTEFROMCLIP, Sender);
|
||||
SetCallback(LM_INSERTTEXT, Sender);
|
||||
end;
|
||||
end; //case
|
||||
end;
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
Method: TGtk2Object.SetProperties
|
||||
Params: Sender : the lcl object which called this func via SenMessage
|
||||
Returns: currently always 0
|
||||
|
||||
Depending on the compStyle, this function will apply all properties of
|
||||
the calling object to the corresponding GTK2 object.
|
||||
------------------------------------------------------------------------------}
|
||||
function Tgtk2Object.SetProperties(Sender : TObject) : integer;
|
||||
var
|
||||
wHandle : Pointer;
|
||||
Widget, ImplWidget : PGtkWidget;
|
||||
i : Longint;
|
||||
aTextBuffer : PGtkTextBuffer;
|
||||
aTextIter1 : TGtkTextIter;
|
||||
aTextIter2 : TGtkTextIter;
|
||||
begin
|
||||
Result := 0; // default if nobody sets it
|
||||
|
||||
if Sender is TWinControl
|
||||
then
|
||||
Assert(False, Format('Trace: [Tgtk2Object.SetProperties] %s', [Sender.ClassName]))
|
||||
else
|
||||
RaiseException('Tgtk2Object.SetProperties: '
|
||||
+' Sender.ClassName='+Sender.ClassName);
|
||||
|
||||
wHandle:= Pointer(TWinControl(Sender).Handle);
|
||||
Widget:= GTK_WIDGET(wHandle);
|
||||
|
||||
case TControl(Sender).fCompStyle of
|
||||
csEdit :
|
||||
with TCustomEdit(Sender) do
|
||||
begin
|
||||
gtk_editable_set_editable(GTK_ENTRY(wHandle), not (TCustomEdit(Sender).ReadOnly));
|
||||
gtk_entry_set_max_length(GTK_ENTRY(wHandle), TCustomEdit(Sender).MaxLength);
|
||||
gtk_entry_set_visibility(GTK_ENTRY(wHandle), (TCustomEdit(Sender).EchoMode = emNormal) and (TCustomEdit(Sender).PassWordChar=#0));
|
||||
if (TCustomEdit(Sender).EchoMode = emNone) then
|
||||
gtk_entry_set_invisible_char(GTK_ENTRY(wHandle), 0)
|
||||
else
|
||||
gtk_entry_set_invisible_char(GTK_ENTRY(wHandle), Longint(TCustomEdit(Sender).PassWordChar));
|
||||
end;
|
||||
|
||||
csMemo:
|
||||
begin
|
||||
ImplWidget:= GetWidgetInfo(wHandle, true)^.ImplementationWidget;
|
||||
|
||||
gtk_text_view_set_editable (PGtkTextView(ImplWidget), not TCustomMemo(Sender).ReadOnly);
|
||||
if TCustomMemo(Sender).WordWrap then
|
||||
gtk_text_view_set_wrap_mode(PGtkTextView(ImplWidget), GTK_WRAP_WORD)
|
||||
else
|
||||
gtk_text_view_set_wrap_mode(PGtkTextView(ImplWidget), GTK_WRAP_NONE);
|
||||
|
||||
|
||||
case (Sender as TCustomMemo).Scrollbars of
|
||||
ssHorizontal: gtk_scrolled_window_set_policy(
|
||||
GTK_SCROLLED_WINDOW(wHandle),
|
||||
GTK_POLICY_ALWAYS, GTK_POLICY_NEVER);
|
||||
ssVertical: gtk_scrolled_window_set_policy(
|
||||
GTK_SCROLLED_WINDOW(wHandle),
|
||||
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
|
||||
ssBoth: gtk_scrolled_window_set_policy(
|
||||
GTK_SCROLLED_WINDOW(wHandle),
|
||||
GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS);
|
||||
ssAutoHorizontal: gtk_scrolled_window_set_policy(
|
||||
GTK_SCROLLED_WINDOW(wHandle),
|
||||
GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
|
||||
ssAutoVertical: gtk_scrolled_window_set_policy(
|
||||
GTK_SCROLLED_WINDOW(wHandle),
|
||||
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
||||
ssAutoBoth: gtk_scrolled_window_set_policy(
|
||||
GTK_SCROLLED_WINDOW(wHandle),
|
||||
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
||||
else
|
||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(wHandle),
|
||||
GTK_POLICY_NEVER, GTK_POLICY_NEVER);
|
||||
end;
|
||||
|
||||
If (TCustomMemo(Sender).MaxLength >= 0) then begin
|
||||
aTextBuffer := gtk_text_view_get_buffer(GTK_TEXT_VIEW(ImplWidget));
|
||||
i:= gtk_text_buffer_get_char_count(aTextBuffer);
|
||||
if i > TCustomMemo(Sender).MaxLength then begin
|
||||
gtk_text_buffer_get_bounds(aTextBuffer, nil, @aTextIter2);
|
||||
gtk_text_buffer_get_iter_at_offset(aTextBuffer, @aTextIter1, i);
|
||||
gtk_text_buffer_delete(aTextBuffer, @aTextIter1, @aTextIter2);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
else
|
||||
Result := inherited SetProperties(Sender);
|
||||
end;
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
Function: GetCursorPos
|
||||
Params: lpPoint: The cursorposition
|
||||
@ -1358,6 +1541,9 @@ end.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.18 2003/09/18 21:36:00 ajgenius
|
||||
add csEdit to GTK2 interface to start removing use of GtkOldEditable
|
||||
|
||||
Revision 1.17 2003/09/18 17:23:05 ajgenius
|
||||
start using GtkTextView for Gtk2 Memo
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user