Esempio n. 1
0
	def __init__(self, ui, window_ext, vcs):
		Dialog.__init__(self, ui, _('Save Version'), # T: dialog title
			button=(None, 'gtk-save'), help='Plugins:Version Control')
		self.window_ext = window_ext
		self.vcs = vcs

		self.vbox.pack_start(
			gtk.Label(_("Please enter a comment for this version")), False)  # T: Dialog text

		vpaned = VPaned()
		self.vbox.add(vpaned)

		window, self.textview = ScrolledTextView(_('Saved version from zim'))
			# T: default version comment in the "save version" dialog
		self.textview.set_editable(True)
		vpaned.add1(window)

		vbox = gtk.VBox()
		vpaned.add2(vbox)

		label = gtk.Label('<b>'+_('Details')+'</b>')
			# T: section for version details in "save version" dialog
		label.set_use_markup(True)
		label.set_alignment(0, 0.5)
		vbox.pack_start(label, False)

		status = self.vcs.get_status()
		window, textview = ScrolledTextView(text=''.join(status), monospace=True)
		vbox.add(window)
Esempio n. 2
0
    def __init__(self,
                 widget,
                 label,
                 generator,
                 image_file=None,
                 text='',
                 syntax=None):
        title = _(
            'Edit %s'
        ) % label  # T: dialog title, %s is the object name like "Equation"
        Dialog.__init__(self, widget, title, defaultwindowsize=(450, 300))
        self.generator = generator
        self.log_file = None
        self.image_file = image_file
        self.result = None, None

        self.vpane = VPaned()
        self.vpane.set_position(150)
        self.vbox.pack_start(self.vpane, True, True, 0)

        self.imageview = ImageView(bgcolor='#FFF')
        swin = ScrolledWindow(self.imageview)
        swin.set_size_request(200, 50)
        self.vpane.pack1(swin, resize=True)
        # TODO scrolled window and option to zoom in / real size

        window, textview = ScrolledSourceView(syntax=syntax)
        self.textview = textview
        self.textview.set_editable(True)
        self.vpane.pack2(window, resize=False)

        hbox = Gtk.HBox(spacing=5)
        self.vbox.pack_start(hbox, False, True, 0)

        self.previewbutton = Gtk.Button.new_with_mnemonic(_('_Preview'))
        # T: button in e.g. equation editor dialog
        self.previewbutton.set_sensitive(False)
        self.previewbutton.connect('clicked', lambda o: self.update_image())
        hbox.pack_start(self.previewbutton, False, True, 0)

        self.textview.get_buffer().connect(
            'modified-changed',
            lambda b: self.previewbutton.set_sensitive(b.get_modified()))

        self.logbutton = Gtk.Button.new_with_mnemonic(_('View _Log'))
        # T: button in e.g. equation editor dialog
        self.logbutton.set_sensitive(False)
        self.logbutton.connect('clicked', lambda o: self.show_log())
        hbox.pack_start(self.logbutton, False, True, 0)

        self.set_text(text)
        self.imageview.set_file(self.image_file)  # if None sets broken image
        self.textview.grab_focus()
