changeset 17883:3851e5fde76d

GUI: allow only one release notes windows to be open * libgui/src/main-window.h (class main-window): Added release_notes_window variable. * libgui/src/main-window.cpp (main-window::mainwindow): Initialize release_notes_window variable. (main-window::~mainwindow): call delete on release_notes_window variable. (main_window::display_release_notes): Create release_notes_window only if not already created, and always unminimize/show it.
author John Donoghue <john.donoghue@ieee.org>
date Thu, 07 Nov 2013 10:39:30 -0500
parents cf3f828f401c
children 766ad9be2966
files libgui/src/main-window.cc libgui/src/main-window.h
diffstat 2 files changed, 44 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/main-window.cc	Thu Nov 07 15:25:34 2013 -0500
+++ b/libgui/src/main-window.cc	Thu Nov 07 10:39:30 2013 -0500
@@ -78,6 +78,7 @@
     editor_window (create_default_editor (this)),
     workspace_window (new workspace_view (this)),
     find_files_dlg (0),
+    release_notes_window (0),
     _octave_main_thread (0),
     _octave_qt_link (0),
     _clipboard (QApplication::clipboard ()),
@@ -108,6 +109,11 @@
       delete find_files_dlg;
       find_files_dlg = 0;
     }
+  if (release_notes_window)
+    {
+      delete release_notes_window;
+      release_notes_window = 0;
+    }
   delete _octave_main_thread;
   delete _octave_qt_link;
   delete _cmd_queue;
@@ -254,43 +260,51 @@
 void
 main_window::display_release_notes (void)
 {
-  std::string news_file = Voct_etc_dir + "/NEWS";
-
-  QString news;
-
-  QFile *file = new QFile (QString::fromStdString (news_file));
-  if (file->open (QFile::ReadOnly))
+  if (! release_notes_window)
     {
-      QTextStream *stream = new QTextStream (file);
-      news = stream->readAll ();
-      if (! news.isEmpty ())
+      std::string news_file = Voct_etc_dir + "/NEWS";
+
+      QString news;
+
+      QFile *file = new QFile (QString::fromStdString (news_file));
+      if (file->open (QFile::ReadOnly))
         {
-          news.prepend ("<pre>");
-          news.append ("</pre>");
+          QTextStream *stream = new QTextStream (file);
+          news = stream->readAll ();
+          if (! news.isEmpty ())
+            {
+              news.prepend ("<pre>");
+              news.append ("</pre>");
+            }
+          else
+            news = (tr ("The release notes file '%1' is empty.")
+                    . arg (QString::fromStdString (news_file)));
         }
       else
-        news = (tr ("The release notes file '%1' is empty.")
+        news = (tr ("The release notes file '%1' cannot be read.")
                 . arg (QString::fromStdString (news_file)));
-    }
-  else
-    news = (tr ("The release notes file '%1' cannot be read.")
-            . arg (QString::fromStdString (news_file)));
 
 
-  QWidget *w = new QWidget;
+      release_notes_window = new QWidget;
 
-  QTextBrowser *browser = new QTextBrowser (w);
-  browser->setText (news);
+      QTextBrowser *browser = new QTextBrowser (release_notes_window);
+      browser->setText (news);
+
+      QVBoxLayout *vlayout = new QVBoxLayout;
+      vlayout->addWidget (browser);
 
-  QVBoxLayout *vlayout = new QVBoxLayout;
-  vlayout->addWidget (browser);
+      release_notes_window->setLayout (vlayout);
+      release_notes_window->setWindowTitle (tr ("Octave Release Notes"));
+      release_notes_window->setWindowIcon (QIcon (_release_notes_icon));
+    }
 
-  w->setLayout (vlayout);
-  w->setWindowTitle (tr ("Octave Release Notes"));
-  w->setWindowIcon (QIcon (_release_notes_icon));
-  w->show ();
-  w->raise ();
-  w->activateWindow ();
+  if (! release_notes_window->isVisible ())
+    release_notes_window->show ();
+  else if (release_notes_window->isMinimized ())
+    release_notes_window->showNormal ();
+
+  release_notes_window->raise ();
+  release_notes_window->activateWindow ();
 }
 
 void
--- a/libgui/src/main-window.h	Thu Nov 07 15:25:34 2013 -0500
+++ b/libgui/src/main-window.h	Thu Nov 07 10:39:30 2013 -0500
@@ -323,6 +323,9 @@
   // Find files dialog
   find_files_dialog * find_files_dlg;
 
+  // release notes window
+  QWidget * release_notes_window;
+
   octave_main_thread *_octave_main_thread;
 
   octave_qt_link *_octave_qt_link;