mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 10:14:46 -04:00
Basic editor actions
This commit is contained in:
parent
e1f23c9352
commit
f6635f6f1f
@ -238,6 +238,7 @@ class Boss(QObject):
|
|||||||
editor = editors[name] = editor_from_syntax(syntax, self.gui.editor_tabs)
|
editor = editors[name] = editor_from_syntax(syntax, self.gui.editor_tabs)
|
||||||
editor.undo_redo_state_changed.connect(self.editor_undo_redo_state_changed)
|
editor.undo_redo_state_changed.connect(self.editor_undo_redo_state_changed)
|
||||||
editor.data_changed.connect(self.editor_data_changed)
|
editor.data_changed.connect(self.editor_data_changed)
|
||||||
|
editor.copy_available_state_changed.connect(self.editor_copy_available_state_changed)
|
||||||
c = current_container()
|
c = current_container()
|
||||||
with c.open(name) as f:
|
with c.open(name) as f:
|
||||||
editor.data = c.decode(f.read())
|
editor.data = c.decode(f.read())
|
||||||
@ -256,6 +257,7 @@ class Boss(QObject):
|
|||||||
_('Editing files of type %s is not supported' % mime), show=True)
|
_('Editing files of type %s is not supported' % mime), show=True)
|
||||||
self.edit_file(name, syntax)
|
self.edit_file(name, syntax)
|
||||||
|
|
||||||
|
# Editor basic controls {{{
|
||||||
def do_editor_undo(self):
|
def do_editor_undo(self):
|
||||||
ed = self.gui.central.current_editor
|
ed = self.gui.central.current_editor
|
||||||
if ed is not None:
|
if ed is not None:
|
||||||
@ -266,16 +268,35 @@ class Boss(QObject):
|
|||||||
if ed is not None:
|
if ed is not None:
|
||||||
ed.redo()
|
ed.redo()
|
||||||
|
|
||||||
|
def do_editor_copy(self):
|
||||||
|
ed = self.gui.central.current_editor
|
||||||
|
if ed is not None:
|
||||||
|
ed.copy()
|
||||||
|
|
||||||
|
def do_editor_cut(self):
|
||||||
|
ed = self.gui.central.current_editor
|
||||||
|
if ed is not None:
|
||||||
|
ed.cut()
|
||||||
|
|
||||||
|
def do_editor_paste(self):
|
||||||
|
ed = self.gui.central.current_editor
|
||||||
|
if ed is not None:
|
||||||
|
ed.paste()
|
||||||
|
|
||||||
def editor_data_changed(self, editor):
|
def editor_data_changed(self, editor):
|
||||||
self.gui.preview.refresh_timer.start(tprefs['preview_refresh_time'] * 1000)
|
self.gui.preview.refresh_timer.start(tprefs['preview_refresh_time'] * 1000)
|
||||||
|
|
||||||
def editor_undo_redo_state_changed(self, *args):
|
def editor_undo_redo_state_changed(self, *args):
|
||||||
self.apply_current_editor_state(update_keymap=False)
|
self.apply_current_editor_state(update_keymap=False)
|
||||||
|
|
||||||
|
def editor_copy_available_state_changed(self, *args):
|
||||||
|
self.apply_current_editor_state(update_keymap=False)
|
||||||
|
|
||||||
def editor_modification_state_changed(self, is_modified):
|
def editor_modification_state_changed(self, is_modified):
|
||||||
self.apply_current_editor_state(update_keymap=False)
|
self.apply_current_editor_state(update_keymap=False)
|
||||||
if is_modified:
|
if is_modified:
|
||||||
actions['save-book'].setEnabled(True)
|
actions['save-book'].setEnabled(True)
|
||||||
|
# }}}
|
||||||
|
|
||||||
def apply_current_editor_state(self, update_keymap=True):
|
def apply_current_editor_state(self, update_keymap=True):
|
||||||
ed = self.gui.central.current_editor
|
ed = self.gui.central.current_editor
|
||||||
@ -283,6 +304,8 @@ class Boss(QObject):
|
|||||||
actions['editor-undo'].setEnabled(ed.undo_available)
|
actions['editor-undo'].setEnabled(ed.undo_available)
|
||||||
actions['editor-redo'].setEnabled(ed.redo_available)
|
actions['editor-redo'].setEnabled(ed.redo_available)
|
||||||
actions['editor-save'].setEnabled(ed.is_modified)
|
actions['editor-save'].setEnabled(ed.is_modified)
|
||||||
|
actions['editor-cut'].setEnabled(ed.copy_available)
|
||||||
|
actions['editor-copy'].setEnabled(ed.cut_available)
|
||||||
self.gui.keyboard.set_mode(ed.syntax)
|
self.gui.keyboard.set_mode(ed.syntax)
|
||||||
name = None
|
name = None
|
||||||
for n, x in editors.iteritems():
|
for n, x in editors.iteritems():
|
||||||
|
@ -16,6 +16,7 @@ class Editor(QMainWindow):
|
|||||||
|
|
||||||
modification_state_changed = pyqtSignal(object)
|
modification_state_changed = pyqtSignal(object)
|
||||||
undo_redo_state_changed = pyqtSignal(object, object)
|
undo_redo_state_changed = pyqtSignal(object, object)
|
||||||
|
copy_available_state_changed = pyqtSignal(object)
|
||||||
data_changed = pyqtSignal(object)
|
data_changed = pyqtSignal(object)
|
||||||
|
|
||||||
def __init__(self, syntax, parent=None):
|
def __init__(self, syntax, parent=None):
|
||||||
@ -29,20 +30,11 @@ class Editor(QMainWindow):
|
|||||||
self.create_toolbars()
|
self.create_toolbars()
|
||||||
self.undo_available = False
|
self.undo_available = False
|
||||||
self.redo_available = False
|
self.redo_available = False
|
||||||
|
self.copy_available = self.cut_available = False
|
||||||
self.editor.undoAvailable.connect(self._undo_available)
|
self.editor.undoAvailable.connect(self._undo_available)
|
||||||
self.editor.redoAvailable.connect(self._redo_available)
|
self.editor.redoAvailable.connect(self._redo_available)
|
||||||
self.editor.textChanged.connect(self._data_changed)
|
self.editor.textChanged.connect(self._data_changed)
|
||||||
|
self.editor.copyAvailable.connect(self._copy_available)
|
||||||
def _data_changed(self):
|
|
||||||
self.data_changed.emit(self)
|
|
||||||
|
|
||||||
def _undo_available(self, available):
|
|
||||||
self.undo_available = available
|
|
||||||
self.undo_redo_state_changed.emit(self.undo_available, self.redo_available)
|
|
||||||
|
|
||||||
def _redo_available(self, available):
|
|
||||||
self.redo_available = available
|
|
||||||
self.undo_redo_state_changed.emit(self.undo_available, self.redo_available)
|
|
||||||
|
|
||||||
@dynamic_property
|
@dynamic_property
|
||||||
def data(self):
|
def data(self):
|
||||||
@ -73,22 +65,51 @@ class Editor(QMainWindow):
|
|||||||
return property(fget=fget, fset=fset)
|
return property(fget=fget, fset=fset)
|
||||||
|
|
||||||
def create_toolbars(self):
|
def create_toolbars(self):
|
||||||
self.action_bar = b = self.addToolBar(_('Edit actions tool bar'))
|
self.action_bar = b = self.addToolBar(_('File actions tool bar'))
|
||||||
b.setObjectName('action_bar') # Needed for saveState
|
b.setObjectName('action_bar') # Needed for saveState
|
||||||
b.addAction(actions['editor-save'])
|
for x in ('save', 'undo', 'redo'):
|
||||||
b.addAction(actions['editor-undo'])
|
b.addAction(actions['editor-%s' % x])
|
||||||
b.addAction(actions['editor-redo'])
|
self.edit_bar = b = self.addToolBar(_('Edit actions tool bar'))
|
||||||
|
for x in ('cut', 'copy', 'paste'):
|
||||||
|
b.addAction(actions['editor-%s' % x])
|
||||||
|
|
||||||
def break_cycles(self):
|
def break_cycles(self):
|
||||||
self.modification_state_changed.disconnect()
|
self.modification_state_changed.disconnect()
|
||||||
self.undo_redo_state_changed.disconnect()
|
self.undo_redo_state_changed.disconnect()
|
||||||
|
self.copy_available_state_changed.disconnect()
|
||||||
self.data_changed.disconnect()
|
self.data_changed.disconnect()
|
||||||
self.editor.undoAvailable.disconnect()
|
self.editor.undoAvailable.disconnect()
|
||||||
self.editor.redoAvailable.disconnect()
|
self.editor.redoAvailable.disconnect()
|
||||||
self.editor.modificationChanged.disconnect()
|
self.editor.modificationChanged.disconnect()
|
||||||
self.editor.textChanged.disconnect()
|
self.editor.textChanged.disconnect()
|
||||||
|
self.editor.copyAvailable.disconnect()
|
||||||
self.editor.setPlainText('')
|
self.editor.setPlainText('')
|
||||||
|
|
||||||
|
def _data_changed(self):
|
||||||
|
self.data_changed.emit(self)
|
||||||
|
|
||||||
|
def _undo_available(self, available):
|
||||||
|
self.undo_available = available
|
||||||
|
self.undo_redo_state_changed.emit(self.undo_available, self.redo_available)
|
||||||
|
|
||||||
|
def _redo_available(self, available):
|
||||||
|
self.redo_available = available
|
||||||
|
self.undo_redo_state_changed.emit(self.undo_available, self.redo_available)
|
||||||
|
|
||||||
|
def _copy_available(self, available):
|
||||||
|
self.copy_available = self.cut_available = available
|
||||||
|
self.copy_available_state_changed.emit(available)
|
||||||
|
|
||||||
|
def cut(self):
|
||||||
|
self.editor.cut()
|
||||||
|
|
||||||
|
def copy(self):
|
||||||
|
self.editor.copy()
|
||||||
|
|
||||||
|
def paste(self):
|
||||||
|
self.editor.paste()
|
||||||
|
|
||||||
|
|
||||||
def launch_editor(path_to_edit, path_is_raw=False, syntax='html'):
|
def launch_editor(path_to_edit, path_is_raw=False, syntax='html'):
|
||||||
if path_is_raw:
|
if path_is_raw:
|
||||||
raw = path_to_edit
|
raw = path_to_edit
|
||||||
|
@ -20,6 +20,7 @@ from calibre.gui2.tweak_book.keyboard import KeyboardManager
|
|||||||
from calibre.gui2.tweak_book.preview import Preview
|
from calibre.gui2.tweak_book.preview import Preview
|
||||||
|
|
||||||
class Central(QStackedWidget):
|
class Central(QStackedWidget):
|
||||||
|
|
||||||
' The central widget, hosts the editors '
|
' The central widget, hosts the editors '
|
||||||
|
|
||||||
current_editor_changed = pyqtSignal()
|
current_editor_changed = pyqtSignal()
|
||||||
@ -162,6 +163,12 @@ class Main(MainWindow):
|
|||||||
_('Redo typing'))
|
_('Redo typing'))
|
||||||
self.action_editor_save = reg('save.png', _('&Save'), self.boss.do_editor_save, 'editor-save', 'Ctrl+S',
|
self.action_editor_save = reg('save.png', _('&Save'), self.boss.do_editor_save, 'editor-save', 'Ctrl+S',
|
||||||
_('Save changes to the current file'))
|
_('Save changes to the current file'))
|
||||||
|
self.action_editor_cut = reg('edit-cut.png', _('C&ut text'), self.boss.do_editor_cut, 'editor-cut', 'Ctrl+X',
|
||||||
|
_('Cut text'))
|
||||||
|
self.action_editor_copy = reg('edit-copy.png', _('&Copy text'), self.boss.do_editor_copy, 'editor-copy', 'Ctrl+C',
|
||||||
|
_('Copy text'))
|
||||||
|
self.action_editor_paste = reg('edit-paste.png', _('&Paste text'), self.boss.do_editor_paste, 'editor-paste', 'Ctrl+V',
|
||||||
|
_('Paste text'))
|
||||||
|
|
||||||
def create_menubar(self):
|
def create_menubar(self):
|
||||||
b = self.menuBar()
|
b = self.menuBar()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user