Esempio n. 3
0
    def __init__(self,
                 window,
                 title,
                 generator,
                 image=None,
                 syntax=None,
                 **opt):
        '''Constructor

		@param window: the L{MainWindow}
		@param title: the dialog title
		@param generator: an L{ImageGeneratorClass} object
		@param image: image data for an image in the
		L{TextBuffer<zim.gui.pageview.TextBuffer>}
		@param syntax: optional syntax name (as understood by gtksourceview)
		@param opt: any other arguments to pass to the L{Dialog} constructor
		'''
        Dialog.__init__(self,
                        window,
                        title,
                        defaultwindowsize=(450, 300),
                        **opt)
        self.app_window = window
        self.generator = generator
        self.imagefile = None
        self.logfile = None

        self.vpane = VPaned()
        self.vpane.set_position(150)
        self.vbox.add(self.vpane)

        self.imageview = ImageView(bgcolor='#FFF', checkerboard=False)
        self.vpane.pack1(self.imageview, resize=True)
        # TODO scrolled window and option to zoom in / real size

        window, textview = ScrolledSourceView(syntax=syntax)
        self.textview = textview
        self.textview.set_editable(True)
        self.vpane.pack2(window, resize=False)

        hbox = gtk.HBox(spacing=5)
        self.vbox.pack_start(hbox, False)

        self.previewbutton = Button(_('_Preview'), stock='gtk-refresh')
        # T: button in e.g. equation editor dialog
        self.previewbutton.set_sensitive(False)
        self.previewbutton.connect_object('clicked', self.__class__.preview,
                                          self)
        hbox.pack_start(self.previewbutton, False)

        self.textview.get_buffer().connect(
            'modified-changed',
            lambda b: self.previewbutton.set_sensitive(b.get_modified()))

        self.logbutton = Button(_('View _Log'), stock='gtk-file')
        # T: button in e.g. equation editor dialog
        self.logbutton.set_sensitive(False)
        self.logbutton.connect_object('clicked', self.__class__.show_log, self)
        if generator.uses_log_file:
            hbox.pack_start(self.logbutton, False)
        # else keep hidden

        if image:
            file = image['_src_file']  # FIXME ?
            textfile = self._stitch_fileextension(file,
                                                  self.generator.scriptname)
            self._existing_file = textfile
            self.imageview.set_file(file)
            self.set_text(self.generator.filter_input(textfile.read()))
        else:
            self._existing_file = None
            self.set_text(
                self.generator.filter_input(self.generator.get_default_text()))

        self.textview.grab_focus()
    def __init__(self, parent, vcs, notebook, page=None):
        Dialog.__init__(
            self,
            parent,
            _('Versions'),  # T: dialog title
            buttons=Gtk.ButtonsType.CLOSE,
            help='Plugins:Version Control')
        self.notebook = notebook
        self.vcs = vcs
        self._side_by_side_app = get_side_by_side_app()

        self.uistate.setdefault('windowsize', (600, 500), check=value_is_coord)
        self.uistate.setdefault('vpanepos', 300)

        self.vpaned = VPaned()
        self.vpaned.set_position(self.uistate['vpanepos'])
        self.vbox.pack_start(self.vpaned, True, True, 0)

        vbox = Gtk.VBox(spacing=5)
        self.vpaned.pack1(vbox, resize=True)

        # Choice between whole notebook or page
        label = Gtk.Label(label='<b>' + _('Versions') +
                          ':</b>')  # section label
        label.set_use_markup(True)
        label.set_alignment(0, 0.5)
        vbox.pack_start(label, False, True, 0)

        self.notebook_radio = Gtk.RadioButton.new_with_mnemonic_from_widget(
            None, _('Complete _notebook'))
        # T: Option in versions dialog to show version for complete notebook
        self.page_radio = Gtk.RadioButton.new_with_mnemonic_from_widget(
            self.notebook_radio,
            _('_Page') + ':')
        # T: Option in versions dialog to show version for single page
        #~ recursive_box = Gtk.CheckButton.new_with_mnemonic('Recursive')
        vbox.pack_start(self.notebook_radio, False, True, 0)

        # Page entry
        hbox = Gtk.HBox(spacing=5)
        vbox.pack_start(hbox, False, True, 0)
        hbox.pack_start(self.page_radio, False, True, 0)
        self.page_entry = PageEntry(self.notebook)
        if page:
            self.page_entry.set_path(page)
        hbox.pack_start(self.page_entry, False, True, 0)

        # View annotated button
        ann_button = Gtk.Button.new_with_mnemonic(
            _('View _Annotated'))  # T: Button label
        ann_button.connect('clicked', lambda o: self.show_annotated())
        hbox.pack_start(ann_button, False, True, 0)

        # Help text
        label = Gtk.Label(label='<i>\n' + _('''\
Select a version to see changes between that version and the current
state. Or select multiple versions to see changes between those versions.
''').strip() + '</i>')  # T: Help text in versions dialog
        label.set_use_markup(True)
        #~ label.set_alignment(0, 0.5)
        vbox.pack_start(label, False, True, 0)

        # Version list
        self.versionlist = VersionsTreeView()
        self.versionlist.load_versions(vcs.list_versions())
        scrolled = ScrolledWindow(self.versionlist)
        vbox.add(scrolled)

        col = self.uistate.setdefault('sortcol', self.versionlist.REV_SORT_COL)
        order = self.uistate.setdefault('sortorder', Gtk.SortType.DESCENDING)
        try:
            self.versionlist.get_model().set_sort_column_id(col, order)
        except:
            logger.exception('Invalid sort column: %s %s', col, order)

        # -----
        vbox = Gtk.VBox(spacing=5)
        self.vpaned.pack2(vbox, resize=False)

        label = Gtk.Label(label='<b>' + _('Comment') +
                          '</b>')  # T: version details
        label.set_use_markup(True)
        label.set_alignment(0.0, 0.5)
        vbox.pack_start(label, False, True, 0)

        # Comment text
        window, textview = ScrolledTextView()
        self.comment_textview = textview
        vbox.add(window)

        buttonbox = Gtk.HButtonBox()
        buttonbox.set_layout(Gtk.ButtonBoxStyle.END)
        vbox.pack_start(buttonbox, False, True, 0)

        # Restore version button
        revert_button = Gtk.Button.new_with_mnemonic(
            _('_Restore Version'))  # T: Button label
        revert_button.connect('clicked', lambda o: self.restore_version())
        buttonbox.add(revert_button)

        # Notebook Changes button
        diff_button = Gtk.Button.new_with_mnemonic(_('Show _Changes'))
        # T: button in versions dialog for diff
        diff_button.connect('clicked', lambda o: self.show_changes())
        buttonbox.add(diff_button)

        # Compare page button
        comp_button = Gtk.Button.new_with_mnemonic(_('_Side by Side'))
        # T: button in versions dialog for side by side comparison
        comp_button.connect('clicked', lambda o: self.show_side_by_side())
        buttonbox.add(comp_button)

        # UI interaction between selections and buttons

        def on_row_activated(o, iter, path):
            model = self.versionlist.get_model()
            comment = model[iter][VersionsTreeView.MSG_COL]
            buffer = textview.get_buffer()
            buffer.set_text(comment)

        self.versionlist.connect('row-activated', on_row_activated)

        def on_ui_change(o):
            usepage = self.page_radio.get_active()
            self.page_entry.set_sensitive(usepage)
            ann_button.set_sensitive(usepage)

            # side by side comparison can only be done for one page
            # revert can only be done to one version, not multiple
            selection = self.versionlist.get_selection()
            model, rows = selection.get_selected_rows()
            if not rows:
                revert_button.set_sensitive(False)
                diff_button.set_sensitive(False)
                comp_button.set_sensitive(False)
            elif len(rows) == 1:
                revert_button.set_sensitive(usepage)
                diff_button.set_sensitive(True)
                comp_button.set_sensitive(
                    bool(usepage and self._side_by_side_app))
            else:
                revert_button.set_sensitive(False)
                diff_button.set_sensitive(True)
                comp_button.set_sensitive(
                    bool(usepage and self._side_by_side_app))

        def on_page_change(o):
            pagesource = self._get_file()
            if pagesource:
                self.versionlist.load_versions(
                    vcs.list_versions(self._get_file()))

        def on_book_change(o):
            self.versionlist.load_versions(vcs.list_versions())

        self.page_radio.connect('toggled', on_ui_change)
        self.notebook_radio.connect('toggled', on_book_change)
        self.page_radio.connect('toggled', on_page_change)
        self.page_entry.connect('changed', on_page_change)
        selection = self.versionlist.get_selection()
        selection.connect('changed', on_ui_change)

        # select last version
        self.versionlist.get_selection().select_path((0, ))
        col = self.versionlist.get_column(0)
        self.versionlist.row_activated(Gtk.TreePath((0, )), col)
