Initial commit
This commit is contained in:
241
pythonpath/synopse/dialog.py
Normal file
241
pythonpath/synopse/dialog.py
Normal file
@@ -0,0 +1,241 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Optionsdialoge, programmatisch ueber com.sun.star.awt aufgebaut."""
|
||||
|
||||
import sys
|
||||
|
||||
import uno
|
||||
|
||||
from synopse.builder import Options
|
||||
from synopse.i18n import t
|
||||
|
||||
|
||||
def message(ctx, text, title=None):
|
||||
if title is None:
|
||||
title = t("doc.title")
|
||||
try:
|
||||
toolkit = ctx.ServiceManager.createInstanceWithContext(
|
||||
"com.sun.star.awt.Toolkit", ctx)
|
||||
box = toolkit.createMessageBox(
|
||||
None,
|
||||
uno.Enum("com.sun.star.awt.MessageBoxType", "INFOBOX"),
|
||||
1, # BUTTONS_OK
|
||||
title, text)
|
||||
box.execute()
|
||||
box.dispose()
|
||||
except Exception:
|
||||
# Ohne Dialogfenster bleibt nur die Konsole
|
||||
sys.stderr.write("%s: %s\n" % (title, text))
|
||||
|
||||
|
||||
def _add(model, kind, name, props):
|
||||
ctrl = model.createInstance("com.sun.star.awt.UnoControl%sModel" % kind)
|
||||
for key, value in props.items():
|
||||
setattr(ctrl, key, value)
|
||||
model.insertByName(name, ctrl)
|
||||
return ctrl
|
||||
|
||||
|
||||
def _dialog(ctx, model):
|
||||
dlg = ctx.ServiceManager.createInstanceWithContext(
|
||||
"com.sun.star.awt.UnoControlDialog", ctx)
|
||||
dlg.setModel(model)
|
||||
toolkit = ctx.ServiceManager.createInstanceWithContext(
|
||||
"com.sun.star.awt.Toolkit", ctx)
|
||||
dlg.createPeer(toolkit, None)
|
||||
return dlg
|
||||
|
||||
|
||||
def _buttons(model, y):
|
||||
_add(model, "Button", "btnOk",
|
||||
dict(PositionX=128, PositionY=y, Width=54, Height=16,
|
||||
Label=t("dlg.ok"), PushButtonType=1, DefaultButton=True))
|
||||
_add(model, "Button", "btnCancel",
|
||||
dict(PositionX=186, PositionY=y, Width=54, Height=16,
|
||||
Label=t("dlg.cancel"), PushButtonType=2))
|
||||
|
||||
|
||||
def show_options(ctx, edit_authors, note_authors):
|
||||
"""Optionen fuer die Synopse aus der Aenderungsverfolgung."""
|
||||
people = sorted(edit_authors | note_authors)
|
||||
count = len(people)
|
||||
names = ", ".join(people) or t("dlg.people.none")
|
||||
if len(names) > 52:
|
||||
names = names[:49] + "\u2026"
|
||||
|
||||
model = ctx.ServiceManager.createInstanceWithContext(
|
||||
"com.sun.star.awt.UnoControlDialogModel", ctx)
|
||||
model.setPropertyValues(
|
||||
("PositionX", "PositionY", "Width", "Height", "Title"),
|
||||
(120, 120, 248, 264, t("dlg.title")))
|
||||
|
||||
_add(model, "FixedText", "lblPeople",
|
||||
dict(PositionX=8, PositionY=6, Width=232, Height=10,
|
||||
Label=t("dlg.people", count, names)))
|
||||
_add(model, "FixedLine", "sep0",
|
||||
dict(PositionX=8, PositionY=18, Width=232, Height=6,
|
||||
Label=t("dlg.group.mode")))
|
||||
|
||||
_add(model, "RadioButton", "optCum",
|
||||
dict(PositionX=14, PositionY=30, Width=226, Height=12, State=1,
|
||||
Label=t("dlg.mode.cumulative")))
|
||||
_add(model, "RadioButton", "optStack",
|
||||
dict(PositionX=14, PositionY=43, Width=226, Height=12,
|
||||
Label=t("dlg.mode.stacked")))
|
||||
_add(model, "RadioButton", "optAuthor",
|
||||
dict(PositionX=14, PositionY=56, Width=226, Height=12,
|
||||
Label=t("dlg.mode.separate", count)))
|
||||
_add(model, "FixedText", "hint",
|
||||
dict(PositionX=26, PositionY=69, Width=214, Height=18, MultiLine=True,
|
||||
Label=t("dlg.mode.hint")))
|
||||
|
||||
_add(model, "FixedLine", "sep1",
|
||||
dict(PositionX=8, PositionY=92, Width=232, Height=6,
|
||||
Label=t("dlg.group.content")))
|
||||
_add(model, "CheckBox", "chkDel",
|
||||
dict(PositionX=8, PositionY=104, Width=232, Height=12, State=1,
|
||||
Label=t("dlg.opt.deletions")))
|
||||
_add(model, "CheckBox", "chkElide",
|
||||
dict(PositionX=8, PositionY=118, Width=232, Height=12, State=1,
|
||||
Label=t("dlg.opt.elide")))
|
||||
_add(model, "CheckBox", "chkFinal",
|
||||
dict(PositionX=8, PositionY=132, Width=232, Height=12, State=1,
|
||||
Label=t("dlg.opt.final")))
|
||||
_add(model, "CheckBox", "chkNotes",
|
||||
dict(PositionX=8, PositionY=146, Width=232, Height=12, State=1,
|
||||
Label=t("dlg.opt.notes")))
|
||||
_add(model, "CheckBox", "chkQuote",
|
||||
dict(PositionX=20, PositionY=160, Width=220, Height=12, State=1,
|
||||
Label=t("dlg.opt.quote")))
|
||||
_add(model, "CheckBox", "chkOnly",
|
||||
dict(PositionX=8, PositionY=178, Width=232, Height=12, State=0,
|
||||
Label=t("dlg.opt.onlychanged")))
|
||||
|
||||
_add(model, "FixedLine", "sep2",
|
||||
dict(PositionX=8, PositionY=194, Width=232, Height=6,
|
||||
Label=t("dlg.group.target")))
|
||||
_add(model, "CheckBox", "chkNum",
|
||||
dict(PositionX=8, PositionY=206, Width=110, Height=12, State=1,
|
||||
Label=t("dlg.opt.numbering")))
|
||||
_add(model, "CheckBox", "chkLand",
|
||||
dict(PositionX=124, PositionY=206, Width=116, Height=12, State=1,
|
||||
Label=t("dlg.opt.landscape")))
|
||||
|
||||
_buttons(model, 238)
|
||||
|
||||
dlg = _dialog(ctx, model)
|
||||
try:
|
||||
if dlg.execute() != 1:
|
||||
return None
|
||||
opts = Options()
|
||||
if model.getByName("optAuthor").State:
|
||||
opts.mode = "per_author"
|
||||
elif model.getByName("optStack").State:
|
||||
opts.mode = "stacked"
|
||||
else:
|
||||
opts.mode = "cumulative"
|
||||
opts.show_deletions = bool(model.getByName("chkDel").State)
|
||||
opts.elide = bool(model.getByName("chkElide").State)
|
||||
opts.show_final = bool(model.getByName("chkFinal").State)
|
||||
opts.show_notes = bool(model.getByName("chkNotes").State)
|
||||
opts.show_quotes = bool(model.getByName("chkQuote").State)
|
||||
opts.only_changed = bool(model.getByName("chkOnly").State)
|
||||
opts.numbering = bool(model.getByName("chkNum").State)
|
||||
opts.landscape = bool(model.getByName("chkLand").State)
|
||||
return opts
|
||||
finally:
|
||||
dlg.dispose()
|
||||
|
||||
|
||||
def show_compare_options(ctx, docs, current=None):
|
||||
"""Auswahl der beiden Dokumente. Liefert (quelle, ziel, options)."""
|
||||
from synopse.compare import CompareOptions, document_title
|
||||
|
||||
titles = [document_title(d) for d in docs]
|
||||
|
||||
# Vorauswahl: aktuelles Dokument als Endfassung, das andere als Quelle
|
||||
target_idx = docs.index(current) if current in docs else len(docs) - 1
|
||||
source_idx = 0 if target_idx != 0 else 1
|
||||
|
||||
model = ctx.ServiceManager.createInstanceWithContext(
|
||||
"com.sun.star.awt.UnoControlDialogModel", ctx)
|
||||
model.setPropertyValues(
|
||||
("PositionX", "PositionY", "Width", "Height", "Title"),
|
||||
(120, 120, 248, 258, t("cmp.title")))
|
||||
|
||||
_add(model, "FixedLine", "sep0",
|
||||
dict(PositionX=8, PositionY=6, Width=232, Height=6,
|
||||
Label=t("cmp.group.docs")))
|
||||
_add(model, "FixedText", "lblSrc",
|
||||
dict(PositionX=8, PositionY=18, Width=232, Height=10,
|
||||
Label=t("cmp.source")))
|
||||
_add(model, "ListBox", "lstSrc",
|
||||
dict(PositionX=8, PositionY=29, Width=232, Height=12, Dropdown=True,
|
||||
StringItemList=tuple(titles), SelectedItems=(source_idx,)))
|
||||
_add(model, "FixedText", "lblTgt",
|
||||
dict(PositionX=8, PositionY=46, Width=232, Height=10,
|
||||
Label=t("cmp.target")))
|
||||
_add(model, "ListBox", "lstTgt",
|
||||
dict(PositionX=8, PositionY=57, Width=232, Height=12, Dropdown=True,
|
||||
StringItemList=tuple(titles), SelectedItems=(target_idx,)))
|
||||
|
||||
_add(model, "FixedLine", "sep1",
|
||||
dict(PositionX=8, PositionY=76, Width=232, Height=6,
|
||||
Label=t("cmp.group.comments")))
|
||||
_add(model, "RadioButton", "optCol",
|
||||
dict(PositionX=14, PositionY=88, Width=226, Height=12, State=1,
|
||||
Label=t("cmp.comments.column")))
|
||||
_add(model, "RadioButton", "optInline",
|
||||
dict(PositionX=14, PositionY=101, Width=226, Height=12,
|
||||
Label=t("cmp.comments.inline")))
|
||||
_add(model, "RadioButton", "optNone",
|
||||
dict(PositionX=14, PositionY=114, Width=226, Height=12,
|
||||
Label=t("cmp.comments.none")))
|
||||
_add(model, "FixedText", "hint",
|
||||
dict(PositionX=26, PositionY=127, Width=214, Height=18, MultiLine=True,
|
||||
Label=t("cmp.comments.hint")))
|
||||
|
||||
_add(model, "FixedLine", "sep2",
|
||||
dict(PositionX=8, PositionY=150, Width=232, Height=6,
|
||||
Label=t("cmp.group.display")))
|
||||
_add(model, "CheckBox", "chkHi",
|
||||
dict(PositionX=8, PositionY=162, Width=232, Height=12, State=1,
|
||||
Label=t("cmp.opt.highlight")))
|
||||
_add(model, "CheckBox", "chkQuote",
|
||||
dict(PositionX=8, PositionY=176, Width=232, Height=12, State=1,
|
||||
Label=t("cmp.opt.quote")))
|
||||
_add(model, "CheckBox", "chkOnly",
|
||||
dict(PositionX=8, PositionY=190, Width=232, Height=12, State=0,
|
||||
Label=t("cmp.opt.onlychanged")))
|
||||
_add(model, "CheckBox", "chkNum",
|
||||
dict(PositionX=8, PositionY=204, Width=110, Height=12, State=1,
|
||||
Label=t("dlg.opt.numbering")))
|
||||
_add(model, "CheckBox", "chkLand",
|
||||
dict(PositionX=124, PositionY=204, Width=116, Height=12, State=1,
|
||||
Label=t("dlg.opt.landscape")))
|
||||
|
||||
_buttons(model, 232)
|
||||
|
||||
dlg = _dialog(ctx, model)
|
||||
try:
|
||||
if dlg.execute() != 1:
|
||||
return None
|
||||
src = model.getByName("lstSrc").SelectedItems
|
||||
tgt = model.getByName("lstTgt").SelectedItems
|
||||
if not src or not tgt or src[0] == tgt[0]:
|
||||
message(ctx, t("msg.different"))
|
||||
return None
|
||||
opts = CompareOptions()
|
||||
if model.getByName("optInline").State:
|
||||
opts.comments = "inline"
|
||||
elif model.getByName("optNone").State:
|
||||
opts.comments = "none"
|
||||
else:
|
||||
opts.comments = "column"
|
||||
opts.highlight = bool(model.getByName("chkHi").State)
|
||||
opts.show_quotes = bool(model.getByName("chkQuote").State)
|
||||
opts.only_changed = bool(model.getByName("chkOnly").State)
|
||||
opts.numbering = bool(model.getByName("chkNum").State)
|
||||
opts.landscape = bool(model.getByName("chkLand").State)
|
||||
return docs[src[0]], docs[tgt[0]], opts
|
||||
finally:
|
||||
dlg.dispose()
|
||||
Reference in New Issue
Block a user