~iferca/yape/trunk

« back to all changes in this revision

Viewing changes to operations.py

  • Committer: Israel Fernández Cabrera
  • Date: 2008-10-03 21:12:17 UTC
  • Revision ID: iferca@gmail.com-20081003211217-uu1df2ucq3wd67nd
YaPe project moved to the new YaPe project structure. Old one will work fine but it was not suitable for the next development phases

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env python
2
 
# -*- coding: UTF-8 -*-
3
 
 
4
 
__license__ = """
5
 
Copyright 2008 Israel Fernández Cabrera <iferca at gmail.com>
6
 
   
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)
10
 
any later version.
11
 
"""
12
 
 
13
 
import gtk
14
 
import utils
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
22
 
 
23
 
        
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)
31
 
 
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)
37
 
 
38
 
def isDjangoProject():
39
 
    pm = ProjectManager.getInstance()
40
 
    return ProjectManager.getInstance().isProjectOpen() and\
41
 
           pm.projectType() == "Django"
42
 
 
43
 
 
44
 
class Operations(object):
45
 
    """
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.
49
 
    """
50
 
    def __init__(self):
51
 
        self.__signalConnector = SignalConnector.getInstance()
52
 
 
53
 
    def showReEvaluator(self, sender):
54
 
        dialog = REEvaluationDialog()
55
 
        dialog.run()
56
 
        dialog.close()
57
 
 
58
 
    #Django related Operations
59
 
    @precondition(isDjangoProject, showNoDjangoProjectError)
60
 
    def djangoDBShell(self, sender):
61
 
        djCmd = DjangoCommand()
62
 
        djCmd.dbShell()
63
 
 
64
 
    @precondition(isDjangoProject, showNoDjangoProjectError)
65
 
    def djangoValidate(self, sender):
66
 
        djCmd = DjangoCommand()
67
 
        djCmd.validateModel()
68
 
 
69
 
    @precondition(isDjangoProject, showNoDjangoProjectError)
70
 
    def djangoSyncDB(self, sender):
71
 
        djCmd = DjangoCommand()
72
 
        djCmd.syncDB()
73
 
 
74
 
    @precondition(isDjangoProject, showNoDjangoProjectError)
75
 
    def runDjangoShell(self, sender):
76
 
        djCmd = DjangoCommand()
77
 
        djCmd.startShell()
78
 
 
79
 
    @precondition(isDjangoProject, showNoDjangoProjectError)
80
 
    def runDjangoWS(self, sender):
81
 
        djCmd = DjangoCommand()
82
 
        djCmd.runServer()
83
 
 
84
 
    @precondition(isDjangoProject, showNoDjangoProjectError)
85
 
    def newDjangoApp(self, sender):
86
 
        pm = ProjectManager.getInstance()
87
 
        djangoUI = DjangoUI()
88
 
        djangoUI.startNewApp(pm.projectLocation())
89
 
 
90
 
    #Editor related operations
91
 
    def openFile(self, fileName):
92
 
        self.__signalConnector.notifyObservers("OpenEditor", filename=fileName)
93
 
 
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())
100
 
 
101
 
    def runCurrentScript(self, sender):
102
 
        currScript = self._editorManager.getCurrentEditor().getFilePath()
103
 
        path = os.path.dirname(currScript)
104
 
        rs = ScriptRunner()
105
 
        rs(currScript, path)
106
 
 
107
 
    @precondition(ProjectManager.getInstance().isProjectOpen, showNoProjectOpenError)
108
 
    def cleanProject(self, sender):
109
 
        pm = ProjectManager.getInstance()
110
 
        pm.cleanProject()
111
 
 
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...")
117
 
 
118
 
    def openProject(self, sender=None, projectName=None):
119
 
        self.__signalConnector.notifyObservers("MessageStatus", message="Opening proejct...")
120
 
        pm = ProjectManager.getInstance()
121
 
        pm.openProject(projectName)
122
 
 
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())
128
 
 
129