Ejemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="sender"></param>
        /// <param name="evtArgs"></param>
        internal override void handleEvent(EventType type, Object sender, EventArgs evtArgs)
        {
            MapData mapData = ControlsMap.getInstance().getMapData(sender);

            if (mapData == null)
            {
                return;
            }

            var contextIDGuard = new Manager.ContextIDGuard(Manager.GetContextID(mapData.getControl()));

            try
            {
                switch (type)
                {
                case EventType.RESIZE:
                    GuiUtils.setBackgroundImage((Control)sender);
                    break;

                case EventType.MOUSE_WHEEL:
                case EventType.MOUSE_DOWN:
                case EventType.MOUSE_UP:
                case EventType.MOUSE_DBLCLICK:
                    //case EventType.KeyDown:
                    break;
                }
            }
            finally
            {
                contextIDGuard.Dispose();
            }

            DefaultHandler.getInstance().handleEvent(type, sender, evtArgs);
        }
Ejemplo n.º 2
0
        /// <summary> according to shell return the last control that was in focus
        /// it can be on subform \ sub sub form....
        /// </summary>
        /// <param name="shell">
        /// </param>
        /// <returns>
        /// </returns>
        private GuiMgControl getLastFocusedControl(Object menuObj)
        {
            Form         form         = menuObjToForm(menuObj);
            ControlsMap  controlsMap  = ControlsMap.getInstance();
            GuiMgControl guiMgControl = null;

            if (form.IsMdiContainer)
            {
                Form activeMDIChild = GuiUtils.GetActiveMDIChild(form);
                if (activeMDIChild != null)
                {
                    form = activeMDIChild;
                }
            }

            if (form.ActiveControl != null)
            {
                MapData mapData = controlsMap.getMapData(form.ActiveControl);
                if (mapData != null)
                {
                    guiMgControl = mapData.getControl();
                }
            }

            return(guiMgControl);
        }
Ejemplo n.º 3
0
        /// <summary>this is an entry point for all objects handlers</summary>
        /// <param name="objectHashCode"> hash code of the object</param>
        /// <param name="eventName"> event name</param>
        /// <param name="parameters">event parameters</param>
        /// <returns></returns>
        public static void handleDotNetEvent(int objectHashCode, String eventName, Object[] parameters)
        {
            Object       invokedObject     = DNManager.getInstance().DNObjectEventsCollection.getObject(objectHashCode);
            GuiMgControl mgControl         = null;
            bool         raiseRuntimeEvent = true;

            Manager.ContextIDGuard contextIDGuard = null;

            // If Object is a control and it is 'our' control (not created dynamically, decided by .Tag)
            if (invokedObject is Control && ((Control)invokedObject).Tag != null)
            {
                ControlsMap controlsMap = ControlsMap.getInstance();
                MapData     mapData     = controlsMap.getControlMapData((Control)invokedObject);
                if (mapData == null)
                {
                    return;
                }

                mgControl = mapData.getControl();

                contextIDGuard = new Manager.ContextIDGuard(Manager.GetContextID(mgControl));
                //first execute default magic handling of event
                EventType type = DNControlEvents.getStandardEvent(eventName);
                if (type != EventType.NONE && parameters.Length == 2)
                {
                    DefaultHandler.getInstance().handleEvent(type, invokedObject, (EventArgs)parameters[1]);
                }

                if (eventName == "KeyDown") //QCR #736734 KeyDown is handled from Filter.cs on WM_KEYDOWN - do not duplicate the event
                {
                    raiseRuntimeEvent = false;
                }
                else if (eventName == "Disposed")
                {
                    // a Disposed event for a control can't be handled as a runtime-event after the task/form are closed
                    raiseRuntimeEvent = false;
                }
                else
                {
                    // raise .NET runtime event only if hooked from the application (i.e. have a handler in the task)
                    List <String> applicationHookedDNeventsNames = ((TagData)((Control)invokedObject).Tag).ApplicationHookedDNeventsNames;
                    if (applicationHookedDNeventsNames == null || !applicationHookedDNeventsNames.Contains(eventName))
                    {
                        raiseRuntimeEvent = false;
                    }
                }
            }

            // raise .NET event
            if (raiseRuntimeEvent)
            {
                Events.OnDotNetEvent(invokedObject, mgControl, eventName, parameters);
            }

            if (contextIDGuard != null)
            {
                contextIDGuard.Dispose();
            }
        }
Ejemplo n.º 4
0
        //<summary> get tree child from tree item</summary>
        //<param name="treeNode"></param>
        //<returns></returns>
        internal static TreeChild getTreeChild(TreeNode treeNode)
        {
            Debug.Assert(Misc.IsGuiThread());
            ControlsMap controlsMap = ControlsMap.getInstance();
            MapData     mapdata     = controlsMap.getMapData(treeNode);
            TreeChild   child       = (TreeChild)controlsMap.object2Widget(mapdata.getControl(), mapdata.getIdx());

            return(child);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// gets last value of the control that was previously in focus
        /// is working only for text controls
        /// used to restore control's edited value after current record is replaced by different chunk
        /// </summary>
        /// <returns></returns>
        private LastFocusedVal GetLastEditedFocusedVal()
        {
            Form           form           = GuiUtilsBase.FindForm(_tableControl);
            LastFocusedVal lastFocusedVal = null;
            MapData        mapData        = ((TagData)form.Tag).LastFocusedMapData;

            if (mapData != null && mapData.getControl() != null)
            {
                Object obj = controlsMap.object2Widget(mapData.getControl(), mapData.getIdx());
                var    lg  = obj as LogicalControl;
                if (lg != null && lg.ContainerManager == this)
                {
                    GuiMgControl mgControl = mapData.getControl();
                    if (mgControl.isTextControl())
                    {
                        lastFocusedVal = new LastFocusedVal(mgControl, mapData.getIdx(), lg.Text);
                    }
                }
            }
            return(lastFocusedVal);
        }
Ejemplo n.º 6
0
        private void handlePredefinedEvent(string eventName, object sender, EventArgs e)
        {
            GuiMgControl guiMgCtrl = null;

            Debug.Assert(sender is Control && DNControlEvents.isPredefinedEvent(eventName));
            ControlsMap controlsMap = ControlsMap.getInstance();
            MapData     mapData     = controlsMap.getMapData(sender);

            if (mapData != null)
            {
                guiMgCtrl = mapData.getControl();
            }
            Events.OnDotNetEvent(sender, guiMgCtrl, eventName, new[] { sender, e });
        }
Ejemplo n.º 7
0
        /// <summary>handle dotnet event of .NET control</summary>
        /// <param name="eventName"></param>
        /// <param name="sender"></param>
        /// <param name="eventArgs"></param>
        /// <param name="mapData"></param>
        internal void handleEvent(String eventName, object sender, EventArgs eventArgs, MapData mapData)
        {
            GuiMgControl mgControl = null;

            if (mapData != null)
            {
                mgControl = mapData.getControl();
            }

            var contextIDGuard = new Manager.ContextIDGuard(Manager.GetContextID(mgControl));

            Events.OnDotNetEvent(sender, mgControl, eventName, new Object[] { sender, eventArgs });
            contextIDGuard.Dispose();
        }
Ejemplo n.º 8
0
        /// <summary>
        /// </summary>
        /// <param name="type"></param>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        internal override void handleEvent(EventType type, Object sender, EventArgs e)
        {
            ControlsMap  controlsMap = ControlsMap.getInstance();
            MgWebBrowser webBroswer  = (MgWebBrowser)sender;

            MapData mapData = controlsMap.getMapData(webBroswer);

            if (mapData == null)
            {
                return;
            }

            GuiMgControl guiMgCtrl      = mapData.getControl();
            var          contextIDGuard = new Manager.ContextIDGuard(Manager.GetContextID(guiMgCtrl));

            try
            {
                switch (type)
                {
                case EventType.GOT_FOCUS:
                    Events.OnFocus(guiMgCtrl, 0, false, false);
                    return;

                case EventType.DISPOSED:
                    break;

#if !PocketPC
                case EventType.STATUS_TEXT_CHANGED:
                    String statusText         = webBroswer.StatusText.Trim();
                    String previousStatusText = ((TagData)webBroswer.Tag).BrowserControlStatusText;
                    if (statusText.Length > 0 && !statusText.Equals(previousStatusText))
                    {
                        ((TagData)webBroswer.Tag).BrowserControlStatusText = statusText;
                        Events.OnBrowserStatusTxtChange(guiMgCtrl, statusText);
                    }
                    break;
#endif

                case EventType.EXTERNAL_EVENT:
                    ExternalEventArgs args = (ExternalEventArgs)e;
                    Events.OnBrowserExternalEvent(guiMgCtrl, args.Param);
                    break;
                }
            }
            finally
            {
                contextIDGuard.Dispose();
            }
            DefaultHandler.getInstance().handleEvent(type, sender, e);
        }
Ejemplo n.º 9
0
 /// <summary> </summary>
 internal override void handleEvent(EventType type, Object sender, EventArgs e)
 {
     if (type == EventType.DISPOSED)
     {
         ControlsMap   controlsMap   = ControlsMap.getInstance();
         ToolStripItem toolStripItem = (ToolStripItem)sender;
         MapData       mapData       = controlsMap.getMapData(sender);
         if (mapData != null)
         {
             GuiMgControl guiMgControl = mapData.getControl();
             toolStripItem.Tag = null;
             controlsMap.remove(guiMgControl, mapData.getIdx());
         }
     }
 }
Ejemplo n.º 10
0
        /// <summary>
        /// This function handles DN control value changed event.
        /// </summary>
        /// <param name="objectHashCode">object hash code.</param>
        public static void HandleDNControlValueChanged(int objectHashCode)
        {
            Object invokedObject = DNManager.getInstance().DNObjectEventsCollection.getObject(objectHashCode);

            // Get the gui control from the control's map.
            if (invokedObject is Control && ((Control)invokedObject).Tag != null)
            {
                ControlsMap controlsMap = ControlsMap.getInstance();
                MapData     mapData     = controlsMap.getControlMapData((Control)invokedObject);
                if (mapData != null)
                {
                    //Raise the event.
                    Events.OnDNControlValueChanged(mapData.getControl(), mapData.getIdx());
                }
            }
        }
Ejemplo n.º 11
0
 /// <summary>
 ///   default implementation of get editor control
 /// </summary>
 /// <returns></returns>
 public Control getEditorControl()
 {
     if (_supportEditor)
     {
         StaticControlEditor staticControlEditor = getEditor();
         Control             control             = staticControlEditor.Control;
         if (control != null)
         {
             MapData mapData = ControlsMap.getInstance().getMapData(control);
             if (mapData != null && ((LogicalControl)_lg).GuiMgControl == mapData.getControl())
             {
                 // this child has temporary editor
                 return(control);
             }
         }
     }
     return(null);
 }
Ejemplo n.º 12
0
        /// <summary> refresh temporary editor of static controls</summary>
        /// <param name="form"></param>
        internal static void refreshTmpEditor(Form form)
        {
            Editor editor = GuiUtils.GetTmpEditorFromTagData(form);

            if (editor != null && (!editor.isHidden()))
            {
                if (editor.Control != null)
                {
                    MapData mapData = ControlsMap.getInstance().getMapData(editor.Control);
                    Object  obj     = ControlsMap.getInstance().object2Widget(mapData.getControl(), mapData.getIdx());
                    //for now only refesh static text
                    LgText staticControl = obj as LgText;
                    if (staticControl != null && staticControl.RefreshNeeded)
                    {
                        ((LgText)staticControl).setProperties(editor.Control);
                    }
                }
            }
        }
Ejemplo n.º 13
0
        internal bool isLastFocussedControl()
        {
            bool   isLastFocussedCtrl = false;
            Editor editor             = GuiUtils.GetTmpEditorFromTagData(GuiUtils.FindForm(_containerControl));

            if (editor != null && editor is Editor)
            {
                Control control = editor.Control;
                if (control != null && !GuiUtilsBase.isDisposed(control))
                {
                    MapData mapData = ControlsMap.getInstance().getMapData(control);
                    if (mapData != null && GuiMgControl == mapData.getControl() && _mgRow == mapData.getIdx())
                    {
                        isLastFocussedCtrl = true;
                    }
                }
            }

            return(isLastFocussedCtrl);
        }
Ejemplo n.º 14
0
        internal override void handleEvent(EventType type, Object sender, EventArgs e)
        {
            Control     control     = (Control)sender;
            ControlsMap controlsMap = ControlsMap.getInstance();
            MapData     mapData     = controlsMap.getMapData(control);

            if (mapData == null)
            {
                return;
            }

            GuiMgControl ctrl = mapData.getControl();

            switch (type)
            {
#if PocketPC
            case EventType.ENABLED_CHANGED:
                ((TagData)control.Tag).TabControlPanel.Invalidate();
                break;
#else
            case EventType.SELECTING:
                ((TabControlCancelEventArgs)e).Cancel = true;
                ((TagData)control.Tag).SelectingIdx   = ((TabControl)control).SelectedIndex;
                GuiUtils.setSuggestedValueOfChoiceControlOnTagData(control, "" + ((TabControl)control).SelectedIndex);
                return;

            case EventType.MNEMONIC_KEY_PRESSED:
                Events.OnSelection(((MnemonicKeyPressedEventArgs)e).SelectedTabIndex.ToString(), ctrl, 0, false);
                return;
#endif
            case EventType.DISPOSED:
                if (control.Tag != null)
                {
                    ((TagData)control.Tag).TabControlPanel.Dispose();
                }
                return;
            }

            DefaultHandler.getInstance().handleEvent(type, sender, e);
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Fixed bug #:160305 & 427851, while control is child of frame set force refresh for w\h
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void newSplitter_MouseDown(object sender, MouseEventArgs e)
        {
            ControlsMap controlsMap = ControlsMap.getInstance();

            foreach (var ctrl in Controls)
            {
                //            Control ctrl = (Control)Controls[0];
                MapData mapData = controlsMap.getMapData(ctrl);
                if (mapData != null)
                {
                    GuiMgControl guiMgControl = mapData.getControl();
                    if (SplitterStyle == SPLITTER_STYLE_HORIZONTAL)
                    {
                        guiMgControl.ForceRefreshPropertyWidth = true;
                    }
                    else if (SplitterStyle == SPLITTER_STYLE_VERTICAL)
                    {
                        guiMgControl.ForceRefreshPropertyHight = true;
                    }
                }
            }
        }
Ejemplo n.º 16
0
        /// <summary> the method checks if double click event should be raised We can not use DoubleClick event, since it is possible that first click is
        /// performed on the container, and the second on loogical's control editor.</summary>
        /// <param name="mapData"></param>
        /// <returns></returns>
        internal bool isDoubleClick(MapData mapData)
        {
            if (!GuiUtils.isOwnerDrawControl(mapData.getControl()))
            {
                return(false);
            }
            bool ret  = false;
            long time = Misc.getSystemMilliseconds();
            long diff = time - lastClickTime;

            if (lastClicked != null && lastClicked.Equals(mapData) && diff < SystemInformation.DoubleClickTime)
            {
                // this is double click
                ret         = true;
                time        = -1;
                lastClicked = null;
            }
            else
            {
                lastClicked   = mapData;
                lastClickTime = time;
            }
            return(ret);
        }
Ejemplo n.º 17
0
        /// <summary></summary>
        /// <param name="type"></param>
        /// <param name="sender"></param>
        /// <param name="evtArgs"></param>
        internal override void handleEvent(EventType type, Object sender, EventArgs evtArgs)
        {
            ControlsMap controlsMap = ControlsMap.getInstance();
            Control     ctrl        = (Control)sender;
            MapData     mapData     = controlsMap.getMapData(ctrl);

            if (mapData == null)
            {
                return;
            }

            GuiMgControl mgControl = mapData.getControl();
            MgLinkLabel  linkLabel = ctrl as MgLinkLabel;

            var contextIDGuard = new Manager.ContextIDGuard(Manager.GetContextID(mgControl));

            try
            {
                if (linkLabel != null)
                {
                    switch (type)
                    {
                    case EventType.LINK_CLICKED:
                        LinkLabelLinkClickedEventArgs args = (LinkLabelLinkClickedEventArgs)evtArgs;
#if !PocketPC
                        if (args.Button == MouseButtons.Left)
#endif
                        // Mobile: we get here only with a left button click
                        OnLinkClicked(linkLabel, controlsMap, mapData, mgControl, true);
                        return;

                    case EventType.GOT_FOCUS:
                    case EventType.MOUSE_UP:
                        break;

                    case EventType.MOUSE_DOWN:
                        if (!linkLabel.Focused)
                        {
                            GuiUtils.saveFocusingControl(GuiUtils.FindForm(linkLabel), mapData);
                        }

                        break;

                    case EventType.MOUSE_ENTER:
                        linkLabel.OnHovering = true;
                        break;

                    case EventType.MOUSE_LEAVE:
                        linkLabel.OnHovering = false;
                        break;

                    case EventType.KEY_DOWN:
                        KeyEventArgs keyEventArgs = (KeyEventArgs)evtArgs;

                        if (KbdConvertor.isModifier(keyEventArgs.KeyCode))
                        {
                            return;
                        }

                        if (keyEventArgs.Modifiers == Keys.None && keyEventArgs.KeyCode == Keys.Space)
                        {
                            OnLinkClicked(linkLabel, controlsMap, mapData, mgControl, false);
                            return;
                        }
                        break;

                    case EventType.PRESS:
                        if (!linkLabel.Focused)
                        {
                            GuiUtils.saveFocusingControl(GuiUtils.FindForm(linkLabel), mapData);
                        }
                        break;

                    default:
                        break;
                    }
                }
            }
            finally
            {
                contextIDGuard.Dispose();
            }


            DefaultHandler.getInstance().handleEvent(type, sender, evtArgs);
        }
Ejemplo n.º 18
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <returns></returns>
        private bool OnkeyDown(Object sender, EventArgs e)
        {
            ControlsMap  controlsMap  = ControlsMap.getInstance();
            MgComboBox   comboBox     = (MgComboBox)sender;
            MapData      mapData      = controlsMap.getMapData(comboBox);
            bool         ignoreEvent  = false;
            bool         isDropped    = false;
            KeyEventArgs keyEventArgs = (KeyEventArgs)e;

            // Definition of the behavior (the same in on line)
            // ---------------------------------------------
            // When NOT Dropped :
            //                   page down or up : move to the next\prev record
            //                   up,down,left,right : move to the next\prev field
            //                   Home, End : select the first\end options in the popup (don't need to do nothing)
            // When Is Dropped :
            //                   page down or up : move to the next\prev page in the dropped
            //                   up,down,left,right : move to the next\prev option in the dropped
            //                   Home, End : select the first\end options in the popup(don't need to do nothing)

            TagData tg = ((TagData)comboBox.Tag);

            ((TagData)comboBox.Tag).HandleOnDropDownClosed = true;

            isDropped = comboBox.DroppedDown;

            //Fixed bug #:768284, unexpected behavior of .NET: when Dropped Down is open and press key (navigation\char)
            //                    and in the selection index change open message box\modal window,  we get selection index
            //                    change twice to the same control ignore the second time
            tg.IgnoreTwiceClick = false;
            if (isDropped)
            {
                tg.IgnoreTwiceClickWhenFromValueIs = GuiUtils.getValue(comboBox);
                tg.IgnoreTwiceClick = true;
            }

            switch (keyEventArgs.KeyCode)
            {
            case Keys.Left:
            case Keys.Right:
            case Keys.Down:
            case Keys.Up:
                //Check whether up/down arrow key is presses with ALT.
                if (eventForOpenClosePopup(keyEventArgs))
                {
                    //If combo is not dropped down, then open it, else will be closed.
                    if (!isDropped)
                    {
                        Events.OnComboDroppingDown(mapData.getControl(), mapData.getIdx());
                        keyEventArgs.Handled = true;
                    }
                }
                else
                {
                    keyEventArgs.Handled = true;
                }
                break;

            case Keys.PageUp:
            case Keys.PageDown:
            case Keys.Home:
            case Keys.End:
                keyEventArgs.Handled = true;
                break;

            case Keys.F4:
                // QCR #798995, f4 in windows opens combo and this is unwanted behaviour
                keyEventArgs.Handled = true;
                break;

            case Keys.Tab:
                //we need to handle the key.Tab so no need to update ignoreEvent
                if (comboBox.DroppedDown)
                {
                    CloseComboDropDownForSpecialKeys(comboBox, e);
                }
                break;

            case Keys.Escape:
                ignoreEvent = CloseComboDropDownForSpecialKeys(comboBox, e);
                break;

            case Keys.Enter:
                // in case of selection task, Enter on an open combo should only select. we don't want to exit the task.
                if (comboBox.DroppedDown)
                {
                    ((TagData)comboBox.Tag).IgnoreKeyDown          = true;
                    ((TagData)comboBox.Tag).HandleOnDropDownClosed = false;
                }
                break;

            default:
                // ctrl + key, focuses on the value starting with this char on .net. But in online it doesn't.
                // Also, ctrl+M, might change query to modify and them focus on 'm'. We don't want that.
                if (keyEventArgs.Control)
                {
                    DefaultHandler.suppressKeyPress(keyEventArgs, (Control)sender);
                }

                break;
            }

            return(ignoreEvent);
        }
Ejemplo n.º 19
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        internal override void handleEvent(EventType type, Object sender, EventArgs e)
        {
            ControlsMap controlsMap = ControlsMap.getInstance();
            MgComboBox  comboBox    = (MgComboBox)sender;
            MapData     mapData     = controlsMap.getMapData(comboBox);

            if (mapData == null)
            {
                return;
            }

            var contextIDGuard = new Manager.ContextIDGuard(Manager.GetContextID(mapData.getControl()));

            try
            {
                switch (type)
                {
                case EventType.RESIZE:
                    GuiMgControl mgControl = mapData.getControl();
                    if (mgControl.IsTableHeaderChild)
                    {
                        comboBox.Invalidate();
                    }
                    break;

                case EventType.MOUSE_DOWN:
                    ((TagData)comboBox.Tag).HandleOnDropDownClosed = false;

                    GuiUtils.saveFocusingControl(GuiUtils.FindForm(comboBox), mapData);
                    DefaultHandler.getInstance().handleEvent(type, sender, e);

                    // QCR #713073 Process drop down only for left mouse click. right click opens the context menu.
                    if (((MouseEventArgs)e).Button == MouseButtons.Left)
                    {
#if !PocketPC
                        // In mouse down event, we initiate drag and since we are returning from here,
                        // we need to handle it here itself as it won't call defaulthandler.handleEvent.
                        GuiUtils.AssessDrag((Control)sender, (MouseEventArgs)e, mapData);
#endif

                        // QCR #927727, this will prevent openning combo for non parkable conrols
                        Events.OnComboDroppingDown(mapData.getControl(), mapData.getIdx());
                    }
                    return;

                case EventType.DROP_DOWN:
                    // when the drop down is open reset the member
                    ((TagData)comboBox.Tag).ClickOnComboDropDownList = false;
                    break;

                case EventType.DROP_DOWN_CLOSED:
                    OnDropDownClosed(comboBox, e);
                    break;

                case EventType.KEY_DOWN:
                    if (OnkeyDown(sender, e))
                    {
                        return;
                    }
                    break;

                case EventType.SELECTED_INDEX_CHANGED:
                    ((TagData)comboBox.Tag).HandleOnDropDownClosed = false;
                    TagData tg = ((TagData)comboBox.Tag);
                    tg.IgnoreTwiceClickWhenToValueIs = GuiUtils.getValue(comboBox);
                    //fixed bug #:782615, when type char, we get click_index_change in spite of the index isn't changed.
                    //                    ignore when the value isn't real changed
                    //While creating combo control, if you try to select the option from combo using key,
                    //ListControlOriginalValue is not initialized yet. So, return.
                    if (tg.ListControlOriginalValue == null || tg.ListControlOriginalValue.Equals(tg.IgnoreTwiceClickWhenToValueIs))
                    {
                        return;
                    }

                    //we must this fixed for bug #:768284, we get twice before the GuiCommandQueue.setselection(comboBox) was called.
                    //                                     so the value on tg.ComboBoxOriginalValue isn't updated yet.
                    if (tg.IgnoreTwiceClick)
                    {
                        if (tg.IgnoreTwiceClickWhenToValueIs == tg.IgnoreTwiceClickWhenFromValueIs)
                        {
                            tg.IgnoreTwiceClickWhenFromValueIs = tg.IgnoreTwiceClickWhenToValueIs;
                            tg.IgnoreTwiceClick = false;
                            return;
                        }
                        else
                        {
                            tg.IgnoreTwiceClickWhenFromValueIs = tg.IgnoreTwiceClickWhenToValueIs;
                        }
                    }
                    break;

                case EventType.PRESS:
                    // save current control as last focused control
                    if (!comboBox.Focused)
                    {
                        GuiUtils.saveFocusingControl(GuiUtils.FindForm(comboBox), mapData);
                    }
                    break;
                }
            }
            finally
            {
                contextIDGuard.Dispose();
            }

            DefaultHandler.getInstance().handleEvent(type, sender, e);
        }
Ejemplo n.º 20
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        internal override void handleEvent(EventType type, Object sender, EventArgs e)
        {
            MapData mapData = ControlsMap.getInstance().getMapData(sender);

            if (mapData == null)
            {
                return;
            }

            Object guiMgObject = mapData.getControl();

            if (guiMgObject == null)
            {
                guiMgObject = mapData.getForm();
            }
            var contextIDGuard = new Manager.ContextIDGuard(Manager.GetContextID(guiMgObject));

            try
            {
                switch (type)
                {
#if !PocketPC
                case EventType.SCROLL:
                {
                    if (sender is ScrollableControl)
                    {
                        ScrollableControl scrollableControl = sender as ScrollableControl;
                        TagData           tg = (TagData)scrollableControl.Tag;
                        if (scrollableControl.BackgroundImage != null)
                        {
                            scrollableControl.Invalidate();
                        }
                        else
                        {
                            //This is a.Net bug. When scrollbar gets hidden during the process of thumb drag, framework still keeps
                            //a rectangular bar visible to keep dragging on. Now, this rectangle is not removed even when the scrolling is stopped.
                            //The workaround is to repaint the form if scrollbar is not present on the form when scroll dragging is stopped.

                            ScrollEventArgs se = (ScrollEventArgs)e;
                            if (se.Type == ScrollEventType.ThumbPosition)
                            {
                                bool hasVerticalScrollBar = scrollableControl.AutoScrollMinSize.Height > scrollableControl.ClientSize.Height;

                                if (!hasVerticalScrollBar)
                                {
                                    scrollableControl.Invalidate();
                                }
                            }
                        }
                    }
                }
                break;
#endif
                case EventType.RESIZE:
                    onResize((Control)sender);
                    break;
                }
                DefaultContainerHandler.getInstance().handleEvent(type, sender, e);

#if PocketPC
                // paint the subform's border. Do it after the controls are painted, so we can paint over them.
                if (type == EventType.PAINT && ((MgPanel)sender).BorderStyle != BorderStyle.None)
                {
                    BorderRenderer.PaintBorder(((PaintEventArgs)e).Graphics, ((Control)sender).ClientRectangle,
                                               Color.Black, ControlStyle.Windows, false);
                }
#endif
            }
            finally
            {
                contextIDGuard.Dispose();
            }
        }
Ejemplo n.º 21
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <param name="mapData"></param>
        internal void handleEvent(EventType type, Control sender, EventArgs e, MapData mapData)
        {
            MapData          orgMapData       = mapData;
            ContainerManager containerManager = GuiUtils.getContainerManager(sender);

            switch (type)
            {
#if !PocketPC
            case EventType.DRAG_OVER:
            case EventType.DRAG_DROP:
                // Need to get current Control, Hence needed
                Point pt     = new Point(((DragEventArgs)e).X, ((DragEventArgs)e).Y);
                Point screen = sender.PointToClient(pt);
                mapData = containerManager.HitTest(screen, true, false);
                break;
#endif
            case EventType.MOUSE_MOVE:
                // the mouse move will handle the tooltip
                mapData = containerManager.HitTest(new Point(((MouseEventArgs)e).X, ((MouseEventArgs)e).Y), true, false);
                break;

            case EventType.NCMOUSE_DOWN:
                MapData containerMapData = ControlsMap.getInstance().getMapData(sender);
                Events.OnMouseDown(containerMapData.getForm(), containerMapData.getControl(), null, true, 0, true, true);
                break;

            case EventType.MOUSE_DOWN:
                // check if a point on some table child
                // fixed bug #986057 (same in online)
                // * when pressing Rclick(button != 1) on Table or on the divider the Table's Context Menu will be
                // display( if press on other row no focus will move to the new row)
                // * when pressing Rclick exactly edit the context menu of the edit will be display and the focus
                // will move to the control
                bool LeftClickWasPressed = ((MouseEventArgs)e).Button == MouseButtons.Left;
                bool findExact           = (sender is TableControl && LeftClickWasPressed ? false : true);
                mapData = containerManager.HitTest(new Point(((MouseEventArgs)e).X, ((MouseEventArgs)e).Y), findExact, true);
                if (mapData != null)
                {
                    // Defect# 130085: When we click on a control (say checkbox) placed on table header, mouseDown is not needed to be processed.
                    // Actually, this is received from WM_PARENTNOTIFY from TableControl. This will avoid multiple ACT_CTRL_HIT on table header child
                    // control and Table control. Another option was to set WS_EX_NOPARENTNOTIFY style to table header child.
                    GuiMgControl mgControl = mapData.getControl();
                    if (mgControl.IsTableHeaderChild)
                    {
                        return;
                    }
                    // mark that we need to focus on the control
                    GuiUtils.saveFocusingControl(GuiUtils.FindForm(sender), mapData);
                }
                else if (sender is TableControl)
                {
                    GuiUtils.restoreFocus(GuiUtils.FindForm(sender));
                }
                break;

            case EventType.MOUSE_UP:
                // for mouse up we need control the has been clicked and not nearest control
                mapData = containerManager.HitTest(new Point(((MouseEventArgs)e).X, ((MouseEventArgs)e).Y), true, true);
                break;

            case EventType.MOUSE_DBLCLICK:
                if (!(sender is TableControl)) //TODO
                {
                    mapData = containerManager.HitTest(new Point(((MouseEventArgs)e).X, ((MouseEventArgs)e).Y), true, true);
                }
                break;

            case EventType.PRESS:
                findExact = !(sender is TableControl);
                // Mobile clients for which this event type is applicable must
                // pass actual press co-ords
                Point point = new Point(0, 0);
                mapData = containerManager.HitTest(point, findExact, true);
                if (mapData != null)
                {
                    GuiUtils.saveFocusingControl(GuiUtils.FindForm(sender), mapData);
                }
                break;

            case EventType.PAINT:
                if (containerManager is BasicControlsManager)
                {
                    ((BasicControlsManager)containerManager).Paint(((PaintEventArgs)e).Graphics);
                }
                break;

#if PocketPC
            case EventType.RESIZE:
                EditorSupportingPlacementLayout placementLayout1 = ((TagData)sender.Tag).PlacementLayout;
                if (placementLayout1 != null)
                {
                    LayoutEventArgs le = new LayoutEventArgs();
                    placementLayout1.layout(sender, le);
                }
                break;
#endif
            case EventType.LAYOUT:
                EditorSupportingPlacementLayout placementLayout = ((TagData)sender.Tag).PlacementLayout;
                if (placementLayout != null)
                {
                    placementLayout.layout(sender, (LayoutEventArgs)e);
                }
                break;

            case EventType.DISPOSED:
                containerManager.Dispose();
                break;
            }

            if (mapData == null)
            {
                mapData = orgMapData;
            }
            DefaultHandler.getInstance().handleEvent(type, sender, e, mapData);
        }
Ejemplo n.º 22
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="mapData"></param>
 /// <returns></returns>
 private static bool isDotNetControl(MapData mapData)
 {
     return(mapData.getControl() != null && mapData.getControl().IsDotNetControl());
 }
Ejemplo n.º 23
0
        internal override void handleEvent(EventType type, Object sender, EventArgs e)
        {
            ControlsMap controlsMap = ControlsMap.getInstance();
            UtilImeJpn  utilImeJpn  = Manager.UtilImeJpn;

            TextBox textCtrl = (TextBox)sender;
            int     start;
            int     end;

            MapData mapData = controlsMap.getMapData(textCtrl);

            if (mapData == null)
            {
                return;
            }

            GuiMgControl guiMgCtrl = mapData.getControl();
            GuiMgForm    guiMgForm = mapData.getForm();

            var contextIDGuard = new Manager.ContextIDGuard(Manager.GetContextID(guiMgCtrl));

            if (Events.ShouldLog(Logger.LogLevels.Gui))
            {
                Events.WriteGuiToLog("TextBoxHandler(\"" + mapData.getControl().getName(mapData.getIdx()) + "\"): " + type);
            }

            try
            {
                switch (type)
                {
                case EventType.GOT_FOCUS:
                    // check the paste enable. check the clip content.
                    if (mapData != null)
                    {
                        GuiUtils.checkPasteEnable(mapData.getControl(), true);
                        GuiUtils.SetFocusColor(textCtrl);
                    }
                    break;

                case EventType.LOST_FOCUS:
                    // Always disable paste when exiting a text ctrl. (since we might be focusing on a diff type of
                    // ctrl).
                    if (mapData != null)
                    {
                        GuiUtils.disablePaste(mapData.getControl());
                        GuiUtils.ResetFocusColor(textCtrl);
                    }
                    break;

                case EventType.KEY_UP:
                    GuiUtils.enableDisableEvents(sender, mapData.getControl());
                    return;

                case EventType.KEY_DOWN:
                    KeyEventArgs keyEventArgs = (KeyEventArgs)e;

                    if (ShouldBeHandledByTextBox(textCtrl, keyEventArgs))
                    {
                        GuiUtils.checkAutoWide(mapData.getControl(), textCtrl, GuiUtils.getValue(textCtrl));
                        keyEventArgs.Handled = false;
                        return;
                    }
                    break;

                case EventType.IME_EVENT:
                    // (Korean) IME messages (WM_IME_COMPOSITION, etc.) are handled as pseudo-input
                    // where action=MG_ACT_CHAR, text=" ".
                    // To distinguish with real " ", ImeParam im is attached to RuntimeEvent.
                    ImeEventArgs iea = (ImeEventArgs)e;
                    start = textCtrl.SelectionStart;
                    end   = textCtrl.SelectionStart + textCtrl.SelectionLength;
                    Events.OnKeyDown(guiMgForm, guiMgCtrl, Modifiers.MODIFIER_NONE, 0, start, end, " ", iea.im, true, "-1", false, iea.Handled);
                    iea.Handled = true;
                    break;

                case EventType.KEY_PRESS:
                    KeyPressEventArgs keyPressEventArgs = (KeyPressEventArgs)e;
                    // skipp control key
                    if (Char.IsControl(keyPressEventArgs.KeyChar))
                    {
                        return;
                    }

                    start = textCtrl.SelectionStart;
                    end   = textCtrl.SelectionStart + textCtrl.SelectionLength;
                    String pressedChar = "" + keyPressEventArgs.KeyChar;

                    // flag the isActChar to indicate this is MG_ACT_CHAR
                    Events.OnKeyDown(guiMgForm, guiMgCtrl, Modifiers.MODIFIER_NONE, 0, start, end, pressedChar, true, "-1", keyPressEventArgs.Handled);
                    keyPressEventArgs.Handled = true;
                    break;

                case EventType.MOUSE_UP:
                    GuiUtils.enableDisableEvents(sender, mapData.getControl());
                    break;

                case EventType.CUT:
                    Events.CutEvent(mapData.getControl());
                    return;

                case EventType.COPY:
                    Events.CopyEvent(mapData.getControl());
                    return;

                case EventType.PASTE:
                    Events.PasteEvent(mapData.getControl());
                    return;

                case EventType.CLEAR:
                    Events.ClearEvent(mapData.getControl());
                    return;

                case EventType.UNDO:
                    Events.UndoEvent(mapData.getControl());
                    return;



                case EventType.STATUS_TEXT_CHANGED:
                    // JPN: ZIMERead function
                    if (utilImeJpn != null && sender is MgTextBox && !utilImeJpn.IsEditingCompStr((Control)sender))
                    {
                        utilImeJpn.StrImeRead = ((MgTextBox)sender).GetCompositionString();
                    }
                    return;
                }
            }
            finally
            {
                contextIDGuard.Dispose();
            }

            DefaultHandler.getInstance().handleEvent(type, sender, e);
        }
Ejemplo n.º 24
0
        /// <summary> </summary>
        internal override void handleEvent(EventType type, Object sender, EventArgs e)
        {
            ControlsMap  controlsMap  = ControlsMap.getInstance();
            Control      control      = (Control)sender;
            RadioButton  radioButton  = (RadioButton)sender;
            MgRadioPanel mgRadioPanel = (MgRadioPanel)radioButton.Parent;
            MapData      mapData      = controlsMap.getMapData(mgRadioPanel);

            if (mapData == null)
            {
                return;
            }

            GuiMgControl guiMgControl        = mapData.getControl();
            Type         senderType          = sender.GetType();
            bool         leftClickWasPressed = false;

            var contextIDGuard = new Manager.ContextIDGuard(Manager.GetContextID(guiMgControl));

            try
            {
                switch (type)
                {
                case EventType.MOUSE_DOWN:
                    //fixed bug #435168 , saveing the widget that we made MouseDown on the comosite control
                    ((TagData)mgRadioPanel.Tag).MouseDownOnControl = radioButton;
                    GuiUtils.checkAndCloseTreeEditorOnClick(control);
                    MouseEventArgs mouseEvtArgs = (MouseEventArgs)e;
                    GuiUtils.SaveLastClickInfo(mapData, (Control)sender, new Point(mouseEvtArgs.X, mouseEvtArgs.Y));
#if !PocketPC //tmp
                    GuiUtils.setTooltip(control, "");
#endif
                    String Value = GuiUtils.GetRadioButtonIndex(radioButton);
                    GuiUtils.setSuggestedValueOfChoiceControlOnTagData(mgRadioPanel, Value);
                    Events.OnSelection(Value, guiMgControl, mapData.getIdx(), true);
                    //the right click isn't move the focus to the control, only on left click.
                    leftClickWasPressed = (((MouseEventArgs)e).Button == MouseButtons.Left);

                    if (leftClickWasPressed)
                    {
                        Events.OnMouseDown(null, guiMgControl, null, leftClickWasPressed, mapData.getIdx(), false, true);
#if !PocketPC
                        GuiUtils.AssessDrag(control, (MouseEventArgs)e, mapData);
#endif
                    }
                    else
                    {
                        control.Focus();
                    }
                    return;

                case EventType.KEY_DOWN:
                    ((TagData)mgRadioPanel.Tag).MouseDownOnControl = null;
                    break;
                }
            }
            finally
            {
                contextIDGuard.Dispose();
            }

            DefaultHandler.getInstance().handleEvent(type, sender, e, mapData);
        }
Ejemplo n.º 25
0
        /// <summary> </summary>
        internal override void handleEvent(EventType type, Object sender, EventArgs e)
        {
            ControlsMap controlsMap = ControlsMap.getInstance();
            Control     ctrl        = (Control)sender;
            MapData     mapData     = controlsMap.getMapData(ctrl);

            if (mapData == null)
            {
                return;
            }

            GuiMgControl guiMgControl  = mapData.getControl();
            bool         isButton      = (ctrl is MgButtonBase);
            bool         isImageButton = (ctrl is MgImageButton);
            bool         isCheckBox    = (ctrl is MgCheckBox);

            var contextIDGuard = new Manager.ContextIDGuard(Manager.GetContextID(guiMgControl));

            try
            {
                switch (type)
                {
                case EventType.MOUSE_LEAVE:
                    if (isImageButton && ((MgImageButton)ctrl).Supports6Images())
                    {
                        ((TagData)(ctrl).Tag).OnHovering = false;
                        GuiUtils.RefreshButtonImage(ctrl);
                    }
                    break;

                case EventType.MOUSE_ENTER:
                    if (isImageButton && ((MgImageButton)ctrl).Supports6Images())
                    {
                        ((TagData)(ctrl).Tag).OnHovering = true;
                        GuiUtils.RefreshButtonImage(ctrl);
                    }
                    break;

                case EventType.CLICK:
                    if (isButton)
                    {
                        bool isClick = false;

                        // if it is not click (onMouseDown) and lastparked ctrl is not equal to button, then
                        // it has come through accelerators and accelerators should be considered as click
                        if (((TagData)ctrl.Tag).OnMouseDown)
                        {
                            isClick = true;
                        }

                        String controlName = guiMgControl == null ? "" : guiMgControl.Name;
                        Events.SaveLastClickedCtrlName(guiMgControl, controlName);

                        Events.OnSelection(GuiUtils.getValue(ctrl), guiMgControl, mapData.getIdx(), isClick);
                        GuiUtils.SetOnClickOnTagData(ctrl, false);
                        GuiUtils.RefreshButtonImage(ctrl);
                    }
                    return;

                case EventType.MOUSE_DOWN:
                    bool mouseDown = (isButton ? ((MouseEventArgs)e).Button == MouseButtons.Left : true);
                    GuiUtils.SetOnClickOnTagData(ctrl, mouseDown);
                    if (isImageButton)
                    {
                        GuiUtils.RefreshButtonImage(ctrl);
                    }
                    if (isButton || isCheckBox)
                    {
                        MouseEventArgs mouseEvtArgs = (MouseEventArgs)e;
                        GuiUtils.SaveLastClickInfo(mapData, (Control)sender, new Point(mouseEvtArgs.X, mouseEvtArgs.Y));
#if !PocketPC
                        // In mouse down event, we initiate drag and since we are returning from here,
                        // we need to handle it here itself as it won't call defaulthandler.handleEvent.
                        if (((MouseEventArgs)e).Button == MouseButtons.Left)
                        {
                            GuiUtils.AssessDrag(ctrl, (MouseEventArgs)e, mapData);
                        }
#endif
                        return;
                    }
                    break;

                case EventType.KEY_PRESS:
                    /*For CheckBox and Button, Space bar key should be ignored as it is handled thr' selection event.*/
                    if (Char.IsWhiteSpace(((KeyPressEventArgs)e).KeyChar))
                    {
                        return;
                    }
                    break;

                case EventType.LOST_FOCUS:
                    if (isButton)
                    {
                        GuiUtils.SetOnClickOnTagData(ctrl, false);
                        GuiUtils.RefreshButtonImage(ctrl);

                        //fixed bug #:252654, .NET display the control and hot Track in spite of it's not,
                        //            when focus is lost update the UIIState by set UISF_HIDEFOCUS
                        //            the same fixed was done in online for check box in
                        UpdateUIstate(ctrl, true);
                    }
                    return;

                case EventType.GOT_FOCUS:
                    GuiUtils.SetOnClickOnTagData(ctrl, false);
                    if (isButton)
                    {
                        GuiUtils.RefreshButtonImage(ctrl);

                        //fixed bug #:252654, .NET display the control and hot Track in spite of it's not,
                        //            when focus is got update the UIIState by clear the UISF_HIDEFOCUS
                        //            the same fixed was done in online for check box in
                        UpdateUIstate(ctrl, false);
                    }
                    if (isButton || isCheckBox)
                    {
                        return;
                    }
                    else
                    {
                        break;
                    }

                case EventType.MOUSE_UP:
                    GuiUtils.SetOnClickOnTagData(ctrl, false);
                    if (isImageButton)
                    {
                        GuiUtils.RefreshButtonImage(ctrl);
                    }

#if !PocketPC
                    // Reset drag information, since we are returning from here.
                    GuiUtils.ResetDragInfo(ctrl);
#endif
                    return;

                case EventType.RESIZE:
                    if (isImageButton)
                    {
                        GuiUtils.RefreshButtonImage(ctrl);
                    }
                    break;
                }
            }
            finally
            {
                contextIDGuard.Dispose();
            }

            DefaultHandler.getInstance().handleEvent(type, sender, e);
        }
Ejemplo n.º 26
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        internal override void handleEvent(EventType type, Object sender, EventArgs e)
        {
            ControlsMap controlsMap = ControlsMap.getInstance();
            Control     control     = (Control)sender;
            MapData     mapData     = controlsMap.getMapData(control);

            if (mapData == null)
            {
                return;
            }

            Type    senderType = sender.GetType();
            ListBox listBox    = (ListBox)sender;

            var contextIDGuard = new Manager.ContextIDGuard(Manager.GetContextID(mapData.getControl()));

            try
            {
                switch (type)
                {
                case EventType.MOUSE_DOWN:
                    MouseEventArgs mouseEvtArgs = (MouseEventArgs)e;
                    GuiUtils.SaveLastClickInfo(mapData, (Control)sender, new Point(mouseEvtArgs.X, mouseEvtArgs.Y));
                    bool leftClickWasPressed = (((MouseEventArgs)e).Button == MouseButtons.Left);
                    GuiUtils.SetOnClickOnTagData(control, leftClickWasPressed);

#if !PocketPC
                    if (leftClickWasPressed)
                    {
                        GuiUtils.AssessDrag(control, (MouseEventArgs)e, mapData);
                    }
#endif

                    return;

                case EventType.MOUSE_UP:
                case EventType.GOT_FOCUS:
                case EventType.LOST_FOCUS:
                    GuiUtils.SetOnClickOnTagData(control, false);

#if !PocketPC
                    if (type == EventType.MOUSE_UP)
                    {
                        GuiUtils.ResetDragInfo(control);
                    }
#endif
                    return;

                case EventType.KEY_DOWN:
                    if (OnkeyDown(type, sender, e))
                    {
                        return;
                    }
                    break;

                case EventType.CLICK:
                    // we do not want the process selection to accure here. only in SelectedIndexChanged.
                    return;
                }
            }
            finally
            {
                contextIDGuard.Dispose();
            }

            DefaultHandler.getInstance().handleEvent(type, sender, e);
        }
Ejemplo n.º 27
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        internal override void handleEvent(EventType type, Object sender, EventArgs e)
        {
            ControlsMap controlsMap = ControlsMap.getInstance();
            TreeView    tree        = (TreeView)sender;
            TreeManager treeManager = GuiUtils.getTreeManager(tree);
            Point       location    = new Point();
            MapData     mapData     = null;
            Point       pt;

            if (e is MouseEventArgs)
            {
                location = ((MouseEventArgs)e).Location;
            }
            if (tree.IsDisposed)
            {
                return;
            }

            switch (type)
            {
            case EventType.GOT_FOCUS:
                treeManager.setFocusTime();
                break;

            case EventType.NODE_MOUSE_HOVER:
                mapData = controlsMap.getMapData(((TreeNodeMouseHoverEventArgs)e).Node);
                break;

            case EventType.MOUSE_LEAVE:
                //workaround for .NET problem mouseleave is sent too much times for every tree node
                //we must check if the tooltip left tree
                pt = tree.PointToClient(Control.MousePosition);
                if (tree.ClientRectangle.Contains(pt))
                {
                    return;
                }
                break;

            case EventType.MOUSE_UP:
                tree.MouseMove      += TreeHandler.getInstance().MouseMoveHandler;
                treeManager.InExpand = false;
                break;

            case EventType.MOUSE_DOWN:
                treeManager.setMouseDownTime();
                break;

            case EventType.MOUSE_MOVE:
                // Mouse move only to decide, whether we should start drag operation or not.
                // Should not handle MouseMove further : Need to handle NodeMouseHover is instead of mousemove

                Control control = (Control)sender;
                if (!treeManager.InExpand && GuiUtils.ShouldPerformBeginDrag(control, (MouseEventArgs)e))
                {
                    mapData = GuiUtils.getContainerManager(control).HitTest(new Point(((MouseEventArgs)e).X, ((MouseEventArgs)e).Y), true, false);
                    // mapData == null means we are on the node's sign.
                    if (mapData != null)
                    {
                        //Before starting to drag, if we are dragging from a different node
                        //the selected node, move the selected node before starting to drag.
                        // (* it will actually do something only for RTE not RC).
                        if (tree.SelectedNode != null)
                        {
                            MapData oldNodmapDataDrag = controlsMap.getMapData(tree.SelectedNode);
                            int     oldLineDrag       = oldNodmapDataDrag.getIdx();

                            if (mapData.getIdx() != oldLineDrag)
                            {
                                Events.OnTreeNodeSelectChange(mapData.getControl(), oldLineDrag, mapData.getIdx());
                            }
                        }

                        GuiUtils.BeginDrag(control, (MouseEventArgs)e, mapData);
                    }
                }
                return;

            case EventType.DRAG_DROP:
                control = (Control)sender;
                pt      = new Point(((DragEventArgs)e).X, ((DragEventArgs)e).Y);
                Point screen = control.PointToClient(pt);
                mapData = GuiUtils.getContainerManager(control).HitTest(screen, true, false);

                // mapData == null means we are on the node's sign.
                if (mapData != null)
                {
                    //Before starting to drop, if we are dropping on a different node
                    //the selected node, move the selected node before starting to drop.
                    // (* it will actually do something only for RTE not RC).
                    if (tree.SelectedNode != null)
                    {
                        MapData oldNodmapDataDrop = controlsMap.getMapData(tree.SelectedNode);
                        int     oldLineDrop       = oldNodmapDataDrop.getIdx();

                        if (mapData.getIdx() != oldLineDrop)
                        {
                            Events.OnTreeNodeSelectChange(mapData.getControl(), oldLineDrop, mapData.getIdx());
                        }
                    }
                }
                break;

            case EventType.LABEL_EDIT:
                if (!treeManager.IsLabelEditAllowed)
                {
                    ((NodeLabelEditEventArgs)e).CancelEdit = true;
                }
                else
                {
                    mapData = controlsMap.getMapData(((NodeLabelEditEventArgs)e).Node);
                    Events.OnEditNode(mapData.getControl(), mapData.getIdx());
                }
                return;

            case EventType.KEY_DOWN:
                KeyEventArgs keyEventArgs = (KeyEventArgs)e;
                // check if we should handle the key down (in default handler) or let the
                // tree continue with its default behavior.
                if (!Events.ShouldHandleTreeKeyDown(keyEventArgs.KeyCode))
                {
                    return; // let tree send default expand collapse event
                }
                break;

            case EventType.RESIZE:
                treeManager.resize();
                return;

            case EventType.SCROLL:
            case EventType.MOUSE_WHEEL:
                GuiUtils.checkAndCloseTreeEditorOnClick(tree);
                return;

            case EventType.BEFOR_EXPAND:
                treeManager.InExpand = true;

                mapData = controlsMap.getMapData(((TreeViewCancelEventArgs)e).Node);
                TreeChild treeChild = (TreeChild)controlsMap.object2Widget(mapData.getControl(), mapData.getIdx());

                Events.OnExpand(mapData.getControl(), mapData.getIdx());
                ((TreeViewCancelEventArgs)e).Cancel = true;
                return;

            case EventType.BEFOR_COLLAPSE:
                mapData = controlsMap.getMapData(((TreeViewCancelEventArgs)e).Node);
                Events.OnCollapse(mapData.getControl(), mapData.getIdx());
                ((TreeViewCancelEventArgs)e).Cancel = true;
                return;

            case EventType.BEFORE_SELECT:
                MapData oldNodmapData = null;
                int     oldLine       = 0;

                mapData = controlsMap.getMapData(((TreeViewCancelEventArgs)e).Node);
                if (mapData != null)
                {
                    GuiMgControl mgControl = mapData.getControl();
                    int          newLine   = mapData.getIdx();

                    if (tree.SelectedNode != null)
                    {
                        oldNodmapData = controlsMap.getMapData(tree.SelectedNode);
                        oldLine       = oldNodmapData.getIdx();
                    }

                    // if true, cancel the change (true for online, false for RC)
                    // in online there is handling for the select change and we don't want it to
                    // happen here.
                    if (Events.OnTreeNodeSelectChange(mgControl, oldLine, newLine))
                    {
                        ((TreeViewCancelEventArgs)e).Cancel = true;
                    }
                }
                else
                {
                    ((TreeViewCancelEventArgs)e).Cancel = true;
                }

                return;
            }
            DefaultContainerHandler.getInstance().handleEvent(type, (Control)sender, e, mapData);
        }
Ejemplo n.º 28
0
        /* (non-Javadoc)
         * @see org.eclipse.swt.widgets.Handler#handleEvent(org.eclipse.swt.widgets.Event)
         */
        internal override void handleEvent(EventType type, Object sender, EventArgs e)
        {
            ControlsMap controlsMap  = ControlsMap.getInstance();
            RichTextBox richTextCtrl = (RichTextBox)sender;
            MapData     mapData      = controlsMap.getMapData(richTextCtrl);

            if (mapData == null)
            {
                return;
            }

            GuiMgControl ctrl      = mapData.getControl();
            GuiMgForm    guiMgForm = mapData.getForm();

            UtilImeJpn utilImeJpn = Manager.UtilImeJpn; // JPN: IME support

            var contextIDGuard = new Manager.ContextIDGuard(Manager.GetContextID(ctrl));

            try
            {
                switch (type)
                {
                case EventType.GOT_FOCUS:
                    // check the paste enable. check the clip content.
                    if (mapData != null)
                    {
                        GuiUtils.checkPasteEnable(mapData.getControl(), true);
                    }

                    // For RichEdit Ctrl, Set AcceptButton(i.e. DefaultButton) to null in order to allow enter key on RichEdit control.
                    if (sender is MgRichTextBox)
                    {
                        Form form = GuiUtils.FindForm(richTextCtrl);
                        form.AcceptButton = null;

                        if (((MgRichTextBox)sender).ReadOnly)
                        {
                            GuiUtils.restoreFocus(form);
                        }
                    }
                    break;

                case EventType.LOST_FOCUS:
                    // Always disable paste when exiting a text ctrl. (since we might be focusing on a diff type of
                    // ctrl).
                    if (mapData != null)
                    {
                        GuiUtils.disablePaste(mapData.getControl());
                    }
                    break;

                case EventType.KEY_UP:
                    // Korean
                    if (sender is MgRichTextBox && ((MgRichTextBox)sender).KoreanInterimSel >= 0)
                    {
                        return;
                    }

                    if (utilImeJpn != null)
                    {
                        if (utilImeJpn.IsEditingCompStr(richTextCtrl)) // JPN: IME support
                        {
                            return;
                        }

                        if (richTextCtrl is MgRichTextBox)           // JPN: ZIMERead function
                        {
                            utilImeJpn.StrImeRead = ((MgRichTextBox)richTextCtrl).GetCompositionString();
                        }
                    }

                    GuiUtils.enableDisableEvents(sender, mapData.getControl());
                    return;

                case EventType.KEY_DOWN:
                    // Korean
                    if (sender is MgRichTextBox && ((MgRichTextBox)sender).KoreanInterimSel >= 0)
                    {
                        return;
                    }

                    if (utilImeJpn != null && utilImeJpn.IsEditingCompStr(richTextCtrl)) // JPN: IME support
                    {
                        return;
                    }

                    KeyEventArgs keyEventArgs = (KeyEventArgs)e;
                    // marking the text (next/prev char or beg/end text) we let the
                    // system to take care of it.
                    // why ? There is no way in windows to set the caret at the beginning of
                    // a selected text. it works only on multi mark for some reason.
                    // also posting a shift+key does not work well since we have no way of knowing
                    // if the shift is already pressed or not.
                    // *** ALL other keys will continue to handleEvent.
                    if ((keyEventArgs.Shift && (keyEventArgs.KeyCode == Keys.Left || keyEventArgs.KeyCode == Keys.Right || keyEventArgs.KeyCode == Keys.Up || keyEventArgs.KeyCode == Keys.Down || keyEventArgs.KeyCode == Keys.Home || keyEventArgs.KeyCode == Keys.End)) ||
                        (keyEventArgs.Control && (keyEventArgs.KeyCode == Keys.Left || keyEventArgs.KeyCode == Keys.Right)))
                    {
                        keyEventArgs.Handled = false;
                        return;
                    }
                    break;

                case EventType.KEY_PRESS:

                    KeyPressEventArgs keyPressEventArgs = (KeyPressEventArgs)e;

                    bool IgnoreKeyPress = ((TagData)richTextCtrl.Tag).IgnoreKeyPress;
                    // should we ignore the key pressed ?
                    if (IgnoreKeyPress)
                    {
                        ((TagData)richTextCtrl.Tag).IgnoreKeyPress = false;

                        return;
                    }

                    // skipp control key
                    if (Char.IsControl(keyPressEventArgs.KeyChar))
                    {
                        return;
                    }

                    int start = richTextCtrl.SelectionStart;
                    int end   = richTextCtrl.SelectionStart + richTextCtrl.SelectionLength;

                    String pressedChar = "" + keyPressEventArgs.KeyChar;

                    // flag the isActChar to indicate this is MG_ACT_CHAR
                    Events.OnKeyDown(guiMgForm, ctrl, Modifiers.MODIFIER_NONE, 0, start, end, pressedChar, true, "-1", keyPressEventArgs.Handled);

                    // keyPressEventArgs.Handled wii stay 'false' in order to let the system put the correct char.
                    // What will happen is 2 things : 1. processKeyDown will add 'MG_ACT_CHAR'. 2. The system will write the char.
                    // In the past, the 'ACT_CHAR' was using sendKeys in order to write the char, but it makes problems in multilanguage systems.
                    // So, in TextMaskEditor for rich , ACT_CHAR will do nothing, just pass there in order to rais the 'control modify'.
                    //keyPressEventArgs.Handled = true;
                    break;

                case EventType.MOUSE_UP:
                    GuiUtils.enableDisableEvents(sender, mapData.getControl());
                    break;
                }
            }
            finally
            {
                contextIDGuard.Dispose();
            }

            DefaultHandler.getInstance().handleEvent(type, sender, e);
        }