Beispiel #1
0
 def generate_panel(self, mm):
     if mm.fullname() in self.panels and not mm.always_new_panel:
         self.update_panel_label(mm)
     else:
         self.panels[mm.fullname()] = (ScrolledEditListPanel(self.p1,
                                                             list=mm.panel1_param(),
                                                             tip=mm.panel1_tip()),
                                       EditListPanel(self.p2, list=mm.panel2_param(),
                                                     tip=mm.panel2_tip()),
                                       EditListPanel(self.p3, list=mm.panel3_param(),
                                                     tip=mm.panel3_tip()),
                                       EditListPanel(self.p4, list=mm.panel4_param(),
                                                     tip=mm.panel4_tip()),)
Beispiel #2
0
    def __init__(self, parent):
        super(section_editor, self).__init__(parent)

        self.area = []
        self.rect = []

        self.use_def_margin = []
        self.area_hit = None
        self.page_margin = [0, 0, 0, 0]
        self.nomargin = False

        notebook = wx.Notebook(self)

        #nb1=wx.Panel(notebook)
        nb1 = SP(notebook)
        nb1.SetScrollRate(0, 5)
        self.nb1 = nb1
        notebook.AddPage(nb1, "Section")
        pansizer = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(pansizer)
        pansizer.Add(notebook, 1, wx.ALL | wx.EXPAND, 0)

        minisizer = wx.BoxSizer(wx.VERTICAL)
        nb1.SetSizer(minisizer)
        self.st1 = wx.StaticText(nb1, label="Axis Margin")
        self.sl_margin = MarginWidget(nb1)
        minisizer.Add(self.st1, 0, wx.ALL, 2)
        minisizer.Add(self.sl_margin, 0, wx.ALL | wx.EXPAND | wx.ALIGN_CENTER,
                      1)
        self.st2 = wx.StaticText(nb1, label="Page Margin ")
        self.sl_marginp = MarginpWidget(nb1)
        minisizer.Add(self.st2, 0, wx.ALL, 2)
        minisizer.Add(self.sl_marginp, 0, wx.ALL | wx.EXPAND | wx.ALIGN_CENTER,
                      1)
        #       bt = wx.Button(nb1, wx.ID_ANY, 'Reset Common Axis')
        #       minisizer.Add(bt, 0, wx.ALL, 1)
        #       bt.Bind(wx.EVT_BUTTON, self.onResetCommonAxis)

        #    pansizer.SetSizeHints(self.canvas)

        s_fontsize = {
            "style":
            wx.TE_PROCESS_ENTER,
            "choices": [
                "7", "8", "9", "10", "11", "12", "14", "16", "18", "20", "22",
                "24", "26", "28", "36", "48", "72"
            ]
        }
        s_boxwidth = {
            "style": wx.TE_PROCESS_ENTER,
            "choices": ["0.5", "1.0", "1.5", "2.0", "2.5"]
        }
        list = [
            ("title", '', 115, {}),
            #                ("size", "14", 104, s_fontsize),
            ("bg color", 'red', 6, {}),
            (None, "default size", 102, {}),
            ("title", "14", 104, s_fontsize),
            ("tick label", "12", 104, s_fontsize),
            ("axis title", "12", 104, s_fontsize),
            ("axis width", "1.0", 104, s_boxwidth),
            ("tick width", "1.0", 104, s_boxwidth)
        ]
        self.elp = ScrolledEditListPanel(notebook, list)
        notebook.AddPage(self.elp, "title/size")

        s1 = {
            "style": wx.CB_READONLY,
            "choices":
            ["serif", "sans-serif", "cursive", "fantasy", "monospace"]
        }
        s2 = {
            "style":
            wx.CB_READONLY,
            "choices": [
                "ultralight", "light", "normal", "regular", "book", "medium",
                "roman", "semibold", "demibold", "demi", "bold", "heavy",
                "extra bold", "black"
            ]
        }
        s3 = {
            "style": wx.CB_READONLY,
            "choices": ["normal", "italic", "oblique"]
        }
        l = [
            (None, "axis", 102, {}),
            ("font", "serif", 4, s1),
            ("weight", "roman", 4, s2),
            ("style", "normal", 4, s3),
            (None, "title", 102, {}),
            ("font", "serif", 4, s1),
            ("weight", "roman", 4, s2),
            ("style", "normal", 4, s3),
        ]

        self.elp2 = ScrolledEditListPanel(notebook, l)
        notebook.AddPage(self.elp2, "font")

        self.Bind(EDITLIST_CHANGED, self.onEL_Changed)
        #       self.elp2.Bind(EDITLIST_CHANGED, self.onEL_Changed2)

        self.events = wx.EVT_BUTTON
        self.Hide()
        self.parent = parent
        self.Fit()
        self._load_canvas_value()
Beispiel #3
0
class section_editor(wx.Panel):
    def __init__(self, parent):
        super(section_editor, self).__init__(parent)

        self.area = []
        self.rect = []

        self.use_def_margin = []
        self.area_hit = None
        self.page_margin = [0, 0, 0, 0]
        self.nomargin = False

        notebook = wx.Notebook(self)

        #nb1=wx.Panel(notebook)
        nb1 = SP(notebook)
        nb1.SetScrollRate(0, 5)
        self.nb1 = nb1
        notebook.AddPage(nb1, "Section")
        pansizer = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(pansizer)
        pansizer.Add(notebook, 1, wx.ALL | wx.EXPAND, 0)

        minisizer = wx.BoxSizer(wx.VERTICAL)
        nb1.SetSizer(minisizer)
        self.st1 = wx.StaticText(nb1, label="Axis Margin")
        self.sl_margin = MarginWidget(nb1)
        minisizer.Add(self.st1, 0, wx.ALL, 2)
        minisizer.Add(self.sl_margin, 0, wx.ALL | wx.EXPAND | wx.ALIGN_CENTER,
                      1)
        self.st2 = wx.StaticText(nb1, label="Page Margin ")
        self.sl_marginp = MarginpWidget(nb1)
        minisizer.Add(self.st2, 0, wx.ALL, 2)
        minisizer.Add(self.sl_marginp, 0, wx.ALL | wx.EXPAND | wx.ALIGN_CENTER,
                      1)
        #       bt = wx.Button(nb1, wx.ID_ANY, 'Reset Common Axis')
        #       minisizer.Add(bt, 0, wx.ALL, 1)
        #       bt.Bind(wx.EVT_BUTTON, self.onResetCommonAxis)

        #    pansizer.SetSizeHints(self.canvas)

        s_fontsize = {
            "style":
            wx.TE_PROCESS_ENTER,
            "choices": [
                "7", "8", "9", "10", "11", "12", "14", "16", "18", "20", "22",
                "24", "26", "28", "36", "48", "72"
            ]
        }
        s_boxwidth = {
            "style": wx.TE_PROCESS_ENTER,
            "choices": ["0.5", "1.0", "1.5", "2.0", "2.5"]
        }
        list = [
            ("title", '', 115, {}),
            #                ("size", "14", 104, s_fontsize),
            ("bg color", 'red', 6, {}),
            (None, "default size", 102, {}),
            ("title", "14", 104, s_fontsize),
            ("tick label", "12", 104, s_fontsize),
            ("axis title", "12", 104, s_fontsize),
            ("axis width", "1.0", 104, s_boxwidth),
            ("tick width", "1.0", 104, s_boxwidth)
        ]
        self.elp = ScrolledEditListPanel(notebook, list)
        notebook.AddPage(self.elp, "title/size")

        s1 = {
            "style": wx.CB_READONLY,
            "choices":
            ["serif", "sans-serif", "cursive", "fantasy", "monospace"]
        }
        s2 = {
            "style":
            wx.CB_READONLY,
            "choices": [
                "ultralight", "light", "normal", "regular", "book", "medium",
                "roman", "semibold", "demibold", "demi", "bold", "heavy",
                "extra bold", "black"
            ]
        }
        s3 = {
            "style": wx.CB_READONLY,
            "choices": ["normal", "italic", "oblique"]
        }
        l = [
            (None, "axis", 102, {}),
            ("font", "serif", 4, s1),
            ("weight", "roman", 4, s2),
            ("style", "normal", 4, s3),
            (None, "title", 102, {}),
            ("font", "serif", 4, s1),
            ("weight", "roman", 4, s2),
            ("style", "normal", 4, s3),
        ]

        self.elp2 = ScrolledEditListPanel(notebook, l)
        notebook.AddPage(self.elp2, "font")

        self.Bind(EDITLIST_CHANGED, self.onEL_Changed)
        #       self.elp2.Bind(EDITLIST_CHANGED, self.onEL_Changed2)

        self.events = wx.EVT_BUTTON
        self.Hide()
        self.parent = parent
        self.Fit()
        self._load_canvas_value()

    def _load_canvas_value(self):
        ifig_canvas = self.parent.get_canvas()
        if ifig_canvas is None:
            # if property edtior is not linked...
            return

        fig = ifig_canvas.get_figure()
        f_page = fig.figobj

        self.area = []
        self.rect = []
        self.use_def_margin = []
        self.margin = []
        self.def_margin = f_page.getp("def_margin")
        self.page_margin = f_page._page_margin[:]
        self.nomargin = f_page.get_nomargin()
        #       print  f_page.get_children()
        for name, f_axes in f_page.get_children():
            if not isinstance(f_axes, FigAxes): continue
            area = f_axes.get_area()
            self.area.append(area)
            r1, c1, m1 = f_axes.calc_rect(ignore_pagemargin=True)
            self.rect.append(r1)
            self.margin.append(m1)
            self.use_def_margin.append(c1)
        if self.area_hit == None:
            if len(self.area) != 0:
                self.area_hit = self.area[0]

    def SetCanvasValue(self, axes=None, request=None, ac=None, name='area'):
        ifig_canvas = self.parent.get_canvas()
        if request is None:
            ifig_canvas.set_area(self.area)
        else:
            fig_page = ifig_canvas._figure.figobj
            if ac is None: ac = []
            for mode, idx, value in request:
                if mode == 'm':  #modify
                    fig_axes = fig_page.get_axes(idx)
                    ac.append(
                        UndoRedoFigobjMethod(fig_axes._artists[0], 'area',
                                             value))
                elif mode == 'a':  # add
                    iax = fig_page.add_axes(area=value)
                    ax = fig_page.get_axes(iax)
                    ax.realize()
                    sel = [weakref.ref(ax._artists[0])]
                    ac.append(UndoRedoAddRemoveArtists(artists=sel, mode=0))
                elif mode == 'd':  # delete
                    fig_axes = fig_page.get_axes(idx)
                    sel = [weakref.ref(a) for a in fig_axes._artists]
                    ac.append(UndoRedoAddRemoveArtists(artists=sel, mode=1))

            window = self.GetTopLevelParent()
            GlobalHistory().get_history(window).make_entry(ac, menu_name=name)

        ifig_canvas.draw()

    def set_margin_show(self, value):
        if value:
            self.sl_margin.Enable()
            self.sl_marginp.Enable()
            self.st1.Enable()
            self.st2.Enable()
        else:
            self.sl_margin.Disable()
            self.sl_marginp.Disable()
            self.st1.Disable()
            self.st2.Disable()

    def SetEditorValue(self, axes=None):
        self._load_canvas_value()
        ifig_canvas = self.parent.get_canvas()
        if ifig_canvas is None:
            # if property edtior is not linked...
            return
        if (self.area_hit is not None):
            self.nb1.Enable(True)
            if self.area_hit in self.area:
                idx = self.area.index(self.area_hit)
                use_def = self.use_def_margin[idx]
                if use_def:
                    m = self.def_margin
                else:
                    m = self.margin[idx]
            else:
                idx = -1

            if self.nomargin:
                self.set_margin_show(False)
            else:
                self.set_margin_show(True)
                if idx > -1: self.sl_margin.SetEditorValue(use_def, m)
                self.sl_marginp.SetEditorValue(self.page_margin)
        else:
            self.nb1.Enable(False)

        fig = ifig_canvas.get_figure()
        value = self.elp.GetValue()
        value[0] = fig.figobj.get_suptitle_labelinfo()
        #       value[1] = fig.figobj.get_suptitle_size()
        value[1] = fig.get_facecolor()
        value[3] = fig.figobj.getp("title_size")
        value[4] = fig.figobj.getp("ticklabel_size")
        value[5] = fig.figobj.getp("axeslabel_size")
        value[6] = fig.figobj.getp("axesbox_width")
        value[7] = fig.figobj.getp("axestick_width")
        self.elp.SetValue(value)
        value = self.elp2.GetValue()
        value[1] = fig.figobj.getp("tick_font")
        value[2] = fig.figobj.getp("tick_weight")
        value[3] = fig.figobj.getp("tick_style")
        value[5] = fig.figobj.getp("title_font")
        value[6] = fig.figobj.getp("title_weight")
        value[7] = fig.figobj.getp("title_style")

        self.elp2.SetValue(value)

    def update_panel(self):
        #       dprint1('update panel')
        self.SetEditorValue()
        return
        self._load_canvas_value()
        if self.nomargin:
            self.set_margin_show(False)
        else:
            self.set_margin_show(True)

        self.draw()

    def onTD_Selection(self, evt):
        if self.IsShown():
            td = evt.GetTreeDict()
            if isinstance(td, FigAxes):
                ax = td
            elif isinstance(td.get_parent(), FigAxes):
                ax = td.get_parent()
            else:
                return
            area = ax.getp("area")
            self.area_hit = area
            self.SetEditorValue()
#          print "do something on section editor (selection)", td, evt.selections

    def onTD_ShowPage(self, evt):
        if self.IsShown():
            td = evt.GetTreeDict()
            self.area_hit = None
            self.SetEditorValue()
#           "do something on section editor (showpage)", td, evt

    def onEL_Changed(self, evt):
        ifig_canvas = self.parent.get_canvas()
        fig = ifig_canvas.get_figure()

        menu_name = 'page property'
        if evt.elp == self.elp:
            value = self.elp.GetValue()
            v = value[evt.widget_idx]
            if evt.widget_idx == 1:
                action = UndoRedoArtistProperty(fig, "facecolor", v)
                menu_name = 'background color'
            elif evt.widget_idx == 0:
                action = UndoRedoFigobjMethod(fig, "suptitle_labelinfo", v)
                menu_name = 'suptitle'

#               fig.figobj.set_suptitle(str(v))
            elif evt.widget_idx == 1:
                action = UndoRedoFigobjMethod(fig, "suptitle_size", float(v))
                menu_name = 'suptitle size'

#               fig.figobj.set_suptitle_size(float(v))
            elif evt.widget_idx == 3:
                action = UndoRedoFigobjProperty(fig,
                                                "title_size",
                                                float(v),
                                                nodelete=True)
                menu_name = 'title size'
            elif evt.widget_idx == 4:
                action = UndoRedoFigobjProperty(fig,
                                                "ticklabel_size",
                                                float(v),
                                                nodelete=True)
                menu_name = 'tick label size'
            elif evt.widget_idx == 5:
                action = UndoRedoFigobjProperty(fig,
                                                "axeslabel_size",
                                                float(v),
                                                nodelete=True)
                menu_name = 'axes label size'
            elif evt.widget_idx == 6:
                action = UndoRedoFigobjProperty(fig,
                                                "axesbox_width",
                                                float(v),
                                                nodelete=True)
                menu_name = 'axes box width'
            elif evt.widget_idx == 7:
                action = UndoRedoFigobjProperty(fig,
                                                "axestick_width",
                                                float(v),
                                                nodelete=True)
                menu_name = 'axes tick width'

#               fig.figobj.setp("axestick_width", float(v))
        elif evt.elp == self.elp2:
            value = self.elp2.GetValue()
            v = value[evt.widget_idx]
            if evt.widget_idx == 1:
                action = UndoRedoFigobjProperty(fig,
                                                "tick_font",
                                                str(v),
                                                nodelete=True)
                menu_name = 'tick font'
            elif evt.widget_idx == 2:
                action = UndoRedoFigobjProperty(fig,
                                                "tick_weight",
                                                str(v),
                                                nodelete=True)
                menu_name = 'tick weight'
            elif evt.widget_idx == 3:
                action = UndoRedoFigobjProperty(fig,
                                                "tick_style",
                                                str(v),
                                                nodelete=True)
                menu_name = 'tick style'
            elif evt.widget_idx == 5:
                action = UndoRedoFigobjProperty(fig,
                                                "title_font",
                                                str(v),
                                                nodelete=True)
                menu_name = 'title font'
            elif evt.widget_idx == 6:
                action = UndoRedoFigobjProperty(fig,
                                                "title_weight",
                                                str(v),
                                                nodelete=True)
                menu_name = 'title weight'
            elif evt.widget_idx == 7:
                action = UndoRedoFigobjProperty(fig,
                                                "title_style",
                                                str(v),
                                                nodelete=True)
                menu_name = 'title style'

        window = ifig_canvas.GetTopLevelParent()
        hist = GlobalHistory().get_history(window)
        hist.make_entry([action], menu_name=menu_name, draw_request='draw_all')


#       ifig_canvas.draw_all()

    def onTD_Replace(self, evt):
        pass