Skip to content

Commit 3ef648b

Browse files
Major interface change, bug fix
- Added a way to see the most recently compiled code - Added a way for the user to save code to their computer - Fixed a possible bug in my library parser
1 parent 0abcaa0 commit 3ef648b

File tree

4 files changed

+59
-7
lines changed

4 files changed

+59
-7
lines changed

BlocklyPropClient.py

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
import Tkinter as tk
44
import ttk as ttk
55
import tkMessageBox
6+
import tkFileDialog
67
import ScrolledText
78
import multiprocessing
89
from datetime import datetime
910
import threading
1011
import webbrowser
1112
import os
1213
import ip
14+
import time
1315
import BlocklyServer
1416
from PropC_library_finder import propc_library_finder
1517

@@ -51,7 +53,7 @@ def set_version(self, version):
5153
def initialize(self):
5254
self.grid()
5355

54-
self.lbl_ip_address = tk.Label(self, anchor=tk.E, text='IP Address :')
56+
self.lbl_ip_address = ttk.Label(self, anchor=tk.E, text='IP Address :')
5557
self.lbl_ip_address.grid(column=0, row=0, sticky='nesw')
5658

5759
self.ent_ip_address = ttk.Entry(self, state='readonly', textvariable=self.ip_address)
@@ -68,6 +70,12 @@ def initialize(self):
6870

6971
self.btn_connect = ttk.Button(self, text='Connect', command=self.handle_connect)
7072
self.btn_connect.grid(column=1, row=2, sticky='nesw', padx=3, pady=3)
73+
74+
self.lbl_current_code = ttk.Label( self, anchor=tk.E, text='Code most recently compiled :' )
75+
self.lbl_current_code.grid(column=0, row=5, sticky='nesw', padx=3, pady=3)
76+
77+
self.current_code = ScrolledText.ScrolledText( self, state='disabled')
78+
self.current_code.grid(column=0, row=6, columnspan=2, sticky='nesw', padx=3, pady=3)
7179

7280
self.lbl_log = ttk.Label(self, anchor=tk.W, text='Log :')
7381
self.lbl_log.grid(column=0, row=3, sticky='nesw', padx=3, pady=3)
@@ -103,12 +111,16 @@ def initialize(self):
103111
monitor.daemon = True
104112
monitor.start()
105113

114+
code_monitor = threading.Thread( target=self.code_catcher)
115+
code_monitor.daemon = True
116+
code_monitor.start()
117+
106118
def initialize_menu( self ):
107119
menubar = tk.Menu( self )
108120

109121
file_menu = tk.Menu( menubar, tearoff=0 )
110122
file_menu.add_command( label="Save" )
111-
file_menu.add_command( label="Save As..." )
123+
file_menu.add_command( label="Save As...", command=self.handle_save_as )
112124
file_menu.add_command( label="Open" )
113125
menubar.add_cascade( label="File", menu=file_menu )
114126

@@ -144,6 +156,15 @@ def handle_connect(self):
144156
self.connected = True
145157
self.btn_connect['text'] = "Disconnect"
146158

159+
def handle_save_as( self ):
160+
file = tkFileDialog.asksaveasfile( mode='w' )
161+
code = open( "c_code_file", 'r' ).read()
162+
163+
file.write( code )
164+
file.close()
165+
166+
tkMessageBox.showinfo( "Info", "The most recently compiled code has been saved to a file successfully" )
167+
147168
def handle_browser(self):
148169
webbrowser.open_new( 'http://blocklyprop.creatingfuture.eu' )
149170

@@ -169,6 +190,20 @@ def handle_close(self):
169190
self.server_process.terminate()
170191
self.quit()
171192

193+
def code_catcher( self ):
194+
while 1:
195+
try:
196+
code = open( "c_code_file", 'r' ).read()
197+
except:
198+
code = ""
199+
200+
self.current_code['state'] = 'normal'
201+
self.current_code.delete( "1.0", tk.END )
202+
self.current_code.insert( "1.0", code )
203+
self.current_code['state'] = 'disabled'
204+
205+
time.sleep( 2 )
206+
172207
def text_catcher(self):
173208
while 1:
174209
(level, level_name, message) = self.q.get()

BlocklyServer.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
from SpinCompiler import SpinCompiler
1010
from PropCCompiler import PropCCompiler
1111

12-
import sys
12+
import sys, os
13+
1314

1415
PORT = 6009
1516
VERSION = 0.2
@@ -49,7 +50,11 @@ def ports(self):
4950
@cherrypy.tools.allow(methods=['POST'])
5051
def compile(self, action, language, code, comport=None):
5152
cherrypy.response.headers['Access-Control-Allow-Origin'] = '*'
52-
53+
54+
file = open( "c_code_file", 'w' )
55+
file.write( code )
56+
file.close()
57+
5358
result = self.compiler[language].handle(action, code, comport)
5459
self.queue.put((10, 'INFO', 'Application compiled'+ ' (' + action + ' : ' + language + ')'))
5560
return result

PropCCompiler.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,14 @@ def compile(self, action, code):
9191

9292
def get_includes(self, includes):
9393
global lib_descriptor
94+
global user_defined_libraries
9495

9596
try:
9697
lib_descriptor = json.load(open(os.getcwd() + "/lib-descriptor.json"))
98+
user_defined_libraries = 1
9799
except:
98100
lib_descriptor = json.load(open(os.getcwd() + "/propeller-c-lib/lib-descriptor.json" ))
101+
user_defined_libraries = 0
99102

100103
descriptors = []
101104
for include in includes:
@@ -117,14 +120,21 @@ def parse_includes(self, c_file):
117120
return includes
118121

119122
def create_executing_data(self, c_file, binary_file, descriptors):
123+
global user_defined_libraries
124+
120125
executable = self.compiler_executables[platform.system()]
121126

127+
if user_defined_libraries == 1:
128+
lib_directory = ""
129+
else:
130+
lib_directory = self.appdir + "/propeller-c-lib/"
131+
122132
executing_data = [executable]
123133
for descriptor in descriptors:
124134
executing_data.append("-I")
125-
executing_data.append(descriptor["libdir"])
135+
executing_data.append(lib_directory + descriptor["libdir"])
126136
executing_data.append("-L")
127-
executing_data.append(descriptor["memorymodel"]["cmm"])
137+
executing_data.append(lib_directory + descriptor["memorymodel"]["cmm"])
128138
executing_data.append("-Os")
129139
executing_data.append("-mcmm")
130140
executing_data.append("-m32bit-doubles")
@@ -144,5 +154,7 @@ def create_executing_data(self, c_file, binary_file, descriptors):
144154

145155
try:
146156
lib_descriptor = json.load(open(os.getcwd() + "/lib-descriptor.json"))
157+
user_defined_libraries = 1
147158
except:
148-
lib_descriptor = json.load(open(os.getcwd() + "/propeller-c-lib/lib-descriptor.json"))
159+
lib_descriptor = json.load(open(os.getcwd() + "/propeller-c-lib/lib-descriptor.json"))
160+
user_defined_libraries = 0

c_code_file

Whitespace-only changes.

0 commit comments

Comments
 (0)