From 3131e38afdea2019756b79ac2e7be2c449a08d4f Mon Sep 17 00:00:00 2001 From: daid303 Date: Thu, 11 Apr 2013 10:19:43 +0200 Subject: [PATCH] Add notification popup. --- Cura/gui/mainWindow.py | 7 ++-- Cura/gui/sceneView.py | 4 ++- Cura/gui/util/openglGui.py | 51 ++++++++++++++++++++++++++-- Cura/resources/images/glButtons.png | Bin 72606 -> 74570 bytes 4 files changed, 56 insertions(+), 6 deletions(-) diff --git a/Cura/gui/mainWindow.py b/Cura/gui/mainWindow.py index 36102017..e8629500 100644 --- a/Cura/gui/mainWindow.py +++ b/Cura/gui/mainWindow.py @@ -449,14 +449,17 @@ class normalSettingsPanel(configBase.configPanelBase): #Plugin page self.pluginPanel = pluginPanel.pluginPanel(self.nb) - if len(self.pluginPanel.pluginList) > 0: + if len(self.pluginPanel.pluginList) > 0 and False: self.nb.AddPage(self.pluginPanel, "Plugins") else: self.pluginPanel.Show(False) #Alteration page self.alterationPanel = alterationPanel.alterationPanel(self.nb) - self.nb.AddPage(self.alterationPanel, "Start/End-GCode") + if False: + self.nb.AddPage(self.alterationPanel, "Start/End-GCode") + else: + self.alterationPanel.Show(False) self.Bind(wx.EVT_SIZE, self.OnSize) diff --git a/Cura/gui/sceneView.py b/Cura/gui/sceneView.py index 9dea6ff4..eb5e2cf0 100644 --- a/Cura/gui/sceneView.py +++ b/Cura/gui/sceneView.py @@ -91,6 +91,8 @@ class SceneView(openglGui.glGuiPanel): openglGui.glLabel(self.scaleForm, 'Uniform scale', (0,8)) self.scaleUniform = openglGui.glCheckbox(self.scaleForm, True, (1,8), None) + self.notification = openglGui.glNotification(self, (0, 0)) + self._slicer = sliceEngine.Slicer(self._updateSliceProgress) self._sceneUpdateTimer = wx.Timer(self) self.Bind(wx.EVT_TIMER, lambda e : self._slicer.runSlicer(self._scene), self._sceneUpdateTimer) @@ -167,7 +169,7 @@ class SceneView(openglGui.glGuiPanel): def OnLayFlat(self, button): if self._selectedObj is None: return - pass + / pass def OnScaleReset(self, button): if self._selectedObj is None: diff --git a/Cura/gui/util/openglGui.py b/Cura/gui/util/openglGui.py index 2b1ddd3f..f5223113 100644 --- a/Cura/gui/util/openglGui.py +++ b/Cura/gui/util/openglGui.py @@ -251,6 +251,7 @@ class glGuiPanel(glcanvas.GLCanvas): glLoadIdentity() self._container.draw() + glBindTexture(GL_TEXTURE_2D, self._glRobotTexture) glEnable(GL_TEXTURE_2D) glPushMatrix() @@ -367,7 +368,8 @@ class glGuiLayoutGrid(object): return self._size class glButton(glGuiControl): - def __init__(self, parent, imageID, tooltip, pos, callback): + def __init__(self, parent, imageID, tooltip, pos, callback, size = None): + self._buttonSize = size super(glButton, self).__init__(parent, pos) self._tooltip = tooltip self._parent = parent @@ -399,6 +401,8 @@ class glButton(glGuiControl): return self._selected def getMinSize(self): + if self._buttonSize is not None: + return self._buttonSize, self._buttonSize return self._base._buttonSize, self._base._buttonSize def _getPixelPos(self): @@ -411,7 +415,7 @@ class glButton(glGuiControl): cx = (self._imageID % 4) / 4 cy = int(self._imageID / 4) / 4 - bs = self._base._buttonSize + bs = self.getMinSize()[0] pos = self._getPixelPos() glBindTexture(GL_TEXTURE_2D, self._base._glButtonsTexture) @@ -610,7 +614,7 @@ class glFrame(glGuiContainer): size = self._layout.getLayoutSize() glColor4ub(255,255,255,255) - opengl.glDrawStretchedQuad(pos[0], pos[1], size[0], size[1], bs/2, 0) + opengl.glDrawStretchedQuad(pos[0], pos[1], size[0], size[1], bs*0.75, 0) #Draw the controls on the frame super(glFrame, self).draw() @@ -635,11 +639,52 @@ class glFrame(glGuiContainer): return True return False +class glNotification(glFrame): + def __init__(self, parent, pos): + self._anim = None + super(glNotification, self).__init__(parent, pos) + glGuiLayoutGrid(self)._alignBottom = False + self._label = glLabel(self, "Notification", (0, 0)) + self._button = glButton(self, 30, "", (1, 0), self.onClose, 25) + self._padding = glLabel(self, "", (0, 1)) + self.setHidden(True) + + def setSize(self, x, y, w, h): + w, h = self._layout.getLayoutSize() + baseSize = self._base.GetSizeTuple() + if self._anim is not None: + super(glNotification, self).setSize(baseSize[0] / 2 - w / 2, baseSize[1] - self._anim.getPosition() - self._base._buttonSize * 0.2, 1, 1) + else: + super(glNotification, self).setSize(baseSize[0] / 2 - w / 2, baseSize[1] - self._base._buttonSize * 0.2, 1, 1) + + def draw(self): + self.setSize(0,0,0,0) + self.updateLayout() + super(glNotification, self).draw() + + def message(self, text): + if self._anim is not None: + self._anim = animation(self._base, self._anim.getPosition(), 25, 1) + else: + self._anim = animation(self._base, -20, 25, 1) + self.setHidden(False) + self._label.setLabel(text) + self.updateLayout() + + def onClose(self, button): + if self._anim is not None: + self._anim = animation(self._base, self._anim.getPosition(), -20, 1) + else: + self._anim = animation(self._base, 25, -20, 1) + class glLabel(glGuiControl): def __init__(self, parent, label, pos): self._label = label super(glLabel, self).__init__(parent, pos) + def setLabel(self, label): + self._label = label + def getMinSize(self): w, h = opengl.glGetStringSize(self._label) return w + 10, h + 4 diff --git a/Cura/resources/images/glButtons.png b/Cura/resources/images/glButtons.png index de4ac15c90df95e9db41c6a1e5e5810c24f8ae3d..96b7373db337a848ed25c828fe7c92bd50f121c8 100644 GIT binary patch delta 12788 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 N@z7D*TAP3i{|8xn5}*J8 -- 2.30.2