[Kst] extragear/graphics/kst/kst
Andrew Walker
arwalker at sumusltd.com
Fri Jul 22 20:19:12 CEST 2005
SVN commit 437686 by arwalker:
BUG:104347 Prevent changes to the status bar text making the main window enlarge in size.
M +1 -0 Makefile.am
M +85 -6 kst.cpp
M +7 -2 kst.h
A statuslabel.cpp [License: GPL (v2+)]
A statuslabel.h [License: GPL (v2+)]
--- trunk/extragear/graphics/kst/kst/Makefile.am #437685:437686
@@ -125,6 +125,7 @@
kstiface_impl.cpp \
kstcombobox.cpp \
draggablelistbox.cpp \
+ statuslabel.cpp \
plotlistbox.cpp \
plotmimesource.cpp \
kstplotdrag.cpp \
--- trunk/extragear/graphics/kst/kst/kst.cpp #437685:437686
@@ -82,6 +82,7 @@
#include "plotmimesource.h"
#include "pluginmanager.h"
#include "psversion.h"
+#include "statuslabel.h"
#include "sysinfo.h"
#include "updatethread.h"
#include "vectorsavedialog.h"
@@ -834,10 +835,12 @@
void KstApp::initStatusBar() {
- _dataBar = new QLabel(QString::null, statusBar());
+ _dataBar = new StatusLabel(QString::null, statusBar());
+ _dataBar->setTextFormat(Qt::PlainText);
statusBar()->addWidget(_dataBar, 5, true);
- _readyBar = new QLabel(i18n("Almost Ready"), statusBar());
+ _readyBar = new StatusLabel(i18n("Almost Ready"), statusBar());
+ _readyBar->setTextFormat(Qt::PlainText);
_readyBar->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
statusBar()->addWidget(_readyBar, 5, true);
@@ -849,14 +852,18 @@
_progressBar->hide();
#ifdef HAVE_LINUX
- _memoryBar = new QLabel(i18n("0 MB available"), statusBar());
+ _memoryBar = new StatusLabel(i18n("0 MB available"), statusBar());
+ _memoryBar->setTextFormat(Qt::PlainText);
statusBar()->addWidget(_memoryBar, 0, true);
connect(&_memTimer, SIGNAL(timeout()), this, SLOT(updateMemoryStatus()));
_memTimer.start(5000);
#endif
statusBar()->show();
+
+ slotUpdateMemoryMsg(i18n("0 MB available"));
slotUpdateStatusMsg(i18n("Ready"));
+ slotUpdateDataMsg(i18n(""));
}
void KstApp::initDocument() {
@@ -1531,26 +1538,96 @@
void KstApp::slotViewStatusBar() {
if (StatusBarAction->isChecked()) {
statusBar()->show();
+ updateStatusBarText();
} else {
statusBar()->hide();
}
}
+void KstApp::updateStatusBarText() {
+ if (statusBar()->isShown()) {
+ QFontMetrics fm(fontMetrics());
+ int widthUsed;
+ int margin = 3;
+ int spacing = 6;
+ int widthCurrent = statusBar()->width();
+ int widthAvailable = widthCurrent - (2*margin) - spacing;
+ int widthData = fm.width(_dataBar->fullText());
+ int widthReady = fm.width(_readyBar->fullText());
+
+ if (_progressBar->isShown()) {
+ widthAvailable -= _progressBar->width();
+ widthAvailable -= spacing;
+ }
+
+ widthUsed = widthData;
+ widthUsed += widthReady;
+#ifdef HAVE_LINUX
+ widthUsed += fm.width(_memoryBar->fullText());
+ widthAvailable -= spacing;
+#endif
+ if (widthUsed > widthAvailable) {
+ if (widthData < widthAvailable) {
+ statusBar()->setMaximumWidth(widthCurrent);
+
+#ifdef HAVE_LINUX
+ if ((widthAvailable - widthData)/2 > widthReady) {
+ _memoryBar->setTextWidth(fm, widthAvailable - widthData - widthReady);
+ _readyBar->setTextWidth(fm, widthReady);
+ } else {
+ _memoryBar->setTextWidth(fm, (widthAvailable - widthData)/2);
+ _readyBar->setTextWidth(fm, (widthAvailable - widthData)/2);
+ }
+#else
+ _readyBar->setTextWidth(fm, widthAvailable - widthData);
+#endif
+ _dataBar->setTextWidth(fm, widthData);
+
+ statusBar()->setMaximumWidth(32767);
+ } else {
+#ifdef HAVE_LINUX
+ _memoryBar->setTextWidth(fm, 0);
+#endif
+ _readyBar->setTextWidth(fm, 0);
+ _dataBar->setTextWidth(fm, widthAvailable);
+ }
+ } else {
+#ifdef HAVE_LINUX
+ _memoryBar->setFullText();
+#endif
+ _readyBar->setFullText();
+ _dataBar->setFullText();
+ }
+ }
+}
+
+
void KstApp::slotUpdateStatusMsg(const QString& msg) {
- _readyBar->setText(msg);
+ _readyBar->setFullText( msg );
+ updateStatusBarText();
}
void KstApp::slotUpdateDataMsg(const QString& msg) {
- _dataBar->setText(msg);
+ _dataBar->setFullText( msg );
+ updateStatusBarText();
}
+void KstApp::slotUpdateMemoryMsg(const QString& msg) {
+#ifdef HAVE_LINUX
+ _memoryBar->setFullText( msg );
+ updateStatusBarText();
+#endif
+}
+
+
void KstApp::slotUpdateProgress(int total, int step, const QString &msg) {
if (step == 0 && msg.isNull()) {
slotUpdateStatusMsg(i18n("Ready"));
_progressBar->hide();
+ updateStatusBarText();
return;
}
@@ -1575,6 +1652,8 @@
} else {
slotUpdateStatusMsg(msg);
}
+
+ updateStatusBarText();
kapp->eventLoop()->processEvents(QEventLoop::ExcludeSocketNotifiers, 10);
}
@@ -2162,7 +2241,7 @@
#ifdef HAVE_LINUX
meminfo();
unsigned long mi = S(kb_main_free + kb_main_buffers + kb_main_cached);
- _memoryBar->setText(i18n("%1 MB available").arg(mi / (1024 * 1024)));
+ slotUpdateMemoryMsg(i18n("%1 MB available").arg(mi / (1024 * 1024)));
#endif
}
--- trunk/extragear/graphics/kst/kst/kst.h #437685:437686
@@ -29,6 +29,7 @@
// application specific includes
#include "kst2dplot.h"
#include "ksteventmonitorentry.h"
+//#include "statuslabel.h"
enum LegendType { LegendOn, LegendOff, LegendAuto };
enum DataType { DataOnly, DataPSD, PSDOnly };
@@ -55,6 +56,7 @@
class KstViewMatricesDialogI;
class KstViewFitsDialogI;
class KstQuickStartDialogI;
+class StatusLabel;
class UpdateThread;
class VectorSaveDialog;
@@ -265,8 +267,10 @@
void slotViewStatusBar();
/** changes the statusbar contents */
+ void updateStatusBarText();
void slotUpdateStatusMsg(const QString &msg);
void slotUpdateDataMsg(const QString &msg);
+ void slotUpdateMemoryMsg(const QString &msg);
void slotUpdateProgress(int total, int step, const QString &msg);
/** just calls plotDialog->show_I(0) */
@@ -515,9 +519,10 @@
KRadioAction *_gfxPolylineAction;
KRadioAction *_gfxLabelAction;
- QLabel *_readyBar;
+ StatusLabel *_readyBar;
+ StatusLabel *_memoryBar;
+ StatusLabel *_dataBar;
KProgress *_progressBar;
- QLabel *_memoryBar, *_dataBar;
bool _stopping;
KstIfaceImpl *_dcopIface;
UpdateThread *_updateThread;
More information about the Kst
mailing list