void ComboBox::handleMenuItemActionPerformed(ActionEventDetails* const e) { //Called by the MenuItems in my popupMenu //Need to determine the index of this MenuItem UInt32 i(0); while(i<getComboListPopupMenu()->getNumItems() && getComboListPopupMenu()->getItem(i) != dynamic_cast<MenuItem*>(e->getSource())) { ++i; } if(i < getComboListPopupMenu()->getNumItems()) { getModel()->setSelectedItem(i); if(getEditable() && getEditor() != NULL && getEditor()->getEditorComponent() != NULL) { getEditor()->selectAll(); getEditor()->getEditorComponent()->takeFocus(); } if(!getEditable() && getComponentGeneratorSelectedItem() != NULL) { getComponentGeneratorSelectedItem()->takeFocus(); } } }
void ComboBox::updateLayout(void) { Pnt2f BorderTopLeft, BorderBottomRight; getInsideInsetsBounds(BorderTopLeft, BorderBottomRight); Vec2f Size; Pnt2f Pos; if(getExpandButton() != NULL) { //Place the Expand button on the Left Size = getExpandButton()->getPreferredSize(); if(getExpandButton()->getSize() != Size) { getExpandButton()->setSize(Size); } Pos = calculateAlignment(BorderTopLeft, (BorderBottomRight-BorderTopLeft), getExpandButton()->getSize(),0.5, 1.0); if(getExpandButton()->getPosition() != Pos) { getExpandButton()->setPosition(Pos); } } //Editor if(getEditable() && getEditor() != NULL && getEditor()->getEditorComponent() != NULL) { Size = Vec2f(BorderBottomRight.x() - BorderTopLeft.x() - getExpandButton()->getSize().x(), getExpandButton()->getSize().y()); if(getEditor()->getEditorComponent()->getSize() != Size) { getEditor()->getEditorComponent()->setSize(Size); } Pos = Pnt2f(BorderTopLeft.x(), getExpandButton()->getPosition().y()); if(getEditor()->getEditorComponent()->getPosition() != Pos) { getEditor()->getEditorComponent()->setPosition(Pos); } } //Selected Item Component if(!getEditable() && getComponentGeneratorSelectedItem() != NULL) { Size = Vec2f(BorderBottomRight.x() - BorderTopLeft.x() - getExpandButton()->getSize().x(), getExpandButton()->getSize().y()); if(getComponentGeneratorSelectedItem()->getSize() != Size) { getComponentGeneratorSelectedItem()->setSize(Size); } Pos = Pnt2f(BorderTopLeft.x(), getExpandButton()->getPosition().y()); if(getComponentGeneratorSelectedItem()->getPosition() != Pos) { getComponentGeneratorSelectedItem()->setPosition(Pos); } } }
void ComboBox::updateSelectedItemComponent(void) { //Update the Editor if(getEditable() && getEditor() != NULL && getModel()->getSelectedItemIndex() >=0 ) { getEditor()->setItem(getModel()->getElementAt(getModel()->getSelectedItemIndex())); } //Update the Selected Item Component if( !getEditable() ) { updateComponentGeneratorSelectedItem(); } }
void ComboBox::updateSelectionFromEditor(void) { if(getEditable() && getEditor() != NULL) { const boost::any& EditorItem = getEditor()->getItem(); std::string EditorString; std::string ModelItemString; bool ExitLoop(false); for(UInt32 i(0) ; i<getModel()->getSize() && !ExitLoop ; ++i) { try { EditorString = lexical_cast(EditorItem); ModelItemString = lexical_cast(getModel()->getElementAt(i)); } catch (boost::bad_lexical_cast &) { //Could not convert to string } if(EditorString.compare(ModelItemString) == 0) { ExitLoop = true; getModel()->setSelectedItem(i); } } } }
void ComboBox::keyTyped(KeyEventDetails* const e) { if(e->getKey() == KeyEventDetails::KEY_UP) { if(getModel()->getSelectedItemIndex() > 0) { getModel()->setSelectedItem(getModel()->getSelectedItemIndex() - 1); } } else if(e->getKey() == KeyEventDetails::KEY_DOWN) { if(getModel()->getSelectedItemIndex() < getModel()->getSize()-1) { getModel()->setSelectedItem(getModel()->getSelectedItemIndex() + 1); } } else if(!getEditable() && e->getKeyChar() != 0) { selectWithKey(static_cast<KeyEventDetails::Key>(e->getKey())); } else { Inherited::keyTyped(e); } }
LayerRefPtr EditableTextComponent::getDrawnForeground(void) const { if(getEditable()) { return Inherited::getDrawnForeground(); } else { return getDisabledForeground(); } }
void ComboBox::mouseClicked(MouseEventDetails* const e) { if(getEnabled() && !getEditable() && !getExpandButton()->isContained(e->getLocation(), true)) { getExpandButton()->setSelected(true); } else { Inherited::mouseClicked(e); } }
void EditableTextComponent::setupCursor(void) { UInt32 Cursor; if(getEnabled() && getEditable()) { Cursor = WindowEventProducer::CURSOR_I_BEAM; } else { Cursor = WindowEventProducer::CURSOR_POINTER; } if(Cursor != getCursor()) { setCursor(Cursor); } }
void ComboBox::updateComponentGeneratorSelectedItem(void) { if(!getEditable() && getCellGenerator() != NULL && getModel() != NULL) { if(getCellGenerator()->getType().isDerivedFrom(ComboBoxComponentGenerator::getClassType())) { ComponentUnrecPtr GeneratedComp(dynamic_cast<ComboBoxComponentGenerator*>(getCellGenerator())->getComboBoxComponent(this, getModel()->getSelectedItem(), getModel()->getSelectedItemIndex(), false, false)); setComponentGeneratorSelectedItem(GeneratedComp); } else { ComponentUnrecPtr GeneratedComp(getCellGenerator()->getComponent(this, getModel()->getSelectedItem(), getModel()->getSelectedItemIndex(), 0, false, false)); setComponentGeneratorSelectedItem(GeneratedComp); } } }
void EditableTextComponent::keyTyped(const KeyEventUnrecPtr e) { if(getEnabled() && getEditable() && !(e->getModifiers() &( KeyEvent::KEY_MODIFIER_ALT | KeyEvent::KEY_MODIFIER_CONTROL | KeyEvent::KEY_MODIFIER_META ))) { if(e->getKeyChar()>31 && e->getKeyChar() < 127) { if(hasSelection()) { deleteSelectedText(); setCaretPosition(_TextSelectionStart); } insert(std::string( 1,e->getKeyChar() ), _TextSelectionStart); _TextSelectionStart = getCaretPosition(); _TextSelectionEnd = _TextSelectionStart; } if(e->getKey()== e->KEY_BACK_SPACE) { if(hasSelection()) { deleteSelectedText(); } else { //erase at the current caret position Int32 DeleteIndex(getCaretPosition()); if(DeleteIndex != 0) { moveCaret(-1); deleteRange(DeleteIndex-1, DeleteIndex); } } } if(e->getKey()== e->KEY_DELETE) { if(hasSelection()) { deleteSelectedText(); } else if(getText().size()>0) { //erase at the current caret position deleteRange(getCaretPosition(), getCaretPosition()+1); _TextSelectionStart = getCaretPosition(); _TextSelectionEnd = _TextSelectionStart; } } } switch(e->getKey()) { case KeyEvent::KEY_RIGHT: case KeyEvent::KEY_KEYPAD_RIGHT: moveCaret(1); break; case KeyEvent::KEY_LEFT: case KeyEvent::KEY_KEYPAD_LEFT: moveCaret(-1); break; case KeyEvent::KEY_V: if(e->getModifiers() & KeyEvent::KEY_MODIFIER_COMMAND) { paste(); } break; case KeyEvent::KEY_C: if(e->getModifiers() & KeyEvent::KEY_MODIFIER_COMMAND) { copy(); } break; case KeyEvent::KEY_X: if(e->getModifiers() & KeyEvent::KEY_MODIFIER_COMMAND) { cut(); } break; case KeyEvent::KEY_A: if(e->getModifiers() & KeyEvent::KEY_MODIFIER_COMMAND) { selectAll(); } break; } Inherited::keyTyped(e); }
static Rboolean DOCXDeviceDriver(pDevDesc dev, const char* filename, double* width, double* height, double* offx, double* offy, double ps, int nbplots, const char* fontname, SEXP env) { DOCDesc *rd; rd = (DOCDesc *) malloc(sizeof(DOCDesc)); FontInfo *fi = (FontInfo *) malloc(sizeof(FontInfo)); fi->isinit=0; fi->fontsize=(int) ps; rd->fi = fi; rd->filename = strdup(filename); rd->fontname = strdup(fontname); rd->id = 0; rd->pageNumber = 0; rd->offx = offx[0]; rd->offy = offy[0]; rd->extx = width[0]; rd->exty = height[0]; rd->maxplot = nbplots; rd->x = offx; rd->y = offy; rd->width = width; rd->height = height; rd->fontface = 1; rd->fontsize = (int) ps; rd->env=env; // // Device functions // dev->deviceSpecific = rd; dev->activate = DOCX_activate; dev->close = DOCX_Close; dev->size = DOCX_Size; dev->newPage = DOCX_NewPage; dev->clip = DOCX_Clip; dev->strWidth = DOCX_StrWidth; dev->text = DOCX_Text; dev->rect = DOCX_Rect; dev->circle = DOCX_Circle; dev->line = DOCX_Line; dev->polyline = DOCX_Polyline; dev->polygon = DOCX_Polygon; dev->metricInfo = DOCX_MetricInfo; dev->hasTextUTF8 = (Rboolean) FALSE; dev->wantSymbolUTF8 = (Rboolean) FALSE; dev->useRotatedTextInContour = (Rboolean) FALSE; /* * Initial graphical settings */ dev->startfont = 1; dev->startps = ps; dev->startcol = R_RGB(0, 0, 0); dev->startfill = R_TRANWHITE; dev->startlty = LTY_SOLID; dev->startgamma = 1; /* * Device physical characteristics */ dev->left = 0; dev->right = width[0]; dev->bottom = height[0]; dev->top = 0; dev->cra[0] = 0.9 * ps; dev->cra[1] = 1.2 * ps; dev->xCharOffset = 0.4900; dev->yCharOffset = 0.3333; //dev->yLineBias = 0.2; dev->ipr[0] = 1.0 / 72.2; dev->ipr[1] = 1.0 / 72.2; /* * Device capabilities */ dev->canClip = (Rboolean) FALSE; dev->canHAdj = 2;//canHadj – integer: can the device do horizontal adjustment of text via the text callback, and if so, how precisely? 0 = no adjustment, 1 = {0, 0.5, 1} (left, centre, right justification) or 2 = continuously variable (in [0,1]) between left and right justification. dev->canChangeGamma = (Rboolean) FALSE; //canChangeGamma – Rboolean: can the display gamma be adjusted? This is now ignored, as gamma support has been removed. dev->displayListOn = (Rboolean) FALSE; dev->haveTransparency = 2; dev->haveTransparentBg = 3; rd->editable = getEditable(dev); return (Rboolean) TRUE; }
void TextField::drawInternal(Graphics* const TheGraphics, Real32 Opacity) const { Pnt2f Alignment; Pnt2f TopLeft, BottomRight; getInsideBorderBounds(TopLeft, BottomRight); //Text Color Color4f TextColor = getDrawnTextColor(); if(getDrawnText() != "" && getFont() != NULL) { Alignment = calculateAlignment(TopLeft, BottomRight-TopLeft, getFont()->getBounds(getDrawnText()), getAlignment().y(), getAlignment().x()); if(_TextSelectionStart >= _TextSelectionEnd) { TheGraphics->drawText(Alignment, getDrawnText(), getFont(), TextColor, getOpacity()*Opacity); } else { //Draw Text Befor the Selection TheGraphics->drawText(Alignment, getDrawnText().substr(0, _TextSelectionStart), getFont(), TextColor, getOpacity()*Opacity); //Draw Selection Pnt2f TextTopLeft, TextBottomRight; getFont()->getBounds(getDrawnText().substr(0, _TextSelectionStart), TextTopLeft, TextBottomRight); TheGraphics->drawQuad(Alignment + Vec2f(TextBottomRight.x(),0), Alignment + Vec2f(getFont()->getBounds(getDrawnText().substr(0, _TextSelectionEnd)).x(), 0), Alignment + Vec2f(getFont()->getBounds(getDrawnText().substr(0, _TextSelectionEnd))), Alignment + Vec2f(TextBottomRight), getSelectionBoxColor(), getSelectionBoxColor(), getSelectionBoxColor(), getSelectionBoxColor(), getOpacity()); //Draw Selected Text TheGraphics->drawText(Alignment + Vec2f(TextBottomRight.x(), 0), getDrawnText().substr(_TextSelectionStart, _TextSelectionEnd-_TextSelectionStart), getFont(), getSelectionTextColor(), getOpacity()*Opacity); //Draw Text After selection getFont()->getBounds(getDrawnText().substr(0, _TextSelectionEnd), TextTopLeft, TextBottomRight); TheGraphics->drawText(Alignment + Vec2f(TextBottomRight.x(), 0), getDrawnText().substr(_TextSelectionEnd, getDrawnText().size()-_TextSelectionEnd), getFont(), TextColor, getOpacity()*Opacity); } } else { Alignment = calculateAlignment(TopLeft, BottomRight-TopLeft, getFont()->getBounds("|"), getAlignment().y(), getAlignment().x()); } if(getEnabled() && getEditable() && getFocused() && _CurrentCaretBlinkElps <= 0.5*LookAndFeelManager::the()->getLookAndFeel()->getTextCaretRate()) { //Draw the caret TheGraphics->drawLine(Alignment+Vec2f(getFont()->getBounds(getDrawnText().substr(0, getCaretPosition())).x(), 0), Alignment + Vec2f(getFont()->getBounds(getDrawnText().substr(0, getCaretPosition())).x(), getFont()->getBounds(getDrawnText()).y()), .5, TextColor, getOpacity()*Opacity); } //Draw the Descriptive text if empty if(getDrawnText().empty() && !getEmptyDescText().empty() && getEmptyDescTextFont() != NULL) { Alignment = calculateAlignment(TopLeft, BottomRight-TopLeft, getEmptyDescTextFont()->getBounds(getEmptyDescText()), getAlignment().y(), getAlignment().x()); TheGraphics->drawText(Alignment, getEmptyDescText(), getEmptyDescTextFont(), getEmptyDescTextColor(), getOpacity()*Opacity); } }
bool ComboBox::isFocusInteractable(void) const { return getEnabled() && getEditable(); }
void ComboBox::changed(ConstFieldMaskArg whichField, UInt32 origin, BitVector details) { Inherited::changed(whichField, origin, details); //Do not respond to changes that have a Sync origin if(origin & ChangedOrigin::Sync) { return; } if( (whichField & EditableFieldMask)) { updateComponentGeneratorSelectedItem(); } if((whichField & ExpandButtonFieldMask) && getExpandButton() != NULL) { _ExpandButtonSelectedConnection = getExpandButton()->connectButtonSelected(boost::bind(&ComboBox::handleExpandButtonSelected, this, _1)); _ExpandButtonDeselectedConnection = getExpandButton()->connectButtonDeselected(boost::bind(&ComboBox::handleExpandButtonDeselected, this, _1)); _ExpandPopupMenuCanceledConnection = getComboListPopupMenu()->connectPopupMenuCanceled(boost::bind(&ComboBox::handleExpandPopupMenuCanceled, this, _1)); _ExpandPopupMenuWillBecomeInvisibleConnection = getComboListPopupMenu()->connectPopupMenuWillBecomeInvisible(boost::bind(&ComboBox::handleExpandPopupMenuWillBecomeInvisible, this, _1)); _ExpandPopupMenuWillBecomeVisibleConnection = getComboListPopupMenu()->connectPopupMenuWillBecomeVisible(boost::bind(&ComboBox::handleExpandPopupMenuWillBecomeVisible, this, _1)); _ExpandPopupMenuContentsChangedConnection = getComboListPopupMenu()->connectPopupMenuContentsChanged(boost::bind(&ComboBox::handleExpandPopupMenuContentsChanged, this, _1)); } if( (whichField & ExpandButtonFieldMask) || (whichField & EditorFieldMask) || (whichField & EditableFieldMask) || (whichField & ComponentGeneratorSelectedItemFieldMask)) { clearChildren(); if(getExpandButton() != NULL) { getExpandButton()->setEnabled(getEnabled()); pushToChildren(getExpandButton()); } if(getEditable() && getEditor() != NULL && getEditor()->getEditorComponent() != NULL) { getEditor()->getEditorComponent()->setEnabled(getEnabled()); pushToChildren(getEditor()->getEditorComponent()); } if(!getEditable() && getComponentGeneratorSelectedItem() != NULL) { getComponentGeneratorSelectedItem()->setEnabled(getEnabled()); pushToChildren(getComponentGeneratorSelectedItem()); } } if( (whichField & EditorFieldMask) && getEditor() != NULL) { _EditorActionConnection = getEditor()->connectActionPerformed(boost::bind(&ComboBox::handleEditorAction, this, _1)); } if(whichField & ModelFieldMask) { if(getModel() != NULL) { getComboListPopupMenu()->setModel(getModel()); _ContentsChangedConnection = getModel()->connectListDataContentsChanged(boost::bind(&ComboBox::handleContentsChanged, this, _1)); _ContentsIntervalAddedConnection = getModel()->connectListDataIntervalAdded(boost::bind(&ComboBox::handleContentsIntervalAdded, this, _1)); _ContentsIntervalRemovedConnection = getModel()->connectListDataIntervalRemoved(boost::bind(&ComboBox::handleContentsIntervalRemoved, this, _1)); _SelectionChangedConnection = getModel()->connectSelectionChanged(boost::bind(&ComboBox::handleSelectionChanged, this, _1)); updateListFromModel(); } } if(((whichField & CellGeneratorFieldMask) || (whichField & ComboListPopupMenuFieldMask)) && getCellGenerator() != NULL) { getComboListPopupMenu()->setCellGenerator(getCellGenerator()); } }