242 lines
9.6 KiB
Python
242 lines
9.6 KiB
Python
# -*- 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()
|