]> git.lyx.org Git - features.git/commitdiff
Now "New..." and "New from template..." does not request a filename anymore!
authorJürgen Vigna <jug@sad.it>
Wed, 26 Jul 2000 13:43:16 +0000 (13:43 +0000)
committerJürgen Vigna <jug@sad.it>
Wed, 26 Jul 2000 13:43:16 +0000 (13:43 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@926 a592a061-630c-0410-9148-cb99ea01b6c8

ChangeLog
po/POTFILES.in
src/buffer.C
src/buffer.h
src/bufferlist.C
src/lyx_cb.C
src/lyxfunc.C

index 99df27c03c73650f64f7eaf2e2a837282c66f3ca..44fa8df2d53f17cb3a0e4a3ba3f7234ea03b4e5a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2000-07-26  Juergen Vigna  <jug@sad.it>
+
+       * src/buffer.h: added functions setUnnamed(bool) and isUnnamed().
+
+       * src/lyx_cb.C (MenuWriteAs): Changed to react right for unnamed docs
+       and return a bool if it did actual save the file.
+       (AutoSave): don't autosave a unnamed doc.
+
+       * src/bufferlist.C (close) (QwriteAll) (emergencyWriteAll):
+       check if this is an UNNAMED new file and react to it.
+       (newFile): set buffer to unnamed and change to not mark a new
+       buffer dirty if I didn't do anything with it.
+
+       * src/lyxfunc.C (MenuNew): Changed to not ask for filename on new.
+
 2000-07-26  Lars Gullik Bjønnes  <larsbj@lyx.org>
 
        * src/frontends/Menubar.h: make "struct Pimpl;" public + the
index bb53e6eeef6c0bfc4b112b47333ab7682f34e142..a2d1598dd73482513118d1f4e5b946f9e9121862 100644 (file)
@@ -34,6 +34,11 @@ src/frontends/xforms/FormPreferences.C
 src/frontends/xforms/form_preferences.C
 src/frontends/xforms/FormPrint.C
 src/frontends/xforms/form_print.C
+src/frontends/xforms/forms/form_citation.C
+src/frontends/xforms/forms/form_copyright.C
+src/frontends/xforms/forms/form_preferences.C
+src/frontends/xforms/forms/form_print.C
+src/frontends/xforms/forms/form_tabular.C
 src/frontends/xforms/FormTabular.C
 src/frontends/xforms/form_tabular.C
 src/frontends/xforms/Menubar_pimpl.C
index 365f198701dd98d509dcc0938104e9f3962cfc4a..3cfdc03ece4ccdd76b829f33d582063361770ba7 100644 (file)
@@ -128,6 +128,7 @@ Buffer::Buffer(string const & file, bool ronly)
        bak_clean = true;
        dep_clean = 0;
        read_only = ronly;
+       unnamed = false;
        users = 0;
        lyxvc.buffer(this);
        if (read_only || (lyxrc.use_tempdir)) {
index 9e78027cfcc50a36586a53f3266482f233c42f3d..598ea56015991c8dd20318aef7555926083617e4 100644 (file)
@@ -223,7 +223,13 @@ public:
        
         ///
         void markNwDirty() { nw_clean = false; }
-       
+
+       ///
+       void setUnnamed(bool flag=true) { unnamed = flag; }
+
+       ///
+       bool isUnnamed() { return unnamed; }
+
        ///
        void markDirty() {
                if (lyx_clean) {
@@ -397,6 +403,9 @@ private:
         /// do we need to run weave/tangle
         bool nw_clean;
 
+       /// is this a unnamed file (New...)
+       bool unnamed;
+
        /// is regenerating .tex necessary
        DEPCLEAN * dep_clean;
 
index 448a01af271a29df14080adb4aea393389d46044..b43b3da8057b6efcd2c523ecb9c392539b3f400b 100644 (file)
@@ -89,6 +89,7 @@ bool BufferList::empty() const
 
 
 extern void MenuWrite(Buffer *);
+extern bool MenuWriteAs(Buffer *);
 
 bool BufferList::QwriteAll()
 {
@@ -97,21 +98,31 @@ bool BufferList::QwriteAll()
        for(BufferStorage::iterator it = bstore.begin();
            it != bstore.end(); ++it) {
                if (!(*it)->isLyxClean()) {
-                       switch(AskConfirmation(_("Changes in document:"),
-                                              MakeDisplayPath((*it)->fileName(),
-                                                              50),
-                                              _("Save document?"))) {
-                       case 1: // Yes
-                               MenuWrite((*it));
-                               break;
-                       case 2: // No
-                               askMoreConfirmation = true;
-                               unsaved += MakeDisplayPath((*it)->fileName(),
-                                                          50);
-                               unsaved += "\n";
-                               break;
-                       case 3: // Cancel
-                               return false;
+                       string fname;
+                       if ((*it)->isUnnamed())
+                               fname = OnlyFilename((*it)->fileName());
+                       else
+                               fname = MakeDisplayPath((*it)->fileName(), 50);
+                       bool reask = true;
+                       while(reask) {
+                               switch(AskConfirmation(_("Changes in document:"),
+                                                      fname,
+                                                      _("Save document?"))) {
+                               case 1: // Yes
+                                       if ((*it)->isUnnamed())
+                                               reask = !MenuWriteAs((*it));
+                                       else
+                                               MenuWrite((*it));
+                                       break;
+                               case 2: // No
+                                       askMoreConfirmation = true;
+                                       unsaved += MakeDisplayPath(fname, 50);
+                                       unsaved += "\n";
+                                       reask = false;
+                                       break;
+                               case 3: // Cancel
+                                       return false;
+                               }
                        }
                }
        }
@@ -157,23 +168,40 @@ bool BufferList::close(Buffer * buf)
        
         if (buf->getUser()) buf->getUser()->insetUnlock();
        if (buf->paragraph && !buf->isLyxClean() && !quitting) {
-               if (buf->getUser()) ProhibitInput(buf->getUser());
-                switch(AskConfirmation(_("Changes in document:"),
-                                      MakeDisplayPath(buf->fileName(), 50),
-                                      _("Save document?"))){
-               case 1: // Yes
-                       if (buf->save()) {
-                               lastfiles->newFile(buf->fileName());
-                       } else {
-                               if (buf->getUser()) AllowInput(buf->getUser());
+               if (buf->getUser())
+                       ProhibitInput(buf->getUser());
+               string fname;
+               if (buf->isUnnamed())
+                       fname = OnlyFilename(buf->fileName());
+               else
+                       fname = MakeDisplayPath(buf->fileName(), 50);
+               bool reask = true;
+               while(reask) {
+                       switch(AskConfirmation(_("Changes in document:"),
+                                              fname,
+                                              _("Save document?"))){
+                       case 1: // Yes
+                               if (buf->isUnnamed())
+                                       reask = !MenuWriteAs(buf);
+                               else if (buf->save()) {
+                                       lastfiles->newFile(buf->fileName());
+                               } else {
+                                       if (buf->getUser())
+                                               AllowInput(buf->getUser());
+                                       return false;
+                               }
+                               break;
+                       case 2:
+                               reask = false;
+                               break;
+                       case 3: // Cancel
+                               if (buf->getUser())
+                                       AllowInput(buf->getUser());
                                return false;
                        }
-                        break;
-               case 3: // Cancel
-                        if (buf->getUser()) AllowInput(buf->getUser());
-                        return false;
-                }
-               if (buf->getUser()) AllowInput(buf->getUser());
+               }
+               if (buf->getUser())
+                       AllowInput(buf->getUser());
        }
 
        bstore.release(buf);
@@ -245,9 +273,12 @@ void BufferList::emergencyWriteAll()
                        bool madeit = false;
                        
                        lyxerr <<_("lyx: Attempting to save"
-                                  " document ")
-                              << (*it)->fileName()
-                              << _(" as...") << endl;
+                                  " document ");
+                       if ((*it)->isUnnamed())
+                           lyxerr << OnlyFilename((*it)->fileName());
+                       else
+                           lyxerr << (*it)->fileName();
+                       lyxerr << _(" as...") << endl;
                        
                        for (int i = 0; i < 3 && !madeit; ++i) {
                                string s;
@@ -257,6 +288,8 @@ void BufferList::emergencyWriteAll()
                                // 2) In HOME directory.
                                // 3) In "/tmp" directory.
                                if (i == 0) {
+                                       if ((*it)->isUnnamed())
+                                               continue;
                                        s = (*it)->fileName();
                                } else if (i == 1) {
                                        s = AddName(GetEnvPath("HOME"),
@@ -418,7 +451,12 @@ Buffer * BufferList::newFile(string const & name, string tname)
                b->paragraph = new LyXParagraph;
        }
 
+#ifdef NEW_WITH_FILENAME
        b->markDirty();
+#else
+#warning Why mark a new document dirty? I deactivate this for unnamed docs! (Jug)
+       b->setUnnamed();
+#endif
        b->setReadonly(false);
        
        return b;
index 021af5c074cea87c5b2effc5715a7648c231bdf4..c54fbfcfe5a34b1431e0831e0952decf3a932444 100644 (file)
@@ -160,7 +160,7 @@ void ToggleLockedInsetCursor(long x, long y, int asc, int desc);
 int RunLinuxDoc(BufferView *, int, string const &);
 int RunDocBook(int, string const &);
 void MenuWrite(Buffer * buf);
-void MenuWriteAs(Buffer * buffer);
+bool MenuWriteAs(Buffer * buffer);
 void MenuReload(Buffer * buf);
 void MenuLayoutSave();
 
@@ -208,7 +208,7 @@ void MenuWrite(Buffer * buffer)
 
 // should be moved to BufferView.C
 // Half of this func should be in LyXView, the rest in BufferView.
-void MenuWriteAs(Buffer * buffer)
+bool MenuWriteAs(Buffer * buffer)
 {
        // Why do we require BufferView::text to be able to write a
        // document? I see no point in that. (Lgb)
@@ -225,14 +225,21 @@ void MenuWriteAs(Buffer * buffer)
        if (!IsLyXFilename(fname))
                fname += ".lyx";
 
-       fname = fileDlg.Select(_("Enter Filename to Save Document as"), 
-                              OnlyPath(fname),
-                              "*.lyx", 
-                              OnlyFilename(fname));
+       if (buffer->isUnnamed()) {
+               fname = fileDlg.Select(_("Enter Filename to Save Document as"), 
+                                      "",
+                                      "*.lyx", 
+                                      "");
+       } else {
+               fname = fileDlg.Select(_("Enter Filename to Save Document as"), 
+                                      OnlyPath(fname),
+                                      "*.lyx", 
+                                      OnlyFilename(fname));
+       }
        AllowInput(current_view);
 
        if (fname.empty()) {
-               return;
+               return false;
        }
        // Make sure the absolute filename ends with appropriate suffix
        string s = MakeAbsPath(fname);
@@ -244,7 +251,7 @@ void MenuWriteAs(Buffer * buffer)
                if (!AskQuestion(_("Same name as document already has:"),
                                 MakeDisplayPath(s, 50),
                                 _("Save anyway?")))
-                       return;
+                       return false;
                // Falls through to name change and save
        } 
        // No, but do we have another file with this name open?
@@ -262,23 +269,25 @@ void MenuWriteAs(Buffer * buffer)
                                ShowMessage(buffer, _("Document renamed to '"),
                                                MakeDisplayPath(s), _("', but not saved..."));
                        }
-               return;
+               return false;
        } // Check whether the file exists
        else {
                FileInfo myfile(s);
                if (myfile.isOK() && !AskQuestion(_("Document already exists:"), 
                                                  MakeDisplayPath(s, 50),
                                                  _("Replace file?")))
-                       return;
+                       return false;
        }
 
        // Ok, change the name of the buffer
        buffer->fileName(s);
        buffer->markDirty();
+       buffer->setUnnamed(false);
        // And save
        // Small bug: If the save fails, we have irreversible changed the name
        // of the document.
        MenuWrite(buffer);
+       return true;
 }    
 
 
@@ -974,8 +983,8 @@ void AutoSave(BufferView * bv)
        if (!bv->available())
                return;
 
-       if (bv->buffer()->isBakClean()
-           || bv->buffer()->isReadonly()) {
+       if (bv->buffer()->isBakClean() ||
+           bv->buffer()->isReadonly() || bv->buffer()->isUnnamed()) {
                // We don't save now, but we'll try again later
                bv->owner()->resetAutosaveTimer();
                return;
index 59b82809449367dfaba6690a5f8024509c58da03..ae6fbaeecec3ed6325e3da06e40be35d59d7313d 100644 (file)
@@ -113,7 +113,7 @@ extern bool selection_possible;
 extern kb_keymap * toplevel_keymap;
 
 extern void MenuWrite(Buffer *);
-extern void MenuWriteAs(Buffer *);
+extern bool MenuWriteAs(Buffer *);
 extern int  MenuRunLaTeX(Buffer *);
 extern int  MenuBuildProg(Buffer *);
 extern int  MenuRunChktex(Buffer *);
@@ -775,16 +775,20 @@ string LyXFunc::Dispatch(int ac,
                break;
                
        case LFUN_MENUWRITE:
-               owner->getMiniBuffer()->Set(_("Saving document"),
-                                           MakeDisplayPath(owner->buffer()->fileName()),
-                                           "...");
-               MenuWrite(owner->buffer());
-               //owner->getMiniBuffer()-> {
-               //      Set(_("Document saved as"),
-               //          MakeDisplayPath(owner->buffer()->fileName()));
-               //} else {
-               //owner->getMiniBuffer()->Set(_("Save failed!"));
-               //}
+               if (!owner->buffer()->isUnnamed()) {
+                       owner->getMiniBuffer()->Set(_("Saving document"),
+                                                   MakeDisplayPath(owner->buffer()->fileName()),
+                                                   "...");
+                       MenuWrite(owner->buffer());
+                       //owner->getMiniBuffer()-> {
+                       //      Set(_("Document saved as"),
+                       //          MakeDisplayPath(owner->buffer()->fileName()));
+                       //} else {
+                       //owner->getMiniBuffer()->Set(_("Save failed!"));
+                       //}
+               } else {
+                       MenuWriteAs(owner->buffer());
+               }
                break;
                
        case LFUN_MENUWRITEAS:
@@ -2183,7 +2187,7 @@ string LyXFunc::Dispatch(int ac,
                // Do we have a locking inset...
                if (owner->view()->the_locking_inset) {
                        lyxerr << "Locking inset code: "
-                              << owner->view()->the_locking_inset->LyxCode();
+                              << static_cast<int>(owner->view()->the_locking_inset->LyxCode());
                        InsetCaption * new_inset = new InsetCaption;
                        new_inset->setOwner(owner->view()->the_locking_inset);
                        new_inset->SetAutoBreakRows(true);
@@ -2883,6 +2887,7 @@ void LyXFunc::MenuNew(bool fromTemplate)
                        initpath = trypath;
        }
 
+#ifdef NEW_WITH_FILENAME
        ProhibitInput(owner->view());
        fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
        fileDlg.SetButton(1, _("Templates"), lyxrc.template_path);
@@ -2895,7 +2900,7 @@ void LyXFunc::MenuNew(bool fromTemplate)
                lyxerr.debug() << "New Document Cancelled." << endl;
                return;
        }
-        
+       
        // get absolute path of file and make sure the filename ends
        // with .lyx
        string s = MakeAbsPath(fname);
@@ -2903,7 +2908,7 @@ void LyXFunc::MenuNew(bool fromTemplate)
                s += ".lyx";
 
        // Check if the document already is open
-       if (bufferlist.exists(s)){
+       if (bufferlist.exists(s)) {
                switch(AskConfirmation(_("Document is already open:"), 
                                       MakeDisplayPath(s, 50),
                                       _("Do you want to close that document now?\n"
@@ -2922,7 +2927,7 @@ void LyXFunc::MenuNew(bool fromTemplate)
                                return;
                        }
        }
-        
+
        // Check whether the file already exists
        if (IsLyXFilename(s)) {
                FileInfo fi(s);
@@ -2942,6 +2947,16 @@ void LyXFunc::MenuNew(bool fromTemplate)
                        return;
                }
        }
+#else
+       static int newfile_number = 0;
+       string s = "/lyx/dummy/dirname/newfile ["+tostr(++newfile_number)+"]";
+       FileInfo fi(s);
+       while (bufferlist.exists(s) || fi.readable()) {
+               ++newfile_number;
+               s = "/lyx/dummy/dirname/newfile ["+tostr(newfile_number)+"]";
+               fi.newFile(s);
+       }
+#endif
 
        // The template stuff
        string templname;