/* * Copyright (C) 2001-2004, Richard J. Moore * * This library 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 library 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 library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "global.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef QT_ONLY #include #include #include #include #include #include #include #include #include #endif // QT_ONLY #include #include #include #include "kjsembedpart.h" #include "jssecuritypolicy.h" #include "jsfactory.h" #include "jsbinding.h" #include "slotproxy.h" #include "jsopaqueproxy.h" #include "customobject_imp.h" #include "qtbindings/qcombobox_imp.h" //#include "qtbindings/qlistviewitem_imp.h" //#include "qtbindings/qlistview_imp.h" #include "qtbindings/qcanvasview_imp.h" //#include "qtbindings/qchecklistitem_imp.h" #include "qtbindings/qpopupmenu_imp.h" #include "qtbindings/qframe_imp.h" #include "qtbindings/qmenudata_imp.h" #include "qtbindings/qmenuitem_imp.h" #define ADDBINDING(TYPE,PROXY) \ TYPE *ptr ## TYPE = dynamic_cast< TYPE *> ( PROXY );\ if ( ptr ## TYPE ) \ { \ TYPE ## Imp::addBindings( exec, object ); \ } namespace KJSEmbed { namespace Bindings { void CustomObjectImp::addBindings( KJS::ExecState *exec, KJS::Object &object ) { kdDebug() << "CustomObjectImp::addBindings for " << object.className().qstring() << endl; CustomObjectImp *obj = 0; JSObjectProxy *proxy = JSProxy::toObjectProxy( object.imp() ); if ( !proxy ) return; kdDebug() << "CustomObjectImp::addBindings is a proxy" << endl; TQObject *qobj = proxy->object(); TQWidget *widget = proxy->widget(); #ifndef QT_ONLY if ( qobj ) { KXMLGUIClient *gc = dynamic_cast( qobj ); if ( gc ) { obj = new CustomObjectImp( exec, KXMLGUIClientActionCollection, proxy ); object.put( exec, "actionCollection", KJS::Object(obj) ); } } KActionCollection *collection = dynamic_cast( qobj ); if( collection ) proxy->setOwner(JSProxy::Native); #endif // QT_ONLY if ( widget ) { obj = new CustomObjectImp( exec, WidgetGrabWidget, proxy ); object.put(exec, "grabWidget", KJS::Object(obj)); obj = new CustomObjectImp( exec, WidgetDrawLine, proxy ); object.put( exec, "drawLine", KJS::Object(obj) ); obj = new CustomObjectImp( exec, WidgetDrawText, proxy ); object.put( exec, "drawText", KJS::Object(obj) ); TQListBox *listbox = dynamic_cast( widget ); if ( listbox ) { obj = new CustomObjectImp( exec, ListBoxInsertItem, proxy ); object.put( exec, "insertItem", KJS::Object(obj) ); } TQListView *listview = dynamic_cast( widget ); if ( listview ) { obj = new CustomObjectImp( exec, ListViewAddColumn, proxy ); object.put( exec, "addColumn", KJS::Object(obj) ); obj = new CustomObjectImp( exec, ListViewInsertItem, proxy ); object.put( exec, "insertItem", KJS::Object(obj) ); obj = new CustomObjectImp( exec, ListViewSelectedItem, proxy ); object.put( exec, "selectedItem", KJS::Object(obj) ); obj = new CustomObjectImp( exec, ListViewHideColumn, proxy ); object.put( exec, "hideColumn", KJS::Object(obj) ); obj = new CustomObjectImp( exec, ListViewTakeItem, proxy ); object.put( exec, "takeItem", KJS::Object(obj) ); obj = new CustomObjectImp( exec, ListViewFirstChild, proxy ); object.put( exec, "firstChild", KJS::Object(obj) ); obj = new CustomObjectImp( exec, ListViewCurrentItem, proxy ); object.put( exec, "currentItem", KJS::Object(obj) ); } TQSplashScreen *splashscreen = dynamic_cast(widget); if( splashscreen ) { obj = new CustomObjectImp(exec, TQSplashScreenSetPixmap, proxy ); object.put(exec, "setPixmap", KJS::Object(obj) ); obj = new CustomObjectImp(exec, TQSplashScreenPixmap, proxy ); object.put(exec, "pixmap", KJS::Object(obj) ); obj = new CustomObjectImp(exec, TQSplashScreenFinish, proxy ); object.put(exec, "finish", KJS::Object(obj) ); obj = new CustomObjectImp(exec, TQSplashScreenRepaint, proxy ); object.put(exec, "repaint", KJS::Object(obj) ); } #ifndef QT_ONLY KMainWindow *mw = dynamic_cast( widget ); if ( mw ) { obj = new CustomObjectImp( exec, MainWindowSetCentralWidget, proxy ); object.put( exec, "setCentralWidget", KJS::Object(obj) ); obj = new CustomObjectImp( exec, MainWindowCreateGUI, proxy ); object.put( exec, "createGUI", KJS::Object(obj) ); obj = new CustomObjectImp( exec, MainWindowMenuBar, proxy ); object.put( exec, "menuBar", KJS::Object(obj) ); obj = new CustomObjectImp( exec, MainWindowStatusBar, proxy ); object.put( exec, "statusBar", KJS::Object(obj) ); obj = new CustomObjectImp( exec, MainWindowSetStandardToolBarMenuEnabled, proxy ); object.put( exec, "setStandardToolBarMenuEnabled", KJS::Object(obj) ); } KSystemTray *systray = dynamic_cast( qobj ); if ( systray ) { obj = new CustomObjectImp( exec, KSystemTrayContextMenu, proxy ); object.put( exec, "contextMenu", KJS::Object(obj) ); obj = new CustomObjectImp( exec, KSystemTrayActionCollection, proxy ); object.put( exec, "actionCollection", KJS::Object(obj) ); obj = new CustomObjectImp( exec, KSystemTrayLoadIcon, proxy ); object.put( exec, "loadIcon", KJS::Object(obj) ); } #endif // QT_ONLY TQTabWidget *tw = dynamic_cast( widget ); if ( tw ) { obj = new CustomObjectImp( exec, TabWidgetAddTab, proxy ); object.put( exec, "addTab", KJS::Object(obj) ); } TQScrollView *sv = dynamic_cast( widget ); if ( sv ) { obj = new CustomObjectImp( exec, ScrollViewViewport, proxy ); object.put( exec, "viewport", KJS::Object(obj) ); obj = new CustomObjectImp( exec, ScrollViewAddChild, proxy ); object.put( exec, "addChild", KJS::Object(obj) ); } //ADDBINDING( TQMenuItem, widget) //ADDBINDING( TQMenuData, widget) ADDBINDING( TQPopupMenu, widget ) ADDBINDING( TQComboBox, widget ) //ADDBINDING( TQFrame, widget ) /*ADDBINDING( TQListView, widget )*/ ADDBINDING( TQCanvasView, widget ) /* TQMenuData *md = dynamic_cast( widget ); if ( md ) { TQMenuDataImp::addBindings( exec, object ); } TQMenuItem *mitem = dynamic_cast( widget ); if ( mitem ) { TQMenuItemImp::addBindings( exec, object ); } */ TQMenuData *menuData = dynamic_cast(widget); if( menuData ) { obj = new CustomObjectImp( exec, TQMenuDataInsertItem, proxy ); object.put( exec, "insertItem", KJS::Object(obj) ); obj = new CustomObjectImp( exec, TQMenuDataRemoveItem, proxy ); object.put( exec, "removeItem", KJS::Object(obj) ); obj = new CustomObjectImp( exec, TQMenuDataRemoveItem, proxy ); object.put( exec, "insertSeparator", KJS::Object(obj) ); } TQHBox *hbox = dynamic_cast( widget ); if ( hbox ) { obj = new CustomObjectImp( exec, HBoxSpacing, proxy ); object.put( exec, "setSpacing", KJS::Object(obj) ); } TQToolBox *tb = dynamic_cast( qobj ); if ( tb ) { obj = new CustomObjectImp( exec, TQToolBoxAddItem, proxy ); object.put( exec, "addItem", KJS::Object(obj) ); obj = new CustomObjectImp( exec, TQToolBoxInsertItem, proxy ); object.put( exec, "insertItem", KJS::Object(obj) ); obj = new CustomObjectImp( exec, TQToolBoxRemoveItem, proxy ); object.put( exec, "removeItem", KJS::Object(obj) ); obj = new CustomObjectImp( exec, TQToolBoxItemLabel, proxy ); object.put( exec, "itemLabel", KJS::Object(obj) ); obj = new CustomObjectImp( exec, TQToolBoxSetItemLabel, proxy ); object.put( exec, "setItemLabel", KJS::Object(obj) ); obj = new CustomObjectImp( exec, TQToolBoxItemIconSet, proxy ); object.put( exec, "itemIconSet", KJS::Object(obj) ); obj = new CustomObjectImp( exec, TQToolBoxSetItemIconSet, proxy ); object.put( exec, "setItemIconSet", KJS::Object(obj) ); obj = new CustomObjectImp( exec, TQToolBoxItem, proxy ); object.put( exec, "item", KJS::Object(obj) ); } return; } if ( qobj ) { TQApplication *app = dynamic_cast( qobj ); if ( app ) { obj = new CustomObjectImp( exec, ApplicationExec, proxy ); object.put( exec, "exec", KJS::Object(obj) ); } #ifndef QT_ONLY KParts::ReadOnlyPart *ropart = dynamic_cast( qobj ); if ( ropart ) { obj = new CustomObjectImp( exec, KReadOnlyPartOpenStream, proxy ); object.put( exec, "openStream", KJS::Object(obj) ); obj = new CustomObjectImp( exec, KReadOnlyPartWriteStream, proxy ); object.put( exec, "writeStream", KJS::Object(obj) ); obj = new CustomObjectImp( exec, KReadOnlyPartCloseStream, proxy ); object.put( exec, "closeStream", KJS::Object(obj) ); } KHTMLPart *htmlpart = dynamic_cast( qobj ); if ( htmlpart ) { obj = new CustomObjectImp( exec, KHTMLPartSelectAll, proxy ); object.put( exec, "selectAll", KJS::Object(obj) ); obj = new CustomObjectImp( exec, KHTMLPartHasSelection, proxy ); object.put( exec, "hasSelection", KJS::Object(obj) ); obj = new CustomObjectImp( exec, KHTMLPartSelectedText, proxy ); object.put( exec, "selectedText", KJS::Object(obj) ); } #endif // QT_ONLY TQTimer *timer = dynamic_cast( qobj ); if ( timer ) { obj = new CustomObjectImp( exec, TimerIsActive, proxy ); object.put( exec, "isActive", KJS::Object(obj) ); obj = new CustomObjectImp( exec, TimerStart, proxy ); object.put( exec, "start", KJS::Object(obj) ); obj = new CustomObjectImp( exec, TimerStop, proxy ); object.put( exec, "stop", KJS::Object(obj) ); } TQBoxLayout *box = dynamic_cast( qobj ); if ( box ) { obj = new CustomObjectImp( exec, BoxLayoutAddWidget, proxy ); object.put( exec, "addWidget", KJS::Object(obj) ); obj = new CustomObjectImp( exec, BoxLayoutAddSpacing, proxy ); object.put( exec, "addSpacing", KJS::Object(obj) ); obj = new CustomObjectImp( exec, BoxLayoutAddStretch, proxy ); object.put( exec, "addStretch", KJS::Object(obj) ); obj = new CustomObjectImp( exec, BoxLayoutAddLayout, proxy ); object.put( exec, "addLayout", KJS::Object(obj) ); } } } CustomObjectImp::CustomObjectImp( KJS::ExecState *exec, int mid, JSObjectProxy *parent ) : JSProxyImp(exec), id(mid), proxy(parent) { } KJS::Value CustomObjectImp::call( KJS::ExecState *exec, KJS::Object &self, const KJS::List &args ) { switch( id ) { case WidgetGrabWidget: return widgetGrabWidget( exec, self, args ); break; case WidgetDrawLine: widgetDrawLine( exec, self, args ); return KJS::Value(); break; case WidgetDrawText: widgetDrawText( exec, self, args ); return KJS::Value(); break; case ListBoxInsertItem: listBoxInsertItem( exec, self, args ); return KJS::Value(); break; case ListViewAddColumn: listViewAddColumn( exec, self, args ); return KJS::Value(); break; case ListViewInsertItem: listViewInsertItem( exec, self, args ); return KJS::Value(); break; case ListViewSelectedItem: return listViewSelectedItem( exec, self, args ); break; case ListViewHideColumn: listViewHideColumn( exec, self, args ); return KJS::Value(); break; case MainWindowSetCentralWidget: mainWinSetCentralWidget( exec, self, args ); return KJS::Value(); break; case MainWindowCreateGUI: mainWinCreateGUI( exec, self, args ); return KJS::Value(); break; case MainWindowMenuBar: return mainWinMenuBar( exec, self, args ); break; case MainWindowStatusBar: return mainWinStatusBar( exec, self, args ); break; case MainWindowSetStandardToolBarMenuEnabled: mainWinSetStandardToolBarMenuEnabled( exec, self, args ); return KJS::Value(); break; case TabWidgetAddTab: tabWidgetAddTab( exec, self, args ); return KJS::Value(); break; case ScrollViewViewport: return scrollViewViewport( exec, self, args ); break; case ScrollViewAddChild: scrollViewAddChild( exec, self, args ); return KJS::Value(); break; case ApplicationExec: return applicationExec( exec, self, args ); break; case TimerIsActive: return timerIsActive( exec, self, args ); break; case TimerStart: return timerStart( exec, self, args ); break; case TimerStop: return timerStop( exec, self, args ); break; case BoxLayoutAddWidget: boxLayoutAddWidget( exec, self, args ); return KJS::Value(); break; case BoxLayoutAddSpacing: boxLayoutAddSpacing( exec, self, args ); return KJS::Value(); break; case BoxLayoutAddStretch: boxLayoutAddStretch( exec, self, args ); return KJS::Value(); break; case BoxLayoutAddLayout: boxLayoutAddLayout( exec, self, args ); return KJS::Value(); break; case URLRequesterSetMode: case URLRequesterSetFilter: case URLRequesterUrl: case URLRequesterSetLocalProtocol: case URLRequesterLocalProtocol: kdWarning() << "CustomObjectImp unsupported method call " << id << endl; break; case KXMLGUIClientActionCollection: return xmlguiClientActionCollection( exec, self, args ); break; case KReadOnlyPartOpenStream: return kroPartOpenStream( exec, self, args ); break; case KReadOnlyPartWriteStream: return kroPartWriteStream( exec, self, args ); break; case KReadOnlyPartCloseStream: return kroPartCloseStream( exec, self, args ); break; case HBoxSpacing: hboxSpacing( exec, self, args ); return KJS::Value(); break; case KHTMLPartSelectAll: khtmlPartSelectAll( exec, self, args ); return KJS::Value(); break; case KHTMLPartHasSelection: return khtmlPartHasSelection( exec, self, args ); break; case KHTMLPartSelectedText: return khtmlPartSelectedText( exec, self, args ); break; case KSystemTrayContextMenu: return ksystemtrayContextMenu( exec, self, args ); break; case KSystemTrayActionCollection: return ksystemtrayActionCollection( exec, self, args ); break; case KSystemTrayLoadIcon: return ksystemtrayLoadIcon( exec, self, args ); break; case TQCanvasViewCanvas: return qcanvasViewCanvas( exec, self, args ); break; case TQCanvasViewSetCanvas: qcanvasViewSetCanvas( exec, self, args ); return KJS::Value(); break; case TQSplashScreenSetPixmap: return qsplashScreenSetPixmap(exec, self, args ); break; case TQSplashScreenPixmap: return qsplashScreenPixmap(exec, self, args ); break; case TQSplashScreenFinish: return qsplashScreenFinish(exec, self, args ); break; case TQSplashScreenRepaint: return qsplashScreenRepaint(exec, self, args ); break; case TQToolBoxAddItem: return qtoolBoxAddItem(exec, self, args ); break; case TQToolBoxInsertItem: return qtoolBoxInsertItem(exec, self, args ); break; case TQToolBoxRemoveItem: qtoolBoxRemoveItem(exec, self, args ); return KJS::Boolean(true); break; case TQToolBoxItemLabel: return qtoolBoxItemLabel(exec, self, args ); break; case TQToolBoxSetItemLabel: qtoolBoxSetItemLabel(exec, self, args ); return KJS::Boolean(true); break; case TQToolBoxItemIconSet: return qtoolBoxItemIconSet(exec, self, args ); break; case TQToolBoxSetItemIconSet: qtoolBoxSetItemIconSet(exec, self, args ); return KJS::Boolean(true); break; case TQToolBoxItem: return qtoolBoxItem(exec, self, args ); break; case TQMenuDataInsertItem: return qmenuDataInsertItem(exec, self, args ); break; case TQMenuDataRemoveItem: qmenuDataRemoveItem(exec, self, args ); return KJS::Boolean(true); break; case TQMenuDataInsertSeparator: qmenuDataInsertSeparator(exec, self, args ); return KJS::Boolean(true); break; case ListViewTakeItem: return qlistViewTakeItem(exec, self, args ); break; case ListViewFirstChild: return qlistViewFirstChild(exec, self, args ); break; case ListViewCurrentItem: return qlistViewFirstChild(exec, self, args ); break; default: break; } return KJS::ObjectImp::call( exec, self, args ); } KJS::Value CustomObjectImp::qsplashScreenSetPixmap(KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { TQSplashScreen *ss = dynamic_cast(proxy->widget()); if ( ss ) { TQPixmap pix = extractTQPixmap(exec, args, 0 ); ss->setPixmap(pix); } return KJS::Value(); } KJS::Value CustomObjectImp::qsplashScreenPixmap(KJS::ExecState *exec, KJS::Object &, const KJS::List & ) { TQSplashScreen *ss = dynamic_cast(proxy->widget()); if ( ss ) { TQPixmap pix = *(ss->pixmap()); return convertToValue(exec, pix); } return KJS::Value(); } KJS::Value CustomObjectImp::qsplashScreenFinish(KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { TQSplashScreen *ss = dynamic_cast(proxy->widget()); if ( ss ) { TQWidget *w = extractTQWidget(exec, args, 0 ); ss->finish(w); } return KJS::Value(); } KJS::Value CustomObjectImp::qsplashScreenRepaint(KJS::ExecState *exec, KJS::Object &, const KJS::List & ) { TQSplashScreen *ss = dynamic_cast(proxy->widget()); if ( ss ) { ss->repaint(); } return KJS::Value(); } KJS::Value CustomObjectImp::widgetGrabWidget(KJS::ExecState *exec, KJS::Object &, const KJS::List & ) { TQWidget *w = proxy->widget(); if ( !w ) return KJS::Value(); TQVariant pix(TQPixmap::grabWidget(w) ); return convertToValue( exec, pix ); } void CustomObjectImp::widgetDrawLine( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { if ( args.size() != 4 ) return; TQWidget *w = proxy->widget(); if ( !w ) return; int x = extractInt( exec, args, 0 ); int y = extractInt( exec, args, 1 ); int x1 = extractInt( exec, args, 2 ); int y1 = extractInt( exec, args, 3 ); TQPainter p(w); p.drawLine(x,y,x1,y1); } void CustomObjectImp::widgetDrawText( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { if ( args.size() != 3 ) return; TQWidget *w = proxy->widget(); if ( !w ) return; int x = extractInt( exec, args, 0 ); int y = extractInt( exec, args, 1 ); TQString s = extractTQString( exec, args, 2 ); w->drawText( x, y, s ); } void CustomObjectImp::listBoxInsertItem( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { if ( args.size() != 1 ) return; TQListBox *lb = dynamic_cast( proxy->object() ); if ( !lb ) return; TQString s = extractTQString( exec, args, 0 ); lb->insertItem( s ); } void CustomObjectImp::listViewAddColumn( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { if ( args.size() != 1 ) return; TQListView *lv = dynamic_cast( proxy->object() ); if ( !lv ) return; TQString s = extractTQString( exec, args, 0 ); lv->addColumn( s ); } void CustomObjectImp::listViewInsertItem( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { if ( !args.size() ) return; #ifndef QT_ONLY KListView *klv = dynamic_cast( proxy->object() ); if ( klv ) { KListViewItem *lvm = new KListViewItem(klv); for( int idx = 0; idx < args.size(); ++idx){ TQVariant arg = convertToVariant(exec, args[idx]); if( arg.canCast(TQVariant::String) ) lvm->setText(idx, arg.toString()); else if ( arg.canCast(TQVariant::Pixmap) ) lvm->setPixmap(idx, arg.toPixmap()); } return; } #endif // QT_ONLY TQListView *lv = dynamic_cast( proxy->object() ); if ( lv ) { TQListViewItem *lvm = new TQListViewItem(lv); for( int idx = 0; idx < args.size(); ++idx){ TQVariant arg = convertToVariant(exec, args[idx]); if( arg.canCast(TQVariant::String) ) lvm->setText(idx, arg.toString()); else if ( arg.canCast(TQVariant::Pixmap) ) lvm->setPixmap(idx, arg.toPixmap()); } } } KJS::Value CustomObjectImp::listViewSelectedItem( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { if ( args.size() ) return KJS::Value(); TQListView *lv = dynamic_cast( proxy->object() ); if ( !lv ) return KJS::Value(); TQListViewItem *lvi = lv->selectedItem(); if ( !lvi ) return KJS::Null(); TQCheckListItem *cli = dynamic_cast( lvi ); if ( cli ) { JSOpaqueProxy *prx = new JSOpaqueProxy( lvi, "TQCheckListItem" ); KJS::Object proxyObj(prx); proxy->part()->factory()->extendOpaqueProxy(exec, proxyObj); return proxyObj; } JSOpaqueProxy *prx = new JSOpaqueProxy( lvi, "TQListViewItem" ); KJS::Object proxyObj(prx); proxy->part()->factory()->extendOpaqueProxy(exec, proxyObj); return proxyObj; } void CustomObjectImp::listViewHideColumn( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { if ( args.size() != 1 ) return; TQListView *lv = dynamic_cast( proxy->object() ); if ( !lv ) return; int i = extractInt( exec, args, 0 ); lv->hideColumn( i ); } void CustomObjectImp::mainWinSetCentralWidget( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { #ifndef QT_ONLY if ( args.size() != 1 ) return; KJS::Object jsobj = args[0].toObject(exec); JSObjectProxy *cwproxy = JSProxy::toObjectProxy( jsobj.imp() ); TQWidget *cw = cwproxy ? cwproxy->widget() : 0; if ( !cw ) return; KMainWindow *mw = dynamic_cast( proxy->object() ); if ( !mw ) return; mw->setCentralWidget( cw ); #else // QT_ONLY Q_UNUSED( exec ); Q_UNUSED( args ); return; #endif // QT_ONLY } void CustomObjectImp::mainWinSetStandardToolBarMenuEnabled( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { #ifndef QT_ONLY if ( args.size() != 1 ) return; KMainWindow *mw = dynamic_cast( proxy->object() ); if ( !mw ) return; mw->setStandardToolBarMenuEnabled( args[0].toBoolean(exec) ); #else // QT_ONLY Q_UNUSED( exec ); Q_UNUSED( args ); return; #endif // QT_ONLY } void CustomObjectImp::mainWinCreateGUI( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { #ifndef QT_ONLY kdDebug(80001) << "mainWinCreateGUI() called" << endl; KMainWindow *mw = dynamic_cast( proxy->object() ); if ( !mw ) { kdWarning() << "mainWinCreateGUI() called on non-KMainWindow" << endl; return; } mw->createGUI( extractTQString( exec, args, 0 ) ); #else // QT_ONLY Q_UNUSED( exec ); Q_UNUSED( args ); return; #endif // QT_ONLY } KJS::Value CustomObjectImp::mainWinMenuBar( KJS::ExecState *exec, KJS::Object &, const KJS::List & ) { #ifndef QT_ONLY kdDebug(80001) << "mainWinMenuBar() called" << endl; KMainWindow *mw = dynamic_cast( proxy->object() ); if ( !mw ) { kdWarning() << "mainWinMenuBar() called on non-KMainWindow" << endl; return KJS::Value(); } TQObject *obj = mw->menuBar(); return proxy->part()->factory()->createProxy( exec, obj, proxy ); #else // QT_ONLY Q_UNUSED( exec ); return KJS::Value(); #endif // QT_ONLY } KJS::Value CustomObjectImp::mainWinStatusBar( KJS::ExecState *exec, KJS::Object &, const KJS::List & ) { #ifndef QT_ONLY kdDebug(80001) << "mainWinStatusBar() called" << endl; KMainWindow *mw = dynamic_cast( proxy->object() ); if ( !mw ) { kdWarning() << "mainWinStatusBar() called on non-KMainWindow" << endl; return KJS::Value(); } TQObject *obj = mw->statusBar(); return proxy->part()->factory()->createProxy( exec, obj, proxy ); #else // QT_ONLY Q_UNUSED( exec ); return KJS::Value(); #endif // QT_ONLY } KJS::Value CustomObjectImp::xmlguiClientActionCollection( KJS::ExecState *exec, KJS::Object&, const KJS::List& ) { #ifndef QT_ONLY KXMLGUIClient *gc = dynamic_cast( proxy->object() ); if ( !gc ) { kdDebug(80001) << "Unable to cast to XMLGUIClient" << endl; return KJS::Value(); } KActionCollection *ac = gc->actionCollection(); if (!ac) { kdDebug(80001) << "XMLGUIClient action collection is null" << endl; return KJS::Null(); } /* JSObjectProxy *prxy = new JSObjectProxy( proxy->part(), ac ); KJS::Object proxyObject( prxy ); prxy->setOwner(JSProxy::Native); prxy->addBindings( exec, proxyObject ); return proxyObject; */ return proxy->part()->factory()->createProxy( exec, ac, proxy ); #else // QT_ONLY Q_UNUSED( exec ); return KJS::Value(); #endif // QT_ONLY } void CustomObjectImp::tabWidgetAddTab( KJS::ExecState *exec, KJS::Object&, const KJS::List &args ) { if ( args.size() < 2 ) return; TQTabWidget *tw = dynamic_cast( proxy->object() ); if ( !tw ) return; KJS::Object jsobj = args[0].toObject(exec); JSObjectProxy *tproxy = JSProxy::toObjectProxy( jsobj.imp() ); TQWidget *w = tproxy ? tproxy->widget() : 0; if ( !w ) return; tw->addTab( w, extractTQString( exec, args, 0 ) ); } KJS::Value CustomObjectImp::scrollViewViewport( KJS::ExecState *exec, KJS::Object&, const KJS::List &args ) { TQScrollView *sv = dynamic_cast( proxy->object() ); if ( !sv ) return KJS::Value(); KJS::Object jsobj = args[0].toObject(exec); JSObjectProxy *sproxy = JSProxy::toObjectProxy( jsobj.imp() ); TQWidget *w = sproxy ? sproxy->widget() : 0; if ( !w ) return KJS::Value(); return proxy->part()->factory()->createProxy( exec, w, proxy ); } void CustomObjectImp::scrollViewAddChild( KJS::ExecState *exec, KJS::Object&, const KJS::List &args ) { if ( args.size() < 1 ) return; TQScrollView *sv = dynamic_cast( proxy->object() ); if ( !sv ) return; KJS::Object jsobj = args[0].toObject(exec); JSObjectProxy *sproxy = JSProxy::toObjectProxy( jsobj.imp() ); TQWidget *w = sproxy ? sproxy->widget() : 0; if ( !w ) return; int x = args.size() >= 2 ? extractInt( exec, args, 1 ) : 0; int y = args.size() >= 3 ? extractInt( exec, args, 2 ) : 0; sv->addChild( w, x, y ); } KJS::Value CustomObjectImp::applicationExec( KJS::ExecState *, KJS::Object&, const KJS::List& ) { TQApplication *app = dynamic_cast( proxy->object() ); if ( !app ) return KJS::Value(); return KJS::Number( app->exec() ); } KJS::Value CustomObjectImp::timerIsActive( KJS::ExecState *, KJS::Object &, const KJS::List & ) { TQTimer *timer = dynamic_cast( proxy->object() ); if ( !timer ) return KJS::Value(); return KJS::Boolean( timer->isActive() ); } KJS::Value CustomObjectImp::timerStart( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { TQTimer *timer = dynamic_cast( proxy->object() ); if ( !timer ) return KJS::Value(); int timerid; if ( args.size() == 1 ) timerid = timer->start( extractInt( exec, args, 0 ) ); else if ( args.size() == 2 ) timerid = timer->start( extractInt( exec, args, 0 ), extractBool( exec, args, 0 ) ); else return KJS::Value(); return KJS::Number( timerid ); } KJS::Value CustomObjectImp::timerStop( KJS::ExecState *, KJS::Object &, const KJS::List & ) { TQTimer *timer = dynamic_cast( proxy->object() ); if ( !timer ) return KJS::Value(); timer->stop(); return KJS::Value(); } void CustomObjectImp::boxLayoutAddWidget( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { if ( (args.size() < 1) || (args.size() > 3) ) return; TQBoxLayout *box = dynamic_cast( proxy->object() ); if ( !box ) return; KJS::Object jsobj = args[0].toObject(exec); JSObjectProxy *proxy = JSProxy::toObjectProxy( jsobj.imp() ); TQWidget *w = proxy ? proxy->widget() : 0; if ( !w ) return; if ( args.size() == 1 ) box->addWidget( w ); else if ( args.size() == 2 ) box->addWidget( w, extractInt( exec, args, 1 ) ); else if ( args.size() == 3 ) box->addWidget( w, extractInt( exec, args, 1 ), extractInt( exec, args, 2 ) ); } void CustomObjectImp::boxLayoutAddSpacing( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { if ( args.size() != 1 ) return; TQBoxLayout *box = dynamic_cast( proxy->object() ); if ( !box ) return; box->addSpacing( extractInt( exec, args, 0 ) ); } void CustomObjectImp::boxLayoutAddStretch( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { if ( args.size() > 1 ) return; TQBoxLayout *box = dynamic_cast( proxy->object() ); if ( !box ) return; if ( args.size() == 0 ) box->addStretch(); else box->addStretch( extractInt( exec, args, 0 ) ); } void CustomObjectImp::boxLayoutAddLayout( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { if ( (args.size() < 1) || (args.size() > 2) ) return; TQBoxLayout *box = dynamic_cast( proxy->object() ); if ( !box ) return; KJS::Object jsobj = args[0].toObject(exec); JSObjectProxy *proxy = JSProxy::toObjectProxy( jsobj.imp() ); TQLayout *l = proxy ? (dynamic_cast(proxy->object())) : 0; if ( !l ) return; if ( args.size() == 1 ) box->addLayout( l ); else if ( args.size() == 2 ) box->addLayout( l, extractInt( exec, args, 1 ) ); } KJS::Value CustomObjectImp::kroPartOpenStream( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { #ifndef QT_ONLY if ( args.size() != 2 ) return KJS::Boolean( false ); KParts::ReadOnlyPart *ro = dynamic_cast( proxy->object() ); if ( !ro ) return KJS::Boolean( false ); bool ok = ro->openStream( extractTQString( exec, args, 0 ) , KURL(extractTQString( exec, args, 1 )) ); return KJS::Boolean( ok ); #else // QT_ONLY Q_UNUSED( exec ); Q_UNUSED( args ); return KJS::Boolean( false ); #endif // QT_ONLY } KJS::Value CustomObjectImp::kroPartWriteStream( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { #ifndef QT_ONLY if ( args.size() != 1 ) return KJS::Boolean( false ); KParts::ReadOnlyPart *ro = dynamic_cast( proxy->object() ); if ( !ro ) return KJS::Boolean( false ); TQCString s = extractTQString( exec, args, 0 ).latin1(); bool ok = ro->writeStream( s ); return KJS::Boolean( ok ); #else // QT_ONLY Q_UNUSED( exec ); Q_UNUSED( args ); return KJS::Boolean( false ); #endif // QT_ONLY } KJS::Value CustomObjectImp::kroPartCloseStream( KJS::ExecState *, KJS::Object &, const KJS::List &args ) { #ifndef QT_ONLY if ( args.size() != 0 ) return KJS::Boolean( false ); KParts::ReadOnlyPart *ro = dynamic_cast( proxy->object() ); if ( !ro ) return KJS::Boolean( false ); bool ok = ro->closeStream(); return KJS::Boolean( ok ); #else // QT_ONLY Q_UNUSED( args ); return KJS::Boolean( false ); #endif // QT_ONLY } void CustomObjectImp::hboxSpacing( KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { if ( args.size() != 1 ) return; TQHBox *box = dynamic_cast( proxy->object() ); if ( !box ) return; box->setSpacing( extractInt( exec, args, 0 ) ); } void CustomObjectImp::khtmlPartSelectAll( KJS::ExecState *, KJS::Object &, const KJS::List & ) { #ifndef QT_ONLY KHTMLPart *htmlpart = dynamic_cast( proxy->object() ); if ( htmlpart ) htmlpart->selectAll(); #endif // QT_ONLY } KJS::Value CustomObjectImp::khtmlPartHasSelection( KJS::ExecState *, KJS::Object &, const KJS::List & ) { #ifndef QT_ONLY KHTMLPart *htmlpart = dynamic_cast( proxy->object() ); if ( !htmlpart ) return KJS::Boolean(); return KJS::Boolean( htmlpart->hasSelection() ); #endif // QT_ONLY return KJS::Null(); } KJS::Value CustomObjectImp::khtmlPartSelectedText( KJS::ExecState *, KJS::Object &, const KJS::List & ) { #ifndef QT_ONLY KHTMLPart *htmlpart = dynamic_cast( proxy->object() ); if ( !htmlpart ) return KJS::String(); return KJS::String( htmlpart->selectedText() ); #endif // QT_ONLY return KJS::Null(); } KJS::Value CustomObjectImp::ksystemtrayContextMenu( KJS::ExecState *exec, KJS::Object&, const KJS::List & ) { #ifndef QT_ONLY KSystemTray *st = dynamic_cast( proxy->widget() ); if ( !st ) { kdWarning() << "Not a KSystemTray" << endl; return KJS::Boolean(false); } kdDebug() << "Valid system tray?" << endl; KPopupMenu *pop = st->contextMenu(); return proxy->part()->factory()->createProxy( exec, pop, proxy ); #endif // QT_ONLY return KJS::Null(); } KJS::Value CustomObjectImp::ksystemtrayActionCollection( KJS::ExecState *exec, KJS::Object&, const KJS::List & ) { #ifndef QT_ONLY KSystemTray *st = dynamic_cast( proxy->object() ); if ( !st ) return KJS::Value(); KActionCollection *ac = st->actionCollection(); return proxy->part()->factory()->createProxy( exec, ac, proxy ); #endif // QT_ONLY return KJS::Null(); } KJS::Value CustomObjectImp::ksystemtrayLoadIcon( KJS::ExecState *exec, KJS::Object&, const KJS::List &args ) { #ifndef QT_ONLY // TODO: Support the 2 arg form of KSystemTray::loadIcon() when we support KInstance args if ( args.size() != 1 ) return KJS::Value(); TQVariant pix( KSystemTray::loadIcon( extractTQString( exec, args, 0 ) ) ); return convertToValue( exec, pix ); #endif // QT_ONLY return KJS::Null(); } KJS::Value CustomObjectImp::qcanvasViewCanvas( KJS::ExecState *exec, KJS::Object&, const KJS::List &args ) { TQCanvasView *cv = dynamic_cast( proxy->object() ); if ( !cv ) return KJS::Value(); return proxy->part()->factory()->createProxy( exec, cv->canvas(), proxy ); } void CustomObjectImp::qcanvasViewSetCanvas( KJS::ExecState *exec, KJS::Object&, const KJS::List &args ) { TQCanvasView *cv = dynamic_cast( proxy->object() ); if ( !cv ) return; KJS::Object jsobj = args[0].toObject(exec); JSObjectProxy *proxy = JSProxy::toObjectProxy( jsobj.imp() ); TQObject *obj = proxy->object(); if ( !obj ) return; TQCanvas *c = (TQCanvas *) obj; cv->setCanvas(c); } KJS::Value Bindings::CustomObjectImp::qlistViewTakeItem( KJS::ExecState * exec, KJS::Object &, const KJS::List &args ) { TQListView *lv = dynamic_cast( proxy->object() ); if( !lv ) return KJS::Boolean(false); KJS::Object lviObj = args[0].toObject(exec); JSOpaqueProxy *prxy = JSProxy::toOpaqueProxy(lviObj.imp() ); TQListViewItem *itm = prxy->toNative(); if( !itm ) { // Trow an error... return KJS::Boolean(false); } lv->takeItem(itm); return KJS::Boolean(true); } KJS::Value Bindings::CustomObjectImp::qlistViewFirstChild( KJS::ExecState * exec, KJS::Object &, const KJS::List &args ) { TQListView *lv = dynamic_cast( proxy->object() ); if( !lv ) return KJS::Boolean(false); TQListViewItem *itm = lv->firstChild(); KJS::Object jsObject( new JSOpaqueProxy( itm, "TQListViewItem") ); proxy->part()->factory()->extendOpaqueProxy(exec, jsObject); return jsObject; } KJS::Value Bindings::CustomObjectImp::qlistViewCurrentItem( KJS::ExecState * exec, KJS::Object &, const KJS::List &args ) { TQListView *lv = dynamic_cast( proxy->object() ); if( !lv ) return KJS::Boolean(false); TQListViewItem *itm = lv->currentItem(); KJS::Object jsObject( new JSOpaqueProxy( itm, "TQListViewItem") ); proxy->part()->factory()->extendOpaqueProxy(exec, jsObject); return jsObject; } KJS::Value Bindings::CustomObjectImp::qtoolBoxAddItem(KJS::ExecState *exec, KJS::Object &, const KJS::List &args) { TQToolBox *tb = dynamic_cast( proxy->object() ); if( !tb ) return KJS::Boolean(false); if( args.size() == 2) { TQWidget *w = extractTQWidget( exec, args, 0 ); TQString lab = extractTQString( exec, args, 1 ); return KJS::Number( tb->addItem(w,lab) ); } if( args.size() == 3) { TQWidget *w = extractTQWidget( exec, args, 0 ); TQIconSet ico = extractTQPixmap( exec, args, 1 ); TQString lab = extractTQString( exec, args, 2 ); return KJS::Number( tb->addItem(w,ico,lab) ); } return KJS::Boolean(false); } KJS::Value Bindings::CustomObjectImp::qtoolBoxInsertItem(KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { TQToolBox *tb = dynamic_cast( proxy->object() ); if( !tb ) return KJS::Boolean(false); if( args.size() == 3) { int idx = extractInt(exec, args, 0); TQWidget *w = extractTQWidget( exec, args, 1 ); TQString lab = extractTQString( exec, args, 2 ); return KJS::Number( tb->insertItem(idx,w,lab) ); } if( args.size() == 4) { int idx = extractInt(exec, args, 0); TQWidget *w = extractTQWidget( exec, args, 1 ); TQIconSet ico = extractTQPixmap( exec, args, 2 ); TQString lab = extractTQString( exec, args, 3 ); return KJS::Number( tb->insertItem(idx,w,ico,lab) ); } return KJS::Boolean(false); } void Bindings::CustomObjectImp::qtoolBoxRemoveItem(KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { TQToolBox *tb = dynamic_cast( proxy->object() ); if( !tb ) return; TQWidget *w = extractTQWidget(exec, args, 0); tb->removeItem(w); } KJS::Value Bindings::CustomObjectImp::qtoolBoxItemLabel(KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { TQToolBox *tb = dynamic_cast( proxy->object() ); if( !tb ) return KJS::Boolean(false); int idx = extractInt(exec, args, 0); return KJS::String(tb->itemLabel(idx).latin1()); } void Bindings::CustomObjectImp::qtoolBoxSetItemLabel(KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { TQToolBox *tb = dynamic_cast( proxy->object() ); if( !tb ) return; int idx = extractInt(exec, args, 0); TQString lab = extractTQString( exec, args, 1 ); tb->setItemLabel(idx,lab); } KJS::Value Bindings::CustomObjectImp::qtoolBoxItemIconSet(KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { TQToolBox *tb = dynamic_cast( proxy->object() ); if( !tb ) return KJS::Boolean(false); int idx = extractInt(exec, args, 0); TQPixmap pix = tb->itemIconSet(idx).pixmap(); return convertToValue( exec, pix ); } void Bindings::CustomObjectImp::qtoolBoxSetItemIconSet(KJS::ExecState *exec, KJS::Object &, const KJS::List &args) { TQToolBox *tb = dynamic_cast( proxy->object() ); if( !tb ) return; int idx = extractInt(exec, args, 0); TQIconSet ico = extractTQPixmap( exec, args, 1); tb->setItemIconSet(idx,ico); } KJS::Value Bindings::CustomObjectImp::qtoolBoxItem(KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { TQToolBox *tb = dynamic_cast( proxy->object() ); if( !tb ) return KJS::Boolean(false); int idx = extractInt(exec, args, 0); return proxy->part()->factory()->createProxy( exec, tb->item(idx), proxy ); } TQPopupMenu *getMenu(const KJS::Object &obj) { JSObjectProxy *jsproxy = JSProxy::toObjectProxy( obj.imp() ); return dynamic_cast( jsproxy->object() ); } KJS::Value Bindings::CustomObjectImp::qmenuDataInsertItem(KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { TQMenuData *menu = dynamic_cast( proxy->object() ); if( !menu ) return KJS::Boolean(false); int offset = 0; TQString text = extractTQString(exec,args, offset); TQPixmap pix = extractTQPixmap(exec,args, offset); int id = -1; int idx = -1; int newIndex = 0; TQPopupMenu *parentMenu = 0; if( !pix.isNull() ) { ++offset; if( args.size() > offset) text = extractTQString(exec,args,offset); } kdDebug() << "text " << text << " " << offset << endl; ++offset; if( args.size() > offset) parentMenu = getMenu(args[offset].toObject(exec)); if( parentMenu ) ++offset; kdDebug() << "text " << text << " " << offset << endl; if( args.size() > offset ) id = extractInt(exec, args, offset); ++offset; kdDebug() << "text " << text << " " << offset << endl; if( args.size() > offset ) idx = extractInt(exec, args, offset); kdDebug() << "text " << text << " " << offset << endl; if( parentMenu ) { if( pix.isNull() ) { newIndex = menu->insertItem(text, parentMenu, id, idx); // text, parent, id, idx } else { if( text.isEmpty() ) newIndex = menu->insertItem(pix, parentMenu, id, idx); // pixmap, parent, id, idx else newIndex = menu->insertItem(pix, text, parentMenu, id, idx); // pixmap, text, parent, id, idx } } else { if( pix.isNull() ) { newIndex = menu->insertItem(text, id, idx); // text, id, idx } else { if( text.isEmpty() ) newIndex = menu->insertItem(pix, id, idx); // pixmap, id, idx else newIndex = menu->insertItem(pix, text, id, idx); // pixmap, text, id, idx } } return KJS::Number(newIndex); } void Bindings::CustomObjectImp::qmenuDataRemoveItem(KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { TQMenuData *menu = dynamic_cast( proxy->object() ); if( !menu ) return; int idx = extractInt(exec, args, 0); menu->removeItem(idx); } KJS::Value Bindings::CustomObjectImp::qmenuDataInsertSeparator(KJS::ExecState *exec, KJS::Object &, const KJS::List &args ) { TQMenuData *menu = dynamic_cast( proxy->object() ); if( !menu ) return KJS::Boolean(false); int idx = extractInt(exec, args, 0); return KJS::Number( menu->insertSeparator(idx) ); } } // namespace KJSEmbed::Bindings }// namespace KJSEmbed // Local Variables: // c-basic-offset: 4 // End: