Ok, So here's the answers:
>I'm looking at the WxRichTextCtrl buttons on:
>http://docs.wxwidgets.org/stable/wx_wxrichtextctrloverview.html
>and wondering how to implement them.
>Does anyone know where the code is?
Thanks to the C++ wx-users group for this: it's in the wxWidgets
distribution, samples/richtext/richtext.cpp.
>and wondering how to implement them.
Well here is my stab. Any comments or improvements would be very welcome.
I hope the subroutine names will be self-explanatory.
Regards
Steve
sub on_click_richtext_bold{
my ($self, $event) = @_;
$self->{Ctl_Report_Text_Txt}->ApplyBoldToSelection;
return $self;
}
sub on_click_richtext_italics{
my ($self, $event) = @_;
$self->{Ctl_Report_Text_Txt}->ApplyItalicToSelection;
return $self;
}
sub on_click_richtext_underline{
my ($self, $event) = @_;
$self->{Ctl_Report_Text_Txt}->ApplyUnderlineToSelection;
return $self;
}
sub on_click_richtext_align_left{
my ($self, $event) = @_;
$self->{Ctl_Report_Text_Txt}->ApplyAlignmentToSelection(wxTEXT_ALIGNMENT_LEF
T);
return $self;
}
sub on_click_richtext_align_centre{
my ($self, $event) = @_;
$self->{Ctl_Report_Text_Txt}->ApplyAlignmentToSelection(wxTEXT_ALIGNMENT_CEN
TRE);
return $self;
}
sub on_click_richtext_align_right{
my ($self, $event) = @_;
$self->{Ctl_Report_Text_Txt}->ApplyAlignmentToSelection(wxTEXT_ALIGNMENT_RIG
HT);
return $self;
}
sub on_click_richtext_align_justify{
my ($self, $event) = @_;
$self->{Ctl_Report_Text_Txt}->ApplyAlignmentToSelection(wxTEXT_ALIGNMENT_JUS
TIFIED);
return $self;
}
sub on_click_richtext_indent{
my ($self, $event) = @_;
my $loc_position = $self->{Ctl_Report_Text_Txt} ->
GetCaretPosition(); # Get current position
my $loc_range = Wx::RichTextRange->new($loc_position,$loc_position);
if ($self->{Ctl_Report_Text_Txt} -> HasSelection) {
# If there is a selection
$loc_range = $self->{Ctl_Report_Text_Txt} ->
GetSelectionRange(); # Get current range
}
my $loc_indent_style =
$self->{Ctl_Report_Text_Txt}->GetRichTextAttrStyle($loc_position);
$loc_indent_style ->SetLeftIndent(($loc_indent_style ->
GetLeftIndent()) + 50); # Add 5mm to indent position
$self->{Ctl_Report_Text_Txt}->SetStyleRange($loc_range,$loc_indent_style);
return $self;
}
sub on_click_richtext_outdent{
my ($self, $event) = @_;
my $loc_position = $self->{Ctl_Report_Text_Txt} ->
GetCaretPosition(); # Get current position
my $loc_range = Wx::RichTextRange->new($loc_position,$loc_position);
if ($self->{Ctl_Report_Text_Txt} -> HasSelection) {
# If there is a selection
$loc_range = $self->{Ctl_Report_Text_Txt} ->
GetSelectionRange(); # Get current range
}
my $loc_indent_style =
$self->{Ctl_Report_Text_Txt}->GetRichTextAttrStyle($loc_position);
$loc_indent_style ->SetLeftIndent(($loc_indent_style ->
GetLeftIndent()) - 50); # Subtract 5mm to indent position
$self->{Ctl_Report_Text_Txt}->SetStyleRange($loc_range,$loc_indent_style);
return $self;
}
sub on_click_richtext_preview{
my ($self, $event) = @_;
my $loc_RTC_printing = Wx::RichTextPrinting->new();
$loc_RTC_printing
->PreviewBuffer($self->{Ctl_Report_Text_Txt}->GetBuffer());
return $self;
}
sub on_click_richtext_print{
my ($self, $event) = @_;
$self->{Ctl_Report_Text_Txt}->ApplyAlignmentToSelection(wxTEXT_ALIGNMENT_JUS
TIFIED);
return $self;
}
sub on_click_richtext_pagesetup{
my ($self, $event) = @_;
$self->{Ctl_Report_Text_Txt}->ApplyAlignmentToSelection(wxTEXT_ALIGNMENT_JUS
TIFIED);
return $self;
}
sub on_click_richtext_copy{
my ($self, $event) = @_;
$self->{Ctl_Report_Text_Txt}->Copy();
return $self;
}
sub on_click_richtext_cut{
my ($self, $event) = @_;
$self->{Ctl_Report_Text_Txt}->Cut();
return $self;
}
sub on_click_richtext_paste{
my ($self, $event) = @_;
$self->{Ctl_Report_Text_Txt}->Paste();
return $self;
}
sub on_click_richtext_bullets{
my ($self, $event) = @_;
my $loc_position = $self->{Ctl_Report_Text_Txt} ->
GetCaretPosition(); # Get current position
my $loc_range = Wx::RichTextRange->new($loc_position,$loc_position);
if ($self->{Ctl_Report_Text_Txt} -> HasSelection) {
# If there is a selection
$loc_range = $self->{Ctl_Report_Text_Txt} ->
GetSelectionRange(); # Get current range
}
my $loc_style =
$self->{Ctl_Report_Text_Txt}->GetRichTextAttrStyle($loc_position);
my $loc_RTC_Bullet_Style_Definition =
Wx::RichTextListStyleDefinition->new("Bullet List 1");
for (my $i=0;$i<10;$i++){
$loc_RTC_Bullet_Style_Definition -> SetAttributes($i, $i*50,
50, wxTEXT_ATTR_BULLET_STYLE_STANDARD, "standard/Square");
}
$loc_RTC_Bullet_Style_Definition -> SetStyle($loc_style);
$self->{Ctl_Report_Text_Txt}->ApplyStyle($loc_RTC_Bullet_Style_Definition);
return $self;
}
sub on_click_richtext_paragraph{
my ($self, $event) = @_;
my $loc_position = $self->{Ctl_Report_Text_Txt} ->
GetCaretPosition(); # Get current position
my $loc_range = Wx::RichTextRange->new($loc_position,$loc_position);
if ($self->{Ctl_Report_Text_Txt} -> HasSelection) {
# If there is a selection
$loc_range = $self->{Ctl_Report_Text_Txt} ->
GetSelectionRange(); # Get current range
}
my $loc_style =
$self->{Ctl_Report_Text_Txt}->GetRichTextAttrStyle($loc_position);
my $log_pages =
wxRICHTEXT_FORMAT_INDENTS_SPACING|wxRICHTEXT_FORMAT_BULLETS|wxRICHTEXT_FORMA
T_TABS;
my $dlg_format = Wx::RichTextFormattingDialog -> newFull
($log_pages,$self,"Format Paragraph",wxID_ANY, wxDefaultPosition,
wxDefaultSize,wxDEFAULT_DIALOG_STYLE); # , -1, (t("Paragraph details"))
$dlg_format -> GetStyle ($self->{Ctl_Report_Text_Txt}, $loc_range);
if ($dlg_format->ShowModal()==wxID_OK){
$dlg_format->ApplyStyle($self->{Ctl_Report_Text_Txt},$loc_range,wxRICHTEXT_S
ETSTYLE_WITH_UNDO|wxRICHTEXT_SETSTYLE_OPTIMIZE|wxRICHTEXT_SETSTYLE_PARAGRAPH
S_ONLY)
}
return $self;
}
sub on_click_richtext_font{
my ($self, $event) = @_;
my $loc_position = $self->{Ctl_Report_Text_Txt} ->
GetCaretPosition(); # Get current position
my $loc_range = Wx::RichTextRange->new($loc_position,$loc_position);
if ($self->{Ctl_Report_Text_Txt} -> HasSelection) {
# If there is a selection
$loc_range = $self->{Ctl_Report_Text_Txt} ->
GetSelectionRange(); # Get current range
}
my $loc_style =
$self->{Ctl_Report_Text_Txt}->GetRichTextAttrStyle($loc_position);
my $log_pages = wxRICHTEXT_FORMAT_FONT;
my $dlg_format = Wx::RichTextFormattingDialog -> newFull
($log_pages,$self,"Format Paragraph",wxID_ANY, wxDefaultPosition,
wxDefaultSize,wxDEFAULT_DIALOG_STYLE); # , -1, (t("Paragraph details"))
$dlg_format -> GetStyle ($self->{Ctl_Report_Text_Txt}, $loc_range);
if ($dlg_format->ShowModal()==wxID_OK){
$dlg_format->ApplyStyle($self->{Ctl_Report_Text_Txt},$loc_range,wxRICHTEXT_S
ETSTYLE_WITH_UNDO|wxRICHTEXT_SETSTYLE_OPTIMIZE|wxRICHTEXT_SETSTYLE_CHARACTER
S_ONLY)
}
return $self;
}