Esempio n. 5
0
    def __init__(self, ui, title, generator, image=None, syntax=None, **opt):
        '''Constructor

		@param ui: L{GtkInterface} object or parent window
		@param title: the dialog title
		@param generator: an L{ImageGeneratorClass} object
		@param image: image data for an image in the
		L{TextBuffer<zim.gui.pageview.TextBuffer>}
		@param syntax: optional syntax name (as understood by gtksourceview)
		@param opt: any other arguments to pass to the L{Dialog} constructor
		'''
        if ui_environment['platform'] == 'maemo':
            defaultsize = (450, 480)
            # Use maximum available vertical space because decorations take
            # too much real state
        else:
            defaultsize = (450, 300)
        Dialog.__init__(self, ui, title, defaultwindowsize=defaultsize, **opt)
        if ui_environment['platform'] == 'maemo':
            self.resize(450, 480)
            # Force maximum dialog size under maemo, otherwise
            # we'll end with a too small dialog and no way to resize it
        self.generator = generator
        self.imagefile = None
        self.logfile = None

        self.vpane = VPaned()
        self.vpane.set_position(150)
        self.vbox.add(self.vpane)

        self.imageview = ImageView(bgcolor='#FFF', checkerboard=False)
        self.vpane.pack1(self.imageview, resize=True)
        # TODO scrolled window and option to zoom in / real size

        window, textview = ScrolledSourceView(syntax=syntax)
        self.textview = textview
        self.textview.set_editable(True)
        self.vpane.pack2(window, resize=False)

        hbox = gtk.HBox(spacing=5)
        self.vbox.pack_start(hbox, False)

        self.previewbutton = Button(_('_Preview'), stock='gtk-refresh')
        # T: button in e.g. equation editor dialog
        self.previewbutton.set_sensitive(False)
        self.previewbutton.connect_object('clicked', self.__class__.preview,
                                          self)
        hbox.pack_start(self.previewbutton, False)

        self.textview.get_buffer().connect(
            'modified-changed',
            lambda b: self.previewbutton.set_sensitive(b.get_modified()))

        self.logbutton = Button(_('View _Log'), stock='gtk-file')
        # T: button in e.g. equation editor dialog
        self.logbutton.set_sensitive(False)
        self.logbutton.connect_object('clicked', self.__class__.show_log, self)
        if generator.uses_log_file:
            hbox.pack_start(self.logbutton, False)
        # else keep hidden

        self._existing_file = None
        if image:
            file = image['_src_file']  # FIXME ?
            textfile = self._stitch_fileextension(file,
                                                  self.generator.scriptname)
            self._existing_file = textfile
            self.imageview.set_file(file)
            self.set_text(self.generator.filter_input(textfile.read()))

        self.textview.grab_focus()