/* This file is part of the KDE project Copyright (C) 2006 Jaroslaw Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "utils.h" #include "utils_p.h" #include #include #include #include #include #include #include #include #ifdef KEXI_DEBUG_GUI static DebugWindowDialog* debugWindow = 0; static KTabWidget* debugWindowTab = 0; static TDEListView* kexiDBDebugPage = 0; static TDEListView* kexiAlterTableActionDebugPage = 0; TQWidget *KexiUtils::createDebugWindow(TQWidget *parent) { // (this is internal code - do not use i18n() here) debugWindow = new DebugWindowDialog(parent); debugWindow->setSizeGripEnabled( true ); TQBoxLayout *lyr = new TQVBoxLayout(debugWindow, KDialogBase::marginHint()); debugWindowTab = new KTabWidget(debugWindow, "debugWindowTab"); lyr->addWidget( debugWindowTab ); debugWindow->resize(900, 600); debugWindow->setIcon( DesktopIcon("application-vnd.tde.info") ); debugWindow->setCaption("Kexi Internal Debugger"); debugWindow->show(); return debugWindow; } void KexiUtils::addKexiDBDebug(const TQString& text) { // (this is internal code - do not use i18n() here) if (!debugWindowTab) return; if (!kexiDBDebugPage) { TQWidget *page = new TQWidget(debugWindowTab); TQVBoxLayout *vbox = new TQVBoxLayout(page); TQHBoxLayout *hbox = new TQHBoxLayout(page); vbox->addLayout(hbox); hbox->addStretch(1); KPushButton *btn_clear = new KPushButton(KGuiItem("Clear", "clear_left"), page); hbox->addWidget(btn_clear); kexiDBDebugPage = new TDEListView(page, "kexiDbDebugPage"); TQObject::connect(btn_clear, TQT_SIGNAL(clicked()), kexiDBDebugPage, TQT_SLOT(clear())); vbox->addWidget(kexiDBDebugPage); kexiDBDebugPage->addColumn(""); kexiDBDebugPage->header()->hide(); kexiDBDebugPage->setSorting(-1); kexiDBDebugPage->setAllColumnsShowFocus ( true ); kexiDBDebugPage->setColumnWidthMode( 0, TQListView::Maximum ); kexiDBDebugPage->setRootIsDecorated( true ); debugWindowTab->addTab( page, "KexiDB" ); debugWindowTab->showPage(page); kexiDBDebugPage->show(); } //add \n after (about) every 30 characters //TODO TQString realText TDEListViewItem * li = new TDEListViewItem( kexiDBDebugPage, kexiDBDebugPage->lastItem(), text ); li->setMultiLinesEnabled( true ); } void KexiUtils::addAlterTableActionDebug(const TQString& text, int nestingLevel) { // (this is internal code - do not use i18n() here) if (!debugWindowTab) return; if (!kexiAlterTableActionDebugPage) { TQWidget *page = new TQWidget(debugWindowTab); TQVBoxLayout *vbox = new TQVBoxLayout(page); TQHBoxLayout *hbox = new TQHBoxLayout(page); vbox->addLayout(hbox); hbox->addStretch(1); KPushButton *btn_exec = new KPushButton(KGuiItem("Real Alter Table", "document-save"), page); btn_exec->setName("executeRealAlterTable"); hbox->addWidget(btn_exec); KPushButton *btn_clear = new KPushButton(KGuiItem("Clear", "clear_left"), page); hbox->addWidget(btn_clear); KPushButton *btn_sim = new KPushButton(KGuiItem("Simulate Execution", "exec"), page); btn_sim->setName("simulateAlterTableExecution"); hbox->addWidget(btn_sim); kexiAlterTableActionDebugPage = new TDEListView(page, "kexiAlterTableActionDebugPage"); TQObject::connect(btn_clear, TQT_SIGNAL(clicked()), kexiAlterTableActionDebugPage, TQT_SLOT(clear())); vbox->addWidget(kexiAlterTableActionDebugPage); kexiAlterTableActionDebugPage->addColumn(""); kexiAlterTableActionDebugPage->header()->hide(); kexiAlterTableActionDebugPage->setSorting(-1); kexiAlterTableActionDebugPage->setAllColumnsShowFocus ( true ); kexiAlterTableActionDebugPage->setColumnWidthMode( 0, TQListView::Maximum ); kexiAlterTableActionDebugPage->setRootIsDecorated( true ); debugWindowTab->addTab( page, "AlterTable Actions" ); debugWindowTab->showPage(page); page->show(); } if (text.isEmpty()) //don't move up! return; TDEListViewItem * li; int availableNestingLevels = 0; // compute availableNestingLevels TQListViewItem * lastItem = kexiAlterTableActionDebugPage->lastItem(); //kdDebug() << "lastItem: " << (lastItem ? lastItem->text(0) : TQString()) << endl; while (lastItem) { lastItem = lastItem->parent(); availableNestingLevels++; } //kdDebug() << "availableNestingLevels: " << availableNestingLevels << endl; //go up (availableNestingLevels-levelsToGoUp) levels lastItem = kexiAlterTableActionDebugPage->lastItem(); int levelsToGoUp = availableNestingLevels - nestingLevel; while (levelsToGoUp > 0 && lastItem) { lastItem = lastItem->parent(); levelsToGoUp--; } //kdDebug() << "lastItem2: " << (lastItem ? lastItem->text(0) : TQString()) << endl; if (lastItem) { TQListViewItem *after = lastItem->firstChild(); //find last child so we can insert a new item after it while (after && after->nextSibling()) after = after->nextSibling(); if (after) li = new TDEListViewItem( lastItem, after, text ); //child, after else li = new TDEListViewItem( lastItem, text ); //1st child } else { lastItem = kexiAlterTableActionDebugPage->lastItem(); while (lastItem && lastItem->parent()) lastItem = lastItem->parent(); //kdDebug() << "lastItem2: " << (lastItem ? lastItem->text(0) : TQString()) << endl; li = new TDEListViewItem( kexiAlterTableActionDebugPage, lastItem, text ); //after } li->setOpen(true); li->setMultiLinesEnabled( true ); } void KexiUtils::connectPushButtonActionForDebugWindow(const char* actionName, const TQObject *receiver, const char* slot) { if (debugWindow) { KPushButton* btn = findFirstChild(debugWindow, "KPushButton", actionName); if (btn) TQObject::connect(btn, TQT_SIGNAL(clicked()), receiver, slot); } } #endif //KEXI_DEBUG_GUI