Index: /trunk/MagicSoft/Mars/Changelog
===================================================================
--- /trunk/MagicSoft/Mars/Changelog	(revision 2786)
+++ /trunk/MagicSoft/Mars/Changelog	(revision 2787)
@@ -79,4 +79,7 @@
    * mbase/MLogPlugin.[h,cc], mbase/MLogHtml.[h,cc]:
      - added
+
+   * mbase/MStatusDisplay.[h,cc]:
+     - added a Save-As dialog
 
 
Index: /trunk/MagicSoft/Mars/mbase/MStatusDisplay.cc
===================================================================
--- /trunk/MagicSoft/Mars/mbase/MStatusDisplay.cc	(revision 2786)
+++ /trunk/MagicSoft/Mars/mbase/MStatusDisplay.cc	(revision 2787)
@@ -87,6 +87,6 @@
 #include <TGTextView.h>           // TGTextView
 #include <TGStatusBar.h>          // TGStatusBar
+#include <TGFileDialog.h>         // TGFileDialog
 #include <TGProgressBar.h>        // TGHProgressBar
-
 #include <TRootEmbeddedCanvas.h>  // TRootEmbeddedCanvas
 
@@ -190,4 +190,6 @@
     filemenu->AddEntry("Save As status.&root", kFileSaveAsRoot);
     filemenu->AddSeparator();
+    filemenu->AddEntry("Save &As...",          kFileSaveAs);
+    filemenu->AddSeparator();
     filemenu->AddEntry("Re&set",               kFileReset);
     filemenu->AddSeparator();
@@ -203,5 +205,4 @@
     //
     MGPopupMenu *tabmenu = new MGPopupMenu(gClient->GetRoot());
-    // tabmenu->AddEntry("Save &As...", kFileSaveAs);
     tabmenu->AddEntry("Next [&+]",           kTabNext);
     tabmenu->AddEntry("Previous [&-]",       kTabPrevious);
@@ -211,4 +212,6 @@
     tabmenu->AddEntry("Save As tab-i.&C",    kTabSaveAsC);
     tabmenu->AddEntry("Save As tab-i.&root", kTabSaveAsRoot);
+    tabmenu->AddSeparator();
+    tabmenu->AddEntry("Save &As...",         kTabSaveAs);
     tabmenu->AddSeparator();
     tabmenu->AddEntry("Re&move",             kTabRemove);
@@ -1084,13 +1087,9 @@
         Reset();
         return kTRUE;
-        /*
-    case kFileSave:
-        cout << "Save..." << endl;
-        return kTRUE;
 
     case kFileSaveAs:
-        cout << "SaveAs..." << endl;
-        return kTRUE;
-*/
+        SaveAs();
+        return kTRUE;
+
     case kFileSaveAsPS:
         SaveAsPS();
@@ -1111,4 +1110,8 @@
     case kFilePrint:
         PrintToLpr();
+        return kTRUE;
+
+    case kTabSaveAs:
+        SaveAs(fTab->GetCurrent());
         return kTRUE;
 
@@ -2138,4 +2141,46 @@
 }
 
+// --------------------------------------------------------------------------
+//
+//  Opens a save as dialog
+//
+Int_t MStatusDisplay::SaveAs(Int_t num)
+{
+    static const char *gSaveAsTypes[] =
+    {
+        "PostScript",   "*.ps",
+        // "Encapsulated PostScript", "*.eps",
+        "Gif files",    "*.gif",
+        "Macro files",  "*.C",
+        "ROOT files",   "*.root",
+        "All files",    "*",
+        NULL,           NULL
+    };
+
+    static TString dir(".");
+
+    TGFileInfo fi; // fFileName and fIniDir deleted in ~TGFileInfo
+
+    fi.fFileTypes = (const char**)gSaveAsTypes;
+    fi.fIniDir    = StrDup(dir);
+
+    new TGFileDialog(fClient->GetRoot(), this, kFDSave, &fi);
+
+    if (!fi.fFilename)
+        return 0;
+
+    dir = fi.fIniDir;
+
+    const TString name(fi.fFilename);
+
+    if (name.EndsWith(".root")) return SaveAsRoot(num, name);
+    if (name.EndsWith(".ps"))   return SaveAsPS(num, name);
+    if (name.EndsWith(".gif"))  return SaveAsGIF(num, name);
+    if (name.EndsWith(".C"))    return SaveAsC(num, name);
+
+    Warning("MStatusDisplay::SaveAs", "Unknown Extension: %s", fi.fFilename);
+    return 0;
+}
+
 Bool_t MStatusDisplay::HandleConfigureNotify(Event_t *evt)
 {
@@ -2211,52 +2256,2 @@
     return rc;
 }
-
-/*
- // --------------------------------------------------------------------------
-//
-//  Opens a save as dialog, and tries to store the canvas
-//  in the given output format
-//
-void MGEvtDisplay::SaveAsDialog() const
-{
-    static const char *gSaveAsTypes[] =
-    {
-        "PostScript",   "*.ps",
-        "Encapsulated PostScript", "*.eps",
-        "Gif files",    "*.gif",
-        "Macro files",  "*.C",
-        "ROOT files",   "*.root",
-        "All files",    "*",
-        NULL,           NULL
-    };
-
-    static TString dir(".");
-
-    TGFileInfo fi; // fFileName and fIniDir deleted in ~TGFileInfo
-
-    fi.fFileTypes = (const char**)gSaveAsTypes;
-    fi.fIniDir    = StrDup(dir);
-
-    new TGFileDialog(fClient->GetRoot(), this, kFDSave, &fi);
-
-    if (!fi.fFilename)
-        return;
-
-    dir = fi.fIniDir;
-
-    if (strstr(fi.fFilename, ".root") ||
-        strstr(fi.fFilename, ".ps")   ||
-        strstr(fi.fFilename, ".eps")  ||
-        strstr(fi.fFilename, ".gif"))
-    {
-        fCanvas->SaveAs(fi.fFilename);
-        return;
-    }
-    if (strstr(fi.fFilename, ".C"))
-    {
-        fCanvas->SaveSource(fi.fFilename);
-        return;
-    }
-    Warning("SaveAsDialog", "Unknown Extension: %s", fi.fFilename);
-}
-*/
Index: /trunk/MagicSoft/Mars/mbase/MStatusDisplay.h
===================================================================
--- /trunk/MagicSoft/Mars/mbase/MStatusDisplay.h	(revision 2786)
+++ /trunk/MagicSoft/Mars/mbase/MStatusDisplay.h	(revision 2787)
@@ -182,4 +182,6 @@
      Int_t  PrintToLpr(Int_t num);
 
+     Int_t  SaveAs(Int_t num=-1);
+
      Status_t CheckStatus() const { return fStatus; }
      void ClearStatus() { fStatus = kLoopNone; }
