aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/objects/KvsObject_widget.cpp
diff options
context:
space:
mode:
authorGravatar Szymon Tomasz Stefanek2011-01-01 20:19:56 +0000
committerGravatar Szymon Tomasz Stefanek2011-01-01 20:19:56 +0000
commitc601b5a27f74b16158adafe429faefbe573e64a2 (patch)
treea3cde3206a45628f8ac86e8dfbdab70b20c3a831 /src/modules/objects/KvsObject_widget.cpp
parentprobable compilation fix for rijndaled/crypto++ (diff)
downloadKVIrc-c601b5a27f74b16158adafe429faefbe573e64a2.tar.gz
KVIrc-c601b5a27f74b16158adafe429faefbe573e64a2.tar.bz2
KVIrc-c601b5a27f74b16158adafe429faefbe573e64a2.zip
The big rename for modules. Still some details remaining.
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@5284 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/objects/KvsObject_widget.cpp')
-rw-r--r--src/modules/objects/KvsObject_widget.cpp2030
1 files changed, 2030 insertions, 0 deletions
diff --git a/src/modules/objects/KvsObject_widget.cpp b/src/modules/objects/KvsObject_widget.cpp
new file mode 100644
index 000000000..c0598b7ae
--- /dev/null
+++ b/src/modules/objects/KvsObject_widget.cpp
@@ -0,0 +1,2030 @@
+//=============================================================================
+//
+// File : KvsObject_widget.cpp
+// Creation date : Mon Sep 11 16:35:32 CET 2000 by Krzysztof Godlewski
+//
+// This file is part of the KVIrc irc client distribution
+// Copyright (C) 2000 Krzysztof Godlewski
+// Copyright (C) 2000-2010 Szymon Stefanek (pragma at kvirc dot net)
+//
+// This program is FREE software. You can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your opinion) 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 General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+//=============================================================================
+
+#include "KvsObject_widget.h"
+#include "KvsObject_pixmap.h"
+
+#include "KviMemory.h"
+#include "kvi_debug.h"
+#include "KviError.h"
+#include "KviLocale.h"
+#include "KviIconManager.h"
+#include "KviWindow.h"
+#include "KviApplication.h"
+#include "KviMainWindow.h"
+#include "KviStatusBar.h"
+#include "KvsObject_painter.h"
+
+#include <QKeyEvent>
+#include <QDesktopWidget>
+#include <QWidget>
+#include <QToolTip>
+#include <QFont>
+#include <QVariant>
+#include <QCursor>
+#include <QColor>
+#include <QLayout>
+#include <QBitmap>
+#include <QMetaObject>
+#include <QIcon>
+#include <QStatusBar>
+#include <QUrl>
+#include <QPainter>
+#include <QPrinter>
+#include <QApplication>
+#include <QPoint>
+#include <QContextMenuEvent>
+
+#ifdef COMPILE_WEBKIT_SUPPORT
+ #include <QtWebKit/QWebView>
+#endif
+
+KviKvsWidget::KviKvsWidget(KvsObject_widget * object,QWidget * par)
+:QWidget(par), m_pObject(object)
+{
+}
+
+KviKvsWidget::~KviKvsWidget()
+{
+}
+
+QSize KviKvsWidget::sizeHint() const
+{
+ QSize size=QWidget::sizeHint();
+ KviKvsVariant *tipret=new KviKvsVariant();
+ KviKvsVariantList params(new KviKvsVariant((kvs_int_t)size.width()),new KviKvsVariant((kvs_int_t)size.height()));
+ m_pObject->callFunction(m_pObject,"sizeHintRequestEvent",tipret,&params);
+ if (tipret->isArray())
+ {
+ if (tipret->array()->size()==2)
+ {
+ kvs_int_t w,h;
+ if (tipret->array()->at(0)->asInteger(w) && tipret->array()->at(1)->asInteger(h))return QSize(w,h);
+ }
+ }
+ return QWidget::sizeHint();
+}
+
+
+
+const Qt::WidgetAttribute widgetattributes_cod[] = {
+ Qt::WA_OpaquePaintEvent,
+ Qt::WA_NoSystemBackground,
+ Qt::WA_PaintOnScreen,
+ Qt::WA_NoMousePropagation
+};
+
+const char * const widgetattributes_tbl[] = {
+ "opaquePaintEvent",
+ "noSystemBackground",
+ "paintOnScreen",
+ "noMousePropagation"
+};
+
+#define widgetattributes_num (sizeof(widgetattributes_tbl) / sizeof(widgetattributes_tbl[0]))
+
+const QPalette::ColorRole colorrole_cod[] = {
+ QPalette::Window,
+ QPalette::Background,
+ QPalette::WindowText,
+ QPalette::Foreground,
+ QPalette::Base,
+ QPalette::AlternateBase,
+ QPalette::Text,
+ QPalette::Button,
+ QPalette::ButtonText,
+ QPalette::BrightText,
+ QPalette::Highlight,
+ QPalette::HighlightedText
+};
+
+const char * const colorrole_tbl[] = {
+ "Window",
+ "Background",
+ "WindowText",
+ "Foreground",
+ "Base",
+ "AlternateBase",
+ "Text",
+ "Button",
+ "ButtonText",
+ "BrightText",
+ "Highlight",
+ "HighlightedText"
+};
+
+#define colorrole_num (sizeof(colorrole_tbl) / sizeof(colorrole_tbl[0]))
+
+
+const Qt::WindowType widgettypes_cod[] = {
+ Qt::Window,
+ Qt::Dialog,
+ Qt::Popup,
+ Qt::Desktop,
+ Qt::WindowTitleHint,
+ Qt::WindowStaysOnTopHint,
+ Qt::WindowSystemMenuHint,
+ Qt::WindowMinimizeButtonHint,
+ Qt::WindowMaximizeButtonHint,
+ Qt::SubWindow,
+ Qt::FramelessWindowHint
+};
+
+
+const char * const widgettypes_tbl[] = {
+ "Window",
+ "Dialog",
+ "Popup",
+ "Desktop",
+ "Title",
+ "StaysOnTop",
+ "SysMenu",
+ "Minimize",
+ "Maximize",
+ "Subwindow",
+ "FramelessWindow"
+};
+
+
+#define widgettypes_num (sizeof(widgettypes_tbl) / sizeof(widgettypes_tbl[0]))
+
+
+#define QT_WIDGET_TABFOCUS Qt::TabFocus
+#define QT_WIDGET_CLICKFOCUS Qt::ClickFocus
+#define QT_WIDGET_STRONGFOCUS Qt::StrongFocus
+#define QT_WIDGET_NOFOCUS Qt::NoFocus
+/*
+ @doc: widget
+ @keyterms:
+ widget object class
+ @title:
+ widget class
+ @type:
+ class
+ @short:
+ Base class for all widgets
+ @inherits:
+ [class]object[/class]
+ @description:
+ This object class is the rappresentation of a widget.
+ All the other widget-type classes inherit from this one.
+ @functions:
+ !fn: $show()
+ Shows this widget and the children.
+ See also [classfnc]$hide[/classfnc]() and [classfnc]$isVisible[/classfnc].
+ !fn: $hide()
+ Hides this widget (and conseguently all the children).
+ See also [classfnc]$show[/classfnc]() and [classfnc]$isVisible[/classfnc].
+ !fn: $repaint()
+ Repaints the widget directly by calling [classfnc]$paintEvent[/classfnc]() immediately.
+ !fn: $update([<x:ingeter>,<y:integer>,<width:integer>,<height:integer>])
+ Updates enterily the widget or a rectangle.
+ This function does not cause an immediate [classfnc]$paintEvent[/classfnc](); instead it schedules a paint event for processing when KVIrc returns to the main event loop.
+ !fn: $x()
+ Returns the x coordinate of the upper-left corner
+ of this widget relative to the parent widget,
+ or to the desktop if this widget is a toplevel one.
+ !fn: $y()
+ Returns the y coordinate of the uspper-left corner
+ of this widget relative to the parent widget,
+ or to the desktop if this widget is a toplevel one.
+ !fn: $width()
+ Returns the width of this widget in pixels.
+ !fn: $height()
+ Returns the height of this widget in pixels.
+ !fn: $geometry()
+ Returns the widget geometry in this form:[br]
+ x, y, width, height.
+ !fn: $setGeometry(<x_or_array>,[<y>,<width>,<heigth>])
+ Sets the geometry of this widget. <x> and <y> are relative
+ to the parent widget or to the desktop (if this widget is
+ a toplevel one). All the parameters are in pixels.
+ !fn: $setMinimumWidth(<value>)
+ Sets the minimum width of this widget to <value>.
+ The user will not be able to resize the widget to a smaller
+ value. This value is also used by the [class:layout]layout class[/class].
+ !fn: $setMinimumHeight(<value>)
+ Sets the minimum height of this widget to <value>.
+ The user will not be able to resize the widget to a smaller
+ value. This value is also used by the [class:layout]layout class[/class].
+ !fn: $setMaximumWidth(<value>)
+ Sets the maximum width of this widget to <value>.
+ The user will not be able to resize the widget to a bigger
+ value. This value is also used by the [class:layout]layout class[/class].
+ !fn: $setMaximumHeight(<value>)
+ Sets the maximum height of this widget to <value>.
+ The user will not be able to resize the widget to a bigger
+ value. This value is also used by the [class:layout]layout class[/class].
+ !fn: $move(<x_or_array>[,<y>])
+ Moves this widget to the coordinate <x> and <y> relative to its
+ parent widget (or the desktop if this widget is a toplevel one).
+ This is equivalent to [classfnc]$setGeometry[/classfnc](<x>,<y>,
+ [classfnc]$width[/classfnc](),[classfnc]$height[/classfnc]()).
+ !fn: $resize(<w_or_array>,[height])
+ Changes the widget's width to <width> and height to <height>.
+ See also [classfnc]$setGeometry[/classfnc]().
+ !fn: $isEnabled()
+ Returns '1' if the widget is enabled, '0' otherwise.
+ See also [classfnc:widget]$setEnabled[/classfnc]().
+ !fn: $setEnabled(<bool>)
+ Sets the widget state to enabled or disabled if <bool> is 1 or 0 respectively.
+ A disabled widget does not receive keyboard nor mouse input.
+ !fn: $setWindowTitle(<text>)
+ Sets the title of this widget to <text>.
+ This is meaningful for toplevel widgets only.
+ !fn: $setToolTip(<tooltip_text>)
+ Set the tooltip of this widget; the text can contain HTML formatting.
+ !fn: $windowTitle()
+ Returns the title text of this widget.
+ !fn: $isTopLevel()
+ Returns '1' if this widget is a toplevel (parentless) one,
+ '0' otherwise.
+ !fn: $isVisible()
+ Returns '1' if this widget is currently visible (read: is managed
+ by the window manager and displayed by the X server; the widget
+ may be hidden behind other widgets). If the widget is not visible
+ this function returns '0'.
+ See also [classfnc]$show[/classfnc]() and [classfnc]$hide[/classfnc]().
+ !fn: $raise()
+ Moves this widget to the top of the stack of the widgets relative
+ to its parent. See also [classfnc]$lower[/classfnc].
+ !fn: $lower()
+ Moves this widget to the bottom of the stack of the widgets relative
+ to its parent. See also [classfnc]$raise[/classfnc]
+ !fn: $hasFocus()
+ Returns '1' if this widget has the keyboard focus.
+ See also [classfnc]$setFocus[/classfnc].
+ !fn: $setFocus()
+ Sets this widget to be the one that receives keyboard events.
+ See also [classfnc]$hasFocus[/classfnc]
+ !fn: $parentWidget()
+ Returns the object id of the parent widget, or '0' if this
+ widget is a toplevel one.
+ !fn: $backgroundColor()
+ Returns the background color of this widget in hexadecimal
+ html-like format. For example, for a black bacground you will get
+ the string "000000", for a red one, "FF0000", for a white one
+ "FFFFFF". See also [classfnc]$setBackgroundColor[/classfnc]()
+ !fn: $setBackgroundColor(<rgb(hex string)_array(red:integer,green:integer,blue_integer)_or_red>,[geen:integer],[blue:integer])
+ Sets the background color of this widget to <rgb_value>:valid values are:
+ - hex string: must be a string with 6 hexadecimal digits (like the ones used to
+ specify colors in html pages). The first two digits specify
+ the RED component, the third and fourth digit specify the GREEN component
+ and the last two specify the BLUE component.
+ For example "FFFF00" means full red, full green and no blue that gives
+ a yellow color, "808000" designates a brown color (dark yellow),
+ "A000A0" is a kind of violet.
+ - array(red:integer,green:integer,blue:integer)
+ - red:integer,green:integer,blue:integer.
+ See also [classfnc]$foregroundColor[/classfnc].
+ !fn: $setForegroundColor(<rgb(hex string)_array(red:integer,green:integer,blue_integer)_or_red>,[geen:integer],[blue:integer])
+ Sets the foreground color of this widget to <rgb_value>:valid values are:
+ - hex string: must be a string with 6 hexadecimal digits (like the ones used to
+ specify colors in html pages). The first two digits specify
+ the RED component, the third and fourth digit specify the GREEN component
+ and the last two specify the BLUE component.
+ For example "FFFF00" means full red, full green and no blue that gives
+ a yellow color, "808000" designates a brown color (dark yellow),
+ "A000A0" is a kind of violet.
+ - array(red:integer,green:integer,blue:integer)
+ - red:integer,green:integer,blue:integer.
+ See also [classfnc]$foregroundColor[/classfnc].
+ !fn: $foregroundColor()
+ Returns the foreground color of this widget in hexadecimal
+ html-like format.
+ See also [classfnc]$setForegroundColor[/classfnc].
+ !fn: $setMouseTracking(<bool>)
+ Enables or disables the mouse tracking if <bool> is '1' or '0' respectively.
+ When mouse tracking is enabled you will receive mouse move events
+ even if no button is pressed, otherwise you will receive it only
+ when a mouse button is being pressed (so after a mousePressEvent).
+ !fn: $mousePressEvent(<button>,<x>,<y>)
+ This function is called when a mouse button is pressed while
+ the cursor is in this widget. <button> is 0 if the pressed button
+ is the left one, 1 if the button is the right one and 2 if it is the middle one.
+ The <x> and <y> coordinates are relative to this widget upper-left corner
+ and are expressed in pixels.
+ If you call "[cmd]setreturn[/cmd] 1" you will stop the internal processing
+ of this event. The default implementation does nothing.
+ !fn: $mouseReleaseEvent(<button>,<x>,<y>)
+ This function is called when a mouse button is released while
+ the cursor is in this widget. <button> is 0 if the released button
+ is the left one, 1 if the button is the right one and 2 if it is the middle one.
+ The <x> and <y> coordinates are relative to this widget upper-left corner
+ and are expressed in pixels.
+ If you call "[cmd]setreturn[/cmd] 1" you will stop the internal processing
+ of this event. The default implementation does nothing.
+ !fn: $mouseDoubleClickEvent(<button>,<x>,<y>)
+ This function is called when a mouse button is double clicked while
+ the cursor is in this widget. <button> is 0 if the double clicked button
+ is the left one, 1 if the button is the right one and 2 if it is the middle one.
+ The <x> and <y> coordinates are relative to this widget upper-left corner
+ and are expressed in pixels.
+ If you call "[cmd]setreturn[/cmd] 1" you will stop the internal processing
+ of this event. The default implementation does nothing.
+ !fn: $mouseMoveEvent(<button>,<x>,<y>)
+ This function is called when the mouse cursor moves inside this widget.
+ <button> is 0 if the pressed button
+ is the left one, 1 if the button is the right one and 2 if it is the middle one.
+ The special value of -1 indicates that no button is being pressed.
+ The <x> and <y> coordinates are relative to this widget upper-left corner
+ and are expressed in pixels.
+ Normally you will receive this event only if a mouse button is being pressed
+ while moving. If you want to receive it also when the mouse buttons are not
+ pressed, call [classfnc]$setMouseTracking[/classfnc]().
+ If you call "[cmd]return[/cmd]$true" you will stop the internal processing
+ of this event. The default implementation does nothing.
+ !fn: $focusInEvent()
+ This function is called when this widget gains keyboard focus.
+ If you call "[cmd]return[/cmd] $true" you will stop the internal processing
+ of this event. The default implementation does nothing.
+ !fn: $focusOutEvent()
+ This function is called when this widget looses keyboard focus.
+ If you call "[cmd]return[/cmd] $true" you will stop the internal processing
+ of this event. The default implementation does nothing.
+ !fn: $mouseLeaveEvent()
+ This function is called when the mouse leaves this widget.
+ If you call "[cmd]return[/cmd] $true" you will stop the internal processing
+ of this event. The default implementation does nothing.
+ !fn: $mouseEnterEvent()
+ This function is called when the mouse enters this widget.
+ If you call "[cmd]return[/cmd] $true" you will stop the internal processing
+ of this event. The default implementation does nothing.
+ !fn: $showEvent()
+ This function is called when this widget is being shown.
+ If you call "[cmd]return[/cmd] $true" you will stop the internal processing
+ of this event. The default implementation does nothing.
+ !fn: $hideEvent()
+ This function is called when this widget is being hidden.
+ If you call "[cmd]return[/cmd] $true" you will stop the internal processing
+ of this event. The default implementation does nothing.
+ !fn: $closeEvent()
+ This function is called when this widget is going to be closed.
+ If you call "[cmd]return[/cmd] $true" you will ignore the close event.
+ The default implementation does nothing.
+ !fn: $resizeEvent()
+ This function is called immediately after this widget has been resized.
+ If you call "[cmd]return[/cmd] $true" you will stop the internal processing
+ of this event. The default implementation does nothing.
+ !fn: $moveEvent()
+ This function is called immediately after this widget has been moved.
+ If you call "[cmd]return[/cmd] $true" you will stop the internal processing
+ of this event. The default implementation does nothing.
+ !fn: $paintEvent(<painter:h_object>,<rect_x:integer>,<rect_y:integer>,<width:integer>,<height:integer>)
+ This event handler can be reimplemented to repaint all or part of the widget.
+ It's needed by the Painter class.
+ It's very useful for drawing flicker free animations or low level special graphic effects.
+ The framework will pass as parameter a [class]painter[/class]object. You don't need to begin/end/delete the painter.
+ If you call "[cmd]return[/cmd] $true" you will stop the internal processing
+ of this event.
+ The default implementation does nothing.
+ !fn: $setParent(<widget_object:parent>)
+ Sets the parent of the widget to parent
+ !fn: $setWindowIcon(<image_id>)
+ Sets the icon for this widget. This is meaningful only for toplevel widgets.
+ See the [doc:image_id]image identifier[/doc] documentation for the explaination
+ of the <image_id> parameter.
+ !fn: $setBackgroundImage(<image_id>)
+ Sets the background image for this widget.
+ See the [doc:image_id]image identifier[/doc] documentation for the explaination
+ of the <image_id> parameter.
+ For some kind of widgets, setting a background pixmap may have no effect or
+ have strange results. Experiment with it.
+ To unset the background image call [classfnc]$setBackgroundColor[/classfnc]
+ !fn: $setFont(<family:string>,<size:integer>[,<style1:string>, <style2:string>, ...])
+ Set the font's family,size and style, valid flag for style are:[br]
+ - italic, bold, underline, overline, strikeout, fixedpitch [br]
+ !fn: $setWFlags(<flag1>, <flag2>, ...)
+ This function sets widget flags, given as parameters.
+ Valid flags are:
+ [pre]
+ TopLevel - indicates that this widget is a top-level widget[br]
+ Dialog - indicates that this widget is a top-level window that should be decorated as a dialog[br]
+ Desktop - indicates that this widget is the desktop[br]
+ Popup - indicates that this widget is a popup top-level window[br]
+ Title - gives the window a title bar[br]
+ StaysOnTop - window stays on top [br]
+ SysMenu - add a windows system menu[br]
+ Minimize - add a minimize button for the sysmenu style[br]
+ Maximize - add a maximixe button for the sysmenu style[br]
+ [/pre]
+ !fn: $centerToScreen()
+ Centers the window on the screen (useful only for toplevel widgets).[br]
+ The best place to call this function is in $showEvent()
+ !fn: $setFocusPolicy(<key focus>)
+ Sets the way the widget accepts keyboard focus.[br]
+ Valid parameters are:
+ [pre]
+ - TabFocus; (widget accepts keyboard focus by tabbing)[br]
+ - ClickFocus; (widget accepts keyboard focus by clicking)[br]
+ - StrongFocus; (widget accepts both tabbing/clicking)[br]
+ - No Focus; (widget does not accept focus at all; this is the default value)[br]
+ [/pre]
+ !fn: $keyPressEvent(<key>)
+ If widget accepts keyboard focus (see [classfnc]$setFocusPolicy[/classfnc] ) this function handles for keys;
+ In its argument the key pressed.[br]
+ Special keys are:
+ [pre]
+ - Return [br]
+ - Enter [br]
+ - Down (cursor arrow down) [br]
+ - Up (cursor arrow up) [br]
+ - Left (cursor arrow left) [br]
+ - Right (cursor arrow right) [br]
+ - Shift [br]
+ - Ctrl [br]
+ - Alt [br]
+ - CapsLock [br]
+ - Backspace [br]
+ - Del [br]
+ - Esc [br]
+ - 0 [br]
+ - 1 [br]
+ - 2 [br]
+ - 3 [br]
+ - 4 [br]
+ - 5 [br]
+ - 6 [br]
+ - 7 [br]
+ - 8 [br]
+ - 9 [br]
+ - + [br]
+ - - [br]
+ - * [br]
+ - / [br]
+ - ( [br]
+ - ) [br]
+ - = [br]
+ - . [br]
+ - ^ [br]
+
+ [/pre]
+ !fn: $mapFromGlobal(<x>,<y>)
+ Translates the global screen coordinate pos to widget coordinates.
+ !fn: $mapToGlobal(<x>,<y>)
+ Translates widget coordinates into the global screen coordinate pos.
+ !fn: integer $globalCursorX()
+ Return the x coordinate of mouse pointer global position.
+ !fn: integer $globalCursorY()
+ Return the y coordinate of the mo>use pointer global position.
+ !fn: <tip:string> $maybeTipEvent(<x_tip_pos:integer>,<y_tip_pos:integer>)
+ This event handler is called when a eventualy tip is going to be show.
+ You can be reimplement this event and set a dynamic tool tip by using "[cmd]return[/cmd] <tooltip_string>".
+ If a tooltip has setted with [classfnc]$setTooltip[/classfnc] the dynamic tooltip will be ignored.
+ The default implementation does nothing.
+
+ !fn: integer $setAttribute(<string>,<bool_flag>)
+ Sets the attribute attribute on this widget if on is true; otherwise clears the attribute.
+ Valid attributes are:
+ OpaquePaintEvent - Indicates that the widget paints all its pixels when it receives a paint event.
+ NoSystemBackground - Indicates that the widget has no background, i.e. when the widget receives paint events, the background is not automatically repainted.
+ PaintOnScreen - Indicates that the widget wants to draw directly onto the screen.
+ NoMousePropagation - Prohibits mouse events from being propagated to the widget's parent.
+ !fn: $setStyleSheet(<string>)
+ Set a style sheet for this widget.
+ !fn: $customContextMenuRequestedEvent(<x_mouse_pos:integer>,<y_mouse_pos:integer>)
+ This event is triggered when the user has requested a context menu on the widget (i.e. right clicking on the widget).
+ The x,y coordinates are widget relative.
+ !fn: $array(<red:integer,green:integer,blue:integer) $colorPalette(<color_role:string><color_group:string>)
+ Returns the color in color_group(disabled, active or inactive), used for color_role.
+ Valid color role are:
+ Window - A general background color.
+ WindowText - A general foreground color.
+ Base - Used as the background color for text.
+ Text - Used as foreground color for the text.
+ Button - The general button background color.
+ ButtonText - A foreground color used with the Button color.
+ Highlight - A color to indicate a selected item or the current item.
+ HighlightedText - A text color that contrasts with Highlight.
+
+ !fn: <short_cut_id:integer> $setKeyShortCut(<key:char>)
+ Adds a shortcut whith key. A [classfnc]$shortCutEvent[/classfnc] will be triggered when the user will press alt+key.
+ !fn: $shortCutEvent(<shortcut_id:integer>)
+ This function will be called when a shortcut key has been triggered.
+ You must reimplement this event to manage a shortcut system in a custom widget.
+ The default implementation does nothing.
+
+ !fn: $insertIntoStatusBar(<index:unsigned integer>)
+ Insert the widget into the statusbar at the given index.
+ If index is out of range, the widget is appended.
+ See also [classfnc]$removeFromStatusBar[/classfnc]().
+ !fn: $removeFromStatusBar()
+ Remove the widget from statusbar.
+ @examples:
+ [example]
+ %widget = $new(widget)
+ # This is the main container for other elements.
+
+ %widget->$setWindowTitle("This is the widget title")
+
+ %box=$new(vbox,%widget)
+ %layout=$new(layout,%widget)
+ %layout->$addWidget(%box,0,0)
+
+ %label = $new(label,%box)
+ %label->$setText("This is a text label")
+
+ %lineedit = $new(lineedit,%box)
+ %lineedit->$setText("This is a lineedit")
+
+ %multilineedit = $new(multilineedit,%box)
+ %multilineedit->$setText("This is a multilineedit")
+
+ %checkbox = $new(checkbox,%box)
+ %checkbox->$setText("This is a checkbox")
+
+ %combobox = $new(combobox,%box)
+ %combobox->$insertItem("This is a combobox")
+ %combobox->$insertItem("This is a combobox's item")
+
+ %listbox = $new(listbox,%box)
+ %listbox->$insertItem("This is a listbox item")
+ %listbox->$insertItem("This is another item")
+
+ %radiobutton = $new(radiobutton,%box)
+ %radiobutton->$setText("This is a radiobutton")
+
+ %button = $new(button, %box)
+ %button->$setText("Close me")
+
+ privateimpl(%widget,closeMe)
+ {
+ delete $$
+ }
+ objects.connect %button clicked %widget closeMe
+
+ %widget->$show()
+ [/example]
+
+*/
+
+
+
+
+//
+// If you never call c->error(), c->warning() (your function never fails)
+// and never call a function that can call c->error() or c->warning()
+// you can avoid ENTER_STACK_FRAME and c->leaveStackFrame()
+// Just return true.
+// c->error() should be called only in really critical situations
+// (we have to define better "critical situation")
+// if possible, leave the things go after just a c->warning()
+//
+
+ // widget() will be never 0 in THIS class
+ // but in derived classes WILL be
+ // ... now that I think about it, it
+ // may happen that widget() will be zero here too:
+ // If the Qt "physical" widget gets destroyed
+ // by some external factor (for example when children
+ // of a wrapper widget destroyed by KVIrc).
+ //
+ // as a convention:
+ // if widget() can be 0 in a class
+ // the user must have a function to check it
+ // (sth as object::$hasObject() could do the trick)
+ // obviously this will happen only in well defined cases
+ // as in a qtwrapper not yet wrapped or failed to wrap (so
+ // qtwrapper::$wrap() returned '0' for example)
+ // or after the widget has been destroyed...
+ // if widget() is 0, the functions perform no actions
+ // return no errors and results that have to be assumed
+ // as invalid (this allows the minimum overhead: if widget()
+
+//=============================================================================================================
+
+
+
+KVSO_BEGIN_REGISTERCLASS(KvsObject_widget,"widget","object")
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setParent)
+ // apparence
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,show)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,hide)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,update)
+
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,repaint)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,isTopLevel)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,isVisible)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,raise)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,lower)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setEnabled)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,isEnabled)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setMouseTracking)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setWindowTitle)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setWindowTitle)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,windowTitle)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,windowTitle)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,hasFocus)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setFocus)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setToolTip)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setWFlags)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setWindowIcon)
+ // fonts
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,fontDescent)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,fontAscent)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,fontMetricsWidth)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,fontMetricsHeight)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setFont)
+ // geometry
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,screenResolution)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,centerToScreen)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,geometry)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setGeometry)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,mapToGlobal)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,mapFromGlobal)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,y)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,x)
+
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,globalCursorX)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,globalCursorY)
+
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,width)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,height)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setMinimumWidth)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setMinimumHeight)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setMaximumWidth)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setMaximumHeight)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,move)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,sizeHint)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,resize)
+
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setFocusPolicy)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,addWidgetToWrappedLayout)
+
+ // colors and image
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setForegroundColor)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setBackgroundColor)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setBackgroundImage)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,backgroundColor)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,foregroundColor)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setMask)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setAttribute)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,colorPalette)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setStyleSheet)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setKeyShortcut)
+
+ // statusbar
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,insertIntoStatusBar)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,removeFromStatusBar)
+ // events
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"mousePressEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"mouseReleaseEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"mouseDoubleClickEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"mouseMoveEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"focusInEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"focusOutEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"mouseLeaveEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"mouseEnterEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"showEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"hideEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"closeEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"resizeEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"moveEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"paintEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"keyPressEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"sizeHintRequestEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"maybeTipEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"shortCutEvent")
+ KVSO_REGISTER_STANDARD_NOTHINGRETURN_HANDLER(KvsObject_widget,"customContextMenuRequestedEvent")
+
+#ifdef COMPILE_WEBKIT_SUPPORT
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setWebView)
+#endif
+KVSO_END_REGISTERCLASS(KvsObject_widget)
+
+
+KVSO_BEGIN_CONSTRUCTOR(KvsObject_widget,KviKvsObject)
+KVSO_END_CONSTRUCTOR(KvsObject_widget)
+KVSO_BEGIN_DESTRUCTOR(KvsObject_widget)
+emit aboutToDie();
+// if (webview) delete webview;
+KVSO_END_CONSTRUCTOR(KvsObject_widget)
+
+bool KvsObject_widget::init(KviKvsRunTimeContext *c,KviKvsVariantList *)
+{
+ setObject(new KviKvsWidget(this,parentScriptWidget()));
+ m_pContext=c;
+ widget()->setObjectName(getName());
+ return true;
+}
+
+bool KvsObject_widget::eventFilter(QObject *o,QEvent *e)
+{
+ if(o == object())
+ {
+ bool ret=false;
+ int aparam;
+ bool brokenhandler=false;
+ KviKvsVariant *retv=new KviKvsVariant(ret);
+
+ switch(e->type())
+ {
+ case QEvent::ContextMenu:
+ {
+ QPoint iPoint=widget()->mapFromGlobal(((QContextMenuEvent *)e)->globalPos());
+ KviKvsVariantList params(new KviKvsVariant((kvs_int_t)iPoint.x()),new KviKvsVariant((kvs_int_t)iPoint.y()));
+ callFunction(this,"customContextMenuRequestedEvent",retv,&params);
+ break;
+ }
+ case QEvent::Shortcut:
+ {
+ KviKvsVariantList params(new KviKvsVariant((kvs_int_t)((QShortcutEvent *)e)->shortcutId()));
+ callFunction(this,"shortCutEvent",retv,&params);
+ break;
+ }
+ case QEvent::ToolTip:
+ {
+ QHelpEvent *helpEvent = static_cast<QHelpEvent *>(e);
+ QPoint point=helpEvent->pos();
+ QString szTooltip="";
+ KviKvsVariant *tipret=new KviKvsVariant(szTooltip);
+ KviKvsVariantList params(new KviKvsVariant((kvs_int_t)point.x()),new KviKvsVariant((kvs_int_t)point.y()));
+ callFunction(this,"maybeTipEvent",tipret,&params);
+ tipret->asString(szTooltip);
+ if (!szTooltip.isEmpty()) QToolTip::showText(helpEvent->globalPos(),szTooltip);
+ break;
+ }
+ case QEvent::Paint:
+ {
+
+ QRect rect=((QPaintEvent *)e)->rect();
+ KviKvsObjectClass * pClass = KviKvsKernel::instance()->objectController()->lookupClass("painter");
+ KviKvsVariantList params;
+ KviKvsObject * pObject = pClass->allocateInstance(0,"internalpainter",m_pContext,&params);
+ QPainter p(widget());
+ ((KvsObject_painter *)pObject)->setInternalPainter(&p);
+ p.setClipRect(rect);
+ kvs_hobject_t hobj=pObject->handle();
+ KviKvsVariantList params2(new KviKvsVariant(hobj),new KviKvsVariant((kvs_int_t)rect.x()),new KviKvsVariant((kvs_int_t)rect.y()),new KviKvsVariant((kvs_int_t)rect.width()),new KviKvsVariant((kvs_int_t)rect.height()));
+ callFunction(this,"paintEvent",retv,&params2);
+ pObject=KviKvsKernel::instance()->objectController()->lookupObject(hobj);
+ if (pObject) pObject->dieNow();
+ break;
+ }
+
+ case QEvent::KeyPress:
+ {
+
+
+ QString tmp="";
+ switch(((QKeyEvent *)e)->key())
+ {
+ case Qt::Key_Return:
+ tmp="Return";
+ break;
+ case Qt::Key_Down:
+ tmp="Down";
+ break;
+ case Qt::Key_Up:
+ tmp="Up";
+ break;
+ case Qt::Key_Left:
+ tmp="Left";
+ break;
+ case Qt::Key_Right:
+ tmp="Right";
+ break;
+ case Qt::Key_Shift:
+ tmp="Shift";
+ break;
+ case Qt::Key_Control:
+ tmp="Ctrl";
+ break;
+ case Qt::Key_Alt:
+ tmp="Alt";
+ break;
+ case Qt::Key_CapsLock:
+ tmp="CapsLock";
+ break;
+ case Qt::Key_Backspace:
+ tmp="Backspace";
+ break;
+ case Qt::Key_Delete:
+ tmp="Del";
+ break;
+ case Qt::Key_Enter:
+ tmp="Enter";
+ break;
+ case Qt::Key_Escape:
+ tmp="Esc";
+ break;
+ case Qt::Key_0:
+ tmp="0";
+ case Qt::Key_1:
+ tmp="1";
+ break;
+ case Qt::Key_2:
+ tmp="2";
+ break;
+ case Qt::Key_3:
+ tmp="3";
+ break;
+ case Qt::Key_4:
+ tmp="4";
+ break;
+ case Qt::Key_5:
+ tmp="5";
+ break;
+ case Qt::Key_6:
+ tmp="6";
+ break;
+ case Qt::Key_7:
+ tmp="7";
+ break;
+ case Qt::Key_8:
+ tmp="8";
+ break;
+ case Qt::Key_9:
+ tmp="9";
+ break;
+ case Qt::Key_Plus:
+ tmp="+";
+ break;
+ case Qt::Key_Minus:
+ tmp="-";
+ break;
+ case Qt::Key_Slash:
+ tmp="/";
+ break;
+ case Qt::Key_Asterisk:
+ tmp="*";
+ break;
+ case Qt::Key_Period:
+ tmp=".";
+ break;
+ case Qt::Key_ParenLeft:
+ tmp="(";
+ break;
+ case Qt::Key_ParenRight:
+ tmp=")";
+ break;
+ case Qt::Key_Equal:
+ tmp="=";
+ break;
+ case Qt::Key_AsciiCircum:
+ tmp="^";
+ break;
+ default:
+ if (!((QKeyEvent *)e)->text().isEmpty()) tmp = ((QKeyEvent *)e)->text();
+ }
+
+ KviKvsVariantList params(new KviKvsVariant(tmp));
+ callFunction(this,"keyPressEvent",0,&params);
+ }
+ break;
+ case QEvent::MouseButtonPress:
+ {
+ if(((QMouseEvent *)e)->button() & Qt::LeftButton)aparam = 0;
+ else {
+ if(((QMouseEvent *)e)->button() & Qt::RightButton)aparam = 1;
+ else aparam = 2;
+ }
+ KviKvsVariantList lParams;
+ lParams.append(new KviKvsVariant((kvs_int_t)aparam));
+ lParams.append(new KviKvsVariant((kvs_int_t)((QMouseEvent *)e)->pos().x()));
+ lParams.append(new KviKvsVariant((kvs_int_t)((QMouseEvent *)e)->pos().y()));
+ if (!callFunction(this,"mousePressEvent",0,&lParams)) brokenhandler = true; // ignore results of a broken event handler
+ }
+ break;
+ case QEvent::MouseButtonRelease:
+ {
+ if(((QMouseEvent *)e)->button() & Qt::LeftButton)aparam = 0;
+ else {
+ if(((QMouseEvent *)e)->button() & Qt::RightButton)aparam = 1;
+ else aparam = 2;
+ }
+ KviKvsVariantList lParams;
+ lParams.append(new KviKvsVariant((kvs_int_t)aparam));
+ lParams.append(new KviKvsVariant((kvs_int_t)((QMouseEvent *)e)->pos().x()));
+ lParams.append(new KviKvsVariant((kvs_int_t)((QMouseEvent *)e)->pos().y()));
+ if (!callFunction(this,"mouseReleaseEvent",0,&lParams)) brokenhandler = true; // ignore results of a broken event handler
+ }
+ break;
+ case QEvent::MouseButtonDblClick:
+ {
+ if(( (QMouseEvent *)e)->button() & Qt::LeftButton)aparam = 0;
+ else {
+ if(((QMouseEvent *)e)->button() & Qt::RightButton)aparam = 1;
+ else aparam = 2;
+ }
+ KviKvsVariantList lParams;
+ lParams.append(new KviKvsVariant((kvs_int_t)aparam));
+ lParams.append(new KviKvsVariant((kvs_int_t)((QMouseEvent *)e)->pos().x()));
+ lParams.append(new KviKvsVariant((kvs_int_t)((QMouseEvent *)e)->pos().y()));
+ if (!callFunction(this,"mouseDoubleClickEvent",0,&lParams)) brokenhandler = true; // ignore results of a broken event handler
+ }
+
+ break;
+ case QEvent::MouseMove:
+ {
+ if( (((QMouseEvent *)e)->button()) & Qt::LeftButton) aparam = 0;
+ else
+ {
+ if(((QMouseEvent *)e)->button() & Qt::RightButton)aparam = 1;
+ else
+ {
+ if(((QMouseEvent *)e)->button() & Qt::MidButton)aparam = 2;
+ else aparam = -1;
+ }
+ }
+ KviKvsVariantList lParams;
+ lParams.append(new KviKvsVariant((kvs_int_t)aparam));
+ lParams.append(new KviKvsVariant((kvs_int_t)((QMouseEvent *)e)->pos().x()));
+ lParams.append(new KviKvsVariant((kvs_int_t)((QMouseEvent *)e)->pos().y()));
+ if (!callFunction(this,"mouseMoveEvent",0,&lParams)) brokenhandler = true; // ignore results of a broken event handler
+ }
+ break;
+ case QEvent::FocusIn:
+ if(!callFunction(this,"focusInEvent",retv,0))brokenhandler = true;
+ break;
+ case QEvent::FocusOut:
+ if(!callFunction(this,"focusOutEvent",retv,0))brokenhandler = true;
+ break;
+ case QEvent::Resize:
+ if(!callFunction(this,"resizeEvent",retv,0))brokenhandler = true;
+ break;
+ case QEvent::Move:
+ if(!callFunction(this,"moveEvent",retv,0))brokenhandler = true;
+ break;
+ case QEvent::Close:
+ if(!callFunction(this,"closeEvent",retv,0))brokenhandler = true;
+ break;
+ case QEvent::Enter:
+ if(!callFunction(this,"mouseEnterEvent",retv,0))brokenhandler = true;
+ break;
+ case QEvent::Leave:
+ if(!callFunction(this,"mouseLeaveEvent",retv,0))brokenhandler = true;
+ break;
+ case QEvent::Show:
+ if(!callFunction(this,"showEvent",retv,0))brokenhandler = true;
+ break;
+ case QEvent::Hide:
+ if(!callFunction(this,"hideEvent",retv,0))ret =false;
+ break;
+ default:
+ return KviKvsObject::eventFilter(o,e);
+ break;
+
+ }
+ if (!brokenhandler) ret=retv->asBoolean();
+ delete retv;
+ return ret;
+ /*
+ if(ret.length() == 1)
+ {
+ if(KviQString::equalCI("1",ret))return true;
+ }
+ */
+ }
+
+ return KviKvsObject::eventFilter(o,e);
+}
+
+
+KVSO_CLASS_FUNCTION(widget,show)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QWidget *wid=widget();
+ wid->show();
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,update)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ kvs_int_t iX,iY,iW,iH;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("x",KVS_PT_INT,KVS_PF_OPTIONAL,iX)
+ KVSO_PARAMETER("y",KVS_PT_INT,KVS_PF_OPTIONAL,iY)
+ KVSO_PARAMETER("w",KVS_PT_INT,KVS_PF_OPTIONAL,iW)
+ KVSO_PARAMETER("h",KVS_PT_INT,KVS_PF_OPTIONAL,iH)
+ KVSO_PARAMETERS_END(c)
+ if (iW || iH) widget()->update(QRect(iX,iY,iW,iH));
+ else
+ widget()->update();
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setEnabled)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ bool bEnabled;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("bEnabled",KVS_PT_BOOL,0,bEnabled)
+ KVSO_PARAMETERS_END(c)
+ widget()->setEnabled(bEnabled);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,isEnabled)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ c->returnValue()->setBoolean(widget()->isEnabled());
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,fontDescent)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QFontMetrics fm = widget()->fontMetrics();
+ int d = fm.descent();
+ c->returnValue()->setInteger(d);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,fontAscent)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QFontMetrics fm = widget()->fontMetrics();
+ int d = fm.ascent();
+ c->returnValue()->setInteger(d);
+ return true;
+
+}
+
+KVSO_CLASS_FUNCTION(widget,repaint)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ widget()->repaint();
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,fontMetricsWidth)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QString m_szStr;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("string",KVS_PT_STRING,0,m_szStr)
+ KVSO_PARAMETERS_END(c)
+ c->returnValue()->setInteger(widget()->fontMetrics().width(m_szStr));
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,fontMetricsHeight)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ int fm = widget()->fontMetrics().height();
+ c->returnValue()->setInteger(fm);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,screenResolution)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ KviKvsArray * a = new KviKvsArray();
+ QRect rect = g_pApp->desktop()->screenGeometry(g_pApp->desktop()->primaryScreen());
+ a->set(0,new KviKvsVariant((kvs_int_t)rect.width()));
+ a->set(1,new KviKvsVariant((kvs_int_t)rect.height()));
+ c->returnValue()->setArray(a);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,geometry)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QRect r = widget() ? widget()->geometry() : QRect(0,0,0,0);
+ KviKvsArray * a = new KviKvsArray();
+ a->set(0,new KviKvsVariant((kvs_int_t)r.x()));
+ a->set(1,new KviKvsVariant((kvs_int_t)r.y()));
+ a->set(2,new KviKvsVariant((kvs_int_t)r.width()));
+ a->set(3,new KviKvsVariant((kvs_int_t)r.height()));
+ c->returnValue()->setArray(a);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setGeometry)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ KviKvsVariant * pXOrArray;
+ kvs_int_t iX,iY,iW,iH;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("x_or_array",KVS_PT_VARIANT,0,pXOrArray)
+ KVSO_PARAMETER("y",KVS_PT_INT,KVS_PF_OPTIONAL,iY)
+ KVSO_PARAMETER("w",KVS_PT_INT,KVS_PF_OPTIONAL,iW)
+ KVSO_PARAMETER("h",KVS_PT_INT,KVS_PF_OPTIONAL,iH)
+ KVSO_PARAMETERS_END(c)
+
+ // this is a little bit tricky: we accept two syntax versions
+ // (this is something like a C++ overload)
+ // $setGeometry(x,y,w,h) OR $setGeometry($array(x,y,w,h))
+
+ // For this purpose we ask the parameter processing engine
+ // to return the first parameter as variant and we manually check its data type
+ // We also set the following three parameters as optional
+ // so the user can either pass one or four parameters.
+
+ // Because of this trick, we must check the parameter consistency
+ // manually.
+
+ if(pXOrArray->isArray())
+ {
+ // the user has passed a complete geometry array as first parameter
+ // make sure it has at least 4 elements
+ if(pXOrArray->array()->size() < 4)
+ {
+ c->error(__tr2qs_ctx("The array passed as parameter must contain at least 4 elements","objects"));
+ return false;
+ }
+ // we must also manually extract the data from the array
+ KviKvsVariant * pX = pXOrArray->array()->at(0);
+ KviKvsVariant * pY = pXOrArray->array()->at(1);
+ KviKvsVariant * pW = pXOrArray->array()->at(2);
+ KviKvsVariant * pH = pXOrArray->array()->at(3);
+ // note that some of the array elements may be empty in fact
+ // a null value returned by KviKvsArray::at() means that
+ // no parameter was set in that place
+ if(!(pX && pY && pW && pH))
+ {
+ c->error(__tr2qs_ctx("One of the geometry array parameters is empty","objects"));
+ return false;
+ }
+ if(!(pX->asInteger(iX) && pY->asInteger(iY) && pW->asInteger(iW) && pH->asInteger(iH)))
+ {
+ c->error(__tr2qs_ctx("One of the geometry array parameters didn't evaluate to an integer","objects"));
+ return false;
+ }
+ // ok: the params are correct
+ } else {
+ // The user passed something else as first parameter
+ // make sure that it is an integer.
+ // Also make sure that we really have 4 parameters
+ if(c->params()->count() < 4)
+ {
+ c->error(__tr2qs_ctx("$setGeometry() requires either an array as first parameter or four integers","objects"));
+ return false;
+ }
+ if(!pXOrArray->asInteger(iX))
+ {
+ c->error(__tr2qs_ctx("The first parameter didn't evaluate to an array nor an integer","objects"));
+ return false;
+ }
+ // ok: the params are correct
+ }
+
+ widget()->setGeometry(iX,iY,iW,iH);
+
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,mapToGlobal)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ kvs_int_t iX,iY;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("x",KVS_PT_INT,0,iX)
+ KVSO_PARAMETER("y",KVS_PT_INT,0,iY)
+ KVSO_PARAMETERS_END(c)
+ QPoint point=widget()->mapToGlobal(QPoint(iX,iY));
+ KviKvsArray * a = new KviKvsArray();
+ a->set(0,new KviKvsVariant((kvs_int_t)point.x()));
+ a->set(1,new KviKvsVariant((kvs_int_t)point.y()));
+ c->returnValue()->setArray(a);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,mapFromGlobal)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ kvs_int_t iX,iY;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("x",KVS_PT_INT,0,iX)
+ KVSO_PARAMETER("y",KVS_PT_INT,0,iY)
+ KVSO_PARAMETERS_END(c)
+ QPoint point=widget()->mapFromGlobal(QPoint(iX,iY));
+ KviKvsArray * a = new KviKvsArray();
+ a->set(0,new KviKvsVariant((kvs_int_t)point.x()));
+ a->set(1,new KviKvsVariant((kvs_int_t)point.y()));
+ c->returnValue()->setArray(a);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,centerToScreen)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QRect rect = g_pApp->desktop()->screenGeometry(g_pApp->desktop()->primaryScreen());
+ widget()->move((rect.width() - widget()->width())/2,(rect.height() - widget()->height())/2);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setForegroundColor)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ KviKvsVariant * pColArray;
+ kvs_int_t iColR,iColG,iColB;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("hex_rgb_array_or_red",KVS_PT_VARIANT,0,pColArray)
+ KVSO_PARAMETER("green",KVS_PT_INT,KVS_PF_OPTIONAL,iColG)
+ KVSO_PARAMETER("blue",KVS_PT_INT,KVS_PF_OPTIONAL,iColB)
+ KVSO_PARAMETERS_END(c)
+ if(pColArray->isArray())
+ {
+ if(pColArray->array()->size() < 3)
+ {
+ c->error(__tr2qs_ctx("The array passed as parameter must contain at least 3 elements","objects"));
+ return false;
+ }
+ KviKvsVariant * pColR = pColArray->array()->at(0);
+ KviKvsVariant * pColG = pColArray->array()->at(1);
+ KviKvsVariant * pColB = pColArray->array()->at(2);
+
+ if(!(pColR && pColG && pColB))
+ {
+ c->error(__tr2qs_ctx("One of the colors array parameters is empty","objects"));
+ return false;
+ }
+
+ if(!(pColR->asInteger(iColR) && pColG->asInteger(iColG) && pColB->asInteger(iColB)))
+ {
+ c->error(__tr2qs_ctx("One of the colors array parameters didn't evaluate to an integer","objects"));
+ return false;
+ }
+ }
+ else
+ {
+ QColor color;
+ if (c->params()->count()==1)
+ {
+ if(pColArray->isString())
+ {
+ QString szColor;
+ pColArray->asString(szColor);
+ // maybe a color name?
+ color.setNamedColor(szColor);
+ if (!color.isValid())
+ {
+ // itsn't a color name: let try with an hex triplette
+ color.setNamedColor("#"+szColor);
+ if (!color.isValid())
+ {
+ c->warning(__tr2qs_ctx("Not a valid color !","objects"));
+ return true;
+ }
+ }
+ }
+ else {
+ c->warning(__tr2qs_ctx("Not a valid color !","objects"));
+ return true;
+ }
+ QPalette p = widget()->palette();
+ p.setColor(widget()->foregroundRole(), color);
+ widget()->setPalette(p);
+ return true;
+ }
+ if(c->params()->count() < 3)
+ {
+ c->error(__tr2qs_ctx("$setForegroundColor requires either an array as first parameter, one hex string or color name, or three integers","objects"));
+ return false;
+ }
+ if(!pColArray->asInteger(iColR))
+ {
+ c->error(__tr2qs_ctx("The first parameter didn't evaluate to an array nor an integer","objects"));
+ return false;
+ }
+ }
+
+ QPalette p = widget()->palette();
+ p.setColor(widget()->foregroundRole(), QColor(iColR,iColG,iColB));
+ widget()->setPalette(p);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setBackgroundColor)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ KviKvsVariant * pColArray;
+ kvs_int_t iColR,iColG,iColB;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("name_hex_rgb_array_or_red",KVS_PT_VARIANT,0,pColArray)
+ KVSO_PARAMETER("green",KVS_PT_INT,KVS_PF_OPTIONAL,iColG)
+ KVSO_PARAMETER("blue",KVS_PT_INT,KVS_PF_OPTIONAL,iColB)
+ KVSO_PARAMETERS_END(c)
+ if(pColArray->isArray())
+ {
+ if(pColArray->array()->size() < 3)
+ {
+ c->error(__tr2qs_ctx("The array passed as parameter must contain at least 3 elements","objects"));
+ return false;
+ }
+ KviKvsVariant * pColR = pColArray->array()->at(0);
+ KviKvsVariant * pColG = pColArray->array()->at(1);
+ KviKvsVariant * pColB = pColArray->array()->at(2);
+
+ if(!(pColR && pColG && pColB))
+ {
+ c->error(__tr2qs_ctx("One of the colors array parameters is empty","objects"));
+ return false;
+ }
+
+ if(!(pColR->asInteger(iColR) && pColG->asInteger(iColG) && pColB->asInteger(iColB)))
+ {
+ c->error(__tr2qs_ctx("One of the colors array parameters didn't evaluate to an integer","objects"));
+ return false;
+ }
+ }
+ else
+ {
+ QColor color;
+ if (c->params()->count()==1)
+ {
+ if(pColArray->isString())
+ {
+ QString szColor;
+ pColArray->asString(szColor);
+ // maybe a color name?
+ color.setNamedColor(szColor);
+ if (!color.isValid())
+ {
+ // itsn't a color name: let try with an hex triplette
+ color.setNamedColor("#"+szColor);
+ if (!color.isValid())
+ {
+ c->warning(__tr2qs_ctx("Not a valid color !","objects"));
+ return true;
+ }
+ }
+ }
+ else {
+ c->warning(__tr2qs_ctx("Not a valid color !","objects"));
+ return true;
+ }
+ QPalette p = widget()->palette();
+ p.setColor(widget()->backgroundRole(), color);
+ widget()->setPalette(p);
+ return true;
+ }
+ if(c->params()->count() < 3)
+ {
+ c->error(__tr2qs_ctx("$setBackgroundColor requires either an array as first parameter, one hex string or color name, or three integers","objects"));
+ return false;
+ }
+ if(!pColArray->asInteger(iColR))
+ {
+ c->error(__tr2qs_ctx("The first parameter didn't evaluate to an array nor an integer","objects"));
+ return false;
+ }
+ }
+
+ QPalette p = widget()->palette();
+ p.setColor(widget()->backgroundRole(), QColor(iColR,iColG,iColB));
+ widget()->setPalette(p);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,backgroundColor)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QColor col = widget()->palette().color(widget()->backgroundRole());
+ KviKvsArray * a = new KviKvsArray();
+ a->set(0,new KviKvsVariant((kvs_int_t)col.red()));
+ a->set(1,new KviKvsVariant((kvs_int_t)col.green()));
+ a->set(2,new KviKvsVariant((kvs_int_t)col.blue()));
+ c->returnValue()->setArray(a);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,foregroundColor)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QColor col = widget()->palette().color(widget()->foregroundRole());
+ KviKvsArray * a = new KviKvsArray();
+ a->set(0,new KviKvsVariant((kvs_int_t)col.red()));
+ a->set(1,new KviKvsVariant((kvs_int_t)col.green()));
+ a->set(2,new KviKvsVariant((kvs_int_t)col.blue()));
+ c->returnValue()->setArray(a);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,parentWidget)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ if(parentScriptWidget()) c->returnValue()->setHObject(parentObject()->handle());
+ else
+ c->returnValue()->setHObject((kvs_hobject_t)0);
+ return true;
+
+}
+
+KVSO_CLASS_FUNCTION(widget,setMouseTracking)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ bool bEnabled;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("bEnabled",KVS_PT_BOOL,0,bEnabled)
+ KVSO_PARAMETERS_END(c)
+ widget()->setMouseTracking(bEnabled);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setWindowTitle)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QString szWindowTitle;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("title",KVS_PT_STRING,0,szWindowTitle)
+ KVSO_PARAMETERS_END(c)
+ widget()->setWindowTitle(szWindowTitle);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,windowTitle)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ c->returnValue()->setString(widget()->windowTitle().toUtf8().data());
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,isTopLevel)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ c->returnValue()->setBoolean(widget()->isTopLevel());
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,isVisible)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ c->returnValue()->setBoolean(widget()->isVisible());
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,raise)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ widget()->raise();
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,lower)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ widget()->lower();
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,hasFocus)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ c->returnValue()->setBoolean(widget()->hasFocus());
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setFocus)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ widget()->setFocus();
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,hide)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ widget()->hide();
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setToolTip)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QString szTooltip;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("tooltip",KVS_PT_STRING,0,szTooltip)
+ KVSO_PARAMETERS_END(c)
+ widget()->setToolTip(szTooltip);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,x)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ c->returnValue()->setInteger(widget()->x());
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,y)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ c->returnValue()->setInteger(widget()->y());
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,width)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ c->returnValue()->setInteger(widget()->width());
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,height)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ c->returnValue()->setInteger(widget()->height());
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setMinimumWidth)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ kvs_int_t iW;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("w",KVS_PT_INT,0,iW)
+ KVSO_PARAMETERS_END(c)
+ widget()->setMinimumWidth(iW);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setMinimumHeight)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ kvs_int_t iH;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("h",KVS_PT_INT,0,iH)
+ KVSO_PARAMETERS_END(c)
+ widget()->setMinimumHeight(iH);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setMaximumWidth)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ kvs_int_t iW;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("w",KVS_PT_INT,0,iW)
+ KVSO_PARAMETERS_END(c)
+ widget()->setMaximumWidth(iW);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setMaximumHeight)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ kvs_int_t iH;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("h",KVS_PT_INT,0,iH)
+ KVSO_PARAMETERS_END(c)
+ widget()->setMaximumHeight(iH);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,move)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ kvs_int_t iX,iY;
+ KviKvsVariant * pXOrArray;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("x_or_array",KVS_PT_VARIANT,0,pXOrArray)
+ KVSO_PARAMETER("y",KVS_PT_INT,KVS_PF_OPTIONAL,iY)
+ KVSO_PARAMETERS_END(c)
+ if(pXOrArray->isArray())
+ {
+ if(pXOrArray->array()->size() < 2)
+ {
+ c->error(__tr2qs_ctx("The array passed as parameter must contain at least 2 elements","objects"));
+ return false;
+ }
+ KviKvsVariant * pX = pXOrArray->array()->at(0);
+ KviKvsVariant * pY = pXOrArray->array()->at(1);
+ if(!(pX && pY))
+ {
+ c->error(__tr2qs_ctx("One of the move array parameters is empty","objects"));
+ return false;
+ }
+ if(!(pX->asInteger(iX) && pY->asInteger(iY)))
+ {
+ c->error(__tr2qs_ctx("One of the move array parameters didn't evaluate to an integer","objects"));
+ return false;
+ }
+ // ok: the params are correct
+ } else {
+ if(c->params()->count() < 2)
+ {
+ c->error(__tr2qs_ctx("$move() requires either an array as first parameter or two integers","objects"));
+ return false;
+ }
+ if(!pXOrArray->asInteger(iX))
+ {
+ c->error(__tr2qs_ctx("The first parameter didn't evaluate to an array nor an integer","objects"));
+ return false;
+ }
+ // ok: the params are correct
+ }
+ widget()->move(QPoint(iX,iY));
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,sizeHint)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QSize sizehint =widget()->sizeHint();
+ KviKvsArray * a = new KviKvsArray();
+ a->set(0,new KviKvsVariant((kvs_int_t)sizehint.width()));
+ a->set(1,new KviKvsVariant((kvs_int_t)sizehint.height()));
+ c->returnValue()->setArray(a);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,resize)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ KviKvsVariant * pWOrArray;
+ kvs_int_t iW,iH;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("width_or_array",KVS_PT_VARIANT,0,pWOrArray)
+ KVSO_PARAMETER("height",KVS_PT_INT,KVS_PF_OPTIONAL,iH)
+ KVSO_PARAMETERS_END(c)
+ if(pWOrArray->isArray())
+ {
+ if(pWOrArray->array()->size() < 2)
+ {
+ c->error(__tr2qs_ctx("The array passed as parameter must contain at least 2 elements","objects"));
+ return false;
+ }
+ KviKvsVariant * pW = pWOrArray->array()->at(0);
+ KviKvsVariant * pH = pWOrArray->array()->at(1);
+ if(!(pW && pH))
+ {
+ c->error(__tr2qs_ctx("One of the resize array parameters is empty","objects"));
+ return false;
+ }
+ if(!(pW->asInteger(iW) && pH->asInteger(iH)))
+ {
+ c->error(__tr2qs_ctx("One of the resize array parameters didn't evaluate to an integer","objects"));
+ return false;
+ }
+ // ok: the params are correct
+ } else {
+ if(c->params()->count() < 2)
+ {
+ c->error(__tr2qs_ctx("$resize() requires either an array as first parameter or two integers","objects"));
+ return false;
+ }
+ if(!pWOrArray->asInteger(iW))
+ {
+ c->error(__tr2qs_ctx("The first parameter didn't evaluate to an array nor an integer","objects"));
+ return false;
+ }
+ // ok: the params are correct
+ }
+ widget()->resize(QSize(iW,iH));
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setFocusPolicy)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QString szMode;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("focus",KVS_PT_STRING,0,szMode)
+ KVSO_PARAMETERS_END(c)
+ if(KviQString::equalCI(szMode,"TabFocus"))
+ widget()->setFocusPolicy(QT_WIDGET_TABFOCUS);
+ else
+ if(KviQString::equalCI(szMode,"ClickFocus"))
+ widget()->setFocusPolicy(QT_WIDGET_CLICKFOCUS);
+ else
+ if(KviQString::equalCI(szMode,"StrongFocus"))
+ widget()->setFocusPolicy(QT_WIDGET_STRONGFOCUS);
+ else
+ if(KviQString::equalCI(szMode,"NoFocus"))
+ widget()->setFocusPolicy(QT_WIDGET_NOFOCUS);
+ else c->warning(__tr2qs_ctx("Invalid parameters","objects"));
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setWFlags)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QStringList wflags;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("widget_flags",KVS_PT_STRINGLIST,KVS_PF_OPTIONAL,wflags)
+ KVSO_PARAMETERS_END(c)
+ Qt::WindowFlags flag,sum=0;
+ for ( QStringList::Iterator it = wflags.begin(); it != wflags.end(); ++it )
+ {
+ flag=0;
+ for(unsigned int j = 0; j < widgettypes_num; j++)
+ {
+ if(KviQString::equalCI((*it), widgettypes_tbl[j]))
+ {
+ flag=widgettypes_cod[j];
+ break;
+ }
+ }
+ if(flag)
+ sum = sum | flag;
+ else
+ c->warning(__tr2qs_ctx("Unknown widget flag '%Q'","objects"),&(*it));
+ }
+ widget()->setWindowFlags(sum);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setFont)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QString szFamily;
+ QStringList szListStyle;
+ kvs_int_t iSize;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("size",KVS_PT_INTEGER,0,iSize)
+ KVSO_PARAMETER("family",KVS_PT_STRING,0,szFamily)
+ KVSO_PARAMETER("style",KVS_PT_STRINGLIST,KVS_PF_OPTIONAL,szListStyle)
+ KVSO_PARAMETERS_END(c)
+ QFont font=widget()->font();
+ if(!szFamily.isEmpty()) font.setFamily(szFamily);
+ if(iSize) font.setPointSize(iSize);
+ QString szStyle;
+ for(int i=0;i<szListStyle.length();i++)
+ {
+ szStyle=szListStyle.at(i);
+ if(KviQString::equalCI(szStyle,"italic")) font.setItalic(TRUE);
+ else if(KviQString::equalCI(szStyle,"bold")) font.setBold(TRUE);
+ else if(KviQString::equalCI(szStyle,"underline"))font.setUnderline(TRUE);
+ else if(KviQString::equalCI(szStyle,"overline")) font.setOverline(TRUE);
+ else if(KviQString::equalCI(szStyle,"strikeout"))font.setStrikeOut(TRUE);
+ else if(KviQString::equalCI(szStyle,"fixedpitch")) font.setFixedPitch(TRUE);
+ else c->warning(__tr2qs_ctx("Unknown style '%Q'","objects"),&szStyle);
+ }
+ widget()->setFont(font);
+ return true;
+}
+KVSO_CLASS_FUNCTION(widget,addWidgetToWrappedLayout)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ KviKvsObject *ob;
+ kvs_uint_t uCol,uRow;
+ kvs_hobject_t hObject;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("widget",KVS_PT_HOBJECT,0,hObject)
+ KVSO_PARAMETER("col",KVS_PT_UNSIGNEDINTEGER,0,uCol)
+ KVSO_PARAMETER("row",KVS_PT_UNSIGNEDINTEGER,0,uRow)
+ KVSO_PARAMETERS_END(c)
+ ob=KviKvsKernel::instance()->objectController()->lookupObject(hObject);
+ if (!ob)
+ {
+ c->warning(__tr2qs_ctx("Widget parameter is not an object","objects"));
+ return true;
+ }
+ if (!ob->object())
+ {
+ c->warning(__tr2qs_ctx("Widget parameter is not a valid object","objects"));
+ return true;
+ }
+ QLayout *lay=widget()->layout();
+ if (!lay)
+ {
+ c->warning(__tr2qs_ctx("No Layout associated to the widget ","objects"));
+ return true;
+ }
+ if(!ob->object()->isWidgetType())
+ {
+ c->warning(__tr2qs_ctx("Can't add a non-widget object","objects"));
+ return true;
+ }
+ lay->addWidget(((QWidget *)(ob->object())));
+ return true;
+}
+KVSO_CLASS_FUNCTION(widget,setParent)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ KviKvsObject *ob;
+ kvs_hobject_t hObject;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("widget",KVS_PT_HOBJECT,KVS_PF_OPTIONAL,hObject)
+ KVSO_PARAMETERS_END(c)
+ ob=KviKvsKernel::instance()->objectController()->lookupObject(hObject);
+ if(!widget()) return true;
+ if(!ob)
+ {
+ widget()->setParent(0);
+ return true;
+ }
+ else
+ if(!ob->object()->isWidgetType())
+ {
+ c->warning(__tr2qs_ctx("Parent must be a widget object","objects"));
+ return true;
+ }
+ widget()->setParent(((QWidget *)(ob->object())));
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setWindowIcon)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QString icon;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("icon",KVS_PT_STRING,0,icon)
+ KVSO_PARAMETERS_END(c)
+ QPixmap * pix = g_pIconManager->getImage(icon);
+ if(pix)widget()->setWindowIcon(QIcon(*pix));
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setBackgroundImage)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QString image;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("image",KVS_PT_STRING,0,image)
+ KVSO_PARAMETERS_END(c)
+ QPixmap * pix = g_pIconManager->getImage(image);
+ if(pix){
+ QPalette palette=widget()->palette();
+ palette.setBrush(widget()->backgroundRole(), QBrush(*pix));
+ widget()->setPalette(palette);
+ }
+ else
+ {
+ c->warning(__tr2qs_ctx("The pixmap is not valid","objects"));
+ return true;
+ }
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,globalCursorX)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ c->returnValue()->setInteger(QCursor::pos().x());
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,globalCursorY)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ c->returnValue()->setInteger(QCursor::pos().y());
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setMask)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ KviKvsObject *obj;
+ kvs_hobject_t hObject;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("pixmap",KVS_PT_HOBJECT,0,hObject)
+ KVSO_PARAMETERS_END(c)
+ obj=KviKvsKernel::instance()->objectController()->lookupObject(hObject);
+ if (!obj)
+ {
+ c->warning(__tr2qs_ctx("Pixmap parameter is not an object","objects"));
+ return true;
+ }
+ if (!obj->inheritsClass("pixmap"))
+ {
+ c->warning(__tr2qs_ctx("Pixmap object required","objects"));
+ return true;
+ }
+ QPixmap * pm=((KvsObject_pixmap *)obj)->getPixmap();
+ QBitmap mask(pm->mask());
+ if (mask.isNull()) c->warning(__tr2qs_ctx("Null mask","objects"));
+ widget()->setMask(mask);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setAttribute)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QString attribute;
+ bool bFlag;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("widget_atribute",KVS_PT_STRING,0,attribute)
+ KVSO_PARAMETER("bool_flag",KVS_PT_BOOLEAN,0,bFlag)
+ KVSO_PARAMETERS_END(c)
+ bool found=false;
+ unsigned int j = 0;
+ for(; j < widgetattributes_num; j++)
+ {
+ if(KviQString::equalCI(attribute, widgetattributes_tbl[j]))
+ {
+ found=true;
+ break;
+ }
+ }
+ if(found)widget()->setAttribute(widgetattributes_cod[j],bFlag);
+ else c->warning(__tr2qs_ctx("Unknown widget attribute '%Q'","objects"),&attribute);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,colorPalette)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QString szColorRole,szColorGroup;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("color_role",KVS_PT_STRING,0,szColorRole)
+ KVSO_PARAMETER("color_group",KVS_PT_STRING,0,szColorGroup)
+ KVSO_PARAMETERS_END(c)
+ bool found=false;
+ unsigned int j = 0;
+ for(; j < colorrole_num; j++)
+ {
+ if(KviQString::equalCI(szColorRole, colorrole_tbl[j]))
+ {
+ found=true;
+ break;
+ }
+ }
+ if(!found)
+ {
+ c->warning(__tr2qs_ctx("Unknown Color Role '%Q'","objects"),&szColorRole);
+ return true;
+ }
+ QPalette::ColorGroup cg;
+ if (KviQString::equalCI(szColorGroup,"Disabled")) cg=QPalette::Disabled;
+ else if (KviQString::equalCI(szColorGroup,"Active")) cg=QPalette::Active;
+ else if (KviQString::equalCI(szColorGroup,"Inactive")) cg=QPalette::Inactive;
+ else
+ {
+ c->warning(__tr2qs_ctx("Unknown Color Group '%Q'","objects"),&szColorGroup);
+ return true;
+ }
+ QColor col=widget()->palette().color(cg,colorrole_cod[j]);
+ KviKvsArray * a = new KviKvsArray();
+ a->set(0,new KviKvsVariant((kvs_int_t)col.red()));
+ a->set(1,new KviKvsVariant((kvs_int_t)col.green()));
+ a->set(2,new KviKvsVariant((kvs_int_t)col.blue()));
+ c->returnValue()->setArray(a);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setStyleSheet)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QString szStyleSheet;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("style_sheet",KVS_PT_STRING,0,szStyleSheet)
+ KVSO_PARAMETERS_END(c)
+ widget()->setStyleSheet(szStyleSheet);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,setKeyShortcut)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QString szKey;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("key",KVS_PT_STRING,0,szKey)
+ KVSO_PARAMETERS_END(c)
+ szKey.prepend("&");
+ c->returnValue()->setInteger((kvs_int_t)widget()->grabShortcut(QKeySequence::mnemonic(szKey)));
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,insertIntoStatusBar)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ qDebug("instertinto");
+ if (g_pFrame->mainStatusBar())
+ g_pFrame->mainStatusBar()->insertPermanentWidgetAtTheEnd(widget(),0);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(widget,removeFromStatusBar)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ g_pFrame->statusBar()->removeWidget(widget());
+ return true;
+}
+
+
+
+#ifdef COMPILE_WEBKIT_SUPPORT
+KVSO_CLASS_FUNCTION(widget,setWebView)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ QString szUrl;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("text",KVS_PT_STRING,0,szUrl)
+ KVSO_PARAMETERS_END(c)
+ m_pWebview = new QWebView(widget());
+ m_pWebview->load(QUrl(szUrl));
+ m_pWebview->show();
+ //if (widget()) g_pFrame->statusBar()->removeWidget(widget());
+ return true;
+}
+#endif //COMPILE_WEBKIT_SUPPORT
+
+#ifndef COMPILE_USE_STANDALONE_MOC_SOURCES
+#include "m_KvsObject_widget.moc"
+#endif //COMPILE_USE_STANDALONE_MOC_SOURCES