2
# -*- coding: UTF-8 -*-
5
Copyright 2008 Israel Fernández Cabrera <iferca at gmail.com>
7
This program is free software; you can redistribute it and/or modify it
8
under the terms of the GNU General Public License as published by the Free
9
Software Foundation; either version 2 of the License, or (at your option)
15
from ydecorators import precondition
16
from signalhandler import SignalConnector
17
from project.projectmanager import ProjectManager
18
from runtime.execute import ScriptRunner
19
from yango import DjangoUI
20
from yango.djcommand import DjangoCommand
21
from reevaluator import REEvaluationDialog
24
def showNoProjectOpenError():
25
sc = SignalConnector.getInstance()
26
sc.notifyObservers("MessageStatus", message="Error, there is no active project.")
27
utils.showMessage(title="Error",
28
primaryMessage="There is no project open",
29
secondaryMessage="Open a new project first using the menu option: Project -> Open Project",
30
dialogType=gtk.MESSAGE_INFO)
32
def showNoDjangoProjectError():
33
utils.showMessage(title="Error",
34
primaryMessage="There is no project open or incorrect project type",
35
secondaryMessage="This is not a Django project or there is no project currently open.",
36
dialogType=gtk.MESSAGE_INFO)
38
def isDjangoProject():
39
pm = ProjectManager.getInstance()
40
return ProjectManager.getInstance().isProjectOpen() and\
41
pm.projectType() == "Django"
44
class Operations(object):
46
Provides yape.Yape main class with an interface to perform actual operations
47
in the program. This class exists only to releave yape.Yape from carrying all
48
the code for specific operations not related with the main GUI elements.
51
self.__signalConnector = SignalConnector.getInstance()
53
def showReEvaluator(self, sender):
54
dialog = REEvaluationDialog()
58
#Django related Operations
59
@precondition(isDjangoProject, showNoDjangoProjectError)
60
def djangoDBShell(self, sender):
61
djCmd = DjangoCommand()
64
@precondition(isDjangoProject, showNoDjangoProjectError)
65
def djangoValidate(self, sender):
66
djCmd = DjangoCommand()
69
@precondition(isDjangoProject, showNoDjangoProjectError)
70
def djangoSyncDB(self, sender):
71
djCmd = DjangoCommand()
74
@precondition(isDjangoProject, showNoDjangoProjectError)
75
def runDjangoShell(self, sender):
76
djCmd = DjangoCommand()
79
@precondition(isDjangoProject, showNoDjangoProjectError)
80
def runDjangoWS(self, sender):
81
djCmd = DjangoCommand()
84
@precondition(isDjangoProject, showNoDjangoProjectError)
85
def newDjangoApp(self, sender):
86
pm = ProjectManager.getInstance()
88
djangoUI.startNewApp(pm.projectLocation())
90
#Editor related operations
91
def openFile(self, fileName):
92
self.__signalConnector.notifyObservers("OpenEditor", filename=fileName)
94
#Project related operations
95
@precondition(ProjectManager.getInstance().isProjectOpen, showNoProjectOpenError)
96
def runMainScript(self, sender):
97
pm = ProjectManager.getInstance()
98
runner = ScriptRunner()
99
runner(pm.mainScript(), pm.projectLocation())
101
def runCurrentScript(self, sender):
102
currScript = self._editorManager.getCurrentEditor().getFilePath()
103
path = os.path.dirname(currScript)
107
@precondition(ProjectManager.getInstance().isProjectOpen, showNoProjectOpenError)
108
def cleanProject(self, sender):
109
pm = ProjectManager.getInstance()
112
@precondition(ProjectManager.getInstance().isProjectOpen, showNoProjectOpenError)
113
def projectOptions(self, sender):
114
pm = ProjectManager.getInstance()
115
pm.changeProjectOptions()
116
self.__signalConnector.notifyObservers("MessageStatus", message="Updating project options...")
118
def openProject(self, sender=None, projectName=None):
119
self.__signalConnector.notifyObservers("MessageStatus", message="Opening proejct...")
120
pm = ProjectManager.getInstance()
121
pm.openProject(projectName)
123
def createNewProject(self, sender):
124
self.__signalConnector.notifyObservers("MessageStatus", message="Creating new project")
125
pm = ProjectManager.getInstance()
126
pm.createNewProject()
127
self.__signalConnector.notifyObservers("MessageStatus", message="Project %s created successfully" % pm.projectName())