コード例 #1
0
ファイル: SCADAShutdownTool.py プロジェクト: foxhack/ICSwiki
    def __init__(self, parent):

        global RUNNING_MODE
        gui.MainFrame.__init__(self, parent)
        redir = RedirectText(self.console)
        sys.stdout = redir
        self.textAttr = rt.RichTextAttr()
        self.SetFontStyle(fontColor=wx.Colour(0, 0, 0),
                          fontBgColor=wx.Colour(255, 255, 255),
                          fontFace='Arial',
                          fontSize=10,
                          fontBold=False,
                          fontItalic=False,
                          fontUnderline=False)
        self.console.SelectAll()
        self.console.DeleteSelection()

        RUNNING_MODE = "real_mode"
        self.coil_outputs.SetValue(True)
        self.digital_inputs.SetValue(True)
        self.analogue_inputs.SetValue(True)
        self.holding_registers.SetValue(True)
        self.extended_registers.SetValue(True)

        self.ip.WriteText(str(default_ip))
        self.port.WriteText(str(default_port))
        self.unit_id.WriteText(str(default_unit_id))
        self.sd_val.WriteText(str(default_sd_val))

        self.co_offset.WriteText(str(default_co_offset))
        self.di_offset.WriteText(str(default_di_offset))
        self.ai_offset.WriteText(str(default_ai_offset))
        self.hr_offset.WriteText(str(default_hr_offset))
        self.er_offset.WriteText(str(default_er_offset))
コード例 #2
0
 def doansi_normal(self):
     self.current_style = rtc.RichTextAttr(self.initial_style)
     self.intensity = ''
     self.conceal = self.inverse = False
     self.fg_colour = self.theme.get('foreground')
     self.bg_colour = self.theme.get('background')
     self.doansi_no_blink()
コード例 #3
0
    def OnFont(self, evt):
        if not self.ctrl_texte.HasSelection():
            dlg = wx.MessageDialog(
                self, _(u"Vous devez d'abord sélectionner un texte."),
                _(u"Police"), wx.OK | wx.ICON_INFORMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        r = self.ctrl_texte.GetSelectionRange()
        fontData = wx.FontData()
        fontData.EnableEffects(False)
        attr = rt.RichTextAttr()
        attr.SetFlags(wx.TEXT_ATTR_FONT)
        if self.ctrl_texte.GetStyle(self.ctrl_texte.GetInsertionPoint(), attr):
            fontData.SetInitialFont(attr.GetFont())

        dlg = wx.FontDialog(self, fontData)
        if dlg.ShowModal() == wx.ID_OK:
            fontData = dlg.GetFontData()
            font = fontData.GetChosenFont()
            if font:
                attr.SetFlags(wx.TEXT_ATTR_FONT)
                attr.SetFont(font)
                self.ctrl_texte.SetStyle(r, attr)
        dlg.Destroy()
コード例 #4
0
    def _init_rtc(self):
        #self._pnl_rtc = wx.Panel(self)
        self.rtc = rt.RichTextCtrl(self,
                                   style=wx.VSCROLL | wx.HSCROLL
                                   | wx.NO_BORDER)

        #vbox = wx.BoxSizer(wx.VERTICAL)
        #vbox.Add(self.rtc,1,wx.ALIGN_LEFT|wx.ALL | wx.EXPAND,5)
        #self._pnl_rtc.SetSizer(vbox)
        #self._pnl_rtc.SetAutoLayout(True)
        #self._pnl_rtc.Layout()
        #self._pnl_rtc.Fit()

        self.rtc.Freeze()
        self.rtc.BeginSuppressUndo()
        self.rtc.BeginParagraphSpacing(0, 20)
        self.rtc.BeginAlignment(wx.TEXT_ALIGNMENT_CENTRE)
        # Create and initialize text attributes
        self.textAttr = rt.RichTextAttr()
        self.SetFontStyle(fontColor=wx.Colour(0, 0, 0),
                          fontBgColor=wx.Colour(255, 255, 255),
                          fontFace='Times New Roman',
                          fontSize=10,
                          fontBold=False,
                          fontItalic=False,
                          fontUnderline=False)
        self.rtc.EndSuppressUndo()
        self.rtc.Thaw()
コード例 #5
0
    def __init__(self, parent):
        gui.MainFrame.__init__(self, parent)
        redir = RedirectText(self.console)
        sys.stdout = redir

        # change wx frame icon
        icon = wx.EmptyIcon()
        icon.CopyFromBitmap(
            wx.Bitmap("images/critifence.ico", wx.BITMAP_TYPE_ANY))
        self.SetIcon(icon)

        self.textAttr = rt.RichTextAttr()
        self.SetFontStyle(fontColor=wx.Colour(0, 0, 0),
                          fontBgColor=wx.Colour(255, 255, 255),
                          fontFace='Arial',
                          fontSize=10,
                          fontBold=False,
                          fontItalic=False,
                          fontUnderline=False)
        self.console.SelectAll()
        #self.console.DeleteSelection()
        self.console.Clear()

        self.dos_attack.Enabled = True
        attack_type = "dos_attack"
        self.ip_addr.WriteText(str(SERVER))
        self.port.WriteText(str(TCP_PORT))

        if ATTACK_MODE == "PanelShock":
            global headers
            headers = "POST " + str(FILE) + " HTTP/1.1\r\nHost: " + str(
                HOST
            ) + "\r\nUser-Agent: Blank\r\nContent-Type: application/x-www-form-urlencoded\r\nTransfer-Encoding: chunked\r\n\r\n"
コード例 #6
0
 def __init__(self, parent, _id):
     rt.RichTextCtrl.__init__(
         self,
         parent,
         _id,  # size=(400,200),
         style=wx.VSCROLL | wx.HSCROLL | wx.NO_BORDER)
     self.textAttr = rt.RichTextAttr()
     self.parent_ = parent.parent
     self.mark_dirty(False)
コード例 #7
0
 def applybgcolour(self, colour):
     "colorize background of selected text"
     attr = rt.RichTextAttr()
     attr.SetFlags(wx.TEXT_ATTR_BACKGROUND_COLOUR)
     attr.SetBackgroundColour(colour)
     if not self.HasSelection():
         self.BeginStyle(attr)  # BeginBackgroundColour(colour)
     else:
         range = self.GetSelectionRange()
         self.SetStyle(range, attr)
コード例 #8
0
 def applyfgcolour(self, colour):
     "colorize selected text"
     if not self.HasSelection():
         self.BeginTextColour(colour)
     else:
         range = self.GetSelectionRange()
         attr = rt.RichTextAttr()
         attr.SetFlags(wx.TEXT_ATTR_TEXT_COLOUR)
         attr.SetTextColour(colour)
         self.SetStyle(range, attr)
コード例 #9
0
    def set_current_colours(self):
        current = rtc.RichTextAttr()
        if self.inverse:
            current.SetTextColour(self.background_colour())
            current.SetBackgroundColour(self.foreground_colour())
        else:
            current.SetTextColour(self.foreground_colour())
            current.SetBackgroundColour(self.background_colour())

        self.BeginStyle(current)
コード例 #10
0
 def set_linespacing_20(self, evt):
     "dubbele regelafstand instellen"
     attr = rt.RichTextAttr()
     attr.SetFlags(wx.TEXT_ATTR_LINE_SPACING)
     ip = self.GetInsertionPoint()
     if self.GetStyle(ip, attr):
         range = rt.RichTextRange(ip, ip)
         if self.HasSelection():
             range = self.GetSelectionRange()
         attr.SetFlags(wx.TEXT_ATTR_LINE_SPACING)
         attr.SetLineSpacing(20)
         self.SetStyle(range, attr)
コード例 #11
0
 def increase_parspacing_more(self, evt):
     "ruimte tussen alinea's vergroten"
     attr = rt.RichTextAttr()
     attr.SetFlags(wx.TEXT_ATTR_PARA_SPACING_AFTER)
     ip = self.GetInsertionPoint()
     if self.GetStyle(ip, attr):
         range = rt.RichTextRange(ip, ip)
         if self.HasSelection():
             range = self.GetSelectionRange()
         attr.SetParagraphSpacingAfter(attr.GetParagraphSpacingAfter() + 20)
         attr.SetFlags(wx.TEXT_ATTR_PARA_SPACING_AFTER)
         self.SetStyle(range, attr)
コード例 #12
0
 def indent_more(self, evt):
     "alinea verder laten inspringen"
     attr = rt.RichTextAttr()
     attr.SetFlags(wx.TEXT_ATTR_LEFT_INDENT)
     ip = self.GetInsertionPoint()
     if self.GetStyle(ip, attr):
         range = rt.RichTextRange(ip, ip)
         if self.HasSelection():
             range = self.GetSelectionRange()
         attr.SetLeftIndent(attr.GetLeftIndent() + 100)
         attr.SetFlags(wx.TEXT_ATTR_LEFT_INDENT)
         self.SetStyle(range, attr)
コード例 #13
0
 def text_strikethrough(self, evt):
     "selectie doorhalen"
     # self.ApplyUnderlineToSelection() - as yet unclear how to implement
     attr = rt.RichTextAttr()
     attr.SetFlags(wx.TEXT_ATTR_FONT_STRIKETHROUGH)
     if not self.HasSelection():
         print('vanaf hier')
         self.BeginStyle(attr)
     else:
         print('selectie')
         range = self.GetSelectionRange()
         self.SetStyle(range, attr)
コード例 #14
0
ファイル: wxEditor.py プロジェクト: codecasterdu44/wxEditor
 def color_highlight(self, evt):
     '''For changing background color of text ranges'''
     selection = self.tab_list[self.current_tab].GetSelection()  #get range
     self.choose_highlight_color()  #get color
     color = self.tab_list[self.current_tab].current_highlight_color
     self.attr = rt.RichTextAttr()
     self.attr.SetFlags(
         wx.TEXT_ATTR_BACKGROUND_COLOUR)  #do I need the flag?
     self.attr.SetBackgroundColour(color)
     self.tab_list[self.current_tab].SetStyleEx(
         rt.RichTextRange(selection[0], selection[1]), self.attr)
     self.update_text("")
コード例 #15
0
    def OnLineSpacingDouble(self, evt):
        attr = rt.RichTextAttr()
        attr.SetFlags(wx.TEXT_ATTR_LINE_SPACING)
        ip = self.ctrl_texte.GetInsertionPoint()
        if self.ctrl_texte.GetStyle(ip, attr):
            r = rt.RichTextRange(ip, ip)
            if self.ctrl_texte.HasSelection():
                r = self.ctrl_texte.GetSelectionRange()

            attr.SetFlags(wx.TEXT_ATTR_LINE_SPACING)
            attr.SetLineSpacing(20)
            self.ctrl_texte.SetStyle(r, attr)
コード例 #16
0
    def OnIndentMore(self, evt):
        attr = rt.RichTextAttr()
        attr.SetFlags(wx.TEXT_ATTR_LEFT_INDENT)
        ip = self.ctrl_texte.GetInsertionPoint()
        if self.ctrl_texte.GetStyle(ip, attr):
            r = rt.RichTextRange(ip, ip)
            if self.ctrl_texte.HasSelection():
                r = self.ctrl_texte.GetSelectionRange()

            attr.SetLeftIndent(attr.GetLeftIndent() + 100)
            attr.SetFlags(wx.TEXT_ATTR_LEFT_INDENT)
            self.ctrl_texte.SetStyle(r, attr)
コード例 #17
0
    def OnParagraphSpacingMore(self, evt):
        attr = rt.RichTextAttr()
        attr.SetFlags(wx.TEXT_ATTR_PARA_SPACING_AFTER)
        ip = self.ctrl_texte.GetInsertionPoint()
        if self.ctrl_texte.GetStyle(ip, attr):
            r = rt.RichTextRange(ip, ip)
            if self.ctrl_texte.HasSelection():
                r = self.ctrl_texte.GetSelectionRange()

            attr.SetParagraphSpacingAfter(attr.GetParagraphSpacingAfter() + 20)
            attr.SetFlags(wx.TEXT_ATTR_PARA_SPACING_AFTER)
            self.ctrl_texte.SetStyle(r, attr)
コード例 #18
0
    def LineSpacingHalf(self):
        attr = rt.RichTextAttr()
        attr.SetFlags(wx)
        ip = self.rtc.GetInsertionPoint()
        if self.rtc.GetStyle(ip, attr):
            r = rt.RichTextRange(ip, ip)
            if self.rtc.HasSelection():
                r = self.rtc.GetSelectionRange()

            attr.SetFlags(wx.TEXT_ATTR_LINE_SPACING)
            attr.SetLineSpacing(15)
            self.rtc.SetStyle(r, attr)
コード例 #19
0
ファイル: RichTextCtrl.py プロジェクト: wangdyna/wxPython
    def OnLineSpacingSingle(self, evt):
        attr = rt.RichTextAttr()
        attr.SetFlags(rt.TEXT_ATTR_LINE_SPACING)
        ip = self.rtc.GetInsertionPoint()
        if self.rtc.GetStyle(ip, attr):
            r = rt.RichTextRange(ip, ip)
            if self.rtc.HasSelection():
                r = self.rtc.GetSelectionRange()

            attr.SetFlags(rt.TEXT_ATTR_LINE_SPACING)
            attr.SetLineSpacing(10)
            self.rtc.SetStyle(r, attr)
コード例 #20
0
    def OnIndentLess(self, evt):
        attr = rt.RichTextAttr()
        attr.SetFlags(wx.TEXT_ATTR_LEFT_INDENT)
        ip = self.ctrl_editeur.GetInsertionPoint()
        if self.ctrl_editeur.GetStyle(ip, attr):
            r = rt.RichTextRange(ip, ip)
            if self.ctrl_editeur.HasSelection():
                r = self.ctrl_editeur.GetSelectionRange()

        if attr.GetLeftIndent() >= 100:
            attr.SetLeftIndent(attr.GetLeftIndent() - 100)
            attr.SetFlags(wx.TEXT_ATTR_LEFT_INDENT)
            self.ctrl_editeur.SetStyle(r, attr)
コード例 #21
0
ファイル: CTRL_Editeur_email.py プロジェクト: CugeDe/Noethys
    def OnParagraphSpacingLess(self, evt):
        attr = rt.RichTextAttr()
        attr.SetFlags(wx.TEXT_ATTR_PARA_SPACING_AFTER)
        ip = self.ctrl_editeur.GetInsertionPoint()
        if self.ctrl_editeur.GetStyle(ip, attr):
            r = rt.RichTextRange(ip, ip)
            if self.ctrl_editeur.HasSelection():
                r = self.ctrl_editeur.GetSelectionRange()

            if attr.GetParagraphSpacingAfter() >= 20:
                attr.SetParagraphSpacingAfter(attr.GetParagraphSpacingAfter() - 20);
                attr.SetFlags(wx.TEXT_ATTR_PARA_SPACING_AFTER)
                self.ctrl_editeur.SetStyle(r, attr)
コード例 #22
0
    def __init__(self, parent, connection):
        BasePane.__init__(self,
                          parent,
                          connection,
                          style=wx.TE_AUTO_URL | wx.TE_READONLY
                          | wx.TE_NOHIDESEL | wx.TE_MULTILINE)

        # state toggles for ANSI processing
        self.intensity = ''
        self.conceal = self.inverse = False
        self.blink = self.fast_blink = False
        self.blink_timer = self.fast_blink_timer = False
        self.blink_chars = []
        self.fast_blink_chars = []

        self.initial_style = rtc.RichTextAttr()
        self.initial_style.SetLeftIndent(10, 50)  # TODO make this a pref?
        self.current_style = rtc.RichTextAttr(self.initial_style)

        self.is_scrolled_back = False

        # output filters can register themselves
        self.filters = [self.lm_localedit_filter]
        self.localedit_contents = None

        # "holding bin" for line-based filters to enqueue partial lines
        self.global_queue = ''

        # TODO - this probably should be a preference, but for now, this is the
        # least-bad default behavior.
        self.Bind(wx.EVT_SIZE, self.on_size)
        self.Bind(wx.EVT_SET_FOCUS, self.on_set_focus)
        self.Bind(wx.EVT_TEXT_URL, self.on_url_click)
        self.Bind(wx.EVT_SCROLLWIN, self.on_scroll)

        self.Bind(EVT_ROW_COL_CHANGED, self.on_row_col_changed)
コード例 #23
0
 def text_font(self, evt):
     "lettertype en/of grootte instellen"
     font = evt.GetFont()
     attr = rt.RichTextAttr()
     if font:
         if not self.HasSelection():
             # attr.SetFlags(wx.TEXT_ATTR_FONT)
             # attr.SetFont(font)
             # self.SetStyle(self.GetInsertionPoint(), attr)
             self.BeginFont(font)
         else:
             range = self.GetSelectionRange()
             attr.SetFlags(wx.TEXT_ATTR_FONT)
             attr.SetFont(font)
             self.SetStyle(range, attr)
     self.SetFocus()
コード例 #24
0
 def OnInsererURL(self, event):
     from Dlg import DLG_Saisie_url
     dlg = DLG_Saisie_url.MyDialog(self)
     if dlg.ShowModal() == wx.ID_OK:
         label = dlg.GetLabel()
         URL = dlg.GetURL()
         dlg.Destroy()
     else:
         dlg.Destroy()
         return
     urlStyle = rt.RichTextAttr()
     urlStyle.SetTextColour(wx.BLUE)
     urlStyle.SetFontUnderlined(True)
     self.ctrl_editeur.BeginStyle(urlStyle)
     self.ctrl_editeur.BeginURL(URL)
     self.ctrl_editeur.WriteText(label)
     self.ctrl_editeur.EndURL()
     self.ctrl_editeur.EndStyle()
コード例 #25
0
    def restyle_thyself(self):
        basic_style = rtc.RichTextAttr()
        self.theme = Theme.fetch()
        basic_style.SetTextColour(self.fg_colour)
        basic_style.SetBackgroundColour(self.bg_colour)

        self.SetBackgroundColour(self.bg_colour)
        self.SetBasicStyle(basic_style)
        self.basic_style = basic_style

        font = wx.Font(prefs.get('font'))
        self.SetFont(font)

        # set one-half character's worth of left / top margin
        font_width, font_height = self.font_size()
        # Apparently Centos' Wx doesn't have this, so commenting it out.
        #self.SetMargins((font_width / 2, -1))

        self.update_size()
コード例 #26
0
    def OnColour(self, evt):
        colourData = wx.ColourData()
        attr = rt.RichTextAttr()
        attr.SetFlags(wx.TEXT_ATTR_TEXT_COLOUR)
        if self.ctrl_texte.GetStyle(self.ctrl_texte.GetInsertionPoint(), attr):
            colourData.SetColour(attr.GetTextColour())

        dlg = wx.ColourDialog(self, colourData)
        if dlg.ShowModal() == wx.ID_OK:
            colourData = dlg.GetColourData()
            colour = colourData.GetColour()
            if colour:
                if not self.ctrl_texte.HasSelection():
                    self.ctrl_texte.BeginTextColour(colour)
                else:
                    r = self.ctrl_texte.GetSelectionRange()
                    attr.SetFlags(wx.TEXT_ATTR_TEXT_COLOUR)
                    attr.SetTextColour(colour)
                    self.ctrl_texte.SetStyle(r, attr)
        dlg.Destroy()
コード例 #27
0
    def show(self, result):
        self.result = result
        rtc = self.resultbox
        rtc.Freeze()
        rtc.Clear()

        rtc.BeginParagraphSpacing(0, 20)  # SPACING

        rtc.BeginAlignment(wx.TEXT_ALIGNMENT_CENTRE)  # ALIGNMENT
        rtc.BeginBold()  # BOLD

        rtc.BeginFontSize(14)  # FONT SIZE
        rtc.WriteText(result.title)
        rtc.EndFontSize()  # END FONT SIZE
        rtc.Newline()

        rtc.BeginItalic()  # ITALIC
        rtc.WriteText(result.breadcrumbs)
        rtc.EndItalic()  # END ITALIC

        rtc.Newline()
        rtc.EndBold()  # END BOLD

        urlStyle = rt.RichTextAttr()
        urlStyle.SetTextColour(wx.BLUE)
        urlStyle.SetFontUnderlined(True)

        self.urlbox.Clear()
        self.urlbox.BeginStyle(urlStyle)  # URL STYLE
        self.urlbox.BeginURL(result.url)  # URL
        self.urlbox.WriteText(result.url)
        self.urlbox.EndURL()  # END URL
        self.urlbox.EndStyle()  # END URL STYLE

        rtc.EndAlignment()  # END ALIGNMENT
        rtc.Newline()

        text = " ... ".join(result.snippets)
        rtc.WriteText(text)
        rtc.EndParagraphSpacing()  # END SPACING
        rtc.Thaw()
コード例 #28
0
    def Font(self):
        if not self.rtc.HasSelection():
            return

        r = self.rtc.GetSelectionRange()
        fontData = wx.FontData()
        fontData.EnableEffects(False)
        attr = rt.RichTextAttr()
        attr.SetFlags(wx.TEXT_ATTR_FONT)
        if self.rtc.GetStyle(self.rtc.GetInsertionPoint(), attr):
            fontData.SetInitialFont(attr.GetFont())

        dlg = wx.FontDialog(self, fontData)
        if dlg.ShowModal() == wx.ID_OK:
            fontData = dlg.GetFontData()
            font = fontData.GetChosenFont()
            if font:
                attr.SetFlags(wx.TEXT_ATTR_FONT)
                attr.SetFont(font)
                self.rtc.SetStyle(r, attr)
        dlg.Destroy()
コード例 #29
0
    def InsertURL(self):
        if not self.rtc.HasSelection():
            return

        r = self.rtc.GetSelectionRange()
        s = r.GetStart()
        e = r.GetEnd()

        t = self.rtc.GetRange(s, e)
        #        parse = urlparse(t)

        dlg = wx.TextEntryDialog(self, u"Adresse du lien", u'Insérer un lien')

        if is_valid_url(t):
            dlg.SetValue(t)
        else:
            dlg.SetValue(u"")

        if dlg.ShowModal() == wx.ID_OK:
            #            print parse(dlg.GetValue())
            #            if is_valid_url(dlg.GetValue()):
            #                print dlg.GetValue()
            urlStyle = rt.RichTextAttr()
            urlStyle.SetTextColour(wx.BLUE)
            urlStyle.SetFontUnderlined(True)
            urlStyle.SetFontSize(8)

            self.rtc.Delete(r)

            self.rtc.SetInsertionPoint(s)
            self.rtc.BeginStyle(urlStyle)
            self.rtc.BeginURL(dlg.GetValue())
            self.rtc.WriteText(t)
            self.rtc.EndURL()
            self.rtc.EndStyle()
        dlg.Destroy()
コード例 #30
0
    def __init__(self, *args, **kw):
        wx.Frame.__init__(self, *args, **kw)

        self.MakeMenuBar()
        self.MakeToolBar()
        self.CreateStatusBar()
        self.SetStatusText("Welcome to wx.richtext.RichTextCtrl!")

        self.rtc = rt.RichTextCtrl(self,
                                   style=wx.VSCROLL | wx.HSCROLL
                                   | wx.NO_BORDER)
        wx.CallAfter(self.rtc.SetFocus)

        self.rtc.Freeze()
        self.rtc.BeginSuppressUndo()

        self.rtc.BeginParagraphSpacing(0, 20)

        self.rtc.BeginAlignment(wx.TEXT_ALIGNMENT_CENTRE)
        self.rtc.BeginBold()

        self.rtc.BeginFontSize(14)
        self.rtc.WriteText(
            "Welcome to wxRichTextCtrl, a wxWidgets control for editing and presenting styled text and images"
        )
        self.rtc.EndFontSize()
        self.rtc.Newline()

        self.rtc.BeginItalic()
        self.rtc.WriteText("by Julian Smart")
        self.rtc.EndItalic()

        self.rtc.EndBold()

        self.rtc.Newline()
        self.rtc.WriteImage(images._rt_zebra.GetImage())

        self.rtc.EndAlignment()

        self.rtc.Newline()
        self.rtc.Newline()

        self.rtc.WriteText("What can you do with this thing? ")
        self.rtc.WriteImage(images._rt_smiley.GetImage())
        self.rtc.WriteText(" Well, you can change text ")

        self.rtc.BeginTextColour((255, 0, 0))
        self.rtc.WriteText("colour, like this red bit.")
        self.rtc.EndTextColour()

        self.rtc.BeginTextColour((0, 0, 255))
        self.rtc.WriteText(" And this blue bit.")
        self.rtc.EndTextColour()

        self.rtc.WriteText(" Naturally you can make things ")
        self.rtc.BeginBold()
        self.rtc.WriteText("bold ")
        self.rtc.EndBold()
        self.rtc.BeginItalic()
        self.rtc.WriteText("or italic ")
        self.rtc.EndItalic()
        self.rtc.BeginUnderline()
        self.rtc.WriteText("or underlined.")
        self.rtc.EndUnderline()

        self.rtc.BeginFontSize(14)
        self.rtc.WriteText(
            " Different font sizes on the same line is allowed, too.")
        self.rtc.EndFontSize()

        self.rtc.WriteText(" Next we'll show an indented paragraph.")

        self.rtc.BeginLeftIndent(60)
        self.rtc.Newline()

        self.rtc.WriteText(
            "It was in January, the most down-trodden month of an Edinburgh winter. An attractive woman came into the cafe, which is nothing remarkable."
        )
        self.rtc.EndLeftIndent()

        self.rtc.Newline()

        self.rtc.WriteText(
            "Next, we'll show a first-line indent, achieved using BeginLeftIndent(100, -40)."
        )

        self.rtc.BeginLeftIndent(100, -40)
        self.rtc.Newline()

        self.rtc.WriteText(
            "It was in January, the most down-trodden month of an Edinburgh winter. An attractive woman came into the cafe, which is nothing remarkable."
        )
        self.rtc.EndLeftIndent()

        self.rtc.Newline()

        self.rtc.WriteText(
            "Numbered bullets are possible, again using sub-indents:")

        self.rtc.BeginNumberedBullet(1, 100, 60)
        self.rtc.Newline()

        self.rtc.WriteText(
            "This is my first item. Note that wxRichTextCtrl doesn't automatically do numbering, but this will be added later."
        )
        self.rtc.EndNumberedBullet()

        self.rtc.BeginNumberedBullet(2, 100, 60)
        self.rtc.Newline()

        self.rtc.WriteText("This is my second item.")
        self.rtc.EndNumberedBullet()

        self.rtc.Newline()

        self.rtc.WriteText("The following paragraph is right-indented:")

        self.rtc.BeginRightIndent(200)
        self.rtc.Newline()

        self.rtc.WriteText(
            "It was in January, the most down-trodden month of an Edinburgh winter. An attractive woman came into the cafe, which is nothing remarkable."
        )
        self.rtc.EndRightIndent()

        self.rtc.Newline()

        self.rtc.WriteText(
            "The following paragraph is right-aligned with 1.5 line spacing:")

        self.rtc.BeginAlignment(wx.TEXT_ALIGNMENT_RIGHT)
        self.rtc.BeginLineSpacing(wx.TEXT_ATTR_LINE_SPACING_HALF)
        self.rtc.Newline()

        self.rtc.WriteText(
            "It was in January, the most down-trodden month of an Edinburgh winter. An attractive woman came into the cafe, which is nothing remarkable."
        )
        self.rtc.EndLineSpacing()
        self.rtc.EndAlignment()

        self.rtc.Newline()
        self.rtc.WriteText("Other notable features of wxRichTextCtrl include:")

        self.rtc.BeginSymbolBullet('*', 100, 60)
        self.rtc.Newline()
        self.rtc.WriteText("Compatibility with wxTextCtrl API")
        self.rtc.EndSymbolBullet()

        self.rtc.BeginSymbolBullet('*', 100, 60)
        self.rtc.Newline()
        self.rtc.WriteText(
            "Easy stack-based BeginXXX()...EndXXX() style setting in addition to SetStyle()"
        )
        self.rtc.EndSymbolBullet()

        self.rtc.BeginSymbolBullet('*', 100, 60)
        self.rtc.Newline()
        self.rtc.WriteText("XML loading and saving")
        self.rtc.EndSymbolBullet()

        self.rtc.BeginSymbolBullet('*', 100, 60)
        self.rtc.Newline()
        self.rtc.WriteText(
            "Undo/Redo, with batching option and Undo suppressing")
        self.rtc.EndSymbolBullet()

        self.rtc.BeginSymbolBullet('*', 100, 60)
        self.rtc.Newline()
        self.rtc.WriteText("Clipboard copy and paste")
        self.rtc.EndSymbolBullet()

        self.rtc.BeginSymbolBullet('*', 100, 60)
        self.rtc.Newline()
        self.rtc.WriteText(
            "wxRichTextStyleSheet with named character and paragraph styles, and control for applying named styles"
        )
        self.rtc.EndSymbolBullet()

        self.rtc.BeginSymbolBullet('*', 100, 60)
        self.rtc.Newline()
        self.rtc.WriteText(
            "A design that can easily be extended to other content types, ultimately with text boxes, tables, controls, and so on"
        )
        self.rtc.EndSymbolBullet()

        self.rtc.Newline()

        self.rtc.WriteText(
            "Note: this sample content was generated programmatically from within the MyFrame constructor in the demo. The images were loaded from inline XPMs. Enjoy wxRichTextCtrl!"
        )

        self.rtc.Newline()
        self.rtc.Newline()
        self.rtc.BeginFontSize(12)
        self.rtc.BeginBold()
        self.rtc.WriteText("Additional comments by David Woods:")
        self.rtc.EndBold()
        self.rtc.EndFontSize()
        self.rtc.Newline()
        self.rtc.WriteText(
            "I find some of the RichTextCtrl method names, as used above, to be misleading.  Some character styles are stacked in the RichTextCtrl, and they are removed in the reverse order from how they are added, regardless of the method called.  Allow me to demonstrate what I mean."
        )
        self.rtc.Newline()

        self.rtc.WriteText('Start with plain text. ')
        self.rtc.BeginBold()
        self.rtc.WriteText('BeginBold() makes it bold. ')
        self.rtc.BeginItalic()
        self.rtc.WriteText('BeginItalic() makes it bold-italic. ')
        self.rtc.EndBold()
        self.rtc.WriteText(
            'EndBold() should make it italic but instead makes it bold. ')
        self.rtc.EndItalic()
        self.rtc.WriteText('EndItalic() takes us back to plain text. ')
        self.rtc.Newline()

        self.rtc.WriteText('Start with plain text. ')
        self.rtc.BeginBold()
        self.rtc.WriteText('BeginBold() makes it bold. ')
        self.rtc.BeginUnderline()
        self.rtc.WriteText('BeginUnderline() makes it bold-underline. ')
        self.rtc.EndBold()
        self.rtc.WriteText(
            'EndBold() should make it underline but instead makes it bold. ')
        self.rtc.EndUnderline()
        self.rtc.WriteText('EndUnderline() takes us back to plain text. ')
        self.rtc.Newline()

        self.rtc.WriteText(
            'According to Julian, this functions "as expected" because of the way the RichTextCtrl is written.  I wrote the SetFontStyle() method here to demonstrate a way to work with overlapping styles that solves this problem.'
        )
        self.rtc.Newline()

        # Create and initialize text attributes
        self.textAttr = rt.RichTextAttr()
        self.SetFontStyle(fontColor=wx.Colour(0, 0, 0),
                          fontBgColor=wx.Colour(255, 255, 255),
                          fontFace='Times New Roman',
                          fontSize=10,
                          fontBold=False,
                          fontItalic=False,
                          fontUnderline=False)
        self.rtc.WriteText('Start with plain text. ')
        self.SetFontStyle(fontBold=True)
        self.rtc.WriteText('Bold. ')
        self.SetFontStyle(fontItalic=True)
        self.rtc.WriteText('Bold-italic. ')
        self.SetFontStyle(fontBold=False)
        self.rtc.WriteText('Italic. ')
        self.SetFontStyle(fontItalic=False)
        self.rtc.WriteText('Back to plain text. ')
        self.rtc.Newline()

        self.rtc.WriteText('Start with plain text. ')
        self.SetFontStyle(fontBold=True)
        self.rtc.WriteText('Bold. ')
        self.SetFontStyle(fontUnderline=True)
        self.rtc.WriteText('Bold-Underline. ')
        self.SetFontStyle(fontBold=False)
        self.rtc.WriteText('Underline. ')
        self.SetFontStyle(fontUnderline=False)
        self.rtc.WriteText('Back to plain text. ')
        self.rtc.Newline()
        self.rtc.EndParagraphSpacing()

        self.rtc.EndSuppressUndo()
        self.rtc.Thaw()