0,0 → 1,599 |
#include <QMessageBox> |
|
#include "notesstyleseditor.h" |
#include "pageitem_noteframe.h" |
#include "prefsmanager.h" |
#include "prefsfile.h" |
#include "scribusdoc.h" |
#include "scribusview.h" |
#include "scribus.h" |
#include "scmessagebox.h" |
#include "undomanager.h" |
|
NotesStylesEditor::NotesStylesEditor(QWidget *parent, const char *name) |
: ScrPaletteBase(parent, name), m_Doc(NULL) |
{ |
setupUi(this); |
QString pname(name); |
if (pname.isEmpty()) |
pname = "notesStylesEditor"; |
m_prefs = PrefsManager::instance()->prefsFile->getContext(pname); |
|
setBlockSignals(true); |
|
setDoc(0); |
languageChange(); |
NSlistBox->setInsertPolicy(QComboBox::InsertAlphabetically); |
|
NumberingBox->addItem("1 2 3"); |
NumberingBox->addItem("i ii iii"); |
NumberingBox->addItem("I II III"); |
NumberingBox->addItem("a b c"); |
NumberingBox->addItem("A B C"); |
NumberingBox->addItem("*"); |
|
RangeBox->addItem(tr("Document")); |
RangeBox->addItem(tr("Section")); |
RangeBox->addItem(tr("Story")); |
RangeBox->addItem(tr("Page")); |
RangeBox->addItem(tr("Frame")); |
|
StartSpinBox->setMinimum(1); |
StartSpinBox->setMaximum(99999); |
changesMap.clear(); |
addNewNsMode = false; |
|
setBlockSignals(isVisible()); |
} |
|
NotesStylesEditor::~NotesStylesEditor() |
{ |
storeVisibility(this->isVisible()); |
storePosition(); |
storeSize(); |
} |
|
void NotesStylesEditor::languageChange() |
{ |
bool wasSignalsBlocked = signalsBlocked(); |
setBlockSignals(true); |
|
if (addNewNsMode) |
{ |
OKButton->setText(tr("Cancel")); |
OKButton->setToolTip(tr("Dialog is in adding new notes style mode. After pressing Cancel button dialog will be switched into normal notes styles edit mode.")); |
ApplyButton->setText(tr("Add Style")); |
} |
else |
{ |
OKButton->setText("OK"); |
OKButton->setToolTip(""); |
ApplyButton->setText(tr("Apply")); |
} |
NewButton->setText(tr("Add New Style")); |
NewButton->setToolTip(tr("New notes style will be add to document only after pressing Apply butoton.\nYou cannot switch to different notes style before you apply that new one or press Cancel button and exit from adding mode.")); |
NewNameLabel->setText(tr("New Style Name")); |
FootRadio->setText(tr("Footnotes")); |
EndRadio->setText(tr("Endnotes")); |
NumberingLabel->setText("Numbering"); |
RangeLabel->setText(tr("Range")); |
StartLabel->setText(tr("Start Number")); |
PrefixLabel->setText(tr("Prefix")); |
SuffixLabel->setText(tr("Suffix")); |
SuperMasterLabel->setText(tr("Superscript in text")); |
SuperNoteLabel->setText(tr("Superscript in notes")); |
charStyleComboLabel->setText(tr("Mark`s Character Style")); |
paraStyleComboLabel->setText(tr("Note`s Paragraph Style")); |
AutoHLabel->setText(tr("Auto Height")); |
AutoWLabel->setText(tr("Auto Width")); |
AutoWeldLabel->setText(tr("Auto Welding")); |
AutoRemoveLabel->setText(tr("Remove if empty")); |
DeleteButton->setText(tr("Delete")); |
setBlockSignals(wasSignalsBlocked); |
} |
|
void NotesStylesEditor::setDoc(ScribusDoc *doc) |
{ |
bool wasSignalsBlocked = signalsBlocked(); |
setBlockSignals(true); |
if (m_Doc != NULL) |
disconnect(m_Doc->scMW(), SIGNAL(UpdateRequest(int)), this , SLOT(handleUpdateRequest(int))); |
m_Doc = doc; |
paraStyleCombo->setDoc(m_Doc); |
charStyleCombo->setDoc(m_Doc); |
if (m_Doc != NULL) |
{ |
updateNSList(); |
NSlistBox->setCurrentIndex(0); |
readNotesStyle(NSlistBox->currentText()); |
setEnabled(true); |
ApplyButton->setEnabled(false); |
connect(m_Doc->scMW(), SIGNAL(UpdateRequest(int)), this , SLOT(handleUpdateRequest(int))); |
} |
else |
{ |
changesMap.clear(); |
NewNameEdit->clear(); |
setEnabled(false); |
} |
setBlockSignals(wasSignalsBlocked); |
} |
|
void NotesStylesEditor::handleUpdateRequest(int updateFlags) |
{ |
bool wasSignalsBlocked = signalsBlocked(); |
setBlockSignals(true); |
if ((updateFlags & reqCharStylesUpdate) || (updateFlags & reqTextStylesUpdate)) |
charStyleCombo->updateFormatList(); |
if ((updateFlags & reqParaStylesUpdate) || (updateFlags & reqTextStylesUpdate)) |
paraStyleCombo->updateFormatList(); |
readNotesStyle(NSlistBox->currentText()); |
setBlockSignals(wasSignalsBlocked); |
} |
|
void NotesStylesEditor::updateNSList() |
{ |
bool wasSignalsBlocked = signalsBlocked(); |
NSlistBox->blockSignals(true); |
if (m_Doc == NULL) |
NSlistBox->setEnabled(false); |
else |
{ |
NSlistBox->clear(); |
changesMap.clear(); |
for (int a = 0; a < m_Doc->m_docNotesStylesList.count(); ++a) |
{ |
NSlistBox->addItem(m_Doc->m_docNotesStylesList.at(a)->name()); |
changesMap.insert(m_Doc->m_docNotesStylesList.at(a)->name(), *(m_Doc->m_docNotesStylesList.at(a))); |
} |
if (!m_Doc->m_docNotesStylesList.isEmpty()) |
NSlistBox->setEnabled(true); |
if (NSlistBox->currentText() != tr("default")) |
DeleteButton->setEnabled(true); |
else |
DeleteButton->setEnabled(false); |
} |
NSlistBox->blockSignals(wasSignalsBlocked); |
|
DeleteButton->setEnabled(NSlistBox->currentText() != tr("default")); |
} |
|
void NotesStylesEditor::setBlockSignals(bool block) |
{ |
foreach (QWidget* obj, findChildren<QWidget *>()) |
{ |
obj->blockSignals(block); |
} |
paraStyleCombo->blockSignals(block); |
charStyleCombo->blockSignals(block); |
} |
|
void NotesStylesEditor::setNotesStyle(NotesStyle * NS) |
{ |
if (NS == NULL) |
return; |
bool wasSignalsBlocked = signalsBlocked(); |
setBlockSignals(true); |
NSlistBox->setCurrentIndex(NSlistBox->findText(NS->name())); |
NewNameEdit->setText(NS->name()); |
if (NS->name() == tr("default")) |
NewNameEdit->setEnabled(false); |
else |
NewNameEdit->setEnabled(true); |
FootRadio->setChecked(!NS->isEndNotes()); |
if (NS->range() == NSRframe) |
EndRadio->setEnabled(false); |
else |
EndRadio->setEnabled(true); |
EndRadio->setChecked(NS->isEndNotes()); |
NumberingBox->setCurrentIndex((int) NS->getType()); |
RangeBox->setCurrentIndex((int) NS->range()); |
StartSpinBox->setValue(NS->start()); |
PrefixEdit->setText(NS->prefix()); |
SuffixEdit->setText(NS->suffix()); |
SuperMasterCheck->setChecked(NS->isSuperscriptInMaster()); |
SuperNoteCheck->setChecked(NS->isSuperscriptInNote()); |
if (!NS->notesParStyle().isEmpty() && (NS->notesParStyle() != tr("No Style"))) |
paraStyleCombo->setCurrentIndex(paraStyleCombo->findText(NS->notesParStyle())); |
if (!NS->marksChStyle().isEmpty() && (NS->marksChStyle() != tr("No Style"))) |
charStyleCombo->setCurrentIndex(charStyleCombo->findText(NS->marksChStyle())); |
AutoH->setChecked(NS->isAutoNotesHeight()); |
AutoW->setChecked(NS->isAutoNotesWidth()); |
AutoWeld->setChecked(NS->isAutoWeldNotesFrames()); |
//for endnotes remove FRAME range (same effect as footnotes for frame) |
//and disable autofixing size of notes frames |
int rangeFrameIndex = RangeBox->findText(tr("Frame")); |
if (NS->isEndNotes()) |
{ |
AutoW->setEnabled(false); |
AutoWeld->setEnabled(false); |
if (rangeFrameIndex >= 0) |
RangeBox->removeItem(rangeFrameIndex); |
} |
else |
{ |
AutoW->setEnabled(true); |
AutoWeld->setEnabled(true); |
if (rangeFrameIndex == -1) |
RangeBox->addItem(tr("Frame")); |
} |
AutoRemove->setChecked(NS->isAutoRemoveEmptyNotesFrames()); |
|
ApplyButton->setEnabled(false); |
setBlockSignals(wasSignalsBlocked); |
} |
|
void NotesStylesEditor::readNotesStyle(QString nsName) |
{ |
NotesStyle * NS = m_Doc->getNotesStyle(nsName); |
setNotesStyle(NS); |
} |
|
void NotesStylesEditor::on_NSlistBox_currentIndexChanged(const QString &arg1) |
{ |
if (arg1 != tr("default")) |
DeleteButton->setEnabled(true); |
else |
DeleteButton->setEnabled(false); |
readNotesStyle(arg1); |
} |
|
void NotesStylesEditor::on_ApplyButton_clicked() |
{ |
if (addNewNsMode) |
{ |
QString newName = NSlistBox->currentText(); |
NotesStyle newNS = changesMap.value(newName); |
if (m_Doc->validateNSet(newNS)) |
{ |
addNewNsMode = false; |
OKButton->setText(tr("OK")); |
OKButton->setToolTip(""); |
ApplyButton->setText(tr("Apply")); |
m_Doc->newNotesStyle(newNS); |
updateNSList(); |
NSlistBox->setCurrentIndex(NSlistBox->findText(newNS.name())); |
} |
else |
return; |
} |
else |
{ |
//remeber current NStyle |
QString currNS = NSlistBox->currentText(); |
NotesStyle* NS = NULL; |
|
foreach (const QString &nsName, changesMap.keys()) |
{ |
NotesStyle n = changesMap.value(nsName); |
|
//validate settings |
if (!m_Doc->validateNSet(n)) |
{ |
NSlistBox->setCurrentIndex(NSlistBox->findText(n.name())); |
break; |
} |
//rename |
if (nsName != n.name()) |
{ |
//new name for existing set |
QString newName = n.name(); |
getUniqueName(newName, changesMap.keys(),"="); |
n.setName(newName); |
NewNameEdit->setText(newName); |
//current NSet name change |
if (currNS == nsName) |
currNS = newName; |
NS = m_Doc->getNotesStyle(nsName); |
m_Doc->renameNotesStyle(NS, newName); |
m_Doc->setNotesChanged(true); |
} |
//change settings and update marks |
NS = m_Doc->getNotesStyle(n.name()); |
Q_ASSERT(NS != NULL); |
if (*NS != n) |
{ |
SimpleState* ss = NULL; |
if (UndoManager::instance()->undoEnabled()) |
{ |
ss = new SimpleState(UndoManager::EditNotesStyle); |
ss->set("NSTYLE", QString("edit")); |
m_Doc->undoSetNotesStyle(ss, NS); |
} |
//converting foot <--> end notes or changing footnotes range |
if ((NS->isEndNotes() != n.isEndNotes()) || (NS->isEndNotes() && n.isEndNotes() && NS->range() != n.range())) |
{ |
foreach (PageItem_NoteFrame* nF, m_Doc->listNotesFrames(NS)) |
m_Doc->delNoteFrame(nF, false); |
if (n.isEndNotes()) |
m_Doc->flag_updateEndNotes = true; |
} |
m_Doc->setNotesChanged(true); //notesframes width must be updated |
*NS = n; |
if (ss) |
{ |
ss->set("NEWname", NS->name()); |
ss->set("NEWstart", NS->start()); |
ss->set("NEWendNotes", NS->isEndNotes()); |
ss->set("NEWnumStyle", (int) NS->getType()); |
ss->set("NEWrange", (int) NS->range()); |
ss->set("NEWprefix", NS->prefix()); |
ss->set("NEWsuffix", NS->suffix()); |
ss->set("NEWautoH", NS->isAutoNotesHeight()); |
ss->set("NEWautoW", NS->isAutoNotesWidth()); |
ss->set("NEWautoWeld", NS->isAutoWeldNotesFrames()); |
ss->set("NEWautoRemove", NS->isAutoRemoveEmptyNotesFrames()); |
ss->set("NEWsuperMaster", NS->isSuperscriptInMaster()); |
ss->set("NEWsuperNote", NS->isSuperscriptInNote()); |
ss->set("NEWmarksChStyle", NS->marksChStyle()); |
ss->set("NEWnotesParStyle", NS->notesParStyle()); |
UndoManager::instance()->action(m_Doc, ss); |
} |
//invalidate all text frames with marks from current changed notes style |
foreach (PageItem* item, m_Doc->DocItems) |
{ |
if (item->isTextFrame() && !item->isNoteFrame() && item->asTextFrame()->hasMark(NS)) |
item->invalid = true; |
} |
m_Doc->updateNotesNums(NS); |
m_Doc->updateNotesFramesSettings(NS); |
if (m_Doc->flag_updateEndNotes) |
m_Doc->updateEndnotesFrames(NS); |
m_Doc->updateNotesFramesStyles(NS); |
} |
} |
if (m_Doc->notesChanged()) |
{ |
updateNSList(); |
m_Doc->flag_updateMarksLabels = true; |
m_Doc->changed(); |
m_Doc->regionsChanged()->update(QRectF()); |
} |
//restore NStyle index |
readNotesStyle(currNS); |
} |
|
ApplyButton->setEnabled(false); |
NSlistBox->setEnabled(true); |
NewButton->setEnabled(true); |
} |
|
void NotesStylesEditor::on_DeleteButton_clicked() |
{ |
QString nsName = NSlistBox->currentText(); |
int t = ScMessageBox::warning(m_Doc->scMW(), QObject::tr("Attention! Deleting Notes Style"), "<qt>" + |
QObject::tr("You are going to delete notes style %1, but you must to know, that it deletes all notes inputs in notes frames and notes marks in text with that notes style.").arg(nsName) + "</qt>", |
QMessageBox::Ok, QMessageBox::Abort | QMessageBox::Default); |
if (t == QMessageBox::Ok) |
{ |
m_Doc->deleteNotesStyle(nsName); |
m_Doc->changed(); |
m_Doc->regionsChanged()->update(QRectF()); |
setDoc(m_Doc); |
} |
} |
|
void NotesStylesEditor::on_NewButton_clicked() |
{ |
QString oldName = NSlistBox->currentText(); |
NotesStyle newNS = changesMap.value(oldName); |
QString newName = oldName; |
getUniqueName(newName, changesMap.keys(), "_"); |
newNS.setName(newName); |
changesMap.insert(newName, newNS); |
setNotesStyle(&newNS); |
|
NewNameEdit->setEnabled(true); |
NSlistBox->addItem(newName); |
NSlistBox->setCurrentIndex(NSlistBox->findText(newName)); |
NSlistBox->setEnabled(false); |
ApplyButton->setText(tr("Add Style")); |
ApplyButton->setEnabled(true); |
DeleteButton->setEnabled(false); |
NewButton->setEnabled(false); |
addNewNsMode = true; |
OKButton->setText(tr("Cancel Adding")); |
OKButton->setToolTip(tr("Notes Styles Editor is in adding new notes style mode. After pressing Cancel button Notes Styles Editor switch into normal notes styles edit mode.")); |
} |
|
void NotesStylesEditor::on_OKButton_clicked() |
{ |
if (OKButton->text() != tr("OK")) |
{ |
//in adding new style mode go back to normal editing mode |
OKButton->setText(tr("OK")); |
NewButton->setEnabled(true); |
addNewNsMode = false; |
QString newName = NSlistBox->currentText(); |
changesMap.remove(newName); |
int index = NSlistBox->findText(newName); |
NSlistBox->removeItem(index); |
NSlistBox->setCurrentIndex(index-1); |
on_NSlistBox_currentIndexChanged(NSlistBox->currentText()); |
} |
else |
{ |
if (ApplyButton->isEnabled()) |
//apply changes |
on_ApplyButton_clicked(); |
|
//in normal mode close |
close(); |
} |
} |
|
void NotesStylesEditor::on_NewNameEdit_textChanged(const QString &arg1) |
{ |
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
ns.setName(arg1); |
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
} |
|
void NotesStylesEditor::on_FootRadio_toggled(bool checked) |
{ |
bool wasSignalsBlocked = signalsBlocked(); |
setBlockSignals(true); |
|
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
ns.setEndNotes(!checked); |
changesMap.insert(NSlistBox->currentText(), ns); |
EndRadio->setChecked(!checked); |
if (checked) |
{ |
ns.setAutoNotesWidth(true); |
AutoW->setEnabled(true); |
AutoW->setChecked(true); |
ns.setAutoWeldNotesFrames(true); |
AutoWeld->setEnabled(true); |
AutoWeld->setChecked(true); |
} |
|
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
setBlockSignals(wasSignalsBlocked); |
} |
|
void NotesStylesEditor::on_EndRadio_toggled(bool checked) |
{ |
bool wasSignalsBlocked = signalsBlocked(); |
setBlockSignals(true); |
|
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
ns.setEndNotes(checked); |
FootRadio->setChecked(!checked); |
if (checked) |
{ |
ns.setAutoNotesWidth(false); |
AutoW->setChecked(false); |
AutoW->setEnabled(false); |
ns.setAutoWeldNotesFrames(false); |
AutoWeld->setChecked(false); |
AutoWeld->setEnabled(false); |
} |
|
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
setBlockSignals(wasSignalsBlocked); |
} |
|
void NotesStylesEditor::on_NumberingBox_currentIndexChanged(int index) |
{ |
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
ns.setType((NumerationType) index); |
|
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
} |
|
void NotesStylesEditor::on_RangeBox_currentIndexChanged(int index) |
{ |
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
ns.setRange((NumerationRange) index); |
|
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
} |
|
void NotesStylesEditor::on_StartSpinBox_valueChanged(int arg1) |
{ |
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
ns.setStart(arg1); |
|
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
} |
|
void NotesStylesEditor::on_PrefixEdit_textChanged(const QString &arg1) |
{ |
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
ns.setPrefix(arg1); |
|
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
} |
|
void NotesStylesEditor::on_SuffixEdit_textChanged(const QString &arg1) |
{ |
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
ns.setSuffix(arg1); |
|
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
} |
|
void NotesStylesEditor::on_SuperMasterCheck_toggled(bool checked) |
{ |
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
ns.setSuperscriptInMaster(checked); |
|
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
} |
|
void NotesStylesEditor::on_SuperNoteCheck_toggled(bool checked) |
{ |
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
ns.setSuperscriptInNote(checked); |
|
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
} |
|
void NotesStylesEditor::on_AutoH_toggled(bool checked) |
{ |
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
ns.setAutoNotesHeight(checked); |
|
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
} |
|
void NotesStylesEditor::on_AutoW_toggled(bool checked) |
{ |
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
ns.setAutoNotesWidth(checked); |
|
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
} |
|
void NotesStylesEditor::on_AutoWeld_toggled(bool checked) |
{ |
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
ns.setAutoWeldNotesFrames(checked); |
|
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
} |
|
void NotesStylesEditor::on_AutoRemove_toggled(bool checked) |
{ |
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
ns.setAutoRemoveEmptyNotesFrames(checked); |
|
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
} |
|
void NotesStylesEditor::on_paraStyleCombo_currentIndexChanged(const int &arg1) |
{ |
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
if (arg1 == 0) |
ns.setNotesParStyle(""); |
else |
ns.setNotesParStyle(paraStyleCombo->itemText(arg1)); |
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
} |
|
void NotesStylesEditor::on_charStyleCombo_currentIndexChanged(const int &arg1) |
{ |
NotesStyle ns = changesMap.value(NSlistBox->currentText()); |
if (arg1 == 0) |
ns.setMarksCharStyle(""); |
else |
ns.setMarksCharStyle(charStyleCombo->itemText(arg1)); |
changesMap.insert(NSlistBox->currentText(), ns); |
ApplyButton->setEnabled(true); |
} |