Commit b467c1ea authored by sumpfralle's avatar sumpfralle

added a menu for load/save files


git-svn-id: https://pycam.svn.sourceforge.net/svnroot/pycam/trunk@179 bbaffbd6-741e-11dd-a85d-61de82d9cad9
parent 81c2af10
...@@ -21,7 +21,13 @@ import time ...@@ -21,7 +21,13 @@ import time
import os import os
import sys import sys
GTKBUILD_FILE = os.path.join(os.path.dirname(__file__), "gtk-interface", "pycam-project.ui") GTK_DATA_DIR = os.path.join(os.path.dirname(__file__), "gtk-interface")
GTKBUILD_FILE = os.path.join(GTK_DATA_DIR, "pycam-project.ui")
GTKMENU_FILE = os.path.join(GTK_DATA_DIR, "menubar.xml")
FILTER_GCODE = ("GCode files", ["*.gcode", "*.nc", "*.gc", "*.ngc"])
FILTER_MODEL = ("STL models", "*.stl")
FILTER_CONFIG = ("Config files", "*.conf")
BUTTON_ROTATE = gtk.gdk.BUTTON1_MASK BUTTON_ROTATE = gtk.gdk.BUTTON1_MASK
BUTTON_MOVE = gtk.gdk.BUTTON2_MASK BUTTON_MOVE = gtk.gdk.BUTTON2_MASK
...@@ -288,24 +294,19 @@ class ProjectGui: ...@@ -288,24 +294,19 @@ class ProjectGui:
self.gui.add_from_file(GTKBUILD_FILE) self.gui.add_from_file(GTKBUILD_FILE)
self.window = self.gui.get_object("ProjectWindow") self.window = self.gui.get_object("ProjectWindow")
# file loading # file loading
self.last_config_file = None
self.last_model_file = None
self.last_toolpath_file = None
self.model_file_selector = self.gui.get_object("ModelFileChooser") self.model_file_selector = self.gui.get_object("ModelFileChooser")
self.model_file_selector.connect("file-set", self.gui.get_object("LoadProcessingTemplates").connect("activate", self.load_processing_file)
self.load_model_file, self.model_file_selector.get_filename) self.gui.get_object("SaveProcessingTemplates").connect("activate", self.save_processing_settings_file, lambda: self.last_config_file)
self.processing_file_selector = self.gui.get_object("ProcessingSettingsLoad") self.gui.get_object("SaveAsProcessingTemplates").connect("activate", self.save_processing_settings_file)
self.processing_file_selector.connect("file-set", self.gui.get_object("LoadModel").connect("activate", self.load_model_file)
self.load_processing_file, self.processing_file_selector.get_filename) self.gui.get_object("SaveModel").connect("activate", self.save_model, lambda: self.last_model_file)
self.gui.get_object("SaveAsModel").connect("activate", self.save_model)
self.gui.get_object("ExportGCode").connect("activate", self.save_toolpath)
self.gui.get_object("Quit").connect("activate", self.destroy)
self.window.connect("destroy", self.destroy) self.window.connect("destroy", self.destroy)
self.gui.get_object("SaveModel").connect("clicked", self.save_model)
model_file_chooser = self.gui.get_object("ModelFileChooser")
filter = gtk.FileFilter()
filter.set_name("All files")
filter.add_pattern("*")
model_file_chooser.add_filter(filter)
filter = gtk.FileFilter()
filter.set_name("STL files")
filter.add_pattern("*.stl")
model_file_chooser.add_filter(filter)
model_file_chooser.set_filter(filter)
self.model = None self.model = None
self.toolpath = GuiCommon.ToolPathList() self.toolpath = GuiCommon.ToolPathList()
self.physics = None self.physics = None
...@@ -313,8 +314,6 @@ class ProjectGui: ...@@ -313,8 +314,6 @@ class ProjectGui:
self.settings.add_item("model", lambda: getattr(self, "model")) self.settings.add_item("model", lambda: getattr(self, "model"))
self.settings.add_item("toolpath", lambda: getattr(self, "toolpath")) self.settings.add_item("toolpath", lambda: getattr(self, "toolpath"))
self.settings.add_item("cutter", lambda: getattr(self, "cutter")) self.settings.add_item("cutter", lambda: getattr(self, "cutter"))
# TODO: replace hard-coded scale
self.settings.add_item("scale", lambda: 0.9/getattr(getattr(self, "model"), "maxsize")())
# create the unit field (the default content can't be defined via glade) # create the unit field (the default content can't be defined via glade)
scale_box = self.gui.get_object("unit_box") scale_box = self.gui.get_object("unit_box")
unit_field = gtk.combo_box_new_text() unit_field = gtk.combo_box_new_text()
...@@ -361,7 +360,7 @@ class ProjectGui: ...@@ -361,7 +360,7 @@ class ProjectGui:
self.gui.get_object("GenerateToolPathButton").connect("clicked", self.generate_toolpath) self.gui.get_object("GenerateToolPathButton").connect("clicked", self.generate_toolpath)
self.gui.get_object("SaveToolPathButton").connect("clicked", self.save_toolpath) self.gui.get_object("SaveToolPathButton").connect("clicked", self.save_toolpath)
# visual and general settings # visual and general settings
self.gui.get_object("Toggle3dView").connect("toggled", self.toggle_3d_view) self.gui.get_object("Toggle3DView").connect("toggled", self.toggle_3d_view)
for name, objname in (("show_model", "ShowModelCheckBox"), for name, objname in (("show_model", "ShowModelCheckBox"),
("show_axes", "ShowAxesCheckBox"), ("show_axes", "ShowAxesCheckBox"),
("show_bounding_box", "ShowBoundingCheckBox"), ("show_bounding_box", "ShowBoundingCheckBox"),
...@@ -438,17 +437,6 @@ class ProjectGui: ...@@ -438,17 +437,6 @@ class ProjectGui:
self.delete_processing_config, self.processing_config_selection.get_active_text) self.delete_processing_config, self.processing_config_selection.get_active_text)
self.gui.get_object("ProcessingTemplateSave").connect("clicked", self.gui.get_object("ProcessingTemplateSave").connect("clicked",
self.save_processing_config, self.processing_config_selection.get_active_text) self.save_processing_config, self.processing_config_selection.get_active_text)
self.load_processing_settings()
self.gui.get_object("ProcessingSettingsSaveToFile").connect("clicked", self.save_processing_settings_file)
filter = gtk.FileFilter()
filter.set_name("All files")
filter.add_pattern("*")
self.processing_file_selector.add_filter(filter)
filter = gtk.FileFilter()
filter.set_name("Config files")
filter.add_pattern("*.conf")
self.processing_file_selector.add_filter(filter)
self.processing_file_selector.set_filter(filter)
# progress bar and task pane # progress bar and task pane
self.progress_bar = self.gui.get_object("ProgressBar") self.progress_bar = self.gui.get_object("ProgressBar")
self.progress_widget = self.gui.get_object("ProgressWidget") self.progress_widget = self.gui.get_object("ProgressWidget")
...@@ -457,7 +445,6 @@ class ProjectGui: ...@@ -457,7 +445,6 @@ class ProjectGui:
# make sure that the toolpath settings are consistent # make sure that the toolpath settings are consistent
self.toolpath_table = self.gui.get_object("ToolPathTable") self.toolpath_table = self.gui.get_object("ToolPathTable")
self.toolpath_model = self.gui.get_object("ToolPathListModel") self.toolpath_model = self.gui.get_object("ToolPathListModel")
self.disable_invalid_toolpath_settings()
self.toolpath_table.get_selection().connect("changed", self.toolpath_table_event, "update_buttons") self.toolpath_table.get_selection().connect("changed", self.toolpath_table_event, "update_buttons")
self.gui.get_object("toolpath_visible").connect("toggled", self.toolpath_table_event, "toggle_visibility") self.gui.get_object("toolpath_visible").connect("toggled", self.toolpath_table_event, "toggle_visibility")
self.gui.get_object("toolpath_up").connect("clicked", self.toolpath_table_event, "move_up") self.gui.get_object("toolpath_up").connect("clicked", self.toolpath_table_event, "move_up")
...@@ -468,6 +455,27 @@ class ProjectGui: ...@@ -468,6 +455,27 @@ class ProjectGui:
self.settings.add_item("speed", speed_control.get_value, speed_control.set_value) self.settings.add_item("speed", speed_control.get_value, speed_control.set_value)
feedrate_control = self.gui.get_object("FeedrateControl") feedrate_control = self.gui.get_object("FeedrateControl")
self.settings.add_item("feedrate", feedrate_control.get_value, feedrate_control.set_value) self.settings.add_item("feedrate", feedrate_control.get_value, feedrate_control.set_value)
# menu bar
uimanager = gtk.UIManager()
accelgroup = uimanager.get_accel_group()
self.window.add_accel_group(accelgroup)
# load menu data
uimanager.add_ui_from_file(GTKMENU_FILE)
# make the actions defined in the GTKBUILD file available in the menu
actiongroup = gtk.ActionGroup("menubar")
for action in [action for action in self.gui.get_objects() if isinstance(action, gtk.Action)]:
actiongroup.add_action(action)
uimanager.insert_action_group(actiongroup)
# load the menubar and connect functions to its items
self.menubar = uimanager.get_widget("/MenuBar")
window_box = self.gui.get_object("WindowBox")
window_box.pack_start(self.menubar, False)
window_box.reorder_child(self.menubar, 0)
# some more initialization
self.update_toolpath_table()
self.disable_invalid_toolpath_settings()
self.load_processing_settings()
self.update_save_actions()
if not self.no_dialog: if not self.no_dialog:
self.window.show() self.window.show()
...@@ -506,6 +514,10 @@ class ProjectGui: ...@@ -506,6 +514,10 @@ class ProjectGui:
else: else:
self.physics = None self.physics = None
def update_save_actions(self):
self.gui.get_object("SaveProcessingTemplates").set_sensitive(not self.last_config_file is None)
self.gui.get_object("SaveModel").set_sensitive(not self.last_model_file is None)
def disable_invalid_toolpath_settings(self, widget=None, data=None): def disable_invalid_toolpath_settings(self, widget=None, data=None):
# possible dependencies of the DropCutter # possible dependencies of the DropCutter
if self.settings.get("path_generator") == "DropCutter": if self.settings.get("path_generator") == "DropCutter":
...@@ -555,14 +567,14 @@ class ProjectGui: ...@@ -555,14 +567,14 @@ class ProjectGui:
self.reset_bounds() self.reset_bounds()
self.view3d.reset_view() self.view3d.reset_view()
# disable the "toggle" button, if the 3D view does not work # disable the "toggle" button, if the 3D view does not work
self.gui.get_object("Toggle3dView").set_sensitive(self.view3d.enabled) self.gui.get_object("Toggle3DView").set_sensitive(self.view3d.enabled)
else: else:
# the window is just hidden # the window is just hidden
self.view3d.show() self.view3d.show()
self.update_view() self.update_view()
else: else:
self.view3d.hide() self.view3d.hide()
self.gui.get_object("Toggle3dView").set_active(new_state) self.gui.get_object("Toggle3DView").set_active(new_state)
@gui_activity_guard @gui_activity_guard
def transform_model(self, widget): def transform_model(self, widget):
...@@ -582,14 +594,19 @@ class ProjectGui: ...@@ -582,14 +594,19 @@ class ProjectGui:
self.update_view() self.update_view()
@gui_activity_guard @gui_activity_guard
def save_model(self, widget): def save_model(self, widget=None, filename=None):
no_dialog = False no_dialog = False
if isinstance(widget, basestring): if callable(filename):
filename = widget filename = filename()
if isinstance(filename, basestring):
no_dialog = True no_dialog = True
else: else:
# we open a dialog # we open a dialog
filename = self.get_save_filename("Save model to ...", ("STL models", "*.stl")) filename = self.get_filename_via_dialog("Save model to ...",
mode_load=False, type_filter=FILTER_MODEL)
if filename:
self.last_model_file = filename
self.update_save_actions()
# no filename given -> exit # no filename given -> exit
if not filename: if not filename:
return return
...@@ -656,7 +673,8 @@ class ProjectGui: ...@@ -656,7 +673,8 @@ class ProjectGui:
gtk.main_quit() gtk.main_quit()
def open(self, filename): def open(self, filename):
self.model_file_selector.set_filename(filename) """ This function is used by the commandline handler """
self.last_model_file = filename
self.load_model_file(filename=filename) self.load_model_file(filename=filename)
def append_to_queue(self, func, *args, **kwargs): def append_to_queue(self, func, *args, **kwargs):
...@@ -670,22 +688,33 @@ class ProjectGui: ...@@ -670,22 +688,33 @@ class ProjectGui:
@gui_activity_guard @gui_activity_guard
def load_model_file(self, widget=None, filename=None): def load_model_file(self, widget=None, filename=None):
if not filename:
return
if callable(filename): if callable(filename):
filename = filename() filename = filename()
if not filename:
filename = self.get_filename_via_dialog("Loading model ...",
mode_load=True, type_filter=FILTER_MODEL)
if filename:
self.last_model_file = filename
self.update_save_actions()
if filename:
self.load_model(pycam.Importers.STLImporter.ImportModel(filename)) self.load_model(pycam.Importers.STLImporter.ImportModel(filename))
def open_processing_settings_file(self, filename): def open_processing_settings_file(self, filename):
self.processing_file_selector.set_filename(filename) """ This function is used by the commandline handler """
self.last_toolpath_file = filename
self.load_processing_file(filename=filename) self.load_processing_file(filename=filename)
@gui_activity_guard @gui_activity_guard
def load_processing_file(self, widget=None, filename=None): def load_processing_file(self, widget=None, filename=None):
if not filename:
return
if callable(filename): if callable(filename):
filename = filename() filename = filename()
if not filename:
filename = self.get_filename_via_dialog("Loading processing settings ...",
mode_load=True, type_filter=FILTER_CONFIG)
if filename:
self.last_config_file = filename
self.update_save_actions()
if filename:
self.load_processing_settings(filename) self.load_processing_settings(filename)
def load_model(self, model): def load_model(self, model):
...@@ -815,10 +844,12 @@ class ProjectGui: ...@@ -815,10 +844,12 @@ class ProjectGui:
def update_toolpath_table(self, new_index=None, skip_model_update=False): def update_toolpath_table(self, new_index=None, skip_model_update=False):
# show or hide the "toolpath" tab # show or hide the "toolpath" tab
toolpath_tab = self.gui.get_object("ToolPathTab") toolpath_tab = self.gui.get_object("ToolPathTab")
if self.toolpath is None: if not self.toolpath:
toolpath_tab.hide() toolpath_tab.hide()
else: else:
toolpath_tab.show() toolpath_tab.show()
# enable/disable the export menu item
self.gui.get_object("ExportGCode").set_sensitive(len(self.toolpath) > 0)
# reset the model data and the selection # reset the model data and the selection
if new_index is None: if new_index is None:
# keep the old selection - this may return "None" if nothing is selected # keep the old selection - this may return "None" if nothing is selected
...@@ -841,14 +872,19 @@ class ProjectGui: ...@@ -841,14 +872,19 @@ class ProjectGui:
self.gui.get_object("toolpath_down").set_sensitive((not new_index is None) and (new_index + 1 < len(self.toolpath))) self.gui.get_object("toolpath_down").set_sensitive((not new_index is None) and (new_index + 1 < len(self.toolpath)))
@gui_activity_guard @gui_activity_guard
def save_processing_settings_file(self, widget=None, section=None): def save_processing_settings_file(self, widget=None, filename=None):
no_dialog = False no_dialog = False
if isinstance(widget, basestring): if callable(filename):
filename = widget filename = filename()
if isinstance(filename, basestring):
no_dialog = True no_dialog = True
else: else:
# we open a dialog # we open a dialog
filename = self.get_save_filename("Save processing settings to ...", ("Config files", "*.conf")) filename = self.get_filename_via_dialog("Save processing settings to ...",
mode_load=False, type_filter=FILTER_CONFIG)
if filename:
self.last_config_file = filename
self.update_save_actions()
# no filename given -> exit # no filename given -> exit
if not filename: if not filename:
return return
...@@ -1005,13 +1041,19 @@ class ProjectGui: ...@@ -1005,13 +1041,19 @@ class ProjectGui:
# TODO: remove it in v0.2 # TODO: remove it in v0.2
generateToolpath = generate_toolpath generateToolpath = generate_toolpath
def get_save_filename(self, title, type_filter=None): def get_filename_via_dialog(self, title, mode_load=False, type_filter=None):
# we open a dialog # we open a dialog
if mode_load:
dialog = gtk.FileChooserDialog(title=title,
parent=self.window, action=gtk.FILE_CHOOSER_ACTION_OPEN,
buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OPEN, gtk.RESPONSE_OK))
else:
dialog = gtk.FileChooserDialog(title=title, dialog = gtk.FileChooserDialog(title=title,
parent=self.window, action=gtk.FILE_CHOOSER_ACTION_SAVE, parent=self.window, action=gtk.FILE_CHOOSER_ACTION_SAVE,
buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_SAVE, gtk.RESPONSE_OK)) gtk.STOCK_SAVE, gtk.RESPONSE_OK))
# add filter for stl files # add filter for files
if type_filter: if type_filter:
filter = gtk.FileFilter() filter = gtk.FileFilter()
filter.set_name(type_filter[0]) filter.set_name(type_filter[0])
...@@ -1035,7 +1077,7 @@ class ProjectGui: ...@@ -1035,7 +1077,7 @@ class ProjectGui:
if response != gtk.RESPONSE_OK: if response != gtk.RESPONSE_OK:
dialog.destroy() dialog.destroy()
return None return None
if os.path.exists(filename): if not mode_load and os.path.exists(filename):
overwrite_window = gtk.MessageDialog(self.window, type=gtk.MESSAGE_WARNING, overwrite_window = gtk.MessageDialog(self.window, type=gtk.MESSAGE_WARNING,
buttons=gtk.BUTTONS_YES_NO, buttons=gtk.BUTTONS_YES_NO,
message_format="This file exists. Do you want to overwrite it?") message_format="This file exists. Do you want to overwrite it?")
...@@ -1052,12 +1094,18 @@ class ProjectGui: ...@@ -1052,12 +1094,18 @@ class ProjectGui:
def save_toolpath(self, widget=None, data=None): def save_toolpath(self, widget=None, data=None):
if not self.toolpath: if not self.toolpath:
return return
if callable(widget):
widget = widget()
if isinstance(widget, basestring): if isinstance(widget, basestring):
filename = widget filename = widget
no_dialog = True no_dialog = True
else: else:
# we open a dialog # we open a dialog
filename = self.get_save_filename("Save toolpath to ...", ("GCode files", ["*.gcode", "*.nc", "*.gc", "*.ngc"])) filename = self.get_filename_via_dialog("Save toolpath to ...",
mode_load=False, type_filter=FILTER_GCODE)
if filename:
self.last_toolpath_file = filename
self.update_save_actions()
no_dialog = False no_dialog = False
# no filename given -> exit # no filename given -> exit
if not filename: if not filename:
......
<ui>
<menubar name="MenuBar">
<menu action="FileMenu">
<menuitem action="LoadModel"/>
<menuitem action="SaveModel"/>
<menuitem action="SaveAsModel"/>
<separator />
<menuitem action="ExportGCode"/>
<separator />
<menuitem action="Quit"/>
</menu>
<menu action="SettingsMenu">
<menuitem action="LoadProcessingTemplates"/>
<menuitem action="SaveProcessingTemplates"/>
<menuitem action="SaveAsProcessingTemplates"/>
<separator />
<menuitem action="GeneralSettings"/>
</menu>
<menu action="WindowMenu">
<menuitem action="Toggle3DView"/>
</menu>
</menubar>
</ui>
...@@ -54,9 +54,13 @@ ...@@ -54,9 +54,13 @@
<property name="title" translatable="yes">PyCAM Settings</property> <property name="title" translatable="yes">PyCAM Settings</property>
<property name="destroy_with_parent">True</property> <property name="destroy_with_parent">True</property>
<child> <child>
<object class="GtkVBox" id="vbox1"> <object class="GtkVBox" id="WindowBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
<placeholder/>
</child>
<child> <child>
<object class="GtkNotebook" id="Tasks"> <object class="GtkNotebook" id="Tasks">
<property name="visible">True</property> <property name="visible">True</property>
...@@ -65,95 +69,24 @@ ...@@ -65,95 +69,24 @@
<object class="GtkVBox" id="ModelTab"> <object class="GtkVBox" id="ModelTab">
<property name="visible">True</property> <property name="visible">True</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">3</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkHBox" id="hbox4"> <object class="GtkHBox" id="hbox4">
<property name="visible">True</property> <property name="visible">True</property>
<child>
<object class="GtkFrame" id="File Selection">
<property name="visible">True</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkAlignment" id="alignment4">
<property name="visible">True</property>
<property name="left_padding">12</property>
<child>
<object class="GtkFileChooserButton" id="ModelFileChooser">
<property name="visible">True</property>
<property name="create_folders">False</property>
<property name="width_chars">30</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="File Selection Frame">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Load Model File&lt;/b&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child> <child>
<object class="GtkVSeparator" id="vseparator6"> <object class="GtkVSeparator" id="vseparator6">
<property name="visible">True</property> <property name="visible">True</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
</object> </object>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame5">
<property name="visible">True</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkAlignment" id="alignment13">
<property name="visible">True</property>
<property name="left_padding">12</property>
<child>
<object class="GtkButton" id="SaveModel">
<property name="label" translatable="yes">Save to File</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="SaveModelFrame">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Save Model&lt;/b&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkHSeparator" id="hseparator1">
<property name="visible">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="position">1</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child> <child>
...@@ -426,7 +359,7 @@ ...@@ -426,7 +359,7 @@
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="position">2</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
<child> <child>
...@@ -435,7 +368,7 @@ ...@@ -435,7 +368,7 @@
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="position">3</property> <property name="position">2</property>
</packing> </packing>
</child> </child>
<child> <child>
...@@ -989,7 +922,7 @@ ...@@ -989,7 +922,7 @@
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="position">4</property> <property name="position">3</property>
</packing> </packing>
</child> </child>
</object> </object>
...@@ -1004,10 +937,6 @@ ...@@ -1004,10 +937,6 @@
<property name="tab_fill">False</property> <property name="tab_fill">False</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkHBox" id="SettingsTab">
<property name="visible">True</property>
<property name="spacing">4</property>
<child> <child>
<object class="GtkVBox" id="vbox7"> <object class="GtkVBox" id="vbox7">
<property name="visible">True</property> <property name="visible">True</property>
...@@ -1192,55 +1121,6 @@ ...@@ -1192,55 +1121,6 @@
</packing> </packing>
</child> </child>
</object> </object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkVSeparator" id="vseparator9">
<property name="visible">True</property>
<property name="orientation">vertical</property>
</object>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="View3dToggleFrame">
<property name="visible">True</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkAlignment" id="alignment20">
<property name="visible">True</property>
<property name="yalign">0</property>
<property name="yscale">0</property>
<property name="left_padding">12</property>
<child>
<object class="GtkToggleButton" id="Toggle3dView">
<property name="label" translatable="yes">Show</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="View3dToggleLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;3D View&lt;/b&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing> <packing>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
...@@ -1273,65 +1153,6 @@ ...@@ -1273,65 +1153,6 @@
<object class="GtkHBox" id="hbox9"> <object class="GtkHBox" id="hbox9">
<property name="visible">True</property> <property name="visible">True</property>
<property name="spacing">3</property> <property name="spacing">3</property>
<child>
<object class="GtkFrame" id="LoadProcessingSettingsFromFileFrame">
<property name="visible">True</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkAlignment" id="alignment22">
<property name="visible">True</property>
<property name="left_padding">12</property>
<child>
<object class="GtkHBox" id="hbox10">
<property name="visible">True</property>
<property name="spacing">3</property>
<child>
<object class="GtkFileChooserButton" id="ProcessingSettingsLoad">
<property name="visible">True</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="ProcessingSettingsSaveToFile">
<property name="label" translatable="yes">Save</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="LoadProcessingSettingsFromFileFrameLabel">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Load and Save Settings File&lt;/b&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkVSeparator" id="vseparator8">
<property name="visible">True</property>
<property name="orientation">vertical</property>
</object>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
<child> <child>
<object class="GtkFrame" id="ProcessingSettingsTemplatesFrame"> <object class="GtkFrame" id="ProcessingSettingsTemplatesFrame">
<property name="visible">True</property> <property name="visible">True</property>
...@@ -1358,10 +1179,11 @@ ...@@ -1358,10 +1179,11 @@
</child> </child>
<child> <child>
<object class="GtkButton" id="ProcessingTemplateSave"> <object class="GtkButton" id="ProcessingTemplateSave">
<property name="label" translatable="yes">Save</property> <property name="label">gtk-save</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="use_stock">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
...@@ -1370,10 +1192,11 @@ ...@@ -1370,10 +1192,11 @@
</child> </child>
<child> <child>
<object class="GtkButton" id="ProcessingTemplateDelete"> <object class="GtkButton" id="ProcessingTemplateDelete">
<property name="label" translatable="yes">Delete</property> <property name="label">gtk-delete</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="use_stock">True</property>
</object> </object>
<packing> <packing>
<property name="position">2</property> <property name="position">2</property>
...@@ -1393,7 +1216,7 @@ ...@@ -1393,7 +1216,7 @@
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="position">2</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
</object> </object>
...@@ -2402,7 +2225,7 @@ ...@@ -2402,7 +2225,7 @@
</child> </child>
</object> </object>
<packing> <packing>
<property name="position">0</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
<child> <child>
...@@ -2430,7 +2253,7 @@ ...@@ -2430,7 +2253,7 @@
</child> </child>
</object> </object>
<packing> <packing>
<property name="position">1</property> <property name="position">2</property>
</packing> </packing>
</child> </child>
</object> </object>
...@@ -2467,7 +2290,7 @@ ...@@ -2467,7 +2290,7 @@
<object class="GtkWindow" id="view3dwindow"> <object class="GtkWindow" id="view3dwindow">
<property name="title" translatable="yes">PyCAM Visualization</property> <property name="title" translatable="yes">PyCAM Visualization</property>
<child> <child>
<object class="GtkVBox" id="view3dbox"> <object class="GtkVBox" id="view3d_window">
<property name="visible">True</property> <property name="visible">True</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
...@@ -2557,10 +2380,84 @@ ...@@ -2557,10 +2380,84 @@
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkHBox" id="view3dbox">
<property name="visible">True</property>
<child>
<object class="GtkToolbar" id="ViewItemsSelection">
<property name="sensitive">False</property>
<property name="orientation">vertical</property>
<property name="toolbar_style">both</property>
<child>
<object class="GtkToggleToolButton" id="ToggleModelView">
<property name="visible">True</property>
<property name="label" translatable="yes">Model</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="ToggleToolpathView">
<property name="visible">True</property>
<property name="label" translatable="yes">Toolpath</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="ToggleBoundingBoxView">
<property name="visible">True</property>
<property name="label" translatable="yes">Bounds</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="ToggleAxesView">
<property name="visible">True</property>
<property name="label" translatable="yes">Axes</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="ToggleDrillProgressView">
<property name="visible">True</property>
<property name="label" translatable="yes">Drill</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child> <child>
<placeholder/> <placeholder/>
</child> </child>
</object> </object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
</child> </child>
</object> </object>
<object class="GtkAdjustment" id="min-x"> <object class="GtkAdjustment" id="min-x">
...@@ -2692,4 +2589,65 @@ ...@@ -2692,4 +2589,65 @@
<property name="page_increment">10</property> <property name="page_increment">10</property>
<property name="page_size">10</property> <property name="page_size">10</property>
</object> </object>
<object class="GtkAction" id="LoadModel">
<property name="label">Load Model</property>
<property name="tooltip">Loads an STL model file.</property>
<property name="stock_id">gtk-open</property>
</object>
<object class="GtkAction" id="FileMenu">
<property name="label">File</property>
</object>
<object class="GtkAction" id="SettingsMenu">
<property name="label">Settings</property>
</object>
<object class="GtkAction" id="ExportGCode">
<property name="label">Export Toolpaths</property>
<property name="tooltip">Write all current toolpaths to a file.</property>
<property name="stock_id">gtk-execute</property>
</object>
<object class="GtkAction" id="LoadProcessingTemplates">
<property name="label">Load Processing Settings</property>
<property name="tooltip">Loads a set of processing templates from a file.</property>
<property name="stock_id">gtk-open</property>
</object>
<object class="GtkAction" id="SaveProcessingTemplates">
<property name="label">Save Processing Settings</property>
<property name="tooltip">Save the currently visible set of processing templates to a file.</property>
<property name="stock_id">gtk-save</property>
</object>
<object class="GtkAction" id="SaveAsProcessingTemplates">
<property name="label">Save Processing Settings as ...</property>
<property name="tooltip">Save the currently visible set of processing templates to a new file.</property>
<property name="stock_id">gtk-save-as</property>
</object>
<object class="GtkAction" id="GeneralSettings">
<property name="label">Preferences</property>
<property name="tooltip">Configure PyCAM</property>
<property name="stock_id">gtk-preferences</property>
<property name="sensitive">False</property>
<property name="visible">False</property>
</object>
<object class="GtkAction" id="Quit">
<property name="label">Quit</property>
<property name="tooltip">Exit PyCAM</property>
<property name="stock_id">gtk-quit</property>
</object>
<object class="GtkAction" id="SaveModel">
<property name="label">Save Model</property>
<property name="tooltip">Save the current model to the STL file.</property>
<property name="stock_id">gtk-save</property>
</object>
<object class="GtkAction" id="WindowMenu">
<property name="label">Window</property>
</object>
<object class="GtkToggleAction" id="Toggle3DView">
<property name="label">3D View Window</property>
<property name="tooltip">Display the model in the 3D view window.</property>
</object>
<object class="GtkAction" id="SaveAsModel">
<property name="label">Save Model as ...</property>
<property name="short_label">Save Model as ...</property>
<property name="tooltip">Save the current model to a new STL file.</property>
<property name="stock_id">gtk-save-as</property>
</object>
</interface> </interface>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment