summaryrefslogtreecommitdiff
path: root/cad/src/cnt/commands/BuildNanotube/BuildNanotube_EditCommand.py
blob: e6cdb8a8dbaba3f7bb30ee879c1ede2bc21b5859 (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
118
119
120
121
122
123
124
125
126
# Copyright 2007-2009 Nanorex, Inc.  See LICENSE file for details.
"""
BuildNanotube_EditCommand.py

@author: Ninad
@version: $Id$
@copyright: 2007-2009 Nanorex, Inc.  See LICENSE file for details.

History:
Ninad 2008-01-11: Created
"""

from command_support.EditCommand import EditCommand
from utilities.Log  import greenmsg

from ne1_ui.toolbars.Ui_NanotubeFlyout import NanotubeFlyout

from model.chem import Atom
from model.bonds import Bond

from cnt.commands.BuildNanotube.BuildNanotube_GraphicsMode import BuildNanotube_GraphicsMode
from cnt.commands.BuildNanotube.BuildNanotube_PropertyManager import BuildNanotube_PropertyManager

_superclass = EditCommand
class BuildNanotube_EditCommand(EditCommand):
    """
    BuildNanotube_EditCommand provides a convenient way to insert or edit
    a Nanotube.
    """

    # class constants
    GraphicsMode_class = BuildNanotube_GraphicsMode

    PM_class = BuildNanotube_PropertyManager

    #Flyout Toolbar
    FlyoutToolbar_class = NanotubeFlyout

    cmd              =  greenmsg("Build Nanotube: ")
    prefix           =  'Nanotube' # used for gensym
    cmdname          = "Build Nanotube"

    commandName       = 'BUILD_NANOTUBE'
    featurename       = "Build Nanotube"
    from utilities.constants import CL_ENVIRONMENT_PROVIDING
    command_level = CL_ENVIRONMENT_PROVIDING
    command_should_resume_prevMode = False
    command_has_its_own_PM = True
    create_name_from_prefix  =  True

    #The following class constant is used in creating dynamic menu items (using self.makeMenus)
    #if this flag is not defined, the menu doesn't get created
    #or use of self.graphicsMode in self.makeMenus throws errors.
    #See also other examples of its use in older Commands such as
    #BuildAtoms_Command (earlier depositmode)
    call_makeMenus_for_each_event = True

    def command_enter_misc_actions(self):
        """
        Overrides superclass method.

        @see: baseCommand.command_enter_misc_actions()  for documentation
        """
        self.w.buildNanotubeAction.setChecked(True)
        return

    def runCommand(self):
        """
        Overrides EditCommand.runCommand
        """
        self.struct = None
        self.existingStructForEditing = False
        self.propMgr.updateNanotubesListWidget()
        return

    def keep_empty_group(self, group):
        """
        Returns True if the empty group should not be automatically deleted.
        otherwise returns False. The default implementation always returns
        False. Subclasses should override this method if it needs to keep the
        empty group for some reasons. Note that this method will only get called
        when a group has a class constant autdelete_when_empty set to True.
        (and as of 2008-03-06, it is proposed that cnt_updater calls this method
        when needed.
        @see: Command.keep_empty_group() which is overridden here.
        """

        bool_keep = EditCommand.keep_empty_group(self, group)

        if not bool_keep:
            if group is self.struct:
                bool_keep = True

        return bool_keep

    def makeMenus(self):
        """
        Create context menu for this command. (Build Nanotube mode)
        @see: chunk.make_glpane_cmenu_items
        @see: EditNanotube_EditCommand.makeMenus
        """
        if not hasattr(self, 'graphicsMode'):
            return

        selobj = self.glpane.selobj

        if selobj is None:
            self._makeEditContextMenus()
            return

        self.Menu_spec = []

        highlightedChunk = None
        if isinstance(selobj, self.assy.Chunk):
            highlightedChunk = selobj
        if isinstance(selobj, Atom):
            highlightedChunk = selobj.molecule
        elif isinstance(selobj, Bond):
            chunk1 = selobj.atom1.molecule
            chunk2 = selobj.atom2.molecule
            if chunk1 is chunk2 and chunk1 is not None:
                highlightedChunk = chunk1

        if highlightedChunk is not None:
            highlightedChunk.make_glpane_cmenu_items(self.Menu_spec, self)
        return