added icons for the buttons
[case] / src / button.cpp
index 90bfd8e..d883c84 100644 (file)
 
 #include "button.h"
 
+#include <iostream>
+
+#define ICON_PATH QString("/usr/share/pixmaps/case/")
+#define ICON_SET "default"
 
-Button::Button(QWidget *parent, const int maxWidth, const int maxHeight) : QPushButton(parent) {
-    setMaximumWidth(maxWidth);
-    setMaximumHeight(maxHeight);
-}
 
-Button::Button(const QString &text, QWidget *parent, const int maxWidth, const int maxHeight) :
-    QPushButton(text, parent)
+Button::Button(const QString &name, QWidget *parent, const int maxWidth, const int maxHeight) :
+    QPushButton(parent),
+    iconIndex(0)
 {
     setMaximumWidth(maxWidth);
     setMaximumHeight(maxHeight);
+
+    QImage iconImage(ICON_PATH + ICON_SET + "/" + name + ".xpm", "XPM");
+    if (iconImage.isNull()) iconImage.load(ICON_PATH + ICON_SET + "/" + name + ".png", "PNG");
+    if (iconImage.isNull()) iconImage.load(ICON_PATH + ICON_SET + "/" + name + ".gif", "GIF");
+
+    iconImage = iconImage.convertToFormat(QImage::Format_Indexed8);
+
+    QRgb buttonText = palette().color(QPalette::ButtonText).rgb();
+    QRgb highlight = palette().color(QPalette::Highlight).rgb();
+    QVector<QRgb> colorTable = iconImage.colorTable();
+    for (QVector<QRgb>::iterator it = colorTable.begin(); it != colorTable.end(); ++it) {
+        if ((*it & 0xFFFFFF) == 0xFFFFFF) *it = (*it & 0xFF000000) | buttonText;
+        else if ((*it & 0xFFFFFF) == 0x0000FF) *it = (*it & 0xFF000000) | highlight;
+    }
+    iconImage.setColorTable(colorTable);
+
+    icons[0] = QIcon(QPixmap::fromImage(iconImage));
+    icons[1] = QIcon(QPixmap::fromImage(iconImage.mirrored(true, false)));
+
+    setIcon(icons[0]);
 }
 
-Button::Button(const QIcon &icon, const QString &text, QWidget *parent, const int maxWidth, const int maxHeight) :
-    QPushButton(icon, text, parent)
-{
-    setMaximumWidth(maxWidth);
-    setMaximumHeight(maxHeight);
+
+void Button::swapIcon() {
+    iconIndex = (iconIndex + 1) % 2;
+    setIcon(icons[iconIndex]);
 }