/* * FormDocument.C * (C) 2001 LyX Team * John Levon, moz@compsoc.man.ac.uk */ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include "docdlg.h" #include "Dialogs.h" #include "FormDocument.h" #include "CutAndPaste.h" #include "buffer.h" #include "Liason.h" #include "QtLyXView.h" #include "debug.h" #ifdef CXX_WORKING_NAMESPACES using Liason::setMinibuffer; #endif FormDocument::FormDocument(LyXView *v, Dialogs *d) : dialog_(0), lv_(v), d_(d), h_(0) { // let the dialog be shown // This is a permanent connection so we won't bother // storing a copy because we won't be disconnecting. d->showLayoutDocument.connect(slot(this, &FormDocument::show)); } FormDocument::~FormDocument() { delete dialog_; } void FormDocument::update(bool switched) { if (switched) { hide(); return; } if (!lv_->view()->available()) return; Buffer *buf = lv_->buffer(); if (readonly!=buf->isReadonly()) { readonly = buf->isReadonly(); dialog_->setReadOnly(readonly); } dialog_->setFromParams(buf->params); } void FormDocument::apply() { if (readonly) return; if (!lv_->view()->available()) return; BufferParams & params = lv_->buffer()->params; if (dialog_->updateParams(params)) lv_->view()->redoCurrentBuffer(); lv_->buffer()->markDirty(); setMinibuffer(lv_, _("Document layout set")); } void FormDocument::show() { if (!dialog_) dialog_ = new DocDialog(this, 0, _("LyX: Document Options"), false); if (!dialog_->isVisible()) h_ = d_->hideBufferDependent.connect(slot(this, &FormDocument::hide)); dialog_->raise(); dialog_->setActiveWindow(); update(); dialog_->show(); } bool FormDocument::changeClass(BufferParams & params, int new_class) { if (textclasslist.Load(new_class)) { // successfully loaded setMinibuffer(lv_, _("Converting document to new document class...")); CutAndPaste cap; int ret = cap.SwitchLayoutsBetweenClasses( params.textclass, new_class, lv_->buffer()->paragraph); if (ret) { /* FIXME: error message */ } params.textclass = new_class; } else return false; return true; } void FormDocument::close() { h_.disconnect(); } void FormDocument::hide() { dialog_->hide(); close(); }