Example #1
0
    def do_page_setup(self, win):
        if PuzzlePrinter.settings is None:
            PuzzlePrinter.settings = gtk.PrintSettings()

        r = gtk.print_run_page_setup_dialog(win, PuzzlePrinter.page_setup,
                                            PuzzlePrinter.settings)
        PuzzlePrinter.page_setup = r
Example #2
0
 def get_print_operation(self):
     """Return a Print Operation"""
     print_operation = gtk.PrintOperation()
     print_operation.set_show_progress(True)
     if self.page_setup is None: self.page_setup = gtk.PageSetup()
     if self.settings is None: self.settings = gtk.PrintSettings()
     print_operation.set_default_page_setup(self.page_setup)
     print_operation.set_print_settings(self.settings)
     return print_operation
Example #3
0
def present_page_setup_dialog(page_setup):
    old_setup = page_setup._gtk_page_setup
    ps = gtk.PrintSettings()
    new_setup = gtk.print_run_page_setup_dialog(None, old_setup, ps)
    if get_gtk_state(old_setup) <> get_gtk_state(new_setup):
        page_setup._gtk_page_setup = new_setup
        return True
    else:
        return False
Example #4
0
 def _print(self, frame):
     print_op = gtk.PrintOperation()
     print_settings = print_op.get_print_settings() or gtk.PrintSettings()
     print_settings.set_paper_size(self._paper_size)
     print_op.set_print_settings(print_settings)
     print_op.set_export_filename(os.path.abspath(self.outfile))
     logging.info('Exporting PDF...')
     print_op.connect('end-print', self._end_print_cb)
     try:
         frame.print_full(print_op, gtk.PRINT_OPERATION_ACTION_EXPORT)
         while gtk.events_pending():
             gtk.main_iteration()
     except gobject.GError, e:
         logging.error(e.message)
Example #5
0
    def _load_settings(self):
        self.config_dir = get_application_dir('stoq')

        settings = gtk.PrintSettings()
        filename = os.path.join(self.config_dir, self.print_settings_name)
        if os.path.exists(filename):
            settings.load_file(filename)
        self.set_print_settings(settings)

        default_page_setup = gtk.PageSetup()
        default_page_setup.set_orientation(gtk.PAGE_ORIENTATION_PORTRAIT)
        filename = os.path.join(self.config_dir, self.page_setup_name)
        if os.path.exists(filename):
            default_page_setup.load_file(filename)
        self.set_default_page_setup(default_page_setup)
Example #6
0
 def _load_finished_cb(self, view, frame, outfile):
     self._print_status('Loading done')
     print_op = gtk.PrintOperation()
     print_settings = print_op.get_print_settings() or gtk.PrintSettings()
     print_settings.set_paper_size(self._paper_size)
     print_op.set_print_settings(print_settings)
     print_op.set_export_filename(os.path.abspath(outfile))
     self._print_status('Exporting PDF...')
     print_op.connect('end-print', self._end_print_cb)
     try:
         frame.print_full(print_op, gtk.PRINT_OPERATION_ACTION_EXPORT)
         while gtk.events_pending():
             gtk.main_iteration()
     except gobject.GError, e:
         self._print_error(e.message)
Example #7
0
    def __init__(self, content, cols_width, heading=None):
        #        self.lines_per_page = 24
        self.cell_margin = 4
        self.line = 2  #the thinest possible width of lines.
        self.row_height = 2 * (config.contentfont + self.cell_margin)
        self.header_height = 0
        self.heading_height = 35

        self.operation = gtk.PrintOperation()
        settings = gtk.PrintSettings()
        paper_size = gtk.paper_size_new_from_ppd(config.paper_ppd,
                                                 config.paper_name,
                                                 config.paper_width,
                                                 config.paper_height)
        self.page_setup = gtk.PageSetup()
        self.page_setup.set_paper_size(paper_size)
        self.page_setup.set_orientation(config.paper_orientation)
        #        self.page_setup = gtk.print_run_page_setup_dialog(None, self.page_setup, settings)

        self.page_setup.set_top_margin(config.topmargin, gtk.UNIT_POINTS)
        self.page_setup.set_bottom_margin(config.botmargin, gtk.UNIT_POINTS)
        self.page_setup.set_right_margin(config.rightmargin, gtk.UNIT_POINTS)
        self.page_setup.set_left_margin(config.leftmargin, gtk.UNIT_POINTS)

        self.operation.set_default_page_setup(self.page_setup)
        self.operation.set_unit(gtk.UNIT_POINTS)

        self.content = content
        tablewidth = self.page_setup.get_page_width(gtk.UNIT_POINTS)
        tablewidth -= (len(cols_width) *
                       (self.line + self.cell_margin)) + self.line + (
                           config.rightmargin + config.leftmargin)
        self.cols_width = []
        for percent in cols_width:
            self.cols_width.append(math.floor((percent * tablewidth) / 100))
#        self.cols_width = cols_width
        self.heading = heading

        self.operation.connect("begin_print", self.beginPrint)
        self.operation.connect("draw-page", self.printPage)
        self.type = 0
        self.title = ""
        self.fields = {}
Example #8
0
    def __init__(self, configpath=None, etype='rms'):
        """Meet constructor."""
        # logger and log handler
        self.log = logging.getLogger('scbdo')
        self.log.setLevel(logging.DEBUG)
        self.loghandler = None  # set in loadconfig to meet dir

        if etype not in ROADRACE_TYPES:
            etype = 'rms'  # Default is 'road mass start'
        self.etype = etype

        # meet configuration path and options
        if configpath is None:
            configpath = '.'  # None assumes 'current dir'
        self.configpath = configpath
        self.line1 = ''
        self.line2 = ''
        self.line3 = ''
        self.bibs_in_results = True
        self.cats_in_results = False
        self.distance = 20  # Race distance in km (integer!)
        self.logos = ''  # string list of logo filenames
        self.docindex = 0

        # printer preferences
        self.printprefs = gtk.PrintSettings()  # filled in with loadconfig

        # hardware connections
        self.timer = timy.timy()
        self.timer_port = ''
        self.rfu = wheeltime.wheeltime()
        self.rfu_addr = ''
        self.scb = uscbsrv.uscbsrv()

        b = gtk.Builder()
        b.add_from_file(os.path.join(scbdo.UI_PATH, 'roadmeet.ui'))
        self.window = b.get_object('meet')
        self.window.connect('key-press-event', self.key_event)
        self.clock = b.get_object('menu_clock')
        self.clock_label = b.get_object('menu_clock_label')
        self.clock_label.modify_font(pango.FontDescription("monospace"))
        self.menu_rfustat_img = b.get_object('menu_rfustat_img')
        self.status = b.get_object('status')
        self.log_buffer = b.get_object('log_buffer')
        self.log_view = b.get_object('log_view')
        self.log_view.modify_font(pango.FontDescription("monospace 12"))
        self.log_scroll = b.get_object('log_box').get_vadjustment()
        self.context = self.status.get_context_id('SCBdo Meet')
        self.menu_race_close = b.get_object('menu_race_close')
        self.menu_race_abort = b.get_object('menu_race_abort')
        self.race_box = b.get_object('race_box')
        self.stat_but = b.get_object('race_stat_but')
        self.action_model = b.get_object('race_action_model')
        self.action_combo = b.get_object('race_action_combo')
        self.action_entry = b.get_object('race_action_entry')
        b.get_object('race_tab_img').set_from_file(scbdo.SCB_LOGOFILE)
        b.connect_signals(self)

        # run state
        self.running = True
        self.started = False
        self.curevent = None
        self.rfustat = False
        self.rfid_cb = None

        # format and connect status and log handlers
        f = logging.Formatter('%(levelname)s:%(name)s: %(message)s')
        self.sh = loghandler.statusHandler(self.status, self.context)
        self.sh.setLevel(logging.INFO)  # show info upon status bar
        self.sh.setFormatter(f)
        self.log.addHandler(self.sh)
        self.lh = loghandler.textViewHandler(self.log_buffer, self.log_view,
                                             self.log_scroll)
        self.lh.setLevel(logging.INFO)  # show info up in log view
        self.lh.setFormatter(f)
        self.log.addHandler(self.lh)

        # scrachpad buffer
        self.scratch_buf = b.get_object('scratch_buffer')
        self.scratch_idx = 0
        b.get_object('scratch_view').modify_font(
            pango.FontDescription("monospace 18"))

        # get rider db and pack into a dialog
        self.rdb = riderdb.riderdb()
        b.get_object('riders_box').add(
            self.rdb.mkview(cat=True, series=False, refid=True))

        # select event page in notebook.
        b.get_object('meet_nb').set_current_page(1)

        # get event db -> loadconfig makes event if not already made
        self.edb = eventdb.eventdb([])

        # start timer
        glib.timeout_add_seconds(1, self.timeout)
Example #9
0
from GUI.GPrinting import PageSetup as GPageSetup, Printable as GPrintable, \
    Paginator

gtk_paper_names = [
    gtk.PAPER_NAME_A3,
    gtk.PAPER_NAME_A4,
    gtk.PAPER_NAME_A5,
    gtk.PAPER_NAME_B5,
    gtk.PAPER_NAME_LETTER,
    gtk.PAPER_NAME_EXECUTIVE,
    gtk.PAPER_NAME_LEGAL,
]

gtk_paper_formats = {}

gtk_print_settings = gtk.PrintSettings()

def init_gtk_paper_formats():
    for gtk_name in gtk_paper_names:
        display_name = gtk.PaperSize(gtk_name).get_display_name()
        gtk_paper_formats[display_name] = gtk_name

init_gtk_paper_formats()

def gtk_default_page_setup():
    pset = gtk.PageSetup()
    pset.set_paper_size(gtk.PaperSize())
    return pset

def get_gtk_state(gtk_page_setup):
    state = {}
Example #10
0
 def reportPaperSetup(self, sender):
     settings = gtk.PrintSettings()
     self.page_setup = gtk.print_run_page_setup_dialog(None, self.page_setup, settings)
     self.builder.get_object("papersize").set_text(self.page_setup.get_paper_size().get_display_name())
Example #11
0
def do_page_setup(action):
    global settings, page_setup
    if settings is None:
        settings = gtk.PrintSettings()
    page_setup = gtk.print_run_page_setup_dialog(main_window,
                                                 page_setup, settings)
Example #12
0
    def get_print_settings(self):
        if self.__print_settings is None:
            self.__print_settings = gtk.PrintSettings()

        return self.__print_settings
Example #13
0
    def __init__(self):
        """initialise a new puzzle"""

        #Set the environment variables and default display settings
        self.local_path = os.path.realpath(os.path.dirname(sys.argv[0]))
        self.gladefile = os.path.join(self.local_path, 'assets',
                                      "findthatword.glade")
        self.show_title = True
        self.show_grid = True
        self.show_words = True
        self.show_solution = True

        #Initialise the Glade GUI environment
        self.widget_tree = gtk.glade.XML(self.gladefile, "MainWindow")
        self.widget_tree.signal_autoconnect(self)
        self.main_window = self.widget_tree.get_widget("MainWindow")

        #Draw the icon.  Unofortunately, not all operating systems can accept SVGs
        if os.name == 'posix':
            icon_file = os.path.join(self.local_path, 'assets',
                                     "ftw_small.svg")
            self.main_window.set_icon_from_file(icon_file)
        else:
            icon_file = os.path.join(self.local_path, 'assets' "ftw_small.ico")
            self.main_window.set_icon_from_file(icon_file)

        #Disable printing support on Windows - the GTK page setup dialogue doesn't
        #work so the printed puzzle is incorrectly scaled to the page
        if os.name == 'nt' or os.name == 'ce':
            self.widget_tree.get_widget("PrintIcon").hide()
            self.widget_tree.get_widget("FilePageSetupMenuItem").hide()
            self.widget_tree.get_widget("FilePrintMenuItem").hide()
            self.widget_tree.get_widget("separatormenuitem2").hide()

        #Setup the Recent Files menu if the modules are available
        recent_widget = self.widget_tree.get_widget("FileRecentMenuItem")
        if RECENT_CHOOSER:
            recent_manager = gtk.recent_manager_get_default()
            recent_chooser = gtk.RecentChooserMenu(recent_manager)
            recent_filter = gtk.RecentFilter()
            recent_filter.add_pattern("*.ftw")
            recent_chooser.add_filter(recent_filter)
            recent_chooser.set_show_not_found(False)
            recent_chooser.connect("item-activated",
                                   self.on_RecentChooser_activate)
            recent_widget.set_submenu(recent_chooser)
        else:
            recent_widget.hide()

        #Create a permanent reference to frequently used widgets
        self.new_word_entry_widget = self.widget_tree.get_widget(
            "NewWordEntry")
        self.new_description_entry_widget = self.widget_tree.get_widget(
            "NewDescriptionEntry")
        self.words_view_widget = self.widget_tree.get_widget("WordsView")

        #Initialise the WordsView widget
        for i in range(0, 2):
            column = gtk.TreeViewColumn("Word", gtk.CellRendererText(), text=i)
            column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
            self.words_view_widget.append_column(column)
            column.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE)
        self.words_list = gtk.ListStore(gobject.TYPE_STRING,
                                        gobject.TYPE_STRING)
        self.words_view_widget.set_model(self.words_list)
        self.words_view_widget_selection = self.words_view_widget.get_selection(
        )

        #Manually connect signals where Glade provides no options
        self.widget_tree.get_widget("NarrativeEntry").get_buffer().connect(
            "changed", self.on_NarrativeWidget_changed)
        self.words_view_widget_selection.connect(
            'changed', self.on_WordsListWidgetSelection_changed)

        #Initialise print settings
        self.print_settings = None
        self.print_settings = gtk.PrintSettings()
        self.page_setup = gtk.PageSetup()

        #Create and display a new puzzle
        self.dirty = False

        #Let's celelebrate being Welsh
        if datetime.date.today().month == 3 and datetime.date.today().day == 1:
            self.st_davids_day = True
        else:
            self.st_davids_day = False
        self.new_puzzle()

        #Find the name of a file passed on the command line
        if len(sys.argv) >= 2:
            self.load_file(sys.argv[len(sys.argv) - 1], "Filename")
Example #14
0
    def __init__(self):
        gtk.Window.__init__(self)
        self.set_size_request(640, 480)
        self.set_default_size(1366, 768)
        #self.set_default_size(800, 600)
        self.winstate = 0
        self.maximize()
        self.connect("delete-event", self.quit)

        self.bindings = gtk.AccelGroup()
        self.add_accel_group(self.bindings)

        self.setup = gtk.PageSetup()
        self.settings = gtk.PrintSettings()

        self.filename = None
        self.update_title()

        icon = gtk.gdk.pixbuf_new_from_file(
            os.path.join(os.path.dirname(__file__), "..", "images",
                         "canvas-logo.png"))
        self.set_icon(icon)

        vbox = gtk.VBox()
        self.add(vbox)

        self.menu = MenuBar(self)
        vbox.pack_start(self.menu, False, False)

        self.menu.append_menu("_" + _("File"))
        self.menu.append_item(gtk.STOCK_NEW, "new", "<Control>N")
        self.menu.append_item(gtk.STOCK_OPEN, "open", "<Control>O")
        self.menu.append_item(gtk.STOCK_SAVE, "save", "<Control>S")
        self.menu.append_item(gtk.STOCK_SAVE_AS, "save-as",
                              "<Control><Shift>S")
        self.menu.append_separator()
        self.menu.append_item(gtk.STOCK_PAGE_SETUP, "page-setup")
        self.menu.append_item(gtk.STOCK_PRINT_PREVIEW, "print-preview",
                              "<Control><Shift>P")
        self.menu.append_item(gtk.STOCK_PRINT, "print", "<Control>P")
        self.menu.append_separator()
        self.menu.append_menu("_" + _("Document"), True)
        self.menu.append_item(SET_BACKGROUND, "set-background")
        self.menu.ascend()
        self.menu.append_separator()
        self.menu.append_menu("_" + _("Export"), True)
        self.menu.append_item(EXPORT_TO_PDF, "export-to-pdf")
        self.menu.ascend()
        self.menu.append_separator()
        self.menu.append_item(gtk.STOCK_QUIT, "quit", "<Control>Q")

        self.menu.append_menu("_" + _("Edit"))
        self.menu.append_item(gtk.STOCK_UNDO, "undo", "<Control>Z")
        self.menu.append_item(gtk.STOCK_REDO, "redo", "<Control>Y")
        self.menu.append_separator()
        self.menu.append_item(gtk.STOCK_COPY, "copy", "<Control>C")
        self.menu.append_item(gtk.STOCK_CUT, "cut", "<Control>X")
        self.menu.append_item(gtk.STOCK_PASTE, "paste", "<Control>V")
        self.menu.append_separator()
        self.menu.append_item(gtk.STOCK_DELETE, "delete", "Delete")
        self.menu.append_separator()
        self.menu.append_item(gtk.STOCK_SELECT_ALL, "select-all", "<Control>A")

        self.menu.append_menu("_" + _("View"))
        self.menu.append_toggle(MARGINS_ENABLED, "margins")
        self.menu.append_toggle(GRID, "grid")
        self.menu.append_toggle(GUIDES, "guides")
        self.menu.append_toggle(SNAP_ENABLED, "snap")
        self.menu.append_toggle(_("Z-Order hint"), "hints", toggled=False)
        self.menu.append_separator()
        self.menu.append_toggle(gtk.STOCK_PROPERTIES, "properties")
        self.menu.append_toggle(_("Menubar"), "menubar")
        self.menu.append_toggle(_("Statusbar"), "statusbar")

        self.menu.append_menu("_" + _("Insert"))
        self.menu.append_item(LINE, "line")
        self.menu.append_item(ARC, "arc")
        self.menu.append_item(CURVE, "curve")
        self.menu.append_item(CONNECTOR, "connector")
        self.menu.append_menu(BOX, "box", True)
        self.menu.append_item(BOX, "box")
        self.menu.append_item(SPLIT_HORIZONTALLY, "split-horizontally")
        self.menu.append_item(SPLIT_VERTICALLY, "split-vertically")
        self.menu.append_item(REMOVE_SPLIT, "remove-split")
        self.menu.ascend()
        self.menu.append_item(ROUNDED_BOX, "rounded-box")
        self.menu.append_item(TEXT, "text")
        self.menu.append_item(TABLE, "table")
        self.menu.append_item(CHART, "chart")
        self.menu.append_item(BARCODE, "barcode")
        self.menu.append_item(IMAGE, "image")

        self.menu.append_menu("_" + _("Format"))
        self.menu.append_item(gtk.STOCK_SELECT_FONT, "select-font")
        self.menu.append_separator()
        self.menu.append_item(gtk.STOCK_SELECT_COLOR, "select-color")

        self.menu.append_menu("_" + _("Tools"))
        self.menu.append_item(GROUP, "group", "<Control>G")
        self.menu.append_item(UNGROUP, "ungroup", "<Control><Shift>G")
        self.menu.append_separator()
        self.menu.append_item(BRING_TO_FRONT, "bring-to-front",
                              "<Control>plus")
        self.menu.append_item(BRING_TO_BACK, "bring-to-back", "<Control>minus")
        self.menu.append_separator()
        self.menu.append_menu("_" + _("Zoom"), True)
        self.menu.append_item(gtk.STOCK_ZOOM_FIT, "zoom-fit", "<Control>0")
        self.menu.append_item(gtk.STOCK_ZOOM_100, "zoom-100", "<Control>1")
        self.menu.append_item(gtk.STOCK_ZOOM_IN, "zoom-in",
                              "<Control><Shift>plus")
        self.menu.append_item(gtk.STOCK_ZOOM_OUT, "zoom-out",
                              "<Control><Shift>minus")
        self.menu.ascend()
        self.menu.append_separator()
        self.menu.append_menu("_" + _("Objects alignment"), True)
        self.menu.append_item(ALIGN_OBJECTS_NORTHWEST,
                              "align-objects-northwest")
        self.menu.append_item(ALIGN_OBJECTS_NORTH, "align-objects-north")
        self.menu.append_item(ALIGN_OBJECTS_NORTHEAST,
                              "align-objects-northeast")
        self.menu.append_item(ALIGN_OBJECTS_SOUTHWEST,
                              "align-objects-southwest")
        self.menu.append_item(ALIGN_OBJECTS_SOUTH, "align-objects-south")
        self.menu.append_item(ALIGN_OBJECTS_SOUTHEAST,
                              "align-objects-southeast")
        self.menu.append_item(ALIGN_OBJECTS_WEST, "align-objects-west")
        self.menu.append_item(ALIGN_OBJECTS_CENTER_BOTH,
                              "align-objects-center-both")
        self.menu.append_item(ALIGN_OBJECTS_EAST, "align-objects-east")
        self.menu.append_item(ALIGN_OBJECTS_CENTER_HORIZONTAL,
                              "align-objects-center-horizontal")
        self.menu.append_item(ALIGN_OBJECTS_CENTER_VERTICAL,
                              "align-objects-center-vertical")
        self.menu.ascend()
        self.menu.append_menu("_" + _("Paper alignment"), True)
        self.menu.append_item(ALIGN_PAPER_NORTHWEST, "align-paper-northwest")
        self.menu.append_item(ALIGN_PAPER_NORTH, "align-paper-north")
        self.menu.append_item(ALIGN_PAPER_NORTHEAST, "align-paper-northeast")
        self.menu.append_item(ALIGN_PAPER_SOUTHWEST, "align-paper-southwest")
        self.menu.append_item(ALIGN_PAPER_SOUTH, "align-paper-south")
        self.menu.append_item(ALIGN_PAPER_SOUTHEAST, "align-paper-southeast")
        self.menu.append_item(ALIGN_PAPER_WEST, "align-paper-west")
        self.menu.append_item(ALIGN_PAPER_CENTER_BOTH,
                              "align-paper-center-both")
        self.menu.append_item(ALIGN_PAPER_EAST, "align-paper-east")
        self.menu.append_item(ALIGN_PAPER_CENTER_HORIZONTAL,
                              "align-paper-center-horizontal")
        self.menu.append_item(ALIGN_PAPER_CENTER_VERTICAL,
                              "align-paper-center-vertical")
        self.menu.ascend()

        self.menu.append_menu("_" + _("Window"))
        self.menu.append_item(gtk.STOCK_FULLSCREEN, "fullscreen", "<Control>F")

        self.menu.append_menu("_" + _("Help"), right=True)
        self.menu.append_item(gtk.STOCK_HELP, "help", "F1")
        self.menu.append_separator()
        self.menu.append_item(gtk.STOCK_ABOUT, "about")

        self.menu.show_all()

        htoolbar = Toolbar(HORIZONTAL)
        vbox.pack_start(htoolbar, False, False)

        htoolbar.append(gtk.STOCK_NEW, "new")
        htoolbar.append(gtk.STOCK_OPEN, "open")
        htoolbar.append(gtk.STOCK_SAVE, "save")
        htoolbar.append_separator()
        htoolbar.append(gtk.STOCK_PRINT, "print")
        htoolbar.append_separator()
        htoolbar.append(gtk.STOCK_UNDO, "undo")
        htoolbar.append(gtk.STOCK_REDO, "redo")
        htoolbar.append_separator()
        htoolbar.append(gtk.STOCK_CUT, "cut")
        htoolbar.append(gtk.STOCK_COPY, "copy")
        htoolbar.append(gtk.STOCK_PASTE, "paste")
        htoolbar.append_separator()
        htoolbar.append(gtk.STOCK_DELETE, "delete")
        htoolbar.append_separator()
        htoolbar.append_with_submenu(LINE_STYLE_CONTINUOUS,
                                     "line-style-continuous")
        htoolbar.append_to_submenu(LINE_STYLE_POINT_DASH,
                                   "line-style-point-dash")
        htoolbar.append_to_submenu(LINE_STYLE_POINT, "line-style-point")
        htoolbar.append_to_submenu(LINE_STYLE_DASH, "line-style-dash")
        htoolbar.append_separator()
        htoolbar.append_with_submenu(gtk.STOCK_ZOOM_FIT, "zoom-fit")
        htoolbar.append_to_submenu(gtk.STOCK_ZOOM_100, "zoom-100")
        htoolbar.append_to_submenu(gtk.STOCK_ZOOM_IN, "zoom-in")
        htoolbar.append_to_submenu(gtk.STOCK_ZOOM_OUT, "zoom-out")
        htoolbar.append_separator()
        htoolbar.append_toggle(MARGINS_ENABLED, "margins")
        htoolbar.append_toggle(GRID, "grid")
        htoolbar.append_toggle(GUIDES, "guides")
        htoolbar.append_toggle(SNAP_ENABLED, "snap")
        htoolbar.append_separator()
        htoolbar.append(EXPORT_TO_PDF, "export-to-pdf")
        htoolbar.append_separator()
        htoolbar.append_toggle(GROUP, "group")
        htoolbar.append_separator()
        htoolbar.append(BRING_TO_FRONT, "bring-to-front")
        htoolbar.append(BRING_TO_BACK, "bring-to-back")
        htoolbar.append_separator()
        htoolbar.append_with_submenu(ALIGN_OBJECTS_CENTER_BOTH,
                                     "align-object-center-both")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_NORTHWEST,
                                   "align-object-northwest")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_NORTH, "align-object-north")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_SOUTHWEST,
                                   "align-object-southwest")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_NORTHEAST,
                                   "align-object-northeast")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_SOUTH, "align-object-south")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_SOUTHEAST,
                                   "align-object-southeast")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_WEST, "align-object-west")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_EAST, "align-object-east")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_CENTER_HORIZONTAL,
                                   "align-object-center-horizontal")
        htoolbar.append_to_submenu(ALIGN_OBJECTS_CENTER_VERTICAL,
                                   "align-object-center-vertical")
        htoolbar.append_with_submenu(ALIGN_PAPER_CENTER_BOTH,
                                     "align-paper-center-both")
        htoolbar.append_to_submenu(ALIGN_PAPER_NORTHWEST,
                                   "align-paper-northwest")
        htoolbar.append_to_submenu(ALIGN_PAPER_NORTH, "align-paper-north")
        htoolbar.append_to_submenu(ALIGN_PAPER_SOUTHWEST,
                                   "align-paper-southwest")
        htoolbar.append_to_submenu(ALIGN_PAPER_NORTHEAST,
                                   "align-paper-northeast")
        htoolbar.append_to_submenu(ALIGN_PAPER_SOUTH, "align-paper-south")
        htoolbar.append_to_submenu(ALIGN_PAPER_SOUTHEAST,
                                   "align-paper-southeast")
        htoolbar.append_to_submenu(ALIGN_PAPER_WEST, "align-paper-west")
        htoolbar.append_to_submenu(ALIGN_PAPER_EAST, "align-paper-east")
        htoolbar.append_to_submenu(ALIGN_PAPER_CENTER_HORIZONTAL,
                                   "align-paper-center-horizontal")
        htoolbar.append_to_submenu(ALIGN_PAPER_CENTER_VERTICAL,
                                   "align-paper-center-vertical")
        htoolbar.append_separator()
        htoolbar.append(gtk.STOCK_HELP, "help")

        hbox = gtk.HBox()
        vbox.add(hbox)

        vtoolbar = Toolbar()
        vtoolbar.set_style(gtk.TOOLBAR_ICONS)
        hbox.pack_start(vtoolbar, False, False)

        vtoolbar.append(LINE, "line")
        vtoolbar.append(ARC, "arc")
        vtoolbar.append(CURVE, "curve")
        vtoolbar.append(CONNECTOR, "connector")
        vtoolbar.append_with_submenu(BOX, "box")
        vtoolbar.append_to_submenu(SPLIT_HORIZONTALLY, "split-horizontally")
        vtoolbar.append_to_submenu(SPLIT_VERTICALLY, "split-vertically")
        vtoolbar.append_to_submenu(REMOVE_SPLIT, "remove-split")
        vtoolbar.append(ROUNDED_BOX, "rounded-box")
        vtoolbar.append(TEXT, "text")
        vtoolbar.append(BARCODE, "barcode")
        vtoolbar.append(TABLE, "table")
        vtoolbar.append(CHART, "chart")
        vtoolbar.append(IMAGE, "image")

        notebook = gtk.Notebook()
        notebook.set_show_tabs(True)
        notebook.set_show_border(False)
        #notebook.set_tab_pos(gtk.POS_LEFT)
        notebook.set_tab_pos(gtk.POS_RIGHT)
        hbox.add(notebook)

        self.status = Statusbar()
        self.id = self.status.get_context_id(_("Edit mode"))
        vbox.pack_start(self.status, False, False)

        label = gtk.Label(_("Design view"))
        label.set_angle(90)

        self.editor = Editor(self)
        self.editor.set_paper()
        notebook.append_page(self.editor, label)

        label = gtk.Label(_("XML view"))
        label.set_angle(90)

        def get_source_view():
            source = gtk.ScrolledWindow()
            source.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)

            view = gtk.TextView()
            self.code = gtk.TextBuffer()
            view.set_buffer(self.code)
            source.add(view)

            return source

        if '--source-editor-test' in sys.argv:
            while True:
                try:
                    from ui.code_editor import SourcePad
                except:
                    source = get_source_view()
                    break

                source = SourcePad(self)
                self.code = source.buffer
                source.set_language("xml")
                break
        else:
            source = get_source_view()

        notebook.append_page(source, label)

        self.menu.connect("new", self.new)
        self.menu.connect("open", self.open)
        self.menu.connect("save", self.save)
        self.menu.connect("save-as", self.save_as)
        self.menu.connect("page-setup", self.page_setup)
        self.menu.connect("export-to-pdf", self.export_to_pdf)
        self.menu.connect("set-background", self.set_background)
        self.menu.connect("quit", self.quit)

        self.menu.connect("cut", self.editor.canvas.cut)
        self.menu.connect("copy", self.editor.canvas.copy)
        self.menu.connect("paste", self.editor.canvas.paste)
        self.menu.connect("delete", self.editor.canvas.delete)
        self.menu.connect("select-all", self.editor.canvas.select_all)

        self.menu.connect("margins", self.editor.canvas.toggle_margins)
        self.menu.connect("grid", self.editor.canvas.toggle_grid)
        self.menu.connect("guides", self.editor.canvas.toggle_guides)
        self.menu.connect("snap", self.editor.canvas.toggle_snap)
        self.menu.connect("hints", self.editor.canvas.toggle_hints)
        self.menu.connect("properties", self.editor.toggle_properties)
        self.menu.connect("menubar", self.toggle_menubar)
        self.menu.connect("statusbar", self.toggle_statusbar)

        self.menu.connect("bring-to-front", self.editor.canvas.bring_to_front)
        self.menu.connect("bring-to-back", self.editor.canvas.bring_to_back)

        self.menu.connect("align-paper-center-horizontal",
                          self.editor.canvas.paper_center_horizontal)

        self.menu.connect("line", self.create, "Line")
        self.menu.connect("curve", self.create, "Curve")
        self.menu.connect("connector", self.create, "Connector")
        self.menu.connect("box", self.create, "Box")
        self.menu.connect("rounded-box", self.create, "Rounded")
        self.menu.connect("text", self.create, "Text")
        self.menu.connect("barcode", self.create, "BarCode")
        self.menu.connect("table", self.create, "Table")
        self.menu.connect("image", self.create, "Image")
        self.menu.connect("chart", self.create, "Chart")

        self.menu.connect("fullscreen", self.fullscreen)
        self.menu.connect("about", self.about)
        self.menu.connect("help", self.help)

        self.menu.connect("split-horizontally",
                          self.editor.canvas.split_horizontally)
        self.menu.connect("split-vertically",
                          self.editor.canvas.split_vertically)
        self.menu.connect("remove-split", self.editor.canvas.remove_split)

        htoolbar.connect("new", self.new)
        htoolbar.connect("open", self.open)
        htoolbar.connect("save", self.save)
        htoolbar.connect("snap", self.editor.canvas.toggle_snap)
        htoolbar.connect("grid", self.editor.canvas.toggle_grid)
        htoolbar.connect("guides", self.editor.canvas.toggle_guides)
        htoolbar.connect("margins", self.editor.canvas.toggle_margins)
        htoolbar.connect("cut", self.editor.canvas.cut)
        htoolbar.connect("copy", self.editor.canvas.copy)
        htoolbar.connect("paste", self.editor.canvas.paste)
        htoolbar.connect("delete", self.editor.canvas.delete)
        htoolbar.connect("bring-to-front", self.editor.canvas.bring_to_front)
        htoolbar.connect("bring-to-back", self.editor.canvas.bring_to_back)
        htoolbar.connect("export-to-pdf", self.export_to_pdf)
        htoolbar.connect("help", self.help)

        vtoolbar.connect("line", self.create, "Line")
        vtoolbar.connect("arc", self.create, "Arc")
        vtoolbar.connect("curve", self.create, "Curve")
        vtoolbar.connect("connector", self.create, "Connector")
        vtoolbar.connect("box", self.create, "Box")
        vtoolbar.connect("rounded-box", self.create, "Rounded")
        vtoolbar.connect("text", self.create, "Text")
        vtoolbar.connect("barcode", self.create, "BarCode")
        vtoolbar.connect("table", self.create, "Table")
        vtoolbar.connect("image", self.create, "Image")
        vtoolbar.connect("chart", self.create, "Chart")

        vtoolbar.connect("split-horizontally",
                         self.editor.canvas.split_horizontally)
        vtoolbar.connect("split-vertically",
                         self.editor.canvas.split_vertically)
        vtoolbar.connect("remove-split", self.editor.canvas.remove_split)

        notebook.connect("switch-page", self.switch)

        self.connect("key-press-event", self.key_press)