[rkward-cvs] SF.net SVN: rkward:[2439] trunk/rkward/rkward

tfry at users.sourceforge.net tfry at users.sourceforge.net
Sat Apr 4 21:38:11 UTC 2009


Revision: 2439
          http://rkward.svn.sourceforge.net/rkward/?rev=2439&view=rev
Author:   tfry
Date:     2009-04-04 21:38:11 +0000 (Sat, 04 Apr 2009)

Log Message:
-----------
Implement auto-scrolling (harder than expected) and sane width for progress control dialog

Modified Paths:
--------------
    trunk/rkward/rkward/misc/rkprogresscontrol.cpp
    trunk/rkward/rkward/misc/rkprogresscontrol.h
    trunk/rkward/rkward/settings/rksettingsmoduler.h

Modified: trunk/rkward/rkward/misc/rkprogresscontrol.cpp
===================================================================
--- trunk/rkward/rkward/misc/rkprogresscontrol.cpp	2009-04-03 12:41:38 UTC (rev 2438)
+++ trunk/rkward/rkward/misc/rkprogresscontrol.cpp	2009-04-04 21:38:11 UTC (rev 2439)
@@ -2,7 +2,7 @@
                           rkprogresscontol  -  description
                              -------------------
     begin                : Sun Sep 10 2006
-    copyright            : (C) 2006, 2007, 2008 by Thomas Friedrichsmeier
+    copyright            : (C) 2006, 2007, 2008, 2009 by Thomas Friedrichsmeier
     email                : tfry at users.sourceforge.net
  ***************************************************************************/
 
@@ -20,11 +20,14 @@
 #include <QHBoxLayout>
 #include <QCloseEvent>
 #include <QVBoxLayout>
+#include <QScrollBar>
+#include <QTimer>
 
 #include <klocale.h>
 
 #include "../rkglobals.h"
 #include "../rbackend/rinterface.h"
+#include "../settings/rksettingsmoduler.h"
 
 #include "../debug.h"
 
@@ -229,6 +232,8 @@
 		output_text->setReadOnly (true);
 		output_text->setPlainText (QString ());
 		output_text->setUndoRedoEnabled (false);
+		output_text->setLineWrapMode (QTextEdit::NoWrap);
+		output_text->setMinimumWidth (QFontMetrics (output_text->font ()).averageCharWidth () * RKSettingsModuleR::getDefaultWidth ());
 		output_box->setStretchFactor (output_text, 10);
 
 		if (!(mode_flags & RKProgressControl::OutputShownByDefault)) {
@@ -236,6 +241,7 @@
 		}
 	}
 	setDetailsWidget (output_box);
+	connect (this, SIGNAL(aboutToShowDetails()), this, SLOT(scrollDown()));
 
 	KDialog::ButtonCodes button_codes = KDialog::Cancel;
 	if (mode_flags & RKProgressControl::OutputSwitchable) button_codes |= KDialog::Details;
@@ -259,6 +265,11 @@
 void RKProgressControlDialog::addOutput (const ROutput *output) {
 	RK_TRACE (MISC);
 
+	// scrolled all the way to the bottom?
+	bool at_end = true;
+	QScrollBar *bar = output_text->verticalScrollBar ();
+	if (bar && (bar->value () < bar->maximum ())) at_end = false;
+
 	if (output->type != last_output_type) {
 		output_text->insertPlainText ("\n");
 
@@ -272,8 +283,21 @@
 	}
 
 	output_text->insertPlainText (output->output);
+
+	// if previously at end, auto-scroll
+	if (at_end && output_text->isVisible ()) scrollDown ();
 }
 
+void RKProgressControlDialog::scrollDown () {
+	RK_TRACE (MISC);
+
+	// oh what an ugly hack... (to cope with changing slider position just when the details widget becomes visible
+	if (!output_text->isVisible ()) QTimer::singleShot (0, this, SLOT(scrollDown()));
+
+	QScrollBar *bar = output_text->verticalScrollBar ();
+	if (bar) bar->setValue (bar->maximum ());
+}
+
 void RKProgressControlDialog::setCloseTextToClose () {
 	RK_TRACE (MISC);
 

Modified: trunk/rkward/rkward/misc/rkprogresscontrol.h
===================================================================
--- trunk/rkward/rkward/misc/rkprogresscontrol.h	2009-04-03 12:41:38 UTC (rev 2438)
+++ trunk/rkward/rkward/misc/rkprogresscontrol.h	2009-04-04 21:38:11 UTC (rev 2439)
@@ -2,7 +2,7 @@
                           rkprogresscontol  -  description
                              -------------------
     begin                : Sun Sep 10 2006
-    copyright            : (C) 2006, 2007 by Thomas Friedrichsmeier
+    copyright            : (C) 2006, 2007, 2009 by Thomas Friedrichsmeier
     email                : tfry at users.sourceforge.net
  ***************************************************************************/
 
@@ -110,6 +110,7 @@
 
 /** This class provides the dialog shown as part of an RKProgressControl. Generally you should not use this class directly, but rather use RKProgressControl. */
 class RKProgressControlDialog : public KDialog {
+	Q_OBJECT
 public:
 /** constructor. */
 	RKProgressControlDialog (const QString &text, const QString &caption, int mode_flags, bool modal);
@@ -121,6 +122,8 @@
 	void finished ();
 protected:
 	void closeEvent (QCloseEvent *e);
+private slots:
+	void scrollDown ();
 private:
 	QLabel *error_indicator;
 	QTextEdit *output_text;

Modified: trunk/rkward/rkward/settings/rksettingsmoduler.h
===================================================================
--- trunk/rkward/rkward/settings/rksettingsmoduler.h	2009-04-03 12:41:38 UTC (rev 2438)
+++ trunk/rkward/rkward/settings/rksettingsmoduler.h	2009-04-04 21:38:11 UTC (rev 2439)
@@ -2,7 +2,7 @@
                           rksettingsmoduler  -  description
                              -------------------
     begin                : Wed Jul 28 2004
-    copyright            : (C) 2004, 2007 by Thomas Friedrichsmeier
+    copyright            : (C) 2004, 2007, 2009 by Thomas Friedrichsmeier
     email                : tfry at users.sourceforge.net
  ***************************************************************************/
 
@@ -51,6 +51,8 @@
 	
 /** generate the commands needed to set the R run time options */
 	static QStringList makeRRunTimeOptionCommands ();
+
+	static int getDefaultWidth () { return options_width; };
 public slots:
 	void boxChanged (int);
 	void pathChanged ();


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the rkward-tracker mailing list