summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-09-13 19:35:58 -0500
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-09-13 19:35:58 -0500
commitb9daa01a7dab10bf81410e171efe31bdd57da43b (patch)
tree3bd564f03f33c0609436e461b0b0e08118b2aa11
parentdb0c7b24cfa766aa88a8c0d7dfdae16f346033a0 (diff)
downloadqt4-tqt-theme-engine-b9daa01a7dab10bf81410e171efe31bdd57da43b.tar.gz
qt4-tqt-theme-engine-b9daa01a7dab10bf81410e171efe31bdd57da43b.zip
Add widget cache and fix checkboxes and pushbuttons
-rw-r--r--lib/tdeqt4converter.cpp2
-rw-r--r--lib/tdeqt4converter.h1
-rw-r--r--plugin/simplestyle.cpp416
-rw-r--r--plugin/simplestyle.h31
4 files changed, 296 insertions, 154 deletions
diff --git a/lib/tdeqt4converter.cpp b/lib/tdeqt4converter.cpp
index e65dca2..3c5675d 100644
--- a/lib/tdeqt4converter.cpp
+++ b/lib/tdeqt4converter.cpp
@@ -666,7 +666,7 @@ TQStyle::SFlags convertQt4ToTQt3SFlags(QStyle::State qt4stateflags, TQt3WidgetTy
// sflags = sflags | TQStyle::;
// }
if (qt4stateflags & QStyle::State_Sunken) {
- if ((wt == TQT3WT_TQPopupMenu) || (wt == TQT3WT_TQMenuBar) || (wt == TQT3WT_TQToolButton)) {
+ if ((wt == TQT3WT_TQPopupMenu) || (wt == TQT3WT_TQMenuBar) || (wt == TQT3WT_TQToolButton) || (wt == TQT3WT_TQRadioButton) || (wt == TQT3WT_TQCheckBox) || (wt == TQT3WT_TQPushButton)) {
sflags = sflags | TQStyle::Style_Down;
}
sflags = sflags | TQStyle::Style_Sunken;
diff --git a/lib/tdeqt4converter.h b/lib/tdeqt4converter.h
index bea9035..13739e9 100644
--- a/lib/tdeqt4converter.h
+++ b/lib/tdeqt4converter.h
@@ -52,6 +52,7 @@ enum TQt3WidgetType {
TQT3WT_TQTabBar,
TQT3WT_TQRadioButton,
TQT3WT_TQCheckBox,
+ TQT3WT_TQPushButton,
TQT3WT_TQPopupMenu,
TQT3WT_TQComboBox,
TQT3WT_TQSlider,
diff --git a/plugin/simplestyle.cpp b/plugin/simplestyle.cpp
index 18cf536..6161d26 100644
--- a/plugin/simplestyle.cpp
+++ b/plugin/simplestyle.cpp
@@ -26,6 +26,7 @@
#include <tqtabbar.h>
#include <tqradiobutton.h>
#include <tqcheckbox.h>
+#include <tqpushbutton.h>
#include <tqpopupmenu.h>
#include <tqmenudata.h>
#include <tqcombobox.h>
@@ -135,9 +136,6 @@ static QString TDEFileDialogSelectDirectory(QWidget *parent, const QString &capt
Qt4TDEStyle::Qt4TDEStyle()
{
- m_previousQt4InterfaceWidget = 0;
- m_previousTQt3InterfaceWidget = 0;
-
enable_debug_warnings = (getenv("DEBUG_TDEQT4_THEME_ENGINE") != NULL);
#ifdef INTEGRATE_WITH_TDE
@@ -230,21 +228,7 @@ Qt4TDEStyle::Qt4TDEStyle()
m_tqt3parent_widget = new TQWidget();
m_tqt3generic_widget = new TQWidget(m_tqt3parent_widget);
- m_tqt3progressbar_widget = new TQProgressBar(m_tqt3parent_widget);
- m_tqt3tabbar_widget = new TQTabBar(m_tqt3parent_widget);
- m_tqt3radiobutton_widget = new TQRadioButton(m_tqt3parent_widget);
- m_tqt3checkbox_widget = new TQCheckBox(m_tqt3parent_widget);
- m_tqt3popupmenu_widget = new TQPopupMenu(m_tqt3parent_widget);
- m_tqt3combobox_widget = new TQComboBox(m_tqt3parent_widget);
- m_tqt3slider_widget = new TQSlider(m_tqt3parent_widget);
- m_tqt3scrollbar_widget = new TQScrollBar(m_tqt3parent_widget);
- m_tqt3spinbox_widget = new TQSpinBox(m_tqt3parent_widget);
- m_tqt3spinwidget_widget = new TQSpinWidget(m_tqt3parent_widget);
m_tqt3window_widget = new TQWidget(m_tqt3parent_widget);
- m_tqt3titlebar_widget = new TQTitleBar(m_tqt3window_widget, m_tqt3parent_widget);
- m_tqt3menubar_widget = new TQMenuBar(m_tqt3parent_widget);
- m_tqt3toolbox_widget = new TQToolBox(m_tqt3parent_widget);
- m_tqt3toolbutton_widget = new TQToolButton(m_tqt3parent_widget);
#ifdef INTEGRATE_WITH_TDE
qt_filedialog_open_filename_hook = &TDEFileDialogOpenName;
@@ -287,6 +271,7 @@ Qt4TDEStyle::~Qt4TDEStyle()
// Verify I'm not leaking memory like a sieve when this is commented out!!!
// delete m_tqt3parent_widget;
+ m_internalTQt3WidgetCache->setAutoDelete(false);
delete m_internalTQt3WidgetCache;
delete m_internalTQt3PixmapCache;
@@ -356,8 +341,9 @@ bool Qt4TDEStyle::eventFilter(QObject *obj, QEvent *ev)
// repaint = false;
// hoverTab = tab;
- if (repaint)
+ if (repaint) {
tabbar->repaint();
+ }
}
}
// }
@@ -1113,7 +1099,8 @@ QSize Qt4TDEStyle::sizeFromContents(ContentsType type, const QStyleOption *opt,
&& (qt4menuactions.at(i)->text() == qt4menuitemoptions->text)
&& (qt4menuactions.at(i)->isChecked() == qt4menuitemoptions->checked)
) {
- drawingItem = m_tqt3popupmenu_widget->findItem(m_tqt3popupmenu_widget->idAt(i));
+ TQPopupMenu* popupMenuWidget = dynamic_cast<TQPopupMenu*>(interfaceWidget);
+ drawingItem = popupMenuWidget->findItem(popupMenuWidget->idAt(i));
break;
}
}
@@ -1149,7 +1136,7 @@ QSize Qt4TDEStyle::sizeFromContents(ContentsType type, const QStyleOption *opt,
return retval;
}
-int Qt4TDEStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QWidget *w ) const
+int Qt4TDEStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QWidget *w) const
{
int retval = 0;
TQWidget* interfaceWidget = 0;
@@ -1559,6 +1546,7 @@ TQWidget* Qt4TDEStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
const QTabBar* qt4tabbar_widget = 0;
const QRadioButton* qt4radiobutton_widget = 0;
const QCheckBox* qt4checkbox_widget = 0;
+ const QPushButton* qt4pushbutton_widget = 0;
const QMenu* qt4menu_widget = 0;
const QProgressBar* qt4progressbar_widget = 0;
const QComboBox* qt4combobox_widget = 0;
@@ -1578,51 +1566,102 @@ TQWidget* Qt4TDEStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
TQColor bgcolor;
+ TQWidget* cacheResult = 0;
+ const QObject* qt4objectptr = dynamic_cast<const QObject*>(w);
+ if (qt4objectptr) {
+ cacheResult = m_internalTQt3WidgetCache->find((long)qt4objectptr);
+ }
+ else {
+ return NULL;
+ }
+
if (forceReload == false) {
// NOTE
// Enabling this for every widget breaks sliders and all other dynamically updated widgets
// Disabling it for every widget makes the style engine run too slowly to be of much use
// Much of the slowdown appears to be from Qt4TDEStyle::pixelMetric calling this method
- if (/*(wt == TQT3WT_TQProgressBar)*/
- /*||*/ (wt == TQT3WT_TQTabBar)
- || (wt == TQT3WT_TQRadioButton)
- || (wt == TQT3WT_TQCheckBox)
- || (wt == TQT3WT_TQPopupMenu)
- || (wt == TQT3WT_TQComboBox)
- //|| (wt == TQT3WT_TQSlider)
- //|| (wt == TQT3WT_TQScrollBar)
- //|| (wt == TQT3WT_TQSpinBox)
- //|| (wt == TQT3WT_TQSpinWidget)
- || (wt == TQT3WT_TQTitleBar)
- || (wt == TQT3WT_TQMenuBar)
- || (wt == TQT3WT_TQToolBox)
- || (wt == TQT3WT_TQToolButton)) {
- // If the interface widget was already initialized for this widget then do nothing
- // This is a very simplistic algorithm that should probably be replaced with a full hashtable lookup scheme
- if (m_previousQt4InterfaceWidget == w) {
- return m_previousTQt3InterfaceWidget;
- }
- m_previousQt4InterfaceWidget = w;
+ if (cacheResult) {
+ if (/*(wt == TQT3WT_TQProgressBar)*/
+ /*||*/ (wt == TQT3WT_TQTabBar)
+ || (wt == TQT3WT_TQRadioButton)
+ || (wt == TQT3WT_TQCheckBox)
+ || (wt == TQT3WT_TQPopupMenu)
+ || (wt == TQT3WT_TQComboBox)
+ //|| (wt == TQT3WT_TQSlider)
+ //|| (wt == TQT3WT_TQScrollBar)
+ //|| (wt == TQT3WT_TQSpinBox)
+ //|| (wt == TQT3WT_TQSpinWidget)
+ || (wt == TQT3WT_TQTitleBar)
+ || (wt == TQT3WT_TQMenuBar)
+ || (wt == TQT3WT_TQToolBox)
+ || (wt == TQT3WT_TQToolButton)) {
+ return cacheResult;
+ }
}
}
+ TQTabBar* m_tqt3tabbar_widget = 0;
+ TQRadioButton* m_tqt3radiobutton_widget = 0;
+ TQCheckBox* m_tqt3checkbox_widget = 0;
+ TQPushButton* m_tqt3pushbutton_widget = 0;
+ TQProgressBar* m_tqt3progressbar_widget = 0;
+ TQPopupMenu* m_tqt3popupmenu_widget = 0;
+ TQComboBox* m_tqt3combobox_widget = 0;
+ TQSlider* m_tqt3slider_widget = 0;
+ TQScrollBar* m_tqt3scrollbar_widget = 0;
+ TQSpinBox* m_tqt3spinbox_widget = 0;
+ TQSpinWidget* m_tqt3spinwidget_widget = 0;
+ TQTitleBar* m_tqt3titlebar_widget = 0;
+ TQMenuBar* m_tqt3menubar_widget = 0;
+ TQToolBox* m_tqt3toolbox_widget = 0;
+ TQToolButton* m_tqt3toolbutton_widget = 0;
+
+ if (cacheResult) {
+ // Set pointer
+ m_tqt3tabbar_widget = dynamic_cast<TQTabBar*>(cacheResult);
+ m_tqt3radiobutton_widget = dynamic_cast<TQRadioButton*>(cacheResult);
+ m_tqt3checkbox_widget = dynamic_cast<TQCheckBox*>(cacheResult);
+ m_tqt3pushbutton_widget = dynamic_cast<TQPushButton*>(cacheResult);
+ m_tqt3progressbar_widget = dynamic_cast<TQProgressBar*>(cacheResult);
+ m_tqt3popupmenu_widget = dynamic_cast<TQPopupMenu*>(cacheResult);
+ m_tqt3combobox_widget = dynamic_cast<TQComboBox*>(cacheResult);
+ m_tqt3slider_widget = dynamic_cast<TQSlider*>(cacheResult);
+ m_tqt3scrollbar_widget = dynamic_cast<TQScrollBar*>(cacheResult);
+ m_tqt3spinbox_widget = dynamic_cast<TQSpinBox*>(cacheResult);
+ m_tqt3spinwidget_widget = dynamic_cast<TQSpinWidget*>(cacheResult);
+ m_tqt3titlebar_widget = dynamic_cast<TQTitleBar*>(cacheResult);
+ m_tqt3menubar_widget = dynamic_cast<TQMenuBar*>(cacheResult);
+ m_tqt3toolbox_widget = dynamic_cast<TQToolBox*>(cacheResult);
+ m_tqt3toolbutton_widget = dynamic_cast<TQToolButton*>(cacheResult);
+ }
+
switch (wt) {
case TQT3WT_TQProgressBar:
+ if (!m_tqt3progressbar_widget) m_tqt3progressbar_widget = new TQProgressBar(m_tqt3parent_widget);
interfaceWidget = m_tqt3progressbar_widget;
// Copy over all widget attributes
qt4progressbar_widget = dynamic_cast<const QProgressBar*>(w);
- m_tqt3progressbar_widget->setGeometry(0, 0, qt4progressbar_widget->width(), qt4progressbar_widget->height());
- m_tqt3progressbar_widget->setEnabled(qt4progressbar_widget->isEnabled());
- m_tqt3progressbar_widget->setProgress(qt4progressbar_widget->value()-qt4progressbar_widget->minimum(),qt4progressbar_widget->maximum()-qt4progressbar_widget->minimum());
- if (qt4progressbar_widget->orientation() != Qt::Horizontal) {
- // Qt3 cannot draw vertical progress bars
+ if (qt4progressbar_widget) {
+ m_tqt3progressbar_widget->setGeometry(0, 0, qt4progressbar_widget->width(), qt4progressbar_widget->height());
+ m_tqt3progressbar_widget->setEnabled(qt4progressbar_widget->isEnabled());
+ m_tqt3progressbar_widget->setProgress(qt4progressbar_widget->value()-qt4progressbar_widget->minimum(),qt4progressbar_widget->maximum()-qt4progressbar_widget->minimum());
+ if (qt4progressbar_widget->orientation() != Qt::Horizontal) {
+ // Qt3 cannot draw vertical progress bars
+ if (enable_debug_warnings) {
+ printf("No rules to draw vertical Qt4 progress bar\n\r"); fflush(stdout);
+ }
+ interfaceWidget = 0;
+ }
+ }
+ else {
if (enable_debug_warnings) {
- printf("No rules to draw vertical Qt4 progress bar\n\r"); fflush(stdout);
+ printf("Unable to draw Qt4 progress bar with no Qt4 object available\n\r"); fflush(stdout);
}
interfaceWidget = 0;
}
break;
case TQT3WT_TQTabBar:
+ if (!m_tqt3tabbar_widget) m_tqt3tabbar_widget = new TQTabBar(m_tqt3parent_widget);
interfaceWidget = m_tqt3tabbar_widget;
// Copy over all widget attributes
qt4tabbar_widget = dynamic_cast<const QTabBar*>(w);
@@ -1677,118 +1716,182 @@ TQWidget* Qt4TDEStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
}
break;
case TQT3WT_TQRadioButton:
+ if (!m_tqt3radiobutton_widget) m_tqt3radiobutton_widget = new TQRadioButton(m_tqt3parent_widget);
interfaceWidget = m_tqt3radiobutton_widget;
// Copy over all widget attributes
qt4radiobutton_widget = dynamic_cast<const QRadioButton*>(w);
- m_tqt3radiobutton_widget->setGeometry(0, 0, qt4radiobutton_widget->width(), qt4radiobutton_widget->height());
- m_tqt3radiobutton_widget->setEnabled(qt4radiobutton_widget->isEnabled());
- m_tqt3radiobutton_widget->setText(convertQt4ToTQt3String(qt4radiobutton_widget->text()));
- m_tqt3radiobutton_widget->setDown(qt4radiobutton_widget->isDown());
+ if (qt4radiobutton_widget) {
+ m_tqt3radiobutton_widget->setGeometry(0, 0, qt4radiobutton_widget->width(), qt4radiobutton_widget->height());
+ m_tqt3radiobutton_widget->setEnabled(qt4radiobutton_widget->isEnabled());
+ m_tqt3radiobutton_widget->setText(convertQt4ToTQt3String(qt4radiobutton_widget->text()));
+ m_tqt3radiobutton_widget->setDown(qt4radiobutton_widget->isDown());
+ }
+ else {
+ if (enable_debug_warnings) {
+ printf("Unable to draw Qt4 radio button with no Qt4 object available\n\r"); fflush(stdout);
+ }
+ interfaceWidget = 0;
+ }
break;
case TQT3WT_TQCheckBox:
+ if (!m_tqt3checkbox_widget) m_tqt3checkbox_widget = new TQCheckBox(m_tqt3parent_widget);
interfaceWidget = m_tqt3checkbox_widget;
// Copy over all widget attributes
qt4checkbox_widget = dynamic_cast<const QCheckBox*>(w);
- m_tqt3checkbox_widget->setGeometry(0, 0, qt4checkbox_widget->width(), qt4checkbox_widget->height());
- m_tqt3checkbox_widget->setEnabled(qt4checkbox_widget->isEnabled());
- m_tqt3checkbox_widget->setText(convertQt4ToTQt3String(qt4checkbox_widget->text()));
- m_tqt3checkbox_widget->setDown(qt4checkbox_widget->isDown());
+ if (qt4checkbox_widget) {
+ m_tqt3checkbox_widget->setGeometry(0, 0, qt4checkbox_widget->width(), qt4checkbox_widget->height());
+ m_tqt3checkbox_widget->setEnabled(qt4checkbox_widget->isEnabled());
+ m_tqt3checkbox_widget->setText(convertQt4ToTQt3String(qt4checkbox_widget->text()));
+ m_tqt3checkbox_widget->setDown(qt4checkbox_widget->isDown());
+ }
+ else {
+ if (enable_debug_warnings) {
+ printf("Unable to draw Qt4 checkbox with no Qt4 object available\n\r"); fflush(stdout);
+ }
+ interfaceWidget = 0;
+ }
+ break;
+ case TQT3WT_TQPushButton:
+ if (!m_tqt3pushbutton_widget) m_tqt3pushbutton_widget = new TQPushButton(m_tqt3parent_widget);
+ interfaceWidget = m_tqt3pushbutton_widget;
+ // Copy over all widget attributes
+ qt4pushbutton_widget = dynamic_cast<const QPushButton*>(w);
+ if (qt4pushbutton_widget) {
+ m_tqt3pushbutton_widget->setGeometry(0, 0, qt4pushbutton_widget->width(), qt4pushbutton_widget->height());
+ m_tqt3pushbutton_widget->setEnabled(qt4pushbutton_widget->isEnabled());
+ m_tqt3pushbutton_widget->setText(convertQt4ToTQt3String(qt4pushbutton_widget->text()));
+ m_tqt3pushbutton_widget->setDown(qt4pushbutton_widget->isDown());
+ }
+ else {
+ if (enable_debug_warnings) {
+ printf("Unable to draw Qt4 pushbutton with no Qt4 object available\n\r"); fflush(stdout);
+ }
+ interfaceWidget = 0;
+ }
break;
case TQT3WT_TQComboBox:
+ if (!m_tqt3combobox_widget) m_tqt3combobox_widget = new TQComboBox(m_tqt3parent_widget);
interfaceWidget = m_tqt3combobox_widget;
// Copy over all widget attributes
qt4combobox_widget = dynamic_cast<const QComboBox*>(w);
- m_tqt3combobox_widget->setGeometry(0, 0, qt4combobox_widget->width(), qt4combobox_widget->height());
- m_tqt3combobox_widget->setEnabled(qt4combobox_widget->isEnabled());
- // Clear out all combobox items
- m_tqt3combobox_widget->clear();
-
- for (i=0;i<qt4combobox_widget->count();i++) {
- if (qt4combobox_widget->itemIcon(i).isNull()) {
- m_tqt3combobox_widget->insertItem(convertQt4ToTQt3String(qt4combobox_widget->itemText(i)), i);
+ if (qt4combobox_widget) {
+ m_tqt3combobox_widget->setGeometry(0, 0, qt4combobox_widget->width(), qt4combobox_widget->height());
+ m_tqt3combobox_widget->setEnabled(qt4combobox_widget->isEnabled());
+ // Clear out all combobox items
+ m_tqt3combobox_widget->clear();
+
+ for (i=0;i<qt4combobox_widget->count();i++) {
+ if (qt4combobox_widget->itemIcon(i).isNull()) {
+ m_tqt3combobox_widget->insertItem(convertQt4ToTQt3String(qt4combobox_widget->itemText(i)), i);
+ }
+ else {
+ m_tqt3combobox_widget->insertItem(convertQt4IconToTQt3Pixmap(qt4combobox_widget->itemIcon(i), m_tqt3IconSize_Small, m_internalTQt3PixmapCache), convertQt4ToTQt3String(qt4combobox_widget->itemText(i)), i);
+ }
}
- else {
- m_tqt3combobox_widget->insertItem(convertQt4IconToTQt3Pixmap(qt4combobox_widget->itemIcon(i), m_tqt3IconSize_Small, m_internalTQt3PixmapCache), convertQt4ToTQt3String(qt4combobox_widget->itemText(i)), i);
+ m_tqt3combobox_widget->setEditable(qt4combobox_widget->isEditable());
+ }
+ else {
+ if (enable_debug_warnings) {
+ printf("Unable to draw Qt4 combobox with no Qt4 object available\n\r"); fflush(stdout);
}
+ interfaceWidget = 0;
}
- m_tqt3combobox_widget->setEditable(qt4combobox_widget->isEditable());
break;
case TQT3WT_TQPopupMenu:
+ if (!m_tqt3popupmenu_widget) m_tqt3popupmenu_widget = new TQPopupMenu(m_tqt3parent_widget);
interfaceWidget = m_tqt3popupmenu_widget;
// Copy over all widget attributes
qt4menu_widget = dynamic_cast<const QMenu*>(w);
- m_tqt3popupmenu_widget->setGeometry(0, 0, qt4menu_widget->width(), qt4menu_widget->height());
- m_tqt3popupmenu_widget->setEnabled(qt4menu_widget->isEnabled());
- // Clear out menu
- m_tqt3popupmenu_widget->clear();
- m_tqt3popupmenu_widget->setCheckable(false);
- // Copy over all menu items
- qt4menuactions = qt4menu_widget->actions();
- currentAction = 0;
- for (i=0; i<qt4menuactions.size();++i) {
- currentAction = qt4menuactions.at(i);
- if (currentAction) {
- if (currentAction->isSeparator()) {
- m_tqt3popupmenu_widget->insertSeparator(i);
- }
- else {
- if (currentAction->icon().isNull()) {
- m_tqt3popupmenu_widget->insertItem(convertQt4ToTQt3String(currentAction->text()), i, i);
+ if (qt4menu_widget) {
+ m_tqt3popupmenu_widget->setGeometry(0, 0, qt4menu_widget->width(), qt4menu_widget->height());
+ m_tqt3popupmenu_widget->setEnabled(qt4menu_widget->isEnabled());
+ // Clear out menu
+ m_tqt3popupmenu_widget->clear();
+ m_tqt3popupmenu_widget->setCheckable(false);
+ // Copy over all menu items
+ qt4menuactions = qt4menu_widget->actions();
+ currentAction = 0;
+ for (i=0; i<qt4menuactions.size();++i) {
+ currentAction = qt4menuactions.at(i);
+ if (currentAction) {
+ if (currentAction->isSeparator()) {
+ m_tqt3popupmenu_widget->insertSeparator(i);
}
else {
- m_tqt3popupmenu_widget->insertItem(convertQt4ToTQt3IconSet(currentAction->icon(), m_tqt3IconSize_Small, m_tqt3IconSize_Large, m_internalTQt3PixmapCache), convertQt4ToTQt3String(currentAction->text()), i, i);
+ if (currentAction->icon().isNull()) {
+ m_tqt3popupmenu_widget->insertItem(convertQt4ToTQt3String(currentAction->text()), i, i);
+ }
+ else {
+ m_tqt3popupmenu_widget->insertItem(convertQt4ToTQt3IconSet(currentAction->icon(), m_tqt3IconSize_Small, m_tqt3IconSize_Large, m_internalTQt3PixmapCache), convertQt4ToTQt3String(currentAction->text()), i, i);
+ }
+ // FIXME
+ // Handle pixmaps, etc.
}
+ m_tqt3popupmenu_widget->setItemEnabled(i, currentAction->isEnabled());
+ m_tqt3popupmenu_widget->setItemChecked(i, currentAction->isChecked());
+ m_tqt3popupmenu_widget->setItemVisible(i, currentAction->isVisible());
+
// FIXME
- // Handle pixmaps, etc.
+ // It seems that all menus under TQt3 are checkable
+ // VERIFY THIS
+ m_tqt3popupmenu_widget->setCheckable(true);
+// if (currentAction->isCheckable()) {
+// m_tqt3popupmenu_widget->setCheckable(true);
+// }
}
- m_tqt3popupmenu_widget->setItemEnabled(i, currentAction->isEnabled());
- m_tqt3popupmenu_widget->setItemChecked(i, currentAction->isChecked());
- m_tqt3popupmenu_widget->setItemVisible(i, currentAction->isVisible());
-
- // FIXME
- // It seems that all menus under TQt3 are checkable
- // VERIFY THIS
- m_tqt3popupmenu_widget->setCheckable(true);
-// if (currentAction->isCheckable()) {
-// m_tqt3popupmenu_widget->setCheckable(true);
-// }
}
}
+ else {
+ if (enable_debug_warnings) {
+ printf("Unable to draw Qt4 popup menu with no Qt4 object available\n\r"); fflush(stdout);
+ }
+ interfaceWidget = 0;
+ }
break;
case TQT3WT_TQMenuBar:
+ if (!m_tqt3menubar_widget) m_tqt3menubar_widget = new TQMenuBar(m_tqt3parent_widget);
interfaceWidget = m_tqt3menubar_widget;
// Copy over all widget attributes
qt4menubar_widget = dynamic_cast<const QMenuBar*>(w);
- m_tqt3menubar_widget->setGeometry(0, 0, qt4menubar_widget->width(), qt4menubar_widget->height());
- m_tqt3menubar_widget->setEnabled(qt4menubar_widget->isEnabled());
- // Clear out menu
- m_tqt3menubar_widget->clear();
- // Copy over all menu items
- qt4menuactions = qt4menubar_widget->actions();
- currentAction = 0;
- for (i=0; i<qt4menuactions.size();++i) {
- currentAction = qt4menuactions.at(i);
- if (currentAction) {
- if (currentAction->isSeparator()) {
- m_tqt3menubar_widget->insertSeparator(i);
- }
- else {
- if (currentAction->icon().isNull()) {
- m_tqt3menubar_widget->insertItem(convertQt4ToTQt3String(currentAction->text()), i, i);
+ if (qt4menubar_widget) {
+ m_tqt3menubar_widget->setGeometry(0, 0, qt4menubar_widget->width(), qt4menubar_widget->height());
+ m_tqt3menubar_widget->setEnabled(qt4menubar_widget->isEnabled());
+ // Clear out menu
+ m_tqt3menubar_widget->clear();
+ // Copy over all menu items
+ qt4menuactions = qt4menubar_widget->actions();
+ currentAction = 0;
+ for (i=0; i<qt4menuactions.size();++i) {
+ currentAction = qt4menuactions.at(i);
+ if (currentAction) {
+ if (currentAction->isSeparator()) {
+ m_tqt3menubar_widget->insertSeparator(i);
}
else {
- m_tqt3menubar_widget->insertItem(convertQt4ToTQt3IconSet(currentAction->icon(), m_tqt3IconSize_Small, m_tqt3IconSize_Large, m_internalTQt3PixmapCache), convertQt4ToTQt3String(currentAction->text()), i, i);
+ if (currentAction->icon().isNull()) {
+ m_tqt3menubar_widget->insertItem(convertQt4ToTQt3String(currentAction->text()), i, i);
+ }
+ else {
+ m_tqt3menubar_widget->insertItem(convertQt4ToTQt3IconSet(currentAction->icon(), m_tqt3IconSize_Small, m_tqt3IconSize_Large, m_internalTQt3PixmapCache), convertQt4ToTQt3String(currentAction->text()), i, i);
+ }
+ // FIXME
+ // Handle pixmaps, etc.
}
- // FIXME
- // Handle pixmaps, etc.
+ m_tqt3menubar_widget->setItemEnabled(i, currentAction->isEnabled());
+ m_tqt3menubar_widget->setItemChecked(i, currentAction->isChecked());
+ m_tqt3menubar_widget->setItemVisible(i, currentAction->isVisible());
}
- m_tqt3menubar_widget->setItemEnabled(i, currentAction->isEnabled());
- m_tqt3menubar_widget->setItemChecked(i, currentAction->isChecked());
- m_tqt3menubar_widget->setItemVisible(i, currentAction->isVisible());
}
}
+ else {
+ if (enable_debug_warnings) {
+ printf("Unable to draw Qt4 menu bar with no Qt4 object available\n\r"); fflush(stdout);
+ }
+ interfaceWidget = 0;
+ }
break;
case TQT3WT_TQSlider:
+ if (!m_tqt3slider_widget) m_tqt3slider_widget = new TQSlider(m_tqt3parent_widget);
interfaceWidget = m_tqt3slider_widget;
// Copy over all widget attributes
qt4slider_widget = dynamic_cast<const QSlider*>(w);
@@ -1814,6 +1917,7 @@ TQWidget* Qt4TDEStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
}
break;
case TQT3WT_TQScrollBar:
+ if (!m_tqt3scrollbar_widget) m_tqt3scrollbar_widget = new TQScrollBar(m_tqt3parent_widget);
interfaceWidget = m_tqt3scrollbar_widget;
// Copy over all widget attributes
qt4scrollbar_widget = dynamic_cast<const QScrollBar*>(w);
@@ -1837,6 +1941,7 @@ TQWidget* Qt4TDEStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
break;
#if 0
case TQT3WT_TQSpinBox:
+ if (!m_tqt3spinbox_widget) m_tqt3spinbox_widget = new TQSpinBox(m_tqt3parent_widget);
interfaceWidget = m_tqt3spinbox_widget;
// Copy over all widget attributes
qt4spinbox_widget = dynamic_cast<const QAbstractSpinBox*>(w);
@@ -1857,6 +1962,7 @@ TQWidget* Qt4TDEStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
break;
#endif
case TQT3WT_TQSpinWidget:
+ if (!m_tqt3spinwidget_widget) m_tqt3spinwidget_widget = new TQSpinWidget(m_tqt3parent_widget);
interfaceWidget = m_tqt3spinwidget_widget;
// Copy over all widget attributes
qt4spinbox_widget = dynamic_cast<const QAbstractSpinBox*>(w);
@@ -1874,6 +1980,7 @@ TQWidget* Qt4TDEStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
}
break;
case TQT3WT_TQTitleBar:
+ if (!m_tqt3titlebar_widget) m_tqt3titlebar_widget = new TQTitleBar(m_tqt3window_widget, m_tqt3parent_widget);
interfaceWidget = m_tqt3titlebar_widget;
qt4titlebar_options = static_cast<const QStyleOptionTitleBar*>(qt4styleoptions);
// Construct an internal TQTitleBar widget from the options and widget provided by Qt4
@@ -1893,6 +2000,7 @@ TQWidget* Qt4TDEStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
m_tqt3titlebar_widget->setIcon(convertQt4IconToTQt3Pixmap(qt4titlebar_options->icon, m_tqt3IconSize_Small, m_internalTQt3PixmapCache, false, &bgcolor));
break;
case TQT3WT_TQToolBox:
+ if (!m_tqt3toolbox_widget) m_tqt3toolbox_widget = new TQToolBox(m_tqt3parent_widget);
interfaceWidget = m_tqt3toolbox_widget;
// Copy over all widget attributes
qt4toolbox_widget = dynamic_cast<const QToolBox*>(w);
@@ -1917,6 +2025,7 @@ TQWidget* Qt4TDEStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
break;
case TQT3WT_TQToolButton:
// FIXME
+ if (!m_tqt3toolbutton_widget) m_tqt3toolbutton_widget = new TQToolButton(m_tqt3parent_widget);
interfaceWidget = m_tqt3toolbutton_widget;
// Copy over all widget attributes
qt4toolbutton_widget = dynamic_cast<const QToolButton*>(w);
@@ -1943,10 +2052,23 @@ TQWidget* Qt4TDEStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
break;
}
- m_previousTQt3InterfaceWidget = interfaceWidget;
+ if ((qt4objectptr) && (!cacheResult) && (interfaceWidget)) {
+ connect(qt4objectptr, SIGNAL(destroyed(QObject*)), this, SLOT(handleQt4ObjectDestroyed(QObject*)));
+ m_internalTQt3WidgetCache->insert((long)qt4objectptr, interfaceWidget);
+ }
+
+#ifdef DEBUG_SPEW
+ if (enable_debug_warnings) {
+ printf("Widget cache: %d items now present in cache\n\r", m_internalTQt3WidgetCache->count());
+ }
+#endif // DEBUG_SPEW
return interfaceWidget;
}
+void Qt4TDEStyle::handleQt4ObjectDestroyed(QObject* obj) {
+ m_internalTQt3WidgetCache->remove((long)obj);
+}
+
QRect Qt4TDEStyle::subElementRect(SubElement element, const QStyleOption *opt, const QWidget *w) const
{
TQStyle::SFlags sflags = 0;
@@ -2167,12 +2289,13 @@ void Qt4TDEStyle::drawComplexControl(ComplexControl control, const QStyleOptionC
}
subControlActive = 0;
- if (sbopt->activeSubControls & QStyle::SC_SpinBoxUp) {
+ if ((sbopt->activeSubControls & QStyle::SC_SpinBoxUp) && (sbopt->state & State_Sunken)) {
subControlActive = subControlActive | TQStyle::SC_SpinWidgetUp;
}
- if (sbopt->activeSubControls & QStyle::SC_SpinBoxDown) {
+ if ((sbopt->activeSubControls & QStyle::SC_SpinBoxDown) && (sbopt->state & State_Sunken)) {
subControlActive = subControlActive | TQStyle::SC_SpinWidgetDown;
}
+
break;
case CC_TitleBar:
tqtCC = TQStyle::CC_TitleBar;
@@ -2436,7 +2559,7 @@ void Qt4TDEStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
draw_third_element = true;
tqtCE_element3 = TQStyle::CE_ProgressBarLabel;
sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQProgressBar);
- interfaceWidget = initializeInterfaceWidget(TQT3WT_TQProgressBar, w);
+ interfaceWidget = initializeInterfaceWidget(TQT3WT_TQProgressBar, w, NULL, TRUE);
if (interfaceWidget == 0) {
can_override = false;
}
@@ -2444,7 +2567,7 @@ void Qt4TDEStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
case QStyle::CE_ProgressBarContents:
tqtCE = TQStyle::CE_ProgressBarContents;
sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQProgressBar);
- interfaceWidget = initializeInterfaceWidget(TQT3WT_TQProgressBar, w);
+ interfaceWidget = initializeInterfaceWidget(TQT3WT_TQProgressBar, w, NULL, TRUE);
if (interfaceWidget == 0) {
can_override = false;
}
@@ -2455,7 +2578,7 @@ void Qt4TDEStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
draw_second_element = true;
tqtCE_element2 = TQStyle::CE_TabBarLabel;
sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQTabBar);
- interfaceWidget = initializeInterfaceWidget(TQT3WT_TQTabBar, w);
+ interfaceWidget = initializeInterfaceWidget(TQT3WT_TQTabBar, w, NULL, TRUE);
if (interfaceWidget == 0) {
can_override = false;
}
@@ -2466,7 +2589,8 @@ void Qt4TDEStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
// I have to guess based on the Qt4 position of the tab in the tab bar, which may or may not work 100% in all cases
drawingTab = 0;
estimated_tab_index = dynamic_cast<const QTabBar*>(w)->tabAt(QPoint(opt->rect.x(), opt->rect.y()));
- drawingTab = m_tqt3tabbar_widget->tabAt(estimated_tab_index);
+ TQTabBar* tabBarWidget = dynamic_cast<TQTabBar*>(interfaceWidget);
+ drawingTab = tabBarWidget->tabAt(estimated_tab_index);
if (drawingTab) {
tqt3opt = TQStyleOption(drawingTab);
@@ -2485,7 +2609,7 @@ void Qt4TDEStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
tqt3elementrect = TQRect(tqt3elementrect.x()-tqt3tabwidth, tqt3elementrect.y(), tqt3elementrect.width()+(tqt3tabwidth*1), tqt3elementrect.height());
}
if (drawingTab) {
- if (drawingTab->identifier() == (TQApplication::reverseLayout() ? (m_tqt3tabbar_widget->count()-1) : 0)) {
+ if (drawingTab->identifier() == (TQApplication::reverseLayout() ? (tabBarWidget->count()-1) : 0)) {
// This is the first tab in the tab bar
// We will end up clipping on the left edge if the rectangle is not adjusted
tqt3elementrect = TQRect(tqt3elementrect.x()+tqt3tabwidth, tqt3elementrect.y(), tqt3elementrect.width()-(tqt3tabwidth*1), tqt3elementrect.height());
@@ -2502,7 +2626,7 @@ void Qt4TDEStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
tqtCE_element2 = TQStyle::CE_RadioButtonLabel;
sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQRadioButton);
- interfaceWidget = initializeInterfaceWidget(TQT3WT_TQRadioButton, w);
+ interfaceWidget = initializeInterfaceWidget(TQT3WT_TQRadioButton, w, NULL, TRUE);
if (interfaceWidget == 0) {
can_override = false;
}
@@ -2514,6 +2638,7 @@ void Qt4TDEStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
// [FIXME 001]
// Figure out why this is needed! Without it the text shows up lower than the indicator does...
// Potential subRect() mismatch between Qt4 and TQt3? See TQt3 qcommonstyle.cpp lines 1307 and 1315
+ // Strange that this hack is not needed for the CheckBox and PushButton cases...
tqt3element2rect.setHeight(tqt3elementrect.height());
}
break;
@@ -2526,25 +2651,36 @@ void Qt4TDEStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
tqtCE_element2 = TQStyle::CE_CheckBoxLabel;
sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQCheckBox);
- interfaceWidget = initializeInterfaceWidget(TQT3WT_TQCheckBox, w);
+ interfaceWidget = initializeInterfaceWidget(TQT3WT_TQCheckBox, w, NULL, TRUE);
if (interfaceWidget == 0) {
can_override = false;
}
else {
tqt3elementrect = tqApp->style().visualRect( tqApp->style().subRect(TQStyle::SR_CheckBoxIndicator, interfaceWidget), interfaceWidget);
tqt3element2rect = tqApp->style().visualRect( tqApp->style().subRect(TQStyle::SR_CheckBoxContents, interfaceWidget), interfaceWidget);
- // HACK
- // Lock text area height to indicator height
- // [FIXME 001]
- // Figure out why this is needed! Without it the text shows up lower than the indicator does...
- // Potential subRect() mismatch between Qt4 and TQt3? See TQt3 qcommonstyle.cpp lines 1307 and 1315
- tqt3element2rect.setHeight(tqt3elementrect.height());
+ }
+ break;
+ case CE_PushButton:
+ // Unlike Qt3, QStyle::CE_PushButton draws the button, the label, and the focus rectangle
+ // FIXME
+ // Handle the focus rectangle
+ tqtCE = TQStyle::CE_PushButton;
+ draw_second_element = true;
+ tqtCE_element2 = TQStyle::CE_PushButtonLabel;
+
+ sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQPushButton);
+ interfaceWidget = initializeInterfaceWidget(TQT3WT_TQPushButton, w, NULL, TRUE);
+ if (interfaceWidget == 0) {
+ can_override = false;
+ }
+ else {
+ tqt3element2rect = tqApp->style().visualRect( tqApp->style().subRect(TQStyle::SR_PushButtonContents, interfaceWidget), interfaceWidget);
}
break;
case CE_MenuItem:
tqtCE = TQStyle::CE_PopupMenuItem;
sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQPopupMenu);
- interfaceWidget = initializeInterfaceWidget(TQT3WT_TQPopupMenu, w);
+ interfaceWidget = initializeInterfaceWidget(TQT3WT_TQPopupMenu, w, NULL, TRUE);
if (interfaceWidget == 0) {
can_override = false;
}
@@ -2558,7 +2694,8 @@ void Qt4TDEStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
qt4menuactions = dynamic_cast<const QMenu*>(w)->actions();
for (i=0; i<qt4menuactions.size();++i) {
if (qt4menuactions.at(i) == drawingAction) {
- drawingItem = m_tqt3popupmenu_widget->findItem(m_tqt3popupmenu_widget->idAt(i));
+ TQPopupMenu* popupMenuWidget = dynamic_cast<TQPopupMenu*>(interfaceWidget);
+ drawingItem = popupMenuWidget->findItem(popupMenuWidget->idAt(i));
}
}
@@ -2572,7 +2709,7 @@ void Qt4TDEStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
case QStyle::CE_MenuBarItem:
tqtCE = TQStyle::CE_MenuBarItem;
sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQMenuBar);
- interfaceWidget = initializeInterfaceWidget(TQT3WT_TQMenuBar, w);
+ interfaceWidget = initializeInterfaceWidget(TQT3WT_TQMenuBar, w, NULL, TRUE);
if (interfaceWidget == 0) {
can_override = false;
}
@@ -2584,9 +2721,10 @@ void Qt4TDEStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
drawingItem = 0;
drawingAction = dynamic_cast<const QMenuBar*>(w)->actionAt(QPoint(opt->rect.x(), opt->rect.y()));
qt4menuactions = dynamic_cast<const QMenuBar*>(w)->actions();
+ TQMenuBar* menuBarWidget = dynamic_cast<TQMenuBar*>(interfaceWidget);
for (i=0; i<qt4menuactions.size();++i) {
if (qt4menuactions.at(i) == drawingAction) {
- drawingItem = m_tqt3menubar_widget->findItem(m_tqt3menubar_widget->idAt(i));
+ drawingItem = menuBarWidget->findItem(menuBarWidget->idAt(i));
}
}
@@ -2610,7 +2748,7 @@ void Qt4TDEStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
// See below for Qt4 drawing calls
tqtCE = TQStyle::CE_ToolBoxTab;
sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQToolBox);
- interfaceWidget = initializeInterfaceWidget(TQT3WT_TQToolBox, w);
+ interfaceWidget = initializeInterfaceWidget(TQT3WT_TQToolBox, w, NULL, TRUE);
if (interfaceWidget == 0) {
can_override = false;
}
@@ -2618,7 +2756,7 @@ void Qt4TDEStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
case QStyle::CE_MenuBarEmptyArea:
tqtCE = TQStyle::CE_MenuBarEmptyArea;
sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQMenuBar);
- interfaceWidget = initializeInterfaceWidget(TQT3WT_TQMenuBar, w);
+ interfaceWidget = initializeInterfaceWidget(TQT3WT_TQMenuBar, w, NULL, TRUE);
if (interfaceWidget == 0) {
can_override = false;
}
diff --git a/plugin/simplestyle.h b/plugin/simplestyle.h
index 28f5726..7ce2092 100644
--- a/plugin/simplestyle.h
+++ b/plugin/simplestyle.h
@@ -76,26 +76,29 @@ public:
public slots:
QIcon standardIconImplementation(StandardPixmap standardIcon, const QStyleOption * option = 0, const QWidget * widget = 0) const;
+private slots:
+ void handleQt4ObjectDestroyed(QObject*);
+
private:
TQWidget* initializeInterfaceWidget(TQt3WidgetType wt, const QWidget * widget, const QStyleOption* qt4styleoptions = 0, bool forceReload = false) const;
TQWidget* m_tqt3parent_widget;
TQWidget* m_tqt3generic_widget;
- TQTabBar* m_tqt3tabbar_widget;
- TQRadioButton* m_tqt3radiobutton_widget;
- TQCheckBox* m_tqt3checkbox_widget;
- TQProgressBar* m_tqt3progressbar_widget;
- TQPopupMenu* m_tqt3popupmenu_widget;
- TQComboBox* m_tqt3combobox_widget;
- TQSlider* m_tqt3slider_widget;
- TQScrollBar* m_tqt3scrollbar_widget;
- TQSpinBox* m_tqt3spinbox_widget;
- TQSpinWidget* m_tqt3spinwidget_widget;
+// mutable TQTabBar* m_tqt3tabbar_widget;
+// mutable TQRadioButton* m_tqt3radiobutton_widget;
+// mutable TQCheckBox* m_tqt3checkbox_widget;
+// mutable TQProgressBar* m_tqt3progressbar_widget;
+// mutable TQPopupMenu* m_tqt3popupmenu_widget;
+// mutable TQComboBox* m_tqt3combobox_widget;
+// mutable TQSlider* m_tqt3slider_widget;
+// mutable TQScrollBar* m_tqt3scrollbar_widget;
+// mutable TQSpinBox* m_tqt3spinbox_widget;
+// mutable TQSpinWidget* m_tqt3spinwidget_widget;
TQWidget* m_tqt3window_widget;
- TQTitleBar* m_tqt3titlebar_widget;
- TQMenuBar* m_tqt3menubar_widget;
- TQToolBox* m_tqt3toolbox_widget;
- TQToolButton* m_tqt3toolbutton_widget;
+// mutable TQTitleBar* m_tqt3titlebar_widget;
+// mutable TQMenuBar* m_tqt3menubar_widget;
+// mutable TQToolBox* m_tqt3toolbox_widget;
+// mutable TQToolButton* m_tqt3toolbutton_widget;
int m_tqt3IconSize_NoGroup;
int m_tqt3IconSize_Desktop;