2000-08-08 Juergen Vigna <jug@sad.it>
+ * src/lyx_cb.C (AutoSave): autosave for unnamed files enabled!
+
+ * src/bufferlist.C (close):
+ * src/bufferlist.C (QwriteAll): remove Autosave-files for Unnamed()
+ documents if exiting without saving.
+
+ * src/buffer.C (save): use removeAutosaveFile()
+
+ * src/support/filetools.C (removeAutosaveFile): new function.
+
+ * src/lyx_cb.C (MenuWrite): returns a bool now.
+ (MenuWriteAs): check if file could really be saved and revert to the
+ old name if not.
+ (MenuWriteAs): removing old autosavefile if existant.
+
* src/frontends/xforms/FormRef.h: puting FD_form_ref declaration
before Goto toggle declaration, because of compiler warning.
if (writeFile(fileName(), false)) {
markLyxClean();
-
- // now delete the autosavefile
- string a = OnlyPath(fileName());
- a += '#';
- a += OnlyFilename(fileName());
- a += '#';
- FileInfo fileinfo(a);
- if (fileinfo.exist()) {
- if (::remove(a.c_str()) != 0) {
- WriteFSAlert(_("Could not delete "
- "auto-save file!"), a);
- }
- }
+ removeAutosaveFile(fileName());
} else {
// Saving failed, so backup is not backup
if (lyxrc.make_backup) {
}
-extern void MenuWrite(Buffer *);
+extern bool MenuWrite(Buffer *);
extern bool MenuWriteAs(Buffer *);
bool BufferList::QwriteAll()
if ((*it)->isUnnamed())
reask = !MenuWriteAs((*it));
else {
- MenuWrite((*it));
- reask = false;
+ reask = !MenuWrite((*it));
}
break;
case 2: // No
+ // if we crash after this we could
+ // have no autosave file but I guess
+ // this is really inprobable (Jug)
+ if ((*it)->isUnnamed()) {
+ removeAutosaveFile((*it)->fileName());
+ }
askMoreConfirmation = true;
unsaved += MakeDisplayPath(fname, 50);
unsaved += "\n";
}
break;
case 2:
+ if (buf->isUnnamed()) {
+ removeAutosaveFile(buf->fileName());
+ }
reask = false;
break;
case 3: // Cancel
--- /dev/null
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ *
+ * LyX, The Document Processor
+ *
+ * Copyright 2000 The LyX Team.
+ *
+ * ======================================================
+ */
+
+#include <config.h>
+
+#include FORMS_H_LOCATION
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+
+#include "gettext.h"
+#include "Dialogs.h"
+#include "FormRef.h"
+#include "LyXView.h"
+#include "buffer.h"
+#include "form_ref.h"
+#include "lyxfunc.h"
+
+#include <algorithm>
+
+using std::sort;
+using std::vector;
+
+static int formw;
+static int formh;
+
+FormRef::FormRef(LyXView * lv, Dialogs * d)
+ : FormCommand(lv, d, _("Reference")), dialog_(0),
+ toggle(GOBACK)
+{
+ // let the dialog be shown
+ // These are permanent connections so we won't bother
+ // storing a copy because we won't be disconnecting.
+ d->showRef.connect(slot(this, &FormRef::showInset));
+ d->createRef.connect(slot(this, &FormRef::createInset));
+}
+
+
+FormRef::~FormRef()
+{
+ free();
+ delete dialog_;
+}
+
+
+void FormRef::clearStore()
+{
+ refs.clear();
+}
+
+
+void FormRef::build()
+{
+ dialog_ = build_ref();
+
+ fl_addto_choice(dialog_->type,
+ _(" Ref | Page | TextRef | TextPage | PrettyRef "));
+
+ // XFORMS bug workaround
+ // Define the min/max dimensions. Actually applied in update()
+ formw = form()->w, formh = form()->h;
+
+ // Name is irrelevant to LaTeX documents
+ if( lv_->buffer()->isLatex() ) {
+ fl_deactivate_object( dialog_->name );
+ fl_set_object_lcol( dialog_->name, FL_INACTIVE );
+ }
+
+ // Can change reference only through browser
+ fl_deactivate_object( dialog_->ref );
+
+ if( lv_->buffer()->isReadonly() ) {
+ fl_deactivate_object( dialog_->type );
+ fl_deactivate_object( dialog_->ok );
+ fl_set_object_lcol( dialog_->ok, FL_INACTIVE );
+ } else {
+ fl_activate_object( dialog_->type );
+ fl_activate_object( dialog_->ok );
+ fl_set_object_lcol( dialog_->ok, FL_BLACK );
+ }
+}
+
+
+FL_FORM * const FormRef::form() const
+{
+ if( dialog_ ) // no need to test for dialog_->form_ref
+ return dialog_->form_ref;
+ else
+ return 0;
+}
+
+
+void FormRef::update()
+{
+ fl_set_input(dialog_->ref, params.getContents().c_str());
+ fl_set_input(dialog_->name, params.getOptions().c_str());
+
+ Type type = getType();
+ fl_set_choice( dialog_->type, type+1 );
+
+ toggle = GOBACK;
+ fl_set_object_label(dialog_->go, _("Goto reference"));
+
+ refs.clear();
+ if( inset_ == 0 ) {
+ refs = lv_->buffer()->getLabelList();
+ updateBrowser( refs );
+ showBrowser();
+ } else
+ hideBrowser();
+}
+
+
+void FormRef::updateBrowser( vector<string> keys ) const
+{
+ if( fl_get_button( dialog_->sort ) )
+ sort( keys.begin(), keys.end() );
+
+ fl_clear_browser( dialog_->browser );
+ for( vector<string>::const_iterator it = keys.begin();
+ it != keys.end(); ++it )
+ fl_add_browser_line( dialog_->browser, (*it).c_str());
+
+ if( keys.empty() ) {
+ fl_add_browser_line( dialog_->browser,
+ _("*** No labels found in document ***"));
+
+ fl_deactivate_object( dialog_->browser );
+ fl_deactivate_object( dialog_->update );
+ fl_deactivate_object( dialog_->sort );
+ fl_set_object_lcol( dialog_->browser, FL_INACTIVE );
+ fl_set_object_lcol( dialog_->update, FL_INACTIVE );
+ fl_set_object_lcol( dialog_->sort, FL_INACTIVE );
+ } else {
+ fl_set_browser_topline( dialog_->browser, 1 );
+ fl_activate_object( dialog_->browser );
+ fl_set_object_lcol( dialog_->browser, FL_BLACK );
+ fl_activate_object( dialog_->update );
+ fl_set_object_lcol( dialog_->update, FL_BLACK );
+ fl_activate_object( dialog_->sort );
+ fl_set_object_lcol( dialog_->sort, FL_BLACK );
+ }
+}
+
+
+void FormRef::showBrowser() const
+{
+ fl_show_object( dialog_->browser );
+ fl_show_object( dialog_->update );
+ fl_show_object( dialog_->sort );
+
+ setSize( formw, formh, 0 );
+
+ fl_deactivate_object( dialog_->type );
+ fl_set_object_lcol( dialog_->type, FL_INACTIVE );
+ fl_deactivate_object( dialog_->go );
+ fl_set_object_lcol( dialog_->go, FL_INACTIVE );
+ fl_deactivate_object( dialog_->ok );
+ fl_set_object_lcol( dialog_->ok, FL_INACTIVE );
+ fl_set_object_lcol( dialog_->ref, FL_INACTIVE );
+}
+
+
+void FormRef::hideBrowser() const
+{
+ fl_hide_object( dialog_->browser );
+ fl_hide_object( dialog_->update );
+ fl_hide_object( dialog_->sort );
+
+ setSize( 250, formh, 280 );
+
+ fl_activate_object( dialog_->type );
+ fl_set_object_lcol( dialog_->type, FL_BLACK );
+ fl_activate_object( dialog_->go );
+ fl_set_object_lcol( dialog_->go, FL_BLACK );
+ fl_deactivate_object( dialog_->ok );
+ fl_set_object_lcol( dialog_->ok, FL_INACTIVE );
+ fl_set_object_lcol( dialog_->ref, FL_BLACK );
+}
+
+
+void FormRef::setSize( int w, int h, int dx ) const
+{
+ static int x1 = dialog_->name->x;
+ static int y1 = dialog_->name->y;
+ static int x2 = dialog_->ref->x;
+ static int y2 = dialog_->ref->y;
+ static int x3 = dialog_->type->x;
+ static int y3 = dialog_->type->y;
+ static int x4 = dialog_->go->x;
+ static int y4 = dialog_->go->y;
+ static int x5 = dialog_->ok->x;
+ static int y5 = dialog_->ok->y;
+ static int x6 = dialog_->cancel->x;
+ static int y6 = dialog_->cancel->y;
+
+ if( form()->w != w )
+ fl_set_form_size( form(), w, h );
+
+ fl_set_form_minsize( form(), w, h );
+ fl_set_form_maxsize( form(), 2*w, h );
+
+ if( form()->w == w ) return;
+
+ fl_set_object_position( dialog_->name, x1-dx, y1 );
+ fl_set_object_position( dialog_->ref, x2-dx, y2 );
+ fl_set_object_position( dialog_->type, x3-dx, y3 );
+ fl_set_object_position( dialog_->go, x4-dx, y4 );
+ fl_set_object_position( dialog_->ok, x5-dx, y5 );
+ fl_set_object_position( dialog_->cancel, x6-dx, y6 );
+
+ // These two must be reset apparently
+ // Name is irrelevant to LaTeX documents
+ if( lv_->buffer()->isLatex() ) {
+ fl_deactivate_object( dialog_->name );
+ fl_set_object_lcol( dialog_->name, FL_INACTIVE );
+ }
+
+ // Can change reference only through browser
+ fl_deactivate_object( dialog_->ref );
+}
+
+
+void FormRef::apply()
+{
+ if (!lv_->view()->available())
+ return;
+
+ Type type = static_cast<Type>( fl_get_choice(dialog_->type)-1 );
+ params.setCmdName( getName( type ) );
+
+ params.setOptions( fl_get_input(dialog_->name) );
+
+ if( inset_ != 0 )
+ {
+ // Only update if contents have changed
+ if( params != inset_->params() ) {
+ inset_->setParams( params );
+ lv_->view()->updateInset( inset_, true );
+ }
+ } else {
+ lv_->getLyXFunc()->Dispatch( LFUN_REF_INSERT,
+ params.getAsString().c_str() );
+ }
+}
+
+
+void FormRef::input( long data )
+{
+ switch( data ) {
+ // goto reference / go back
+ case 1:
+ {
+ toggle = static_cast<Goto>(toggle + 1);
+ if( toggle == GOFIRST ) toggle = GOREF;
+
+ switch( toggle ) {
+ case GOREF:
+ {
+ lv_->getLyXFunc()->
+ Dispatch(LFUN_REF_GOTO,
+ params.getContents().c_str());
+ fl_set_object_label(dialog_->go, _("Go back"));
+ }
+ break;
+
+ case GOBACK:
+ {
+ lv_->getLyXFunc()->Dispatch(LFUN_REF_BACK);
+ fl_set_object_label(dialog_->go, _("Goto reference"));
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ break;
+
+ // choose browser key
+ case 2:
+ {
+ unsigned int sel = fl_get_browser( dialog_->browser );
+ if( sel < 1 || sel > refs.size() ) break;
+
+ string s = fl_get_browser_line( dialog_->browser, sel );
+ fl_set_input( dialog_->ref, s.c_str());
+ params.setContents( s );
+
+ toggle = GOBACK;
+ lv_->getLyXFunc()->Dispatch(LFUN_REF_BACK);
+ fl_set_object_label(dialog_->go, _("Goto reference"));
+
+ fl_activate_object( dialog_->type );
+ fl_set_object_lcol( dialog_->type, FL_BLACK );
+ fl_activate_object( dialog_->go );
+ fl_set_object_lcol( dialog_->go, FL_BLACK );
+ fl_activate_object( dialog_->ok );
+ fl_set_object_lcol( dialog_->ok, FL_BLACK );
+ fl_set_object_lcol( dialog_->ref, FL_BLACK );
+ }
+ break;
+
+ // update or sort
+ case 3:
+ {
+ fl_freeze_form( form() );
+ updateBrowser( refs );
+ fl_unfreeze_form( form() );
+ }
+ break;
+
+ // changed reference type
+ case 4:
+ {
+ Type type = static_cast<Type>( fl_get_choice(dialog_->type)-1 );
+ if( params.getCmdName() != getName( type ) ) {
+ fl_activate_object( dialog_->ok );
+ fl_set_object_lcol( dialog_->ok, FL_BLACK );
+ } else if( inset_ != 0 ) {
+ fl_deactivate_object( dialog_->ok );
+ fl_set_object_lcol( dialog_->ok, FL_INACTIVE );
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+FormRef::Type FormRef::getType() const
+{
+ Type type;
+
+ if( params.getCmdName() == "ref" )
+ type = REF;
+
+ else if( params.getCmdName() == "pageref" )
+ type = PAGEREF;
+
+ else if( params.getCmdName() == "vref" )
+ type = VREF;
+
+ else if( params.getCmdName() == "vpageref" )
+ type = VPAGEREF;
+
+ else
+ type = PRETTYREF;
+
+ return type;
+}
+
+
+string FormRef::getName( Type type ) const
+{
+ string name;
+
+ switch( type ) {
+ case REF:
+ name = "ref";
+ break;
+ case PAGEREF:
+ name = "pageref";
+ break;
+ case VREF:
+ name = "vref";
+ break;
+ case VPAGEREF:
+ name = "vpageref";
+ break;
+ case PRETTYREF:
+ name = "prettyref";
+ break;
+ }
+
+ return name;
+}
--- /dev/null
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ *
+ * LyX, The Document Processor
+ *
+ * Copyright 2000 The LyX Team.
+ *
+ * ======================================================
+ */
+
+#ifndef FORMREF_H
+#define FORMREF_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "FormCommand.h"
+struct FD_form_ref;
+
+/** This class provides an XForms implementation of the FormRef Dialog.
+ */
+class FormRef : public FormCommand {
+public:
+ /**@name Constructors and Destructors */
+ //@{
+ ///
+ FormRef(LyXView *, Dialogs *);
+ ///
+ ~FormRef();
+ //@}
+
+private:
+ ///
+ enum Type{ REF=0, PAGEREF, VREF, VPAGEREF, PRETTYREF };
+ ///
+ enum Goto{ GOREF=0, GOBACK, GOFIRST };
+
+ /// Build the dialog
+ virtual void build();
+ /// Filter the input
+ virtual void input( long );
+ /// Update dialog before showing it
+ virtual void update();
+ /// Not used but must be instantiated
+ virtual void apply();
+ /// delete derived class variables from hide()
+ virtual void clearStore();
+ /// Pointer to the actual instantiation of the xform's form
+ virtual FL_FORM * const form() const;
+
+ ///
+ void updateBrowser( std::vector<string> ) const;
+ ///
+ void showBrowser() const;
+ ///
+ void hideBrowser() const;
+ ///
+ void setSize( int, int, int ) const;
+ ///
+ FD_form_ref * build_ref();
+ ///
+ Type getType() const;
+ ///
+ string getName( Type type ) const;
+
+ /// Real GUI implementation.
+ FD_form_ref * dialog_;
+
+ ///
+ Goto toggle;
+ ///
+ std::vector<string> refs;
+};
+
+#endif
--- /dev/null
+// File modified by fdfix.sh for use by lyx (with xforms >= 0.88) and gettext
+#include <config.h>
+#include "lyx_gui_misc.h"
+#include "gettext.h"
+
+/* Form definition file generated with fdesign. */
+
+#include FORMS_H_LOCATION
+#include <stdlib.h>
+#include "form_ref.h"
+#include "FormRef.h"
+
+FD_form_ref * FormRef::build_ref()
+{
+ FL_OBJECT *obj;
+ FD_form_ref *fdui = new FD_form_ref;
+
+ fdui->form_ref = fl_bgn_form(FL_NO_BOX, 530, 340);
+ fdui->form_ref->u_vdata = this;
+ obj = fl_add_box(FL_UP_BOX, 0, 0, 530, 340, "");
+ fdui->browser = obj = fl_add_browser(FL_HOLD_BROWSER, 10, 10, 270, 280, "");
+ fl_set_object_gravity(obj, FL_NorthWest, FL_NoGravity);
+ fl_set_object_resize(obj, FL_RESIZE_X);
+ fl_set_object_callback(obj, C_FormCommandInputCB, 2);
+ fdui->update = obj = fl_add_button(FL_NORMAL_BUTTON, 40, 300, 90, 30, _("Update"));
+ fl_set_button_shortcut(obj, scex(_("Update|#U#u")), 1);
+ fl_set_object_resize(obj, FL_RESIZE_NONE);
+ fl_set_object_callback(obj, C_FormCommandInputCB, 3);
+ fdui->sort = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 170, 300, 30, 30, _("Sort"));
+ fl_set_object_lalign(obj, FL_ALIGN_RIGHT);
+ fl_set_object_resize(obj, FL_RESIZE_NONE);
+ fl_set_object_callback(obj, C_FormCommandInputCB, 3);
+ fdui->name = obj = fl_add_input(FL_NORMAL_INPUT, 370, 10, 150, 40, _("Name:"));
+ fl_set_object_gravity(obj, FL_NorthEast, FL_NorthEast);
+ fdui->ref = obj = fl_add_input(FL_NORMAL_INPUT, 370, 60, 150, 40, _("Reference:"));
+ fl_set_object_gravity(obj, FL_NorthEast, FL_NorthEast);
+ fdui->type = obj = fl_add_choice(FL_NORMAL_CHOICE, 340, 140, 140, 40, _("Reference type"));
+ fl_set_object_shortcut(obj, scex(_("Reference type|#t")), 1);
+ fl_set_object_boxtype(obj, FL_FRAME_BOX);
+ fl_set_object_lalign(obj, FL_ALIGN_TOP);
+ fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+ fl_set_object_callback(obj, C_FormCommandInputCB, 4);
+ fdui->go = obj = fl_add_button(FL_NORMAL_BUTTON, 340, 200, 140, 40, _("Goto reference"));
+ fl_set_button_shortcut(obj, scex(_("Goto reference|#G")), 1);
+ fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+ fl_set_object_callback(obj, C_FormCommandInputCB, 1);
+ fdui->ok = obj = fl_add_button(FL_RETURN_BUTTON, 330, 300, 90, 30, _("OK"));
+ fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+ fl_set_object_callback(obj, C_FormCommandOKCB, 0);
+ fdui->cancel = obj = fl_add_button(FL_NORMAL_BUTTON, 430, 300, 90, 30, _("Cancel"));
+ fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+ fl_set_object_callback(obj, C_FormCommandCancelCB, 0);
+ fl_end_form();
+
+ fdui->form_ref->fdui = fdui;
+
+ return fdui;
+}
+/*---------------------------------------*/
+
--- /dev/null
+/** Header file generated with fdesign on Mon Aug 7 17:11:47 2000.**/
+
+#ifndef FD_form_ref_h_
+#define FD_form_ref_h_
+
+/** Callbacks, globals and object handlers **/
+extern "C" void C_FormCommandInputCB(FL_OBJECT *, long);
+extern "C" void C_FormCommandOKCB(FL_OBJECT *, long);
+extern "C" void C_FormCommandCancelCB(FL_OBJECT *, long);
+
+
+/**** Forms and Objects ****/
+struct FD_form_ref {
+
+ FL_FORM *form_ref;
+ FL_OBJECT *browser;
+ FL_OBJECT *update;
+ FL_OBJECT *sort;
+ FL_OBJECT *name;
+ FL_OBJECT *ref;
+ FL_OBJECT *type;
+ FL_OBJECT *go;
+ FL_OBJECT *ok;
+ FL_OBJECT *cancel;
+};
+
+#endif /* FD_form_ref_h_ */
--- /dev/null
+Magic: 13000
+
+Internal Form Definition File
+ (do not change)
+
+Number of forms: 1
+Unit of measure: FL_COORD_PIXEL
+
+=============== FORM ===============
+Name: form_ref
+Width: 530
+Height: 340
+Number of Objects: 10
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 530 340
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label:
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name:
+callback:
+argument:
+
+--------------------
+class: FL_BROWSER
+type: HOLD_BROWSER
+box: 10 10 270 280
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label:
+shortcut:
+resize: FL_RESIZE_X
+gravity: FL_NorthWest FL_NoGravity
+name: browser
+callback: C_FormCommandInputCB
+argument: 2
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 40 300 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Update
+shortcut: Update|#U#u
+resize: FL_RESIZE_NONE
+gravity: FL_NoGravity FL_NoGravity
+name: update
+callback: C_FormCommandInputCB
+argument: 3
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 170 300 30 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_RIGHT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Sort
+shortcut:
+resize: FL_RESIZE_NONE
+gravity: FL_NoGravity FL_NoGravity
+name: sort
+callback: C_FormCommandInputCB
+argument: 3
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 370 10 150 40
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Name:
+shortcut:
+resize: FL_RESIZE_NONE
+gravity: FL_NorthEast FL_NorthEast
+name: name
+callback:
+argument:
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 370 60 150 40
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Reference:
+shortcut:
+resize: FL_RESIZE_NONE
+gravity: FL_NorthEast FL_NorthEast
+name: ref
+callback:
+argument:
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 340 140 140 40
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_TOP
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Reference type
+shortcut: Reference type|#t
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: type
+callback: C_FormCommandInputCB
+argument: 4
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 340 200 140 40
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Goto reference
+shortcut: Goto reference|#G
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: go
+callback: C_FormCommandInputCB
+argument: 1
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 330 300 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: ok
+callback: C_FormCommandOKCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 430 300 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Cancel
+shortcut:
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: cancel
+callback: C_FormCommandCancelCB
+argument: 0
+
+==============================
+create_the_forms
int RunLinuxDoc(BufferView *, int, string const &);
int RunDocBook(int, string const &);
-void MenuWrite(Buffer * buf);
+bool MenuWrite(Buffer * buf);
bool MenuWriteAs(Buffer * buffer);
void MenuReload(Buffer * buf);
void MenuLayoutSave();
//
// should be moved to lyxfunc.C
-void MenuWrite(Buffer * buffer)
+bool MenuWrite(Buffer * buffer)
{
XFlush(fl_display);
if (!buffer->save()) {
if (AskQuestion(_("Save failed. Rename and try again?"),
MakeDisplayPath(s, 50),
_("(If not, document is not saved.)"))) {
- MenuWriteAs(buffer);
+ return MenuWriteAs(buffer);
}
+ return false;
} else {
lastfiles->newFile(buffer->fileName());
}
+ return true;
}
// Ok, change the name of the buffer
buffer->fileName(s);
buffer->markDirty();
+ bool unnamed = buffer->isUnnamed();
buffer->setUnnamed(false);
// And save
// Small bug: If the save fails, we have irreversible changed the name
// of the document.
- MenuWrite(buffer);
+ // Hope this is fixed this way! (Jug)
+ if (!MenuWrite(buffer)) {
+ buffer->fileName(oldname);
+ buffer->setUnnamed(unnamed);
+ ShowMessage(buffer, _("Document could not be saved!"),
+ _("Holding the old name."), MakeDisplayPath(oldname));
+ return false;
+ }
+ // now remove the oldname autosave file if existant!
+ removeAutosaveFile(oldname);
return true;
-}
+}
int MenuRunLaTeX(Buffer * buffer)
if (!bv->available())
return;
- if (bv->buffer()->isBakClean() ||
- bv->buffer()->isReadonly() || bv->buffer()->isUnnamed()) {
+ if (bv->buffer()->isBakClean() || bv->buffer()->isReadonly()) {
// We don't save now, but we'll try again later
bv->owner()->resetAutosaveTimer();
return;
extern kb_keymap * toplevel_keymap;
-extern void MenuWrite(Buffer *);
+extern bool MenuWrite(Buffer *);
extern bool MenuWriteAs(Buffer *);
extern int MenuRunLaTeX(Buffer *);
extern int MenuBuildProg(Buffer *);
<< "'" << endl;
return c.first != -1 ? strip(c.second, '\n') : string();
}
+
+void removeAutosaveFile(string const & filename)
+{
+ string a = OnlyPath(filename);
+ a += '#';
+ a += OnlyFilename(filename);
+ a += '#';
+ FileInfo fileinfo(a);
+ if (fileinfo.exist()) {
+ if (::remove(a.c_str()) != 0) {
+ WriteFSAlert(_("Could not delete auto-save file!"), a);
+ }
+ }
+}
/* Uses kpsewhich to find tex files */
string const findtexfile(string const & fil, string const & format);
+/* remove the autosave-file and give a Message if it can't be done */
+void removeAutosaveFile(string const & filename);
+
#endif