summaryrefslogtreecommitdiff
path: root/lib/gui/simulator/view_panel.py
blob: cdcd52ee572e4f6780d04b93117c413f21571a21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# Authors: see git history
#
# Copyright (c) 2024 Authors
# Licensed under the GNU GPL version 3.0 or later.  See the file LICENSE for details.
import wx
from wx.lib.scrolledpanel import ScrolledPanel

from ...debug.debug import debug
from ...i18n import _
from . import SimulatorPreferenceDialog


class ViewPanel(ScrolledPanel):
    """"""

    @debug.time
    def __init__(self, parent, detach_callback):
        """"""
        self.parent = parent
        self.detach_callback = detach_callback
        ScrolledPanel.__init__(self, parent)
        self.SetupScrolling(scroll_y=True, scroll_x=False)

        self.button_style = wx.BU_EXACTFIT | wx.BU_NOTEXT

        self.control_panel = parent.cp

        self.btnNpp = wx.BitmapToggleButton(self, -1, style=self.button_style)
        self.btnNpp.Bind(wx.EVT_TOGGLEBUTTON, self.toggle_npp)
        self.btnNpp.SetBitmap(self.control_panel.load_icon('npp'))
        self.btnNpp.SetToolTip(_('Display needle penetration point (O)'))
        self.btnJump = wx.BitmapToggleButton(self, -1, style=self.button_style)
        self.btnJump.SetToolTip(_('Show jump stitches'))
        self.btnJump.SetBitmap(self.control_panel.load_icon('jump'))
        self.btnJump.Bind(wx.EVT_TOGGLEBUTTON, lambda event: self.on_marker_button('jump', event))
        self.btnTrim = wx.BitmapToggleButton(self, -1, style=self.button_style)
        self.btnTrim.SetToolTip(_('Show trims'))
        self.btnTrim.SetBitmap(self.control_panel.load_icon('trim'))
        self.btnTrim.Bind(wx.EVT_TOGGLEBUTTON, lambda event: self.on_marker_button('trim', event))
        self.btnStop = wx.BitmapToggleButton(self, -1, style=self.button_style)
        self.btnStop.SetToolTip(_('Show stops'))
        self.btnStop.SetBitmap(self.control_panel.load_icon('stop'))
        self.btnStop.Bind(wx.EVT_TOGGLEBUTTON, lambda event: self.on_marker_button('stop', event))
        self.btnColorChange = wx.BitmapToggleButton(self, -1, style=self.button_style)
        self.btnColorChange.SetToolTip(_('Show color changes'))
        self.btnColorChange.SetBitmap(self.control_panel.load_icon('color_change'))
        self.btnColorChange.Bind(wx.EVT_TOGGLEBUTTON, lambda event: self.on_marker_button('color_change', event))

        self.btnBackgroundColor = wx.ColourPickerCtrl(self, -1, colour='white', size=((40, -1)))
        self.btnBackgroundColor.SetToolTip(_("Change background color"))
        self.btnBackgroundColor.Bind(wx.EVT_COLOURPICKER_CHANGED, self.on_update_background_color)

        self.btnSettings = wx.BitmapButton(self, -1, style=self.button_style)
        self.btnSettings.SetToolTip(_('Open settings dialog'))
        self.btnSettings.SetBitmap(self.control_panel.load_icon('settings'))
        self.btnSettings.Bind(wx.EVT_BUTTON, self.on_settings_button)

        if self.detach_callback:
            self.btnDetachSimulator = wx.BitmapButton(self, -1, style=self.button_style)
            self.btnDetachSimulator.SetToolTip(_('Detach/attach simulator window'))
            self.btnDetachSimulator.SetBitmap(self.control_panel.load_icon('detach_window'))
            self.btnDetachSimulator.Bind(wx.EVT_BUTTON, lambda event: self.control_panel.detach_callback())

        outer_sizer = wx.BoxSizer(wx.VERTICAL)

        show_sizer = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, _("Show")), wx.VERTICAL)
        show_inner_sizer = wx.BoxSizer(wx.VERTICAL)
        show_inner_sizer.Add(self.btnNpp, 0, wx.ALL, 2)
        show_inner_sizer.Add(self.btnJump, 0, wx.ALL, 2)
        show_inner_sizer.Add(self.btnTrim, 0, wx.ALL, 2)
        show_inner_sizer.Add(self.btnStop, 0, wx.ALL, 2)
        show_inner_sizer.Add(self.btnColorChange, 0, wx.ALL, 2)
        show_sizer.Add(0, 2, 0)
        show_sizer.Add(show_inner_sizer, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 2)
        show_sizer.Add(0, 2, 0)
        outer_sizer.Add(show_sizer)
        outer_sizer.Add(0, 10, 0)

        settings_sizer = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, _("Settings")), wx.VERTICAL)
        settings_inner_sizer = wx.BoxSizer(wx.VERTICAL)
        settings_inner_sizer.Add(self.btnBackgroundColor, 0, wx.EXPAND | wx.ALL, 2)
        settings_inner_sizer.Add(self.btnSettings, 0, wx.EXPAND | wx.ALL, 2)
        if self.detach_callback:
            settings_inner_sizer.Add(self.btnDetachSimulator, 0, wx.ALL, 2)
        settings_sizer.Add(0, 2, 0)
        settings_sizer.Add(settings_inner_sizer, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 2)
        settings_sizer.Add(0, 2, 0)
        outer_sizer.Add(settings_sizer)

        self.SetSizerAndFit(outer_sizer)

    def set_drawing_panel(self, drawing_panel):
        self.drawing_panel = drawing_panel

    def on_update_background_color(self, event):
        self.set_background_color(event.Colour)

    def set_background_color(self, color):
        self.btnBackgroundColor.SetColour(color)
        self.drawing_panel.SetBackgroundColour(color)
        self.drawing_panel.Refresh()

    def on_toggle_npp_shortcut(self, event):
        self.btnNpp.SetValue(not self.btnNpp.GetValue())
        self.toggle_npp(event)

    def toggle_npp(self, event):
        self.drawing_panel.Refresh()

    def on_marker_button(self, marker_type, event):
        self.control_panel.slider.enable_marker_list(marker_type, event.GetEventObject().GetValue())
        if marker_type == 'jump':
            self.drawing_panel.Refresh()

    def on_settings_button(self, event):
        simulator_panel = SimulatorPreferenceDialog(self, title=_('Simulator Preferences'))
        simulator_panel.Show()