|
[Bug 104347] window width is widened automatically when the status bar need: msg#00195kde.kst
------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. http://bugs.kde.org/show_bug.cgi?id=104347 arwalker sumusltd com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED ------- Additional Comments From arwalker sumusltd com 2005-07-22 20:19 ------- 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; |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | extragear/graphics/kst/kst: 00195, Andrew Walker |
|---|---|
| Next by Date: | extragear/graphics/kst/kst: 00195, Andrew Walker |
| Previous by Thread: | [Bug 104347] window width is widened automatically when the status bar needs more roomi: 00195, George Staikos |
| Next by Thread: | [Bug 109427] New: Allow expressions in markers: 00195, Nicolas Brisset |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |