/// <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); }
/// <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); }
/// <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(); } }
//<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); }
/// <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); }
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 }); }
/// <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(); }
/// <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); }
/// <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()); } } }
/// <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()); } } }
/// <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); }
/// <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); } } } }
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); }
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); }
/// <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; } } } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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(); } }
/// <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); }
/// <summary> /// /// </summary> /// <param name="mapData"></param> /// <returns></returns> private static bool isDotNetControl(MapData mapData) { return(mapData.getControl() != null && mapData.getControl().IsDotNetControl()); }
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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/* (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); }