//----------------------------------------------------------------------------- EmbedViewOperation::EmbedViewOperation (UISelection* selection, CViewContainer* newContainer) : BaseSelectionOperation<std::pair<SharedPointer<CView>, CRect> > (selection) , newContainer (newContainer) { parent = dynamic_cast<CViewContainer*> (selection->first ()->getParentView ()); FOREACH_IN_SELECTION(selection, view) if (view->getParentView () == parent) { push_back (std::make_pair (view, view->getViewSize ())); } FOREACH_IN_SELECTION_END CRect r = selection->first ()->getViewSize (); const_iterator it = begin (); while (it != end ()) { CView* view = (*it).first; CRect viewSize = view->getViewSize (); if (viewSize.left < r.left) r.left = viewSize.left; if (viewSize.right > r.right) r.right = viewSize.right; if (viewSize.top < r.top) r.top = viewSize.top; if (viewSize.bottom > r.bottom) r.bottom = viewSize.bottom; it++; } r.extend (10, 10); newContainer->setViewSize (r); newContainer->setMouseableArea (r); }
void valueChanged (CControl* pControl) { if (pControl->getValue ()) { switch (pControl->getTag ()) { case 0: { CView* view = desc->createView ("ModalView", this); if (view) { CFrame* frame = pControl->getFrame (); CPoint center = frame->getViewSize ().getCenter (); CRect viewSize = view->getViewSize (); viewSize.offset (center.x - viewSize.getWidth () / 2, center.y - viewSize.getHeight () / 2); view->setViewSize (viewSize); view->setMouseableArea (viewSize); frame->setModalView (view); view->setAlphaValue (0.f); view->addAnimation ("AlphaAnimation", new Animation::AlphaValueAnimation (1.f), new Animation::PowerTimingFunction (240, 2)); pControl->setValue (0); view->forget (); } break; } case 1: { CView* modalView = pControl->getFrame ()->getModalView (); modalView->addAnimation ("AlphaAnimation", new RemoveModalViewAnimation (0.f), new Animation::PowerTimingFunction (240, 0.5)); pControl->setMouseEnabled (false); break; } } } }
//----------------------------------------------------------------------------- void ViewSizeChangeOperation::undo () { selection->empty (); iterator it = begin (); while (it != end ()) { CView* view = (*it).first; CRect size ((*it).second); view->invalid (); (*it).second = view->getViewSize (); CViewContainer* container = 0; bool oldAutosizing = false; if (!autosizing) { container = dynamic_cast<CViewContainer*> (view); if (container) { oldAutosizing = container->getAutosizingEnabled (); container->setAutosizingEnabled (false); } } view->setViewSize (size); view->setMouseableArea (size); view->invalid (); selection->add (view); if (!autosizing && container) { container->setAutosizingEnabled (oldAutosizing); } it++; } }
//---------------------------------------------------------------------------------------------------- void UIDialogController::run (UTF8StringPtr _templateName, UTF8StringPtr _dialogTitle, UTF8StringPtr _button1, UTF8StringPtr _button2, IController* _dialogController, UIDescription* _description) { collectOpenGLViews (frame); templateName = _templateName; dialogTitle = _dialogTitle; dialogButton1 = _button1; dialogButton2 = _button2 != 0 ? _button2 : ""; dialogController = dynamic_cast<CBaseObject*> (_dialogController); dialogDescription = _description; CView* view = UIEditController::getEditorDescription ().createView ("dialog", this); if (view) { CRect size = view->getViewSize (); size.right += sizeDiff.x; size.bottom += sizeDiff.y; CRect frameSize = frame->getViewSize (); size.centerInside (frameSize); size.makeIntegral (); view->setViewSize (size); view->setMouseableArea (size); frame->setModalView (view); frame->registerKeyboardHook (this); if (button1) frame->setFocusView (button1); setOpenGLViewsVisible (false); dialogController->notify (this, kMsgDialogShow); } else { forget (); } }
//-------------------------------------------------------------------------------- void CRowColumnView::layoutViewsEqualSize () { CPoint maxSize; getMaxChildViewSize (maxSize); if (style == kRowStyle) maxSize.x = getViewSize ().getWidth () - (margin.right + margin.left); else maxSize.y = getViewSize ().getHeight () - (margin.top + margin.bottom); CPoint location = margin.getTopLeft (); ViewIterator it (this); while (*it) { CView* view = *it; CRect viewSize = view->getViewSize (); viewSize.originize (); viewSize.offset (location.x, location.y); switch (layoutStyle) { case kStretchEqualy: { viewSize.setWidth (maxSize.x); viewSize.setHeight (maxSize.y); break; } case kCenterEqualy: { CCoord diffX = (maxSize.x - viewSize.getWidth ()) / 2.; CCoord diffY = (maxSize.y - viewSize.getHeight ()) / 2.; viewSize.offset (diffX, diffY); break; } case kRightBottomEqualy: { CCoord diffX = maxSize.x - viewSize.getWidth (); CCoord diffY = maxSize.y - viewSize.getHeight (); viewSize.offset (diffX, diffY); break; } default: break; } resizeSubView (view, viewSize); if (style == kRowStyle) { location.y += spacing; location.y += viewSize.getHeight (); } else { location.x += spacing; location.x += viewSize.getWidth (); } it++; } }
//---------------------------------------------------------------------------------------------------- void UIDialogController::viewSizeChanged (CView* view, const CRect& oldSize) { if (view == frame) { CView* dialog = frame->getModalView (); CRect viewSize = dialog->getViewSize (); viewSize.centerInside (frame->getViewSize ()); dialog->setViewSize (viewSize); dialog->setMouseableArea (viewSize); } }
//-------------------------------------------------------------------------------- void CRowColumnView::getMaxChildViewSize (CPoint& maxSize) { ViewIterator it (this); while (*it) { CView* view = *it; CRect viewSize = view->getViewSize (); if (viewSize.getWidth () > maxSize.x) maxSize.x = viewSize.getWidth (); if (viewSize.getHeight () > maxSize.y) maxSize.y = viewSize.getHeight (); it++; } }
//----------------------------------------------------------------------------- CMessageResult CScrollView::notify (CBaseObject* sender, IdStringPtr message) { if (message == kMsgNewFocusView && getStyle () & kFollowFocusView) { CView* focusView = (CView*)sender; if (sc->isChild (focusView, true)) { CRect r = focusView->getViewSize (); CPoint p; focusView->localToFrame (p); frameToLocal (p); r.offset (p.x, p.y); makeRectVisible (r); } } return CViewContainer::notify (sender, message); }
//---------------------------------------------------------------------------------------------------- void UIDialogController::run (UTF8StringPtr _templateName, UTF8StringPtr _dialogTitle, UTF8StringPtr _button1, UTF8StringPtr _button2, IController* _dialogController, UIDescription* _description) { collectOpenGLViews (frame); templateName = _templateName; dialogTitle = _dialogTitle; dialogButton1 = _button1; dialogButton2 = _button2 != 0 ? _button2 : ""; dialogController = dynamic_cast<CBaseObject*> (_dialogController); dialogDescription = _description; CView* view = UIEditController::getEditorDescription ().createView ("dialog", this); if (view) { CLayeredViewContainer* layeredView = dynamic_cast<CLayeredViewContainer*>(view); if (layeredView) layeredView->setZIndex (10); CRect size = view->getViewSize (); size.right += sizeDiff.x; size.bottom += sizeDiff.y; CRect frameSize = frame->getViewSize (); size.centerInside (frameSize); size.makeIntegral (); view->setViewSize (size); view->setMouseableArea (size); view->setAlphaValue (0.f); frame->setModalView (view); frame->registerKeyboardHook (this); frame->registerViewListener (this); view->registerViewListener (this); if (button1) frame->setFocusView (button1); setOpenGLViewsVisible (false); if (dialogController) dialogController->notify (this, kMsgDialogShow); view->addAnimation ("AlphaAnimation", new Animation::AlphaValueAnimation (1.f), new Animation::LinearTimingFunction (160)); } else { forget (); } }
//----------------------------------------------------------------------------- void EmbedViewOperation::perform () { CRect parentRect = newContainer->getViewSize (); const_iterator it = begin (); while (it != end ()) { CView* view = (*it).first; parent->removeView (view, false); CRect r = view->getViewSize (); r.offset (-parentRect.left, -parentRect.top); view->setViewSize (r); view->setMouseableArea (r); newContainer->addView (view); it++; } parent->addView (newContainer); newContainer->remember (); selection->setExclusive (newContainer); }
//---------------------------------------------------------------------------------------------------- void UnembedViewOperation::undo () { CRect containerViewSize = containerView->getViewSize (); const_iterator it = begin (); while (it != end ()) { CView* view = (*it); parent->removeView (view, false); CRect viewSize = view->getViewSize (); CRect mouseSize = view->getMouseableArea (); viewSize.offset (-containerViewSize.left, -containerViewSize.top); mouseSize.offset (-containerViewSize.left, -containerViewSize.top); view->setViewSize (viewSize); view->setMouseableArea (mouseSize); containerView->addView (view); it++; } parent->addView (containerView); selection->setExclusive (containerView); }
//---------------------------------------------------------------------------------------------------- SharedPointer<UISelection> UIViewCreatorDataSource::createSelection () { SharedPointer<UISelection> selection; UIAttributes viewAttr; viewAttr.setAttribute (UIViewCreator::kAttrClass, getStringList ()->at (static_cast<uint32_t> (mouseDownRow))); CView* view = factory->createView (viewAttr, description); if (view) { if (view->getViewSize ().isEmpty ()) { CRect size (CPoint (0, 0), CPoint (20, 20)); view->setViewSize (size); view->setMouseableArea (size); } selection = owned (new UISelection ()); selection->add (view); view->forget (); } return selection; }
//----------------------------------------------------------------------------- bool CScrollContainer::attached (CView* parent) { bool result = CViewContainer::attached (parent); if (getNbViews () == 1) { CView* view = getView (0); if (view) { CRect r (view->getViewSize ()); CRect newContainerSize (containerSize); newContainerSize.setWidth (r.getWidth ()); newContainerSize.setHeight (r.getHeight ()); if (newContainerSize != containerSize) { CScrollView* scrollView = (CScrollView*)getParentView (); scrollView->setContainerSize (newContainerSize); } } } return result; }
//----------------------------------------------------------------------------- CMessageResult CScrollContainer::notify (CBaseObject* sender, IdStringPtr message) { if (message == kMsgViewSizeChanged && !inScrolling) { uint32_t numSubViews = getNbViews (); CView* view = static_cast<CView*> (sender); if (numSubViews == 1 && view && isChild (view)) { CRect r (view->getViewSize ()); CRect newContainerSize (containerSize); newContainerSize.setWidth (r.getWidth ()); newContainerSize.setHeight (r.getHeight ()); if (newContainerSize != containerSize) { CScrollView* scrollView = (CScrollView*)getParentView (); scrollView->setContainerSize (newContainerSize); } } } return getParentView () ? getParentView ()->notify (sender, message) : kMessageUnknown; }
//---------------------------------------------------------------------------------------------------- void UnembedViewOperation::perform () { IDependency::DeferChanges dc (selection); selection->remove (containerView); CRect containerViewSize = containerView->getViewSize (); const_reverse_iterator it = rbegin (); while (it != rend ()) { CView* view = (*it); CRect viewSize = view->getViewSize (); CRect mouseSize = view->getMouseableArea (); containerView->removeView (view, false); viewSize.offset (containerViewSize.left, containerViewSize.top); mouseSize.offset (containerViewSize.left, containerViewSize.top); view->setViewSize (viewSize); view->setMouseableArea (mouseSize); if (parent->addView (view)) selection->add (view); it++; } parent->removeView (containerView, false); }
//----------------------------------------------------------------------------- void CTabView::setViewSize (const CRect &rect, bool invalid) { if (rect == getViewSize ()) return; CRect oldSize (getViewSize ()); CCoord widthDelta = rect.getWidth () - oldSize.getWidth (); CCoord heightDelta = rect.getHeight () - oldSize.getHeight (); if (widthDelta != 0 || heightDelta != 0) { uint32_t numSubviews = getNbViews(); int32_t counter = 1; bool treatAsColumn = (getAutosizeFlags () & kAutosizeColumn) ? true : false; bool treatAsRow = (getAutosizeFlags () & kAutosizeRow) ? true : false; CTabChildView* v = firstChild; while (v) { if (v != currentChild) { CView* pV = v->view; int32_t autosize = pV->getAutosizeFlags (); CRect viewSize (pV->getViewSize ()); CRect mouseSize (pV->getMouseableArea ()); if (treatAsColumn) { if (counter) { viewSize.offset (counter * (widthDelta / (numSubviews)), 0); mouseSize.offset (counter * (widthDelta / (numSubviews)), 0); } viewSize.setWidth (viewSize.getWidth () + (widthDelta / (numSubviews))); mouseSize.setWidth (mouseSize.getWidth () + (widthDelta / (numSubviews))); } else if (widthDelta != 0 && autosize & kAutosizeRight) { viewSize.right += widthDelta; mouseSize.right += widthDelta; if (!(autosize & kAutosizeLeft)) { viewSize.left += widthDelta; mouseSize.left += widthDelta; } } if (treatAsRow) { if (counter) { viewSize.offset (0, counter * (heightDelta / (numSubviews))); mouseSize.offset (0, counter * (heightDelta / (numSubviews))); } viewSize.setHeight (viewSize.getHeight () + (heightDelta / (numSubviews))); mouseSize.setHeight (mouseSize.getHeight () + (heightDelta / (numSubviews))); } else if (heightDelta != 0 && autosize & kAutosizeBottom) { viewSize.bottom += heightDelta; mouseSize.bottom += heightDelta; if (!(autosize & kAutosizeTop)) { viewSize.top += heightDelta; mouseSize.top += heightDelta; } } if (viewSize != pV->getViewSize ()) { pV->setViewSize (viewSize); pV->setMouseableArea (mouseSize); } } v = v->next; // counter++; } } CViewContainer::setViewSize (rect, invalid); }
void cBitmapFontEditable::takeFocus(CDrawContext *pContext) { if(!m_editing) { getText((char*)&m_old_buffer); } m_editing = true; if(m_edit_index) { m_edit_index = 0; memset(m_edit_buffer, 0x0, sizeof(char) * MAX_EDIT_CHARS); } setText(" "); #if WINDOWS || MACX // calculate offset for CViewContainers CRect rect (size); CView* parent = getParentView (); CRect vSize; while (parent) { if (parent->notify (this, kMsgCheckIfViewContainer) == kMessageNotified) { parent->getViewSize (vSize); rect.offset (vSize.left, vSize.top); } parent = parent->getParentView (); } if (pContext) rect.offset (pContext->offset.h, pContext->offset.v); #endif #if WINDOWS // int wstyle = 0; // if (horiTxtAlign == kLeftText) // wstyle |= ES_LEFT; // else if (horiTxtAlign == kRightText) // wstyle |= ES_RIGHT; // else // wstyle |= ES_CENTER; // // wstyle |= WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL; // platformControl = (void*)CreateWindow ( // "EDIT", text, wstyle, // rect.left, rect.top, rect.width ()/* + 1*/, rect.height ()/* + 1*/, // (HWND)getFrame ()->getSystemWindow (), NULL, GetInstance (), 0); // // // get/set the current font // LOGFONT logfont = {0}; // // long fontH = gStandardFontSize [fontID]; // if (fontH > rect.height () - 2) // fontH = rect.height () - 2; // // logfont.lfWeight = FW_NORMAL; // logfont.lfHeight = -fontH; // logfont.lfPitchAndFamily = VARIABLE_PITCH | FF_SWISS; // strcpy (logfont.lfFaceName, gStandardFontName[fontID]); // // logfont.lfClipPrecision = CLIP_STROKE_PRECIS; // logfont.lfOutPrecision = OUT_STRING_PRECIS; // logfont.lfQuality = DEFAULT_QUALITY; // logfont.lfCharSet = ANSI_CHARSET; // // platformFont = (HANDLE)CreateFontIndirect (&logfont); // platformFontColor = 0; // SetWindowLongPtr ((HWND)platformControl, GWLP_USERDATA, (LONG_PTR)this); // SendMessage ((HWND)platformControl, WM_SETFONT, (WPARAM)platformFont, true); SendMessage ((HWND)platformControl, EM_SETMARGINS, EC_LEFTMARGIN|EC_RIGHTMARGIN, MAKELONG (0, 0)); // SendMessage ((HWND)platformControl, EM_SETSEL, 0, -1); SendMessage ((HWND)platformControl, EM_LIMITTEXT, 255, 0); SetFocus ((HWND)platformControl); oldWndProcEdit = (WINDOWSPROC)SetWindowLongPtr ((HWND)platformControl, GWLP_WNDPROC, (LONG_PTR)WindowProcEdit); #elif MAC WindowRef window = (WindowRef)getFrame()->getSystemWindow(); SetUserFocusWindow(window); AdvanceKeyboardFocus(window); EventTypeSpec eventTypes[] = { { kEventClassMouse, kEventMouseDown }, { kEventClassWindow, kEventWindowDeactivated }, { kEventClassKeyboard, kEventRawKeyDown }, { kEventClassKeyboard, kEventRawKeyRepeat } }; InstallWindowEventHandler(window, TextControlProc, GetEventTypeCount(eventTypes), eventTypes, this, &gEventHandler); #endif setDirty(); }