mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Checks for modified doc before new/open, disables save action and enables when document modified
This commit is contained in:
parent
38f0d76b08
commit
4d7aaa0d86
106
usr/qt4-ide.py
106
usr/qt4-ide.py
@ -32,7 +32,6 @@ class OpenMVConnector(QObject):
|
|||||||
|
|
||||||
def auto_detect(self):
|
def auto_detect(self):
|
||||||
if openmv.find():
|
if openmv.find():
|
||||||
print('OpenMV Cam found')
|
|
||||||
self.found.emit()
|
self.found.emit()
|
||||||
else:
|
else:
|
||||||
self.not_found.emit()
|
self.not_found.emit()
|
||||||
@ -49,6 +48,16 @@ class OpenMVIDE(QMainWindow):
|
|||||||
self.connector.found.connect(self.do_connect)
|
self.connector.found.connect(self.do_connect)
|
||||||
self.connector.not_found.connect(self.do_disconnect)
|
self.connector.not_found.connect(self.do_disconnect)
|
||||||
|
|
||||||
|
############################################################################################################
|
||||||
|
# State variables
|
||||||
|
|
||||||
|
# Connect status
|
||||||
|
self.connected = False
|
||||||
|
|
||||||
|
# Script run status
|
||||||
|
self.running = False
|
||||||
|
|
||||||
|
# Image scaling
|
||||||
self.scale = 1
|
self.scale = 1
|
||||||
|
|
||||||
# default working directory
|
# default working directory
|
||||||
@ -79,6 +88,7 @@ class OpenMVIDE(QMainWindow):
|
|||||||
# default auto flash behavior
|
# default auto flash behavior
|
||||||
self.auto_flash = True
|
self.auto_flash = True
|
||||||
|
|
||||||
|
############################################################################################################
|
||||||
# Actions
|
# Actions
|
||||||
|
|
||||||
self.exit_action = QAction(QIcon(self.icon_dir + 'Exit.png'), 'Exit', self)
|
self.exit_action = QAction(QIcon(self.icon_dir + 'Exit.png'), 'Exit', self)
|
||||||
@ -144,6 +154,9 @@ class OpenMVIDE(QMainWindow):
|
|||||||
self.auto_connect_action.setStatusTip('Automatically connect to OpenMV when detected')
|
self.auto_connect_action.setStatusTip('Automatically connect to OpenMV when detected')
|
||||||
self.auto_connect_action.triggered.connect(self.do_auto_connect)
|
self.auto_connect_action.triggered.connect(self.do_auto_connect)
|
||||||
|
|
||||||
|
############################################################################################################
|
||||||
|
## Toolbars
|
||||||
|
|
||||||
self.toolbar1 = self.addToolBar('toolbar1')
|
self.toolbar1 = self.addToolBar('toolbar1')
|
||||||
self.toolbar1.addAction(self.connect_action)
|
self.toolbar1.addAction(self.connect_action)
|
||||||
self.toolbar1.addAction(self.reset_action)
|
self.toolbar1.addAction(self.reset_action)
|
||||||
@ -161,10 +174,6 @@ class OpenMVIDE(QMainWindow):
|
|||||||
self.toolbar3.addAction(self.zoom_reset_action)
|
self.toolbar3.addAction(self.zoom_reset_action)
|
||||||
self.toolbar3.addAction(self.zoom_out_action)
|
self.toolbar3.addAction(self.zoom_out_action)
|
||||||
|
|
||||||
# Enable/disable icons
|
|
||||||
self.connected = False
|
|
||||||
self.running = False
|
|
||||||
|
|
||||||
self.statusBar()
|
self.statusBar()
|
||||||
|
|
||||||
# Frame buffer
|
# Frame buffer
|
||||||
@ -203,6 +212,7 @@ class OpenMVIDE(QMainWindow):
|
|||||||
self.editor = PyEditor(self)
|
self.editor = PyEditor(self)
|
||||||
self.editor.setMinimumWidth(300)
|
self.editor.setMinimumWidth(300)
|
||||||
self.editor.setMinimumHeight(200)
|
self.editor.setMinimumHeight(200)
|
||||||
|
self.editor.document().contentsChanged.connect(self.update_ui)
|
||||||
|
|
||||||
# FrameBuffer
|
# FrameBuffer
|
||||||
self.framebuffer = FrameBuffer()
|
self.framebuffer = FrameBuffer()
|
||||||
@ -240,14 +250,12 @@ class OpenMVIDE(QMainWindow):
|
|||||||
self.show()
|
self.show()
|
||||||
|
|
||||||
def update_ui(self):
|
def update_ui(self):
|
||||||
|
|
||||||
## TODO: enable/disable save icon when file is changed
|
|
||||||
|
|
||||||
self.run_action.setEnabled(self.connected)
|
self.run_action.setEnabled(self.connected)
|
||||||
self.stop_action.setEnabled(self.connected and self.running)
|
self.stop_action.setEnabled(self.connected and self.running)
|
||||||
self.connect_action.setEnabled(not self.connected)
|
self.connect_action.setEnabled(not self.connected)
|
||||||
self.reset_action.setEnabled(self.connected)
|
self.reset_action.setEnabled(self.connected)
|
||||||
self.flash_action.setEnabled(self.connected)
|
self.flash_action.setEnabled(self.connected)
|
||||||
|
self.save_action.setEnabled(self.editor.document().isModified())
|
||||||
self.zoom_in_action.setEnabled(self.connected)
|
self.zoom_in_action.setEnabled(self.connected)
|
||||||
self.zoom_out_action.setEnabled(self.connected)
|
self.zoom_out_action.setEnabled(self.connected)
|
||||||
self.zoom_reset_action.setEnabled(self.connected)
|
self.zoom_reset_action.setEnabled(self.connected)
|
||||||
@ -427,40 +435,35 @@ class OpenMVIDE(QMainWindow):
|
|||||||
self.running = False
|
self.running = False
|
||||||
self.update_ui()
|
self.update_ui()
|
||||||
|
|
||||||
def do_new(self):
|
def check_modified(self, event):
|
||||||
# TODO: Check for save-as first
|
result = True
|
||||||
|
if self.editor.document().isModified():
|
||||||
|
msg = QMessageBox(self)
|
||||||
|
msg.setText('The document has been modified.')
|
||||||
|
msg.setInformativeText('Do you want to save your changes?')
|
||||||
|
msg.setStandardButtons(QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
|
||||||
|
msg.setDefaultButton(QMessageBox.Save)
|
||||||
|
msg.exec_()
|
||||||
|
ret = msg.result()
|
||||||
|
if ret == QMessageBox.Save:
|
||||||
|
self.do_save()
|
||||||
|
result = True
|
||||||
|
elif ret == QMessageBox.Discard:
|
||||||
|
result = True
|
||||||
|
elif ret == QMessageBox.Cancel:
|
||||||
|
result = False
|
||||||
|
else:
|
||||||
|
print('%s' % ret)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def do_new(self, event):
|
||||||
|
if self.check_modified(event):
|
||||||
self.editor.setPlainText('')
|
self.editor.setPlainText('')
|
||||||
self.filename = ''
|
self.filename = ''
|
||||||
self.update_ui()
|
self.update_ui()
|
||||||
|
|
||||||
def update_example_menu(self):
|
def do_open(self, event):
|
||||||
if os.path.isdir(self.example_dir):
|
if self.check_modified(event):
|
||||||
self.example_menu.clear()
|
|
||||||
files = sorted(os.listdir(self.example_dir))
|
|
||||||
for f in files:
|
|
||||||
if f.endswith(".py"):
|
|
||||||
action = QAction(f, self)
|
|
||||||
self.example_menu.addAction(action)
|
|
||||||
|
|
||||||
#label = os.path.basename(f)
|
|
||||||
|
|
||||||
def update_recent_menu(self):
|
|
||||||
print('recent')
|
|
||||||
self.recent_menu.clear()
|
|
||||||
for f in self.recent:
|
|
||||||
print(f)
|
|
||||||
self.recent_menu.addAction(QAction(f, self))
|
|
||||||
|
|
||||||
def do_open_example(self, action):
|
|
||||||
assert isinstance(action, QAction)
|
|
||||||
self.open_file(self.example_dir + action.text())
|
|
||||||
|
|
||||||
def do_open_recent(self, action):
|
|
||||||
assert isinstance(action, QAction)
|
|
||||||
self.open_file(action.text())
|
|
||||||
|
|
||||||
def do_open(self):
|
|
||||||
# TODO: Check for save-as first
|
|
||||||
if os.path.exists(self.script_dir):
|
if os.path.exists(self.script_dir):
|
||||||
my_dir = self.script_dir
|
my_dir = self.script_dir
|
||||||
else:
|
else:
|
||||||
@ -506,10 +509,37 @@ class OpenMVIDE(QMainWindow):
|
|||||||
outfile.write(self.editor.toPlainText())
|
outfile.write(self.editor.toPlainText())
|
||||||
# store new filename
|
# store new filename
|
||||||
self.filename = str(filename)
|
self.filename = str(filename)
|
||||||
|
self.editor.document().setModified(False)
|
||||||
self.update_ui()
|
self.update_ui()
|
||||||
except (IOError, OSError) as e:
|
except (IOError, OSError) as e:
|
||||||
QErrorMessage(self).showMessage('Error saving file: ' + e)
|
QErrorMessage(self).showMessage('Error saving file: ' + e)
|
||||||
|
|
||||||
|
def update_example_menu(self):
|
||||||
|
if os.path.isdir(self.example_dir):
|
||||||
|
self.example_menu.clear()
|
||||||
|
files = sorted(os.listdir(self.example_dir))
|
||||||
|
for f in files:
|
||||||
|
if f.endswith(".py"):
|
||||||
|
action = QAction(f, self)
|
||||||
|
self.example_menu.addAction(action)
|
||||||
|
|
||||||
|
#label = os.path.basename(f)
|
||||||
|
|
||||||
|
def update_recent_menu(self):
|
||||||
|
print('recent')
|
||||||
|
self.recent_menu.clear()
|
||||||
|
for f in self.recent:
|
||||||
|
print(f)
|
||||||
|
self.recent_menu.addAction(QAction(f, self))
|
||||||
|
|
||||||
|
def do_open_example(self, action):
|
||||||
|
assert isinstance(action, QAction)
|
||||||
|
self.open_file(self.example_dir + action.text())
|
||||||
|
|
||||||
|
def do_open_recent(self, action):
|
||||||
|
assert isinstance(action, QAction)
|
||||||
|
self.open_file(action.text())
|
||||||
|
|
||||||
def do_quit(self):
|
def do_quit(self):
|
||||||
# TODO: check for file save status
|
# TODO: check for file save status
|
||||||
if self.connected:
|
if self.connected:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user