3
3
import Tkinter as tk
4
4
import ttk as ttk
5
5
import tkMessageBox
6
+ import tkFileDialog
6
7
import ScrolledText
7
8
import multiprocessing
8
9
from datetime import datetime
9
10
import threading
10
11
import webbrowser
11
12
import os
12
13
import ip
14
+ import time
13
15
import BlocklyServer
16
+ from PropC_library_finder import propc_library_finder
14
17
15
18
PORT = 6009
16
19
VERSION = 0.2
@@ -42,6 +45,7 @@ def __init__(self, *args, **kwargs):
42
45
pass
43
46
44
47
self .initialize ()
48
+ self .initialize_menu ()
45
49
46
50
def set_version (self , version ):
47
51
self .version = version
@@ -66,6 +70,12 @@ def initialize(self):
66
70
67
71
self .btn_connect = ttk .Button (self , text = 'Connect' , command = self .handle_connect )
68
72
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 )
69
79
70
80
self .lbl_log = ttk .Label (self , anchor = tk .W , text = 'Log :' )
71
81
self .lbl_log .grid (column = 0 , row = 3 , sticky = 'nesw' , padx = 3 , pady = 3 )
@@ -100,6 +110,36 @@ def initialize(self):
100
110
monitor = threading .Thread (target = self .text_catcher )
101
111
monitor .daemon = True
102
112
monitor .start ()
113
+
114
+ code_monitor = threading .Thread ( target = self .code_catcher )
115
+ code_monitor .daemon = True
116
+ code_monitor .start ()
117
+
118
+ def initialize_menu ( self ):
119
+ menubar = tk .Menu ( self )
120
+
121
+ file_menu = tk .Menu ( menubar , tearoff = 0 )
122
+ file_menu .add_command ( label = "Save" )
123
+ file_menu .add_command ( label = "Save As..." , command = self .handle_save_as )
124
+ file_menu .add_command ( label = "Open" )
125
+ menubar .add_cascade ( label = "File" , menu = file_menu )
126
+
127
+ about_menu = tk .Menu ( menubar , tearoff = 0 )
128
+ about_menu .add_command ( label = "BlocklyPropClient Source Code" , command = self .handle_client_code_browser )
129
+ about_menu .add_command ( label = "BlocklyProp Source Code" , command = self .handle_code_browser )
130
+ about_menu .add_separator ()
131
+ about_menu .add_command ( label = "About" , command = self .about_info )
132
+ menubar .add_cascade ( label = "About" , menu = about_menu )
133
+
134
+ options_menu = tk .Menu ( menubar , tearoff = 0 )
135
+ options_menu .add_command ( label = "Set Library Location" , command = self .handle_library_location )
136
+ menubar .add_cascade ( label = "Options" , menu = options_menu )
137
+
138
+ help_menu = tk .Menu ( menubar , tearoff = 0 )
139
+ help_menu .add_command ( label = "Help" )
140
+ menubar .add_cascade ( label = "Help" , menu = help_menu )
141
+
142
+ self .config ( menu = menubar )
103
143
104
144
def handle_connect (self ):
105
145
if self .connected :
@@ -116,8 +156,31 @@ def handle_connect(self):
116
156
self .connected = True
117
157
self .btn_connect ['text' ] = "Disconnect"
118
158
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
+
119
168
def handle_browser (self ):
120
169
webbrowser .open_new ( 'http://blocklyprop.creatingfuture.eu' )
170
+
171
+ def handle_code_browser ( self ):
172
+ webbrowser .open_new ( 'http://github.com/parallaxinc/BlocklyProp' )
173
+
174
+ def handle_client_code_browser ( self ):
175
+ webbrowser .open_new ( 'http://github.com/parallaxinc/BlocklyPropClient' )
176
+
177
+ def handle_library_location ( self ):
178
+ library_finder = propc_library_finder ()
179
+
180
+ tkMessageBox .showinfo ( "Info" , "Library Location Set To: " + library_finder .get_directory () )
181
+
182
+ def about_info ( self ):
183
+ tkMessageBox .showinfo ( "About BlocklyProp" , "CurrentVersion: v0.2.0\n \n Authors: Vale Tolpegin & Michel Lampo\n \n Repository Source Code: http://github.com/parallaxinc/BlocklyPropClient\n \n Copyright 2015 Parallax Inc" )
121
184
122
185
def handle_close (self ):
123
186
if tkMessageBox .askokcancel ("Quit?" , "Are you sure you want to quit?" ):
@@ -127,6 +190,20 @@ def handle_close(self):
127
190
self .server_process .terminate ()
128
191
self .quit ()
129
192
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
+
130
207
def text_catcher (self ):
131
208
while 1 :
132
209
(level , level_name , message ) = self .q .get ()
0 commit comments