summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kicker/applets/systemtray/systemtrayapplet.cpp111
-rw-r--r--kicker/applets/systemtray/systemtrayapplet.h4
2 files changed, 74 insertions, 41 deletions
diff --git a/kicker/applets/systemtray/systemtrayapplet.cpp b/kicker/applets/systemtray/systemtrayapplet.cpp
index 3ca721792..27ec27078 100644
--- a/kicker/applets/systemtray/systemtrayapplet.cpp
+++ b/kicker/applets/systemtray/systemtrayapplet.cpp
@@ -38,6 +38,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <tqpainter.h>
#include <tqimage.h>
#include <tqlayout.h>
+#include <tqwhatsthis.h>
#include <dcopclient.h>
#include <tdeapplication.h>
@@ -91,6 +92,8 @@ SystemTrayApplet::SystemTrayApplet(const TQString& configFile, Type type, int ac
m_showClockSettingCB(nullptr),
m_iconMargin(1),
m_iconMarginSB(nullptr),
+ m_iconSpacing(1),
+ m_iconSpacingSB(nullptr),
m_layout(nullptr)
{
DCOPObject::setObjId("SystemTrayApplet");
@@ -257,16 +260,18 @@ void SystemTrayApplet::preferences()
connect(m_settingsDialog, TQ_SIGNAL(okClicked()), this, TQ_SLOT(applySettings()));
connect(m_settingsDialog, TQ_SIGNAL(finished()), this, TQ_SLOT(settingsDialogFinished()));
- TQGrid *settingsGrid = m_settingsDialog->makeGridMainWidget( 3, TQt::Vertical);
+ TQWidget *settingsWidget = m_settingsDialog->makeMainWidget();
+ TQVBoxLayout *settingsLayout = new TQVBoxLayout(settingsWidget);
- m_showClockSettingCB = new TQCheckBox(i18n("Show Clock in Tray"), settingsGrid);
+ m_showClockSettingCB = new TQCheckBox(i18n("Show clock in tray"), settingsWidget);
m_showClockSettingCB->setChecked(m_showClockInTray);
+ settingsLayout->addWidget(m_showClockSettingCB);
+ settingsLayout->setSpacing(m_settingsDialog->spacingHint());
- //m_iconSelector = new TDEActionSelector(m_settingsDialog);
- m_iconSelector = new TDEActionSelector(settingsGrid);
+ m_iconSelector = new TDEActionSelector(settingsWidget);
m_iconSelector->setAvailableLabel(i18n("Hidden icons:"));
m_iconSelector->setSelectedLabel(i18n("Visible icons:"));
- //m_settingsDialog->setMainWidget(m_iconSelector);
+ settingsLayout->addWidget(m_iconSelector);
TQListBox *hiddenListBox = m_iconSelector->availableListBox();
TQListBox *shownListBox = m_iconSelector->selectedListBox();
@@ -293,12 +298,37 @@ void SystemTrayApplet::preferences()
}
}
- TQHBox *hbox = new TQHBox(settingsGrid);
- hbox->setSizePolicy(TQSizePolicy::Maximum, TQSizePolicy::Maximum);
- TQLabel *iconMarginL = new TQLabel(i18n("Icon margin: "), hbox);
- m_iconMarginSB = new TQSpinBox(0, 20, 1, hbox);
+ TQGridLayout *marginGrid = new TQGridLayout(2, 3);
+ marginGrid->setSpacing(m_settingsDialog->spacingHint());
+ marginGrid->setColStretch(2,1); // last empty column operates as a spacer
+
+ TQLabel *iconMarginL = new TQLabel(i18n("Icon &margin:"), settingsWidget);
+ m_iconMarginSB = new TQSpinBox(0, 20, 1, settingsWidget);
m_iconMarginSB->setSuffix(i18n(" px"));
m_iconMarginSB->setValue(m_iconMargin);
+ iconMarginL->setBuddy(m_iconMarginSB);
+ TQWhatsThis::add(iconMarginL, i18n( "Preferred margin between icons in system tray and outer border.<br>"
+ "Note that the actual margins can be either larger (in case there is "
+ "extra free space on the panel) or smaller (in case the panel is "
+ "not able to fit a single raw).") );
+
+ marginGrid->addWidget(iconMarginL, 0, 0);
+ marginGrid->addWidget(m_iconMarginSB, 0, 1);
+
+ TQLabel *iconSpacingL = new TQLabel(i18n("Icon &spacing:"), settingsWidget);
+ m_iconSpacingSB = new TQSpinBox(0, 20, 1, settingsWidget);
+ m_iconSpacingSB->setSuffix(i18n(" px"));
+ m_iconSpacingSB->setValue(m_iconSpacing);
+ iconSpacingL->setBuddy(m_iconSpacingSB);
+ TQWhatsThis::add(iconSpacingL, i18n( "Minimal spacing between neighbouring icons in system tray.<br>"
+ "Note that the actual spacing can be larger (in case there is "
+ "extra free space on the panel).") );
+
+
+ marginGrid->addWidget(iconSpacingL, 1, 0);
+ marginGrid->addWidget(m_iconSpacingSB, 1, 1);
+
+ settingsLayout->addLayout(marginGrid);
m_settingsDialog->show();
}
@@ -319,6 +349,7 @@ void SystemTrayApplet::applySettings()
m_showClockInTray = m_showClockSettingCB->isChecked();
m_iconMargin = m_iconMarginSB->value();
+ m_iconSpacing = m_iconSpacingSB->value();
TDEConfig *conf = config();
@@ -369,6 +400,7 @@ void SystemTrayApplet::applySettings()
conf->setGroup("System Tray");
conf->writeEntry("ShowClockInTray", m_showClockInTray);
conf->writeEntry("IconMargin", m_iconMargin);
+ conf->writeEntry("IconSpacing", m_iconSpacing);
conf->sync();
@@ -530,6 +562,7 @@ void SystemTrayApplet::loadSettings()
m_iconSize = conf->readNumEntry("systrayIconWidth", 22);
m_showClockInTray = conf->readNumEntry("ShowClockInTray", false);
m_iconMargin = conf->readNumEntry("IconMargin", 1);
+ m_iconSpacing = conf->readNumEntry("IconSpacing", 1);
}
void SystemTrayApplet::systemTrayWindowAdded( WId w )
@@ -810,7 +843,7 @@ int SystemTrayApplet::maxIconHeight() const
int largest = m_iconSize;
TrayEmbedList::const_iterator lastEmb = m_shownWins.end();
- for (TrayEmbedList::const_iterator emb = m_shownWins.begin(); emb != m_shownWins.end(); ++emb)
+ for (TrayEmbedList::const_iterator emb = m_shownWins.begin(); emb != lastEmb; ++emb)
{
if (*emb == 0)
{
@@ -934,20 +967,10 @@ void SystemTrayApplet::layoutTray()
{
setUpdatesEnabled(false);
- int iconCount = m_shownWins.count();
-
- if (m_showHidden)
- {
- iconCount += m_hiddenWins.count();
- }
-
- /* heightWidth = height or width in pixels (depends on orientation())
- * nbrOfLines = number of rows or cols (depends on orientation())
- * line = what line to draw an icon in */
- int i = 0, line, nbrOfLines, heightWidth;
+ int i = 0;
bool showExpandButton = m_expandButton && m_expandButton->isVisibleTo(this);
delete m_layout;
- m_layout = new TQGridLayout(this, 1, 1, 0, m_iconMargin);
+ m_layout = new TQGridLayout(this, 1, 1, m_iconMargin, m_iconSpacing);
if (m_expandButton)
{
@@ -966,22 +989,28 @@ void SystemTrayApplet::layoutTray()
int col = 0;
//
- // The margin and spacing specified in the layout implies that:
- // [-- m_iconMargin pixels --] [-- first icon --] [-- m_iconMargin pixels --] ... [-- m_iconMargin pixels --] [-- last icon --] [-- m_iconMargin pixels --]
+ // The margin and spacing specified in the layout implies that it looks like:
//
- // So, if we say that iconWidth is the icon width plus the m_iconMargin pixels spacing, then the available width for the icons
- // is the widget width minus m_iconMargin pixels margin. Forgetting these m_iconMargin pixels broke the layout algorithm in KDE <= 3.5.9.
+ // [-- m_iconMargin px --] [-- first icon --] [-- m_iconSpacing px --] ... [-- m_iconSpacing px --] [-- last icon --] [-- m_iconMargin px --]
//
- // This fix makes the workarounds in the heightForWidth() and widthForHeight() methods unneeded.
+ // So, the width of this layout should conform to the relation:
//
+ // width() == iconSize*nbrOfLines + 2*m_iconMargin + (nbrOfLines-1)*m_iconSpacing.
+ //
+ // Solving it for number of lines we get:
+ //
+ // width() - 2*m_iconMargin + m_iconSpacing
+ // nbrOfLines = ------------------------------------------
+ // iconSize + m_iconSpacing
if (orientation() == TQt::Vertical)
{
- int iconWidth = maxIconWidth() + m_iconMargin * 2; // +2 for the margins that implied by the layout
- heightWidth = width() - m_iconMargin * 2;
- // to avoid nbrOfLines=0 we ensure heightWidth >= iconWidth!
- heightWidth = heightWidth < iconWidth ? iconWidth : heightWidth;
- nbrOfLines = heightWidth / iconWidth;
+ int nbrOfLines = (width() - 2*m_iconMargin + m_iconSpacing) /
+ (maxIconWidth() + m_iconSpacing);
+ if (nbrOfLines < 1) {
+ nbrOfLines = 1; // avoid nbrOfLines==0 or negative (in case m_iconMargin is unreasonably large)
+ m_layout->setMargin( (width() - maxIconWidth()) / 2); // also adjust the margins, so the icons won't get shifted beyond visibility
+ }
m_layout->addMultiCellWidget(m_leftSpacer,
0, 0,
@@ -1004,7 +1033,7 @@ void SystemTrayApplet::layoutTray()
for (TrayEmbedList::const_iterator emb = m_hiddenWins.begin();
emb != lastEmb; ++emb)
{
- line = i % nbrOfLines;
+ int line = i % nbrOfLines;
(*emb)->show();
m_layout->addWidget((*emb), col, line,
TQt::AlignHCenter | TQt::AlignVCenter);
@@ -1022,7 +1051,7 @@ void SystemTrayApplet::layoutTray()
for (TrayEmbedList::const_iterator emb = m_shownWins.begin();
emb != lastEmb; ++emb)
{
- line = i % nbrOfLines;
+ int line = i % nbrOfLines;
(*emb)->show();
m_layout->addWidget((*emb), col, line,
TQt::AlignHCenter | TQt::AlignVCenter);
@@ -1054,10 +1083,12 @@ void SystemTrayApplet::layoutTray()
}
else // horizontal
{
- int iconHeight = maxIconHeight() + m_iconMargin * 2; // +2 for the margins that implied by the layout
- heightWidth = height() - m_iconMargin * 2;
- heightWidth = heightWidth < iconHeight ? iconHeight : heightWidth; // to avoid nbrOfLines=0
- nbrOfLines = heightWidth / iconHeight;
+ int nbrOfLines = (height() - 2*m_iconMargin + m_iconSpacing) /
+ (maxIconHeight() + m_iconSpacing);
+ if (nbrOfLines < 1) {
+ nbrOfLines = 1; // avoid nbrOfLines==0 or negative (in case m_iconMargin is unreasonably large)
+ m_layout->setMargin( (height() - maxIconHeight()) / 2); // also adjust the margins, so the icons won't shift beyond viability
+ }
m_layout->addMultiCellWidget(m_leftSpacer,
0, nbrOfLines - 1,
@@ -1079,7 +1110,7 @@ void SystemTrayApplet::layoutTray()
TrayEmbedList::const_iterator lastEmb = m_hiddenWins.end();
for (TrayEmbedList::const_iterator emb = m_hiddenWins.begin(); emb != lastEmb; ++emb)
{
- line = i % nbrOfLines;
+ int line = i % nbrOfLines;
(*emb)->show();
m_layout->addWidget((*emb), line, col,
TQt::AlignHCenter | TQt::AlignVCenter);
@@ -1097,7 +1128,7 @@ void SystemTrayApplet::layoutTray()
for (TrayEmbedList::const_iterator emb = m_shownWins.begin();
emb != lastEmb; ++emb)
{
- line = i % nbrOfLines;
+ int line = i % nbrOfLines;
(*emb)->show();
m_layout->addWidget((*emb), line, col,
TQt::AlignHCenter | TQt::AlignVCenter);
diff --git a/kicker/applets/systemtray/systemtrayapplet.h b/kicker/applets/systemtray/systemtrayapplet.h
index d06d42b72..581cd10b0 100644
--- a/kicker/applets/systemtray/systemtrayapplet.h
+++ b/kicker/applets/systemtray/systemtrayapplet.h
@@ -120,8 +120,10 @@ private:
int m_iconSize;
bool m_showClockInTray;
TQCheckBox *m_showClockSettingCB;
- uint m_iconMargin;
+ int m_iconMargin;
TQSpinBox *m_iconMarginSB;
+ int m_iconSpacing;
+ TQSpinBox *m_iconSpacingSB;
TQGridLayout* m_layout;
};