]> git.lyx.org Git - lyx.git/blobdiff - src/lyx_cb.C
more keyboard/keysym changes
[lyx.git] / src / lyx_cb.C
index 4f47c56621a9b923f805aaa315a6a97c16341458..a6f8f60d18a07e90f0d132621b2723a24f6540e2 100644 (file)
 #include "support/filetools.h"
 #include "support/path.h"
 #include "lyxserver.h"
-#include "FontLoader.h"
 #include "lyxrc.h"
 #include "lyxtext.h"
 #include "CutAndPaste.h"
-#include "TextCache.h"
 
 using std::ifstream;
 using std::copy;
@@ -70,9 +68,6 @@ extern FD_form_quotes * fd_form_quotes;
 extern FD_form_preamble * fd_form_preamble;
 extern FD_form_table * fd_form_table;
 extern FD_form_figure * fd_form_figure;
-extern FD_form_screen * fd_form_screen;
-extern FD_form_toc * fd_form_toc;
-extern FD_form_ref * fd_form_ref;
 extern FD_form_bullet * fd_form_bullet;
 
 extern BufferView * current_view; // called too many times in this file...
@@ -159,7 +154,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);
+bool MenuWrite(Buffer * buf);
 bool MenuWriteAs(Buffer * buffer);
 void MenuReload(Buffer * buf);
 void MenuLayoutSave();
@@ -189,7 +184,7 @@ void ShowMessage(Buffer * buf,
 //
 
 // should be moved to lyxfunc.C
-void MenuWrite(Buffer * buffer)
+bool MenuWrite(Buffer * buffer)
 {
        XFlush(fl_display);
        if (!buffer->save()) {
@@ -198,11 +193,13 @@ void MenuWrite(Buffer * buffer)
                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;
 }
 
 
@@ -282,13 +279,23 @@ bool MenuWriteAs(Buffer * buffer)
        // 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)
@@ -980,8 +987,7 @@ void AutoSave(BufferView * bv)
        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;
@@ -1134,26 +1140,6 @@ void InsertAsciiFile(BufferView * bv, string const & f, bool asParagraph)
 }
 
 
-void MenuShowTableOfContents()
-{
-       static int ow = -1, oh;
-
-       TocUpdateCB(0, 0);
-       if (fd_form_toc->form_toc->visible) {
-               fl_raise_form(fd_form_toc->form_toc);
-       } else {
-               fl_show_form(fd_form_toc->form_toc,
-                            FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
-                            _("Table Of Contents"));
-               if (ow < 0) {
-                       ow = fd_form_toc->form_toc->w;
-                       oh = fd_form_toc->form_toc->h;
-               }
-               fl_set_form_minsize(fd_form_toc->form_toc, ow, oh);
-       }
-}
-
-
 void MenuInsertLabel(char const * arg)
 {
        string label = arg;
@@ -1166,34 +1152,14 @@ void MenuInsertLabel(char const * arg)
                }
        }
        if (!label.empty()) {
-               InsetLabel * new_inset = new InsetLabel;
-               new_inset->setContents(label);
-               current_view->insertInset(new_inset);
+               InsetCommandParams p( "label", label );
+               InsetLabel * inset = new InsetLabel( p );
+               current_view->insertInset( inset );
        }
        AllowInput(current_view);
 }
 
 
-void MenuInsertRef()
-{
-       static int ow = -1, oh;
-
-       RefUpdateCB(0, 0);
-       if (fd_form_ref->form_ref->visible) {
-               fl_raise_form(fd_form_ref->form_ref);
-       } else {
-               fl_show_form(fd_form_ref->form_ref,
-                            FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
-                            _("Insert Reference"));
-               if (ow < 0) {
-                       ow = fd_form_ref->form_ref->w;
-                       oh = fd_form_ref->form_ref->h;
-               }
-               fl_set_form_minsize(fd_form_ref->form_ref, ow, oh);
-       }
-}
-
-
 // candidate for move to LyXView
 // This is only used in toolbar.C
 void LayoutsCB(int sel, void *)
@@ -2863,43 +2829,6 @@ extern "C" void FigureOKCB(FL_OBJECT * ob, long data)
 }
 
 
-extern "C" void ScreenApplyCB(FL_OBJECT *, long)
-{
-       lyxrc.roman_font_name = fl_get_input(fd_form_screen->input_roman);
-       lyxrc.sans_font_name = fl_get_input(fd_form_screen->input_sans);
-       lyxrc.typewriter_font_name = fl_get_input(fd_form_screen->input_typewriter);
-       lyxrc.font_norm = fl_get_input(fd_form_screen->input_font_norm);
-       lyxrc.set_font_norm_type();
-       lyxrc.zoom = atoi(fl_get_input(fd_form_screen->intinput_size));
-       fontloader.update();
-
-       // Of course we should only to the resize and the textcahce.clear
-       // if values really changed...but not very important right now. (Lgb)
-       
-       // All buffers will need resize
-       bufferlist.resize();
-       // We also need to empty the textcache so that
-       // the buffer will be formatted correctly after
-       // a zoom change.
-       textcache.clear();
-       
-       current_view->owner()->getMiniBuffer()->Set(_("Screen options set"));
-}
-
-
-extern "C" void ScreenCancelCB(FL_OBJECT *, long)
-{
-       fl_hide_form(fd_form_screen->form_screen);
-}
-
-
-extern "C" void ScreenOKCB(FL_OBJECT * ob, long data)
-{
-       ScreenCancelCB(ob, data);
-       ScreenApplyCB(ob, data);
-}
-
-
 // This function runs "configure" and then rereads lyx.defaults to
 // reconfigure the automatic settings.
 void Reconfigure(BufferView * bv)
@@ -2917,240 +2846,3 @@ void Reconfigure(BufferView * bv)
                   _("You need to restart LyX to make use of any"),
                   _("updated document class specifications."));
 }
-
-
-//
-// Table of Contents
-//
-
-static vector<Buffer::TocItem> toclist;
-
-
-extern "C" void TocSelectCB(FL_OBJECT * ob, long)
-{
-       if (!current_view->available())
-               return;
-   
-       TocUpdateCB(0, 0);
-       unsigned int choice = fl_get_browser(ob);
-       if (0 < choice && choice - 1 < toclist.size()) {
-               current_view->beforeChange();
-               current_view->text->SetCursor(current_view, toclist[choice-1].par, 0);
-               current_view->text->sel_cursor = 
-                       current_view->text->cursor;
-               current_view->update(BufferView::SELECT|BufferView::FITCUR);
-       } else {
-               WriteAlert(_("Error"), 
-                          _("Couldn't find this label"), 
-                          _("in current document."));
-       }
-}
-
-
-extern "C" void TocCancelCB(FL_OBJECT *, long)
-{
-       fl_hide_form(fd_form_toc->form_toc);
-}
-
-
-extern "C"
-void TocUpdateCB(FL_OBJECT *, long)
-{
-       if (!current_view->available()) {
-               toclist.clear();
-               fl_clear_browser(fd_form_toc->browser_toc);
-               fl_add_browser_line(fd_form_toc->browser_toc,
-                                   _("*** No Document ***"));
-               return;
-       }
-
-       vector<vector<Buffer::TocItem> > tmp =
-               current_view->buffer()->getTocList();
-       int type = fl_get_choice(fd_form_toc->toctype)-1;
-       //if (toclist == tmp[type])
-       //      return;
-       if (toclist.size() == tmp[type].size()) {
-               // Check if all elements are the same.
-               unsigned int i = 0;
-               for (; i < toclist.size(); ++i) {
-                       if (toclist[i] !=  tmp[type][i])
-                               break;
-               }
-               if (i >= toclist.size()) return;
-       }
-
-       toclist = tmp[type];
-
-       static Buffer * buffer = 0;
-       int topline = 0;
-       int line = 0;
-       if (buffer == current_view->buffer()) {
-               topline = fl_get_browser_topline(fd_form_toc->browser_toc);
-               line = fl_get_browser(fd_form_toc->browser_toc);
-       } else
-               buffer = current_view->buffer();
-
-       fl_clear_browser(fd_form_toc->browser_toc);
-       fl_hide_object(fd_form_toc->browser_toc);
-
-       for (vector<Buffer::TocItem>::const_iterator it = toclist.begin();
-            it != toclist.end(); ++it)
-               fl_add_browser_line(fd_form_toc->browser_toc,
-                                   (string(4*(*it).depth,' ')+
-                                    (*it).str).c_str());
-
-       fl_set_browser_topline(fd_form_toc->browser_toc, topline);
-       fl_select_browser_line(fd_form_toc->browser_toc, line);
-       fl_show_object(fd_form_toc->browser_toc);
-}
-
-
-/* callbacks for form form_ref */
-extern "C" void RefSelectCB(FL_OBJECT *, long data)
-{
-       if (!current_view->available())
-               return;
-
-       string s = 
-               fl_get_browser_line(fd_form_ref->browser_ref,
-                                   fl_get_browser(fd_form_ref->browser_ref));
-       string u = frontStrip(strip(fl_get_input(fd_form_ref->ref_name)));
-
-       if (s.empty())
-               return;
-
-        if (data == 5) {
-                current_view->owner()->getLyXFunc()->Dispatch(LFUN_REFGOTO, s.c_str());
-               if (!current_view->NoSavedPositions()) {
-                       fl_activate_object(fd_form_ref->back);
-                       fl_set_object_lcol(fd_form_ref->back, FL_BLACK);
-               }
-               return;
-       } else if (data >= 6) {
-               current_view->owner()->getLyXFunc()->Dispatch(LFUN_REFBACK);
-               if (current_view->NoSavedPositions()) {
-                       fl_deactivate_object(fd_form_ref->back);
-                       fl_set_object_lcol(fd_form_ref->back, FL_INACTIVE);
-               }
-               return;
-       }       
-
-       static string const commands[5]
-               = { "\\ref", "\\pageref", "\\vref", "\\vpageref",
-                   "\\prettyref"};
-       string t = commands[data];
-
-       if (current_view->buffer()->isSGML())
-               t += "[" + u + "]" + "{" + s + "}";
-       else
-               t += "{" + s + "}";
-
-       Inset * new_inset = 
-               new InsetRef(t, current_view->buffer());
-       current_view->insertInset(new_inset);
-}
-
-
-extern "C" void RefUpdateCB(FL_OBJECT *, long)
-{
-       if (!current_view->available()) {
-               fl_clear_browser(fd_form_ref->browser_ref);
-               return;
-       }
-
-       FL_OBJECT * brow = fd_form_ref->browser_ref;
-
-       // Get the current line, in order to restore it later
-       char const * const btmp = fl_get_browser_line(brow,
-                                                     fl_get_browser(brow));
-       string currentstr = btmp ? btmp : "";
-
-       fl_clear_browser(brow);
-       fl_hide_object(brow);
-
-       vector<string> refs = current_view->buffer()->getLabelList();
-       if (fl_get_button(fd_form_ref->sort))
-               sort(refs.begin(),refs.end());
-       for (vector<string>::const_iterator it = refs.begin();
-            it != refs.end(); ++it)
-               fl_add_browser_line(brow, (*it).c_str());
-
-       int topline = 1;
-       int total_lines = fl_get_browser_maxline(brow);
-       for (int i = 1; i <= total_lines ; ++i) {
-               if (fl_get_browser_line(brow, i) == currentstr) {
-                       topline = i;
-                       break;
-               }
-       }
-       fl_set_browser_topline(brow, topline);
-
-       bool empty = refs.empty();
-       bool sgml = current_view->buffer()->isSGML();
-       bool readonly = current_view->buffer()->isReadonly();
-
-       if (current_view->NoSavedPositions()) {
-               fl_deactivate_object(fd_form_ref->back);
-               fl_set_object_lcol(fd_form_ref->back, FL_INACTIVE);
-       } else {
-               fl_activate_object(fd_form_ref->back);
-               fl_set_object_lcol(fd_form_ref->back, FL_BLACK);
-       }
-
-       if (empty) {
-               fl_add_browser_line(brow, 
-                                   _("*** No labels found in document ***"));
-               fl_deactivate_object(brow);
-               fl_deactivate_object(fd_form_ref->gotoref);
-               fl_set_object_lcol(fd_form_ref->gotoref, FL_INACTIVE);
-       } else {
-               fl_select_browser_line(brow, topline);
-               fl_activate_object(brow);
-               fl_activate_object(fd_form_ref->gotoref);
-               fl_set_object_lcol(fd_form_ref->gotoref, FL_BLACK);
-       }
-
-       if (empty || readonly) {
-               fl_deactivate_object(fd_form_ref->ref);
-               fl_set_object_lcol(fd_form_ref->ref, FL_INACTIVE);
-               fl_deactivate_object(fd_form_ref->pageref);
-               fl_set_object_lcol(fd_form_ref->pageref, FL_INACTIVE);
-       } else {
-               fl_activate_object(fd_form_ref->ref);
-               fl_set_object_lcol(fd_form_ref->ref, FL_BLACK);
-               fl_activate_object(fd_form_ref->pageref);
-               fl_set_object_lcol(fd_form_ref->pageref, FL_BLACK);
-       }
-       
-       if (empty || readonly || sgml) {
-               fl_deactivate_object(fd_form_ref->vref);
-               fl_set_object_lcol(fd_form_ref->vref, FL_INACTIVE);
-               fl_deactivate_object(fd_form_ref->vpageref);
-               fl_set_object_lcol(fd_form_ref->vpageref, FL_INACTIVE);
-               fl_deactivate_object(fd_form_ref->prettyref);
-               fl_set_object_lcol(fd_form_ref->prettyref, FL_INACTIVE);
-       } else {
-               fl_activate_object(fd_form_ref->vref);
-               fl_set_object_lcol(fd_form_ref->vref, FL_BLACK);
-               fl_activate_object(fd_form_ref->vpageref);
-               fl_set_object_lcol(fd_form_ref->vpageref, FL_BLACK);
-               fl_activate_object(fd_form_ref->prettyref);
-               fl_set_object_lcol(fd_form_ref->prettyref, FL_BLACK);
-       }
-
-       if (sgml) {
-               fl_activate_object(fd_form_ref->ref_name);
-               fl_set_object_lcol(fd_form_ref->ref_name, FL_BLACK);
-       } else {
-               fl_deactivate_object(fd_form_ref->ref_name);
-               fl_set_object_lcol(fd_form_ref->ref_name, FL_INACTIVE);
-       }
-
-       fl_show_object(brow);
-}
-
-
-extern "C" void RefHideCB(FL_OBJECT *, long)
-{
-       fl_hide_form(fd_form_ref->form_ref);
-}