Skip to content
This repository was archived by the owner on Sep 25, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 49 additions & 11 deletions components/geometry/base/geom_modes.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@
import suit.core.render.engine as render_engine
import geom_controls

from Tkinter import *

class GeometryEditMode(BaseEditMode):

# states
Expand All @@ -53,9 +55,9 @@ class GeometryEditMode(BaseEditMode):
ES_CircleCreate, \
ES_LengthChange, \
ES_SquareChange, \
ES_PerimeterChange, \
ES_PerimeterChange,\
ES_Count = range(BaseEditMode.ES_Count + 1, BaseEditMode.ES_Count + 8)

def __init__(self, _logic):
BaseEditMode.__init__(self, _logic, "Geometry edit")

Expand Down Expand Up @@ -340,26 +342,33 @@ def _onKeyPressed(self, _evt):
if isinstance(selected[0], selected[1].__class__):
selected[0].setEqualTo(selected[1])
if self.objectInfoPanel.getObject() is selected[0] or self.objectInfoPanel.getObject() is selected[1]:
self.objectInfoPanel.update()
self.objectInfoPanel.update()

if key == ois.KC_S:
selected = self._logic._getSheet().getSelected()
if len(selected) == 1:
obj = selected[0]
if isinstance(obj, (GeometryCircle, GeometryTriangle, GeometryQuadrangle)):
self.state = GeometryEditMode.ES_SquareChange
self.square_changer = TextInput(obj, self._square_change_callback, obj.getPropertyValue(GeometryAbstractObject.PropSquare))

if key == ois.KC_P:
selected = self._logic._getSheet().getSelected()
if len(selected) == 1:
obj = selected[0]
if isinstance(obj, (GeometryTriangle, GeometryQuadrangle)):
self.state = GeometryEditMode.ES_PerimeterChange
self.perimetr_changer = TextInput(obj, self._perimeter_change_callback, obj.getPropertyValue(GeometryAbstractObject.PropPerimeter))

return False


if key == ois.KC_K:
selected = self._logic._getSheet().getSelected()
if len(selected) == 1:
obj = selected[0]
if isinstance(obj, (GeometryQuadrangle)):
from components.geometry.base.geom_qw_list import QuadrangleChanger
self.dialog = QuadrangleChanger(obj,self._kind_change_callback,obj.getPropertyValue(GeometryAbstractObject.PropKind))


def _onKeyReleased(self, _evt):
"""Event key released
"""
Expand Down Expand Up @@ -437,7 +446,26 @@ def _perimeter_change_callback(self, _object, _value):

if self.objectInfoPanel.getObject() is _object:
self.objectInfoPanel.update()


def _kind_change_callback(self, _object, _value):
"""Callback on kind change
"""
self.state = GeometryEditMode.ES_None
if _value is not None:
v = None
try:
v = str(_value)
except:
print "Non-numeric value found %s" % str(_value)

if v is not None:
_object.setPropertyValue(GeometryAbstractObject.PropKind, v)

#del self.kind_changer

if self.objectInfoPanel.getObject() is _object:
self.objectInfoPanel.update()

def _updateLineSpirits(self):
"""Updates spirit objects used in line creation mode
"""
Expand Down Expand Up @@ -499,5 +527,15 @@ def _get_prev_from_mouse_object_list(self, _obj, _list):
prev = _list[len(_list) - 1][1]

return prev



""""
def _handlerQuadrangleChange(self):
#Handler for changing content

sheet = self._logic._getSheet()
obj = sheet.getSelected()
from components.geometry.base.temp import QuadrangleChanger

self.dialog = QuadrangleChanger(obj)
self.dialog.run()
"""""
7 changes: 4 additions & 3 deletions components/geometry/base/geom_objects.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
along with OSTIS. If not, see <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
"""

'''
Created on 24.11.2009

Expand All @@ -41,14 +40,16 @@
suit.core.objects.Object.OS_NewInMemory: 'NewInMemory',
suit.core.objects.Object.OS_Merged: 'Merged'}


class GeometryAbstractObject:

groups = {}

PropSquare = u"Площадь"
PropPerimeter = u"Периметр"
PropLength = u"Длина"

PropKind = u"Тип"

def __init__(self):
# list of child points (begin and end points are excluded)
# that list contains tuples. Each tuple contains point and it position.
Expand Down
145 changes: 145 additions & 0 deletions components/geometry/base/geom_qw_list.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
import suit.core.render.engine as render_engine
import suit.core.render.mygui as mygui
import suit.core.kernel


class QuadrangleChanger:

def __init__(self, _obj, _callback, _default_value = None):
"""Constructor

@param _node: SCg-node to change content
@type _node: SCgNode
@param _callback_del: functions that calls on dialog deletion
@type _callback_del: function
"""
self.panel = None
self.types_list = None
self.object = _obj
self._callback = _callback
self.default_value = _default_value
self._formats = {} # map of formats, key: format name, value: (format sc_addr, edit support)
self.button_ok = None
self.button_cancel = None
self.sel_fmt = None # selected format title


self.width = 250
self.height = 250

self.createPanel()

self.build_list()

def delete(self):
self.destroyPanel()


def createPanel(self):
"""Create controls panel
"""
#assert self.panel is None

self.panel = render_engine.Gui.createWidgetT("Window", "Panel", mygui.IntCoord(0, 0, self.width, self.height),
mygui.Align(), "Info", "")
self.types_list = self.panel.createWidgetT("List", "List", mygui.IntCoord(10, 10, self.width - 20, 165), mygui.Align())
self.types_list.subscribeEventChangePosition(self, 'item_selected')

self.button_ok = self.panel.createWidgetT("Button", "Button", mygui.IntCoord(10, self.height - 35, 50, 25), mygui.Align())
self.button_cancel = self.panel.createWidgetT("Button", "Button", mygui.IntCoord(60, self.height - 35, 60, 25), mygui.Align())

self.button_ok.setCaption("Ok")
self.button_cancel.setCaption("Cancel")
self.button_ok.setEnabled(False)
self.button_ok.subscribeEventMouseButtonClick(self, '_onButtonOkClick')
self.button_cancel.subscribeEventMouseButtonClick(self, '_onButtonCancelClick')

self.panel.setVisible(True)

def destroyPanel(self):
"""Destroys controls panel
"""
assert self.panel is not None
render_engine.Gui.destroyWidget(self.panel)

self.panel = None

def run(self):

# build list of available components
self.build_list()

# calculate panel position
pos = render_engine.pos3dTo2dWindow(self.object[0].getPosition() + self.object[0].getScale() / 2)
# sure that dialog isn't placed out of screen
x, y = pos
x2 = x + self.width
y2 = y + self.height

if x2 >= render_engine.Window.width:
x = render_engine.Window.width - self.width
elif x < 0:
x = 0

if y2 >= render_engine.Window.height:
y = render_engine.Window.height - self.height
elif y < 0:
y = 0

self.panel.setPosition(x, y)

# show panel
self.panel.setVisible(True)

def build_list(self):
"""Builds list of available viewers/editors components
"""
kernel = suit.core.kernel.Kernel.getSingleton()
session = kernel.session()

# get available formats
fmt_view = kernel.getRegisteredViewerFormats()
fmt_edit = kernel.getRegisteredEditorFormats()

# process formats to create map
for fmt in fmt_view:
title = session.get_idtf(fmt)
if self._formats.has_key(title):
continue
self._formats[title] = (fmt, False)

# check for edit
for fmt in fmt_edit:
title = session.get_idtf(fmt)
self._formats[title] = (self._formats[title][0], True)

# fill list with available information about formats
self.types_list.removeAllItems()
for title in ["Rectangle", "Square", "Rhombus", "Trapeze", "Parallelogram"]:
self.types_list.addItem(title)

self.types_list.clearIndexSelected()

def item_selected(self, _widget, _idx):
"""Event handler for types list selection change
"""
self.sel_fmt = (_idx, str(self.types_list.getItemNameAt(_idx)))


# enable "ok" button if any item selected
self.button_ok.setEnabled(True)


def _onButtonOkClick(self, widget):
"""Event handler for "Ok" button
"""
if self.sel_fmt is not None:
self._callback(self.object, self.sel_fmt)
print self.sel_fmt
self.delete()

def _onButtonCancelClick(self, widget):
"""Event handler for Cancel button
"""
self.delete()