303 lines
13 KiB
Python
303 lines
13 KiB
Python
|
from gi.repository import Gtk
|
||
|
|
||
|
from FlatCAM_GTK import FCNoteBook
|
||
|
|
||
|
|
||
|
class FlatCAMGUI(Gtk.Window):
|
||
|
|
||
|
MENU = """
|
||
|
<ui>
|
||
|
<menubar name='MenuBar'>
|
||
|
<menu action='FileMenu'>
|
||
|
<menuitem action='FileNew'>
|
||
|
<separator />
|
||
|
|
||
|
<menuitem action='FileQuit' />
|
||
|
</menu>
|
||
|
</menubar>
|
||
|
<toolbar name='ToolBar'>
|
||
|
<toolitem action='FileNewStandard' />
|
||
|
<toolitem action='FileQuit' />
|
||
|
</toolbar>
|
||
|
</ui>
|
||
|
"""
|
||
|
|
||
|
def __init__(self):
|
||
|
"""
|
||
|
|
||
|
:return: The FlatCAM window.
|
||
|
:rtype: FlatCAM
|
||
|
"""
|
||
|
Gtk.Window.__init__(self, title="FlatCAM - 0.5")
|
||
|
self.set_default_size(200, 200)
|
||
|
|
||
|
vbox1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||
|
|
||
|
### Menu
|
||
|
# action_group = Gtk.ActionGroup("my_actions")
|
||
|
# self.add_file_menu_actions(action_group)
|
||
|
# #self.add_edit_menu_actions(action_group)
|
||
|
# #self.add_choices_menu_actions(action_group)
|
||
|
#
|
||
|
# uimanager = self.create_ui_manager()
|
||
|
# uimanager.insert_action_group(action_group)
|
||
|
#
|
||
|
# menubar = uimanager.get_widget("/MenuBar")
|
||
|
# vbox1.pack_start(menubar, False, False, 0)
|
||
|
#
|
||
|
# toolbar = uimanager.get_widget("/ToolBar")
|
||
|
# vbox1.pack_start(toolbar, False, False, 0)
|
||
|
|
||
|
menu = Gtk.MenuBar()
|
||
|
|
||
|
## File
|
||
|
menufile = Gtk.MenuItem.new_with_label('File')
|
||
|
menufile_menu = Gtk.Menu()
|
||
|
menufile.set_submenu(menufile_menu)
|
||
|
# New
|
||
|
self.menufilenew = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_NEW, None)
|
||
|
menufile_menu.append(self.menufilenew)
|
||
|
menufile_menu.append(Gtk.SeparatorMenuItem())
|
||
|
# Open recent
|
||
|
self.menufilerecent = Gtk.ImageMenuItem("Open Recent", image=Gtk.Image(stock=Gtk.STOCK_OPEN))
|
||
|
menufile_menu.append(self.menufilerecent)
|
||
|
menufile_menu.append(Gtk.SeparatorMenuItem())
|
||
|
# Open Gerber ...
|
||
|
self.menufileopengerber = Gtk.ImageMenuItem("Open Gerber ...", image=Gtk.Image(stock=Gtk.STOCK_OPEN))
|
||
|
menufile_menu.append(self.menufileopengerber)
|
||
|
# Open Excellon ...
|
||
|
self.menufileopenexcellon = Gtk.ImageMenuItem("Open Excellon ...", image=Gtk.Image(stock=Gtk.STOCK_OPEN))
|
||
|
menufile_menu.append(self.menufileopenexcellon)
|
||
|
# Open G-Code ...
|
||
|
self.menufileopengcode = Gtk.ImageMenuItem("Open G-Code ...", image=Gtk.Image(stock=Gtk.STOCK_OPEN))
|
||
|
menufile_menu.append(self.menufileopengcode)
|
||
|
menufile_menu.append(Gtk.SeparatorMenuItem())
|
||
|
# Open Project ...
|
||
|
self.menufileopenproject = Gtk.ImageMenuItem("Open Project ...", image=Gtk.Image(stock=Gtk.STOCK_OPEN))
|
||
|
menufile_menu.append(self.menufileopenproject)
|
||
|
menufile_menu.append(Gtk.SeparatorMenuItem())
|
||
|
# Save Project
|
||
|
self.menufilesaveproject = Gtk.ImageMenuItem("Save Project", image=Gtk.Image(stock=Gtk.STOCK_SAVE))
|
||
|
menufile_menu.append(self.menufilesaveproject)
|
||
|
# Save Project As ...
|
||
|
self.menufilesaveprojectas = Gtk.ImageMenuItem("Save Project As ...", image=Gtk.Image(stock=Gtk.STOCK_SAVE_AS))
|
||
|
menufile_menu.append(self.menufilesaveprojectas)
|
||
|
# Save Project Copy ...
|
||
|
self.menufilesaveprojectcopy = Gtk.ImageMenuItem("Save Project Copy ...", image=Gtk.Image(stock=Gtk.STOCK_SAVE_AS))
|
||
|
menufile_menu.append(self.menufilesaveprojectcopy)
|
||
|
menufile_menu.append(Gtk.SeparatorMenuItem())
|
||
|
# Save Defaults
|
||
|
self.menufilesavedefaults = Gtk.ImageMenuItem("Save Defaults", image=Gtk.Image(stock=Gtk.STOCK_SAVE))
|
||
|
menufile_menu.append(self.menufilesavedefaults)
|
||
|
menufile_menu.append(Gtk.SeparatorMenuItem())
|
||
|
# Quit
|
||
|
self.menufilequit = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_QUIT, None)
|
||
|
menufile_menu.append(self.menufilequit)
|
||
|
menu.append(menufile)
|
||
|
|
||
|
## Edit
|
||
|
menuedit = Gtk.MenuItem.new_with_label('Edit')
|
||
|
menu.append(menuedit)
|
||
|
menuedit_menu = Gtk.Menu()
|
||
|
menuedit.set_submenu(menuedit_menu)
|
||
|
# Delete
|
||
|
self.menueditdelete = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_DELETE, None)
|
||
|
menuedit_menu.append(self.menueditdelete)
|
||
|
|
||
|
## View
|
||
|
menuview = Gtk.MenuItem.new_with_label('View')
|
||
|
menu.append(menuview)
|
||
|
menuview_menu = Gtk.Menu()
|
||
|
menuview.set_submenu(menuview_menu)
|
||
|
# Disable all plots
|
||
|
self.menuviewdisableall = Gtk.ImageMenuItem("Disable all plots", image=Gtk.Image.new_from_file('share/clear_plot16.png'))
|
||
|
menuview_menu.append(self.menuviewdisableall)
|
||
|
self.menuviewdisableallbutthis = Gtk.ImageMenuItem("Disable all plots but this one", image=Gtk.Image.new_from_file('share/clear_plot16.png'))
|
||
|
menuview_menu.append(self.menuviewdisableallbutthis)
|
||
|
self.menuviewenableall = Gtk.ImageMenuItem("Enable all plots", image=Gtk.Image.new_from_file('share/replot16.png'))
|
||
|
menuview_menu.append(self.menuviewenableall)
|
||
|
|
||
|
## Options
|
||
|
menuoptions = Gtk.MenuItem.new_with_label('Options')
|
||
|
menu.append(menuoptions)
|
||
|
menuoptions_menu = Gtk.Menu()
|
||
|
menuoptions.set_submenu(menuoptions_menu)
|
||
|
# Transfer Options
|
||
|
menutransferoptions = Gtk.ImageMenuItem("Transfer Options", image=Gtk.Image.new_from_file('share/copy16.png'))
|
||
|
menuoptions_menu.append(menutransferoptions)
|
||
|
menutransferoptions_menu = Gtk.Menu()
|
||
|
menutransferoptions.set_submenu(menutransferoptions_menu)
|
||
|
self.menutransferoptions_p2a = Gtk.ImageMenuItem("Project to App", image=Gtk.Image.new_from_file('share/copy16.png'))
|
||
|
menutransferoptions_menu.append(self.menutransferoptions_p2a)
|
||
|
self.menutransferoptions_a2p = Gtk.ImageMenuItem("App to Project", image=Gtk.Image.new_from_file('share/copy16.png'))
|
||
|
menutransferoptions_menu.append(self.menutransferoptions_a2p)
|
||
|
self.menutransferoptions_o2p = Gtk.ImageMenuItem("Object to Project", image=Gtk.Image.new_from_file('share/copy16.png'))
|
||
|
menutransferoptions_menu.append(self.menutransferoptions_o2p)
|
||
|
self.menutransferoptions_o2a = Gtk.ImageMenuItem("Object to App", image=Gtk.Image.new_from_file('share/copy16.png'))
|
||
|
menutransferoptions_menu.append(self.menutransferoptions_o2a)
|
||
|
self.menutransferoptions_p2o = Gtk.ImageMenuItem("Project to Object", image=Gtk.Image.new_from_file('share/copy16.png'))
|
||
|
menutransferoptions_menu.append(self.menutransferoptions_p2o)
|
||
|
self.menutransferoptions_a2o = Gtk.ImageMenuItem("App to Object", image=Gtk.Image.new_from_file('share/copy16.png'))
|
||
|
menutransferoptions_menu.append(self.menutransferoptions_a2o)
|
||
|
|
||
|
## Tools
|
||
|
menutools = Gtk.MenuItem.new_with_label('Tools')
|
||
|
menu.append(menutools)
|
||
|
menutools_menu = Gtk.Menu()
|
||
|
menutools.set_submenu(menutools_menu)
|
||
|
# Double Sided PCB tool
|
||
|
self.menutools_dblsided = Gtk.ImageMenuItem("Double-Sided PCB Tool", image=Gtk.Image(stock=Gtk.STOCK_PREFERENCES))
|
||
|
menutools_menu.append(self.menutools_dblsided)
|
||
|
|
||
|
## Help
|
||
|
menuhelp = Gtk.MenuItem.new_with_label('Help')
|
||
|
menu.append(menuhelp)
|
||
|
menuhelp_menu = Gtk.Menu()
|
||
|
menuhelp.set_submenu(menuhelp_menu)
|
||
|
# About
|
||
|
self.menuhelpabout = Gtk.ImageMenuItem("About", image=Gtk.Image(stock=Gtk.STOCK_ABOUT))
|
||
|
menuhelp_menu.append(self.menuhelpabout)
|
||
|
# Updates
|
||
|
self.menuhelpupdates = Gtk.ImageMenuItem("Check for updates", image=Gtk.Image(stock=Gtk.STOCK_DIALOG_INFO))
|
||
|
menuhelp_menu.append(self.menuhelpupdates)
|
||
|
|
||
|
vbox1.pack_start(menu, False, False, 0)
|
||
|
### End of menu
|
||
|
|
||
|
###############
|
||
|
### Toolbar ###
|
||
|
###############
|
||
|
self.toolbar = Gtk.Toolbar(toolbar_style=Gtk.ToolbarStyle.ICONS)
|
||
|
vbox1.pack_start(self.toolbar, False, False, 0)
|
||
|
|
||
|
# Zoom fit
|
||
|
zf_ico = Gtk.Image.new_from_file('share/zoom_fit32.png')
|
||
|
self.zoom_fit_btn = Gtk.ToolButton.new(zf_ico, "")
|
||
|
#zoom_fit.connect("clicked", self.on_zoom_fit)
|
||
|
self.zoom_fit_btn.set_tooltip_markup("Zoom Fit.\n(Click on plot and hit <b>1</b>)")
|
||
|
self.toolbar.insert(self.zoom_fit_btn, -1)
|
||
|
|
||
|
# Zoom out
|
||
|
zo_ico = Gtk.Image.new_from_file('share/zoom_out32.png')
|
||
|
self.zoom_out_btn = Gtk.ToolButton.new(zo_ico, "")
|
||
|
#zoom_out.connect("clicked", self.on_zoom_out)
|
||
|
self.zoom_out_btn.set_tooltip_markup("Zoom Out.\n(Click on plot and hit <b>2</b>)")
|
||
|
self.toolbar.insert(self.zoom_out_btn, -1)
|
||
|
|
||
|
# Zoom in
|
||
|
zi_ico = Gtk.Image.new_from_file('share/zoom_in32.png')
|
||
|
self.zoom_in_btn = Gtk.ToolButton.new(zi_ico, "")
|
||
|
#zoom_in.connect("clicked", self.on_zoom_in)
|
||
|
self.zoom_in_btn.set_tooltip_markup("Zoom In.\n(Click on plot and hit <b>3</b>)")
|
||
|
self.toolbar.insert(self.zoom_in_btn, -1)
|
||
|
|
||
|
# Clear plot
|
||
|
cp_ico = Gtk.Image.new_from_file('share/clear_plot32.png')
|
||
|
self.clear_plot_btn = Gtk.ToolButton.new(cp_ico, "")
|
||
|
#clear_plot.connect("clicked", self.on_clear_plots)
|
||
|
self.clear_plot_btn.set_tooltip_markup("Clear Plot")
|
||
|
self.toolbar.insert(self.clear_plot_btn, -1)
|
||
|
|
||
|
# Replot
|
||
|
rp_ico = Gtk.Image.new_from_file('share/replot32.png')
|
||
|
self.replot_btn = Gtk.ToolButton.new(rp_ico, "")
|
||
|
#replot.connect("clicked", self.on_toolbar_replot)
|
||
|
self.replot_btn.set_tooltip_markup("Re-plot all")
|
||
|
self.toolbar.insert(self.replot_btn, -1)
|
||
|
|
||
|
# Delete item
|
||
|
del_ico = Gtk.Image.new_from_file('share/delete32.png')
|
||
|
self.delete_btn = Gtk.ToolButton.new(del_ico, "")
|
||
|
#delete.connect("clicked", self.on_delete)
|
||
|
self.delete_btn.set_tooltip_markup("Delete selected\nobject.")
|
||
|
self.toolbar.insert(self.delete_btn, -1)
|
||
|
|
||
|
#############
|
||
|
### Paned ###
|
||
|
#############
|
||
|
hpane = Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)
|
||
|
vbox1.pack_start(hpane, expand=True, fill=True, padding=0)
|
||
|
|
||
|
################
|
||
|
### Notebook ###
|
||
|
################
|
||
|
self.notebook = FCNoteBook()
|
||
|
hpane.pack1(self.notebook)
|
||
|
|
||
|
#################
|
||
|
### Plot area ###
|
||
|
#################
|
||
|
# self.plotarea = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||
|
self.plotarea = Gtk.Grid()
|
||
|
self.plotarea_super = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||
|
self.plotarea_super.pack_start(self.plotarea, expand=True, fill=True, padding=0)
|
||
|
hpane.pack2(self.plotarea_super)
|
||
|
|
||
|
################
|
||
|
### Info bar ###
|
||
|
################
|
||
|
infobox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||
|
vbox1.pack_start(infobox, expand=False, fill=True, padding=0)
|
||
|
## Frame
|
||
|
frame = Gtk.Frame(margin=2, hexpand=True, halign=0)
|
||
|
infobox.pack_start(frame, expand=True, fill=True, padding=0)
|
||
|
self.info_label = Gtk.Label("Not started.", margin=2, hexpand=True)
|
||
|
frame.add(self.info_label)
|
||
|
## Coordinate Label
|
||
|
self.position_label = Gtk.Label("X: 0.0 Y: 0.0", margin_left=4, margin_right=4)
|
||
|
infobox.pack_start(self.position_label, expand=False, fill=False, padding=0)
|
||
|
## Units label
|
||
|
self.units_label = Gtk.Label("[in]", margin_left=4, margin_right=4)
|
||
|
infobox.pack_start(self.units_label, expand=False, fill=False, padding=0)
|
||
|
## Progress bar
|
||
|
self.progress_bar = Gtk.ProgressBar(margin=2)
|
||
|
infobox.pack_start(self.progress_bar, expand=False, fill=False, padding=0)
|
||
|
|
||
|
self.add(vbox1)
|
||
|
self.show_all()
|
||
|
|
||
|
# def create_ui_manager(self):
|
||
|
# uimanager = Gtk.UIManager()
|
||
|
#
|
||
|
# # Throws exception if something went wrong
|
||
|
# uimanager.add_ui_from_string(FlatCAM.MENU)
|
||
|
#
|
||
|
# # Add the accelerator group to the toplevel window
|
||
|
# accelgroup = uimanager.get_accel_group()
|
||
|
# self.add_accel_group(accelgroup)
|
||
|
# return uimanager
|
||
|
#
|
||
|
# def add_file_menu_actions(self, action_group):
|
||
|
# action_filemenu = Gtk.Action("FileMenu", "File", None, None)
|
||
|
# action_group.add_action(action_filemenu)
|
||
|
#
|
||
|
# action_filenewmenu = Gtk.Action("FileNew", None, None, Gtk.STOCK_NEW)
|
||
|
# action_group.add_action(action_filenewmenu)
|
||
|
#
|
||
|
# action_new = Gtk.Action("FileNewStandard", "_New",
|
||
|
# "Create a new file", Gtk.STOCK_NEW)
|
||
|
# action_new.connect("activate", self.on_menu_file_new_generic)
|
||
|
# action_group.add_action_with_accel(action_new, None)
|
||
|
#
|
||
|
# action_group.add_actions([
|
||
|
# ("FileNewFoo", None, "New Foo", None, "Create new foo",
|
||
|
# self.on_menu_file_new_generic),
|
||
|
# ("FileNewGoo", None, "_New Goo", None, "Create new goo",
|
||
|
# self.on_menu_file_new_generic),
|
||
|
# ])
|
||
|
#
|
||
|
# action_filequit = Gtk.Action("FileQuit", None, None, Gtk.STOCK_QUIT)
|
||
|
# action_filequit.connect("activate", self.on_menu_file_quit)
|
||
|
# action_group.add_action(action_filequit)
|
||
|
#
|
||
|
# def on_menu_file_new_generic(self, widget):
|
||
|
# print("A File|New menu item was selected.")
|
||
|
#
|
||
|
# def on_menu_file_quit(self, widget):
|
||
|
# Gtk.main_quit()
|
||
|
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
flatcam = FlatCAMGUI()
|
||
|
Gtk.main()
|