bool fl_FrameLayout::bl_doclistener_insertEndFrame(fl_ContainerLayout*, const PX_ChangeRecord_Strux * pcrx, PL_StruxDocHandle sdh, PL_ListenerId lid, void (* pfnBindHandles)(PL_StruxDocHandle sdhNew, PL_ListenerId lid, PL_StruxFmtHandle sfhNew)) { // The endFrame strux actually needs a format handle to to this Frame layout. // so we bind to this layout. PL_StruxFmtHandle sfhNew = static_cast<PL_StruxFmtHandle>(this); pfnBindHandles(sdh,lid,sfhNew); // // increment the insertion point in the view. // FV_View* pView = m_pLayout->getView(); if (pView && (pView->isActive() || pView->isPreview())) { pView->setPoint(pcrx->getPosition() + fl_BLOCK_STRUX_OFFSET); } else if(pView && pView->getPoint() > pcrx->getPosition()) { pView->setPoint(pView->getPoint() + fl_BLOCK_STRUX_OFFSET); } if(pView) pView->updateCarets(pcrx->getPosition(),1); m_bHasEndFrame = true; return true; }
bool fl_EmbedLayout::bl_doclistener_insertEndEmbed(fl_ContainerLayout*, const PX_ChangeRecord_Strux * pcrx, pf_Frag_Strux* sdh, PL_ListenerId lid, void (* pfnBindHandles)(pf_Frag_Strux* sdhNew, PL_ListenerId lid, fl_ContainerLayout* sfhNew)) { // The endFootnote strux actually needs a format handle to to this Footnote layout. // so we bind to this layout. fl_ContainerLayout* sfhNew = this; pfnBindHandles(sdh,lid,sfhNew); // // increment the insertion point in the view. // FV_View* pView = m_pLayout->getView(); if (pView && (pView->isActive() || pView->isPreview())) { pView->setPoint(pcrx->getPosition() + fl_BLOCK_STRUX_OFFSET); } else if(pView && pView->getPoint() > pcrx->getPosition()) { pView->setPoint(pView->getPoint() + fl_BLOCK_STRUX_OFFSET); } m_bHasEndFootnote = true; fl_BlockLayout * pBL = static_cast<fl_BlockLayout *>(getFirstLayout()); pBL->updateEnclosingBlockIfNeeded(); return true; }
gint AP_UnixLeftRuler::_fe::button_release_event(GtkWidget * w, GdkEventButton * e) { // a static function AP_UnixLeftRuler * pUnixLeftRuler = static_cast<AP_UnixLeftRuler *>(g_object_get_data(G_OBJECT(w), "user_data")); EV_EditModifierState ems = 0; EV_EditMouseButton emb = 0; FV_View * pView = static_cast<FV_View *>(pUnixLeftRuler->m_pFrame->getCurrentView()); if (!pView || pView->getPoint() == 0 || !pUnixLeftRuler->m_pG) return 1; if (e->state & GDK_SHIFT_MASK) ems |= EV_EMS_SHIFT; if (e->state & GDK_CONTROL_MASK) ems |= EV_EMS_CONTROL; if (e->state & GDK_MOD1_MASK) ems |= EV_EMS_ALT; if (e->state & GDK_BUTTON1_MASK) emb = EV_EMB_BUTTON1; else if (e->state & GDK_BUTTON2_MASK) emb = EV_EMB_BUTTON2; else if (e->state & GDK_BUTTON3_MASK) emb = EV_EMB_BUTTON3; pUnixLeftRuler->mouseRelease(ems, emb, pUnixLeftRuler->m_pG->tlu(static_cast<UT_uint32>(e->x)), pUnixLeftRuler->m_pG->tlu(static_cast<UT_uint32>(e->y))); // release the mouse after we are done. gtk_grab_remove(w); return 1; }
/*! * This code actually inserts a block AFTER the frame in the docsectionlayout * Code copied from tablelayout */ bool fl_FrameLayout::insertBlockAfter(fl_ContainerLayout* /*pLBlock*/, const PX_ChangeRecord_Strux * pcrx, PL_StruxDocHandle sdh, PL_ListenerId lid, void (* pfnBindHandles)(PL_StruxDocHandle sdhNew, PL_ListenerId lid, PL_StruxFmtHandle sfhNew)) { UT_ASSERT(pcrx->getType()==PX_ChangeRecord::PXT_InsertStrux); UT_ASSERT(pcrx->getStruxType()==PTX_Block); fl_ContainerLayout * pNewCL = NULL; fl_ContainerLayout * pMyCL = myContainingLayout(); pNewCL = pMyCL->insert(sdh,this,pcrx->getIndexAP(), FL_CONTAINER_BLOCK); fl_BlockLayout * pBlock = static_cast<fl_BlockLayout *>(pNewCL); // // Set the sectionlayout of this frame to that of the block since it is that scope // pBlock->setSectionLayout(static_cast<fl_SectionLayout *>(myContainingLayout())); pNewCL->setContainingLayout(myContainingLayout()); // Must call the bind function to complete the exchange of handles // with the document (piece table) *** before *** anything tries // to call down into the document (like all of the view // listeners). PL_StruxFmtHandle sfhNew = static_cast<PL_StruxFmtHandle>(pNewCL); pfnBindHandles(sdh,lid,sfhNew); // // increment the insertion point in the view. // FV_View* pView = m_pLayout->getView(); if (pView && (pView->isActive() || pView->isPreview())) { pView->setPoint(pcrx->getPosition() + fl_BLOCK_STRUX_OFFSET); } else if(pView && pView->getPoint() > pcrx->getPosition()) { pView->setPoint(pView->getPoint() + fl_BLOCK_STRUX_OFFSET); } if(pView) pView->updateCarets(pcrx->getPosition(),1); return true; }
/*! Parse stream contents into the document \param stream Stream to import from This code is used for both files and the clipboard */ UT_Error IE_Imp_Object::_parseStream(ImportStream * pStream) { UT_return_val_if_fail(pStream, UT_ERROR); XAP_Frame *pFrame = XAP_App::getApp()->getLastFocussedFrame(); FV_View* pView = static_cast<FV_View*>(pFrame->getCurrentView()); UT_UCSChar c; unsigned char uc; while (pStream->getChar(c)) { uc = static_cast<unsigned char>(c); m_pByteBuf->append(&uc,1); } const char* mimetypeGOChart = "application/x-goffice-graph"; const char * szProps="embed-type: GOChart"; PT_DocPosition pos = pView->getPoint(); pView->cmdInsertEmbed(m_pByteBuf,pView->getPoint(),mimetypeGOChart,szProps); pView->cmdSelect(pos,pos+1); return UT_OK; }
void AP_Dialog_Paragraph::_createPreviewFromGC(GR_Graphics * gc, UT_uint32 width, UT_uint32 height) { UT_return_if_fail (gc); // g_free any attached preview DELETEP(m_paragraphPreview); // platform's runModal should have set this UT_return_if_fail (m_pFrame); AV_View * baseview = m_pFrame->getCurrentView(); UT_return_if_fail (baseview); FV_View * view = static_cast<FV_View *> (baseview); FL_DocLayout * dl = view->getLayout(); UT_return_if_fail (dl); fl_BlockLayout * bl = dl->findBlockAtPosition((PT_DocPosition) view->getPoint()); UT_return_if_fail (bl); UT_GrowBuf gb; bool hadMem = bl->getBlockBuf(&gb); UT_UCSChar * tmp = NULL; if (hadMem && gb.getLength() > 0) { gb.truncate(NUM_CHARS_FOR_SAMPLE); UT_UCS4_cloneString(&tmp, (UT_UCSChar *) gb.getPointer(0)); } else { const XAP_StringSet * pSS = m_pApp->getStringSet(); // if the paragraph was empty, use our sample UT_UCS4_cloneString_char(&tmp, pSS->getValue(AP_STRING_ID_DLG_Para_PreviewSampleFallback)); } m_paragraphPreview = new AP_Preview_Paragraph(gc, tmp, this); FREEP(tmp); UT_return_if_fail (m_paragraphPreview); m_paragraphPreview->setWindowSize(width, height); // TODO : any setup of the GC for drawing }
/*! * Background abi repaint function. \param XAP_UnixFrame * p pointer to the Frame that initiated this background repainter. */ gint AP_UnixLeftRuler::_fe::abi_expose_repaint( gpointer p) { // // Grab our pointer so we can do useful stuff. // UT_Rect localCopy; AP_UnixLeftRuler * pR = static_cast<AP_UnixLeftRuler *>(p); GR_Graphics * pG = pR->getGraphics(); if(pG == NULL || pG->isDontRedraw()) { // // Come back later // return TRUE; } FV_View * pView = static_cast<FV_View *>(pR->m_pFrame->getCurrentView()); if(pView && pView->getPoint()==0) { // // Come back later // return TRUE; } pG->setSpawnedRedraw(true); if(pG->isExposePending()) { while(pG->isExposedAreaAccessed()) { UT_usleep(10); // 10 microseconds } pG->setExposedAreaAccessed(true); localCopy.set(pG->getPendingRect()->left,pG->getPendingRect()->top, pG->getPendingRect()->width,pG->getPendingRect()->height); // // Clear out this set of expose info // pG->setExposePending(false); pG->setExposedAreaAccessed(false); xxx_UT_DEBUGMSG(("Painting area on Left ruler: left=%d, top=%d, width=%d, height=%d\n", localCopy.left, localCopy.top, localCopy.width, localCopy.height)); xxx_UT_DEBUGMSG(("SEVIOR: Repaint now \n")); pR->draw(&localCopy); } // // OK we've finshed. Wait for the next signal // pG->setSpawnedRedraw(false); return TRUE; }
// // AbiMathView_FileInsert // ------------------- // This is the function that we actually call to insert the MathML. // bool AbiMathView_FileInsert(AV_View* /*v*/, EV_EditMethodCallData* /*d*/) { // Get the current view that the user is in. XAP_Frame *pFrame = XAP_App::getApp()->getLastFocussedFrame(); FV_View* pView = static_cast<FV_View*>(pFrame->getCurrentView()); PD_Document * pDoc = static_cast<PD_Document *>(pFrame->getCurrentDoc()); char* pNewFile = NULL; bool bOK = s_AskForMathMLPathname(pFrame,&pNewFile); if (!bOK || !pNewFile) { UT_DEBUGMSG(("ARRG! bOK = %d pNewFile = %s \n",bOK,pNewFile)); return false; } UT_UTF8String sNewFile = pNewFile; // we own storage for pNewFile and must free it. FREEP(pNewFile); UT_DEBUGMSG(("fileInsertMathML: loading [%s]\n",sNewFile.utf8_str())); IE_Imp_MathML * pImpMathML = new IE_Imp_MathML(pDoc, pMathManager->EntityTable()); UT_Error errorCode = pImpMathML->importFile(sNewFile.utf8_str()); if (errorCode != UT_OK) { s_CouldNotLoadFileMessage(pFrame, sNewFile.utf8_str(), errorCode); DELETEP(pImpMathML); return false; } /* Create the data item */ UT_uint32 uid = pDoc->getUID(UT_UniqueId::Image); UT_UTF8String sUID; UT_UTF8String_sprintf(sUID,"%d",uid); pDoc->createDataItem(sUID.utf8_str(), false, pImpMathML->getByteBuf(), "application/mathml+xml", NULL); /* Insert the MathML Object */ PT_DocPosition pos = pView->getPoint(); pView->cmdInsertMathML(sUID.utf8_str(),pos); DELETEP(pImpMathML); return true; }
void AP_UnixDialog_FormatFrame::notifyActiveFrame(XAP_Frame *_pFrame) { UT_ASSERT(m_windowMain); ConstructWindowName(); gtk_window_set_title (GTK_WINDOW (m_windowMain), m_WindowName); setAllSensitivities(); FV_View * pView = static_cast<FV_View *>(_pFrame->getCurrentView()); if(pView && pView->isInFrame(pView->getPoint())) { fl_BlockLayout * pBL = pView->getCurrentBlock(); fl_FrameLayout * pFrame = static_cast<fl_FrameLayout *>(pBL->myContainingLayout()); if(pFrame->getContainerType() != FL_CONTAINER_FRAME) { UT_ASSERT_HARMLESS(UT_SHOULD_NOT_HAPPEN); return; } if(pFrame->getFrameWrapMode() >= FL_FRAME_WRAPPED_TO_RIGHT) { setWrapping(true); } else { setWrapping(false); } gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_wWrapButton),getWrapping()); if(positionMode() == FL_FRAME_POSITIONED_TO_BLOCK) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( m_wPosParagraph),TRUE); } else if(positionMode() == FL_FRAME_POSITIONED_TO_COLUMN) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_wPosColumn),TRUE); } else if(positionMode() == FL_FRAME_POSITIONED_TO_PAGE) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_wPosPage),TRUE); } } }
gint AP_UnixLeftRuler::_fe::motion_notify_event(GtkWidget* w , GdkEventMotion* e) { // a static function AP_UnixLeftRuler * pUnixLeftRuler = static_cast<AP_UnixLeftRuler *>(g_object_get_data(G_OBJECT(w), "user_data")); FV_View * pView = static_cast<FV_View *>(pUnixLeftRuler->m_pFrame->getCurrentView()); if (!pView || pView->getPoint() == 0 || !pUnixLeftRuler->m_pG) return 1; EV_EditModifierState ems = 0; if (e->state & GDK_SHIFT_MASK) ems |= EV_EMS_SHIFT; if (e->state & GDK_CONTROL_MASK) ems |= EV_EMS_CONTROL; if (e->state & GDK_MOD1_MASK) ems |= EV_EMS_ALT; pUnixLeftRuler->mouseMotion(ems, pUnixLeftRuler->m_pG->tlu(static_cast<UT_uint32>(e->x)), pUnixLeftRuler->m_pG->tlu(static_cast<UT_uint32>(e->y))); return 1; }
void fp_AnnotationRun::_draw(dg_DrawArgs* pDA) { if(!displayAnnotations()) return; if(!m_bIsStart) return; GR_Graphics * pG = pDA->pG; UT_sint32 xoff = 0, yoff = 0; GR_Painter painter(pG); // need screen locations of this run getLine()->getScreenOffsets(this, xoff, yoff); UT_sint32 iYdraw = pDA->yoff - getAscent()-1; UT_uint32 iRunBase = getBlock()->getPosition() + getBlockOffset(); // // Sevior was here // UT_sint32 iFillTop = iYdraw; UT_sint32 iFillTop = iYdraw+1; UT_sint32 iFillHeight = getAscent() + getDescent(); FV_View* pView = _getView(); UT_uint32 iSelAnchor = pView->getSelectionAnchor(); UT_uint32 iPoint = pView->getPoint(); UT_uint32 iSel1 = UT_MIN(iSelAnchor, iPoint); UT_uint32 iSel2 = UT_MAX(iSelAnchor, iPoint); UT_ASSERT(iSel1 <= iSel2); bool bIsInTOC = getBlock()->isContainedByTOC(); if ( isInSelectedTOC() || (!bIsInTOC && ( /* pView->getFocus()!=AV_FOCUS_NONE && */ (iSel1 <= iRunBase) && (iSel2 > iRunBase))) ) { UT_RGBColor color(_getView()->getColorSelBackground()); pG->setColor(_getView()->getColorAnnotation(this)); painter.fillRect(color, pDA->xoff, iFillTop, getWidth(), iFillHeight); } else { Fill(getGraphics(),pDA->xoff, iFillTop, getWidth(), iFillHeight); pG->setColor(_getColorFG()); } pG->setFont(_getFont()); pG->setColor(_getView()->getColorAnnotation(this)); UT_DEBUGMSG(("Drawing string m_sValue %s \n",m_sValue.utf8_str())); painter.drawChars(m_sValue.ucs4_str().ucs4_str(), 0,m_sValue.ucs4_str().size(), pDA->xoff,iYdraw, NULL); // // Draw underline/overline/strikethough // UT_sint32 yTopOfRun = pDA->yoff - getAscent()-1; // Hack to remove //character dirt drawDecors( xoff, yTopOfRun,pG); }
LRESULT CALLBACK AP_Win32TopRuler::_TopRulerWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { // this is a static member function. AP_Win32TopRuler * pRuler = GWL(hwnd); if (!pRuler) return UT_DefWindowProc(hwnd, iMsg, wParam, lParam); GR_Win32Graphics * pG = static_cast<GR_Win32Graphics *>(pRuler->m_pG); switch (iMsg) { case WM_LBUTTONDOWN: SetCapture(hwnd); pRuler->mousePress(s_GetEMS(wParam),EV_EMB_BUTTON1,pG->tlu(LOWORD(lParam)),pG->tlu(HIWORD(lParam))); { pG->handleSetCursorMessage(); } return 0; case WM_MBUTTONDOWN: SetCapture(hwnd); pRuler->mousePress(s_GetEMS(wParam),EV_EMB_BUTTON2,pG->tlu(LOWORD(lParam)),pG->tlu(HIWORD(lParam))); { pG->handleSetCursorMessage(); } return 0; case WM_RBUTTONDOWN: SetCapture(hwnd); pRuler->mousePress(s_GetEMS(wParam),EV_EMB_BUTTON3, pG->tlu(LOWORD(lParam)),pG->tlu(HIWORD(lParam))); { pG->handleSetCursorMessage(); } return 0; case WM_MOUSEMOVE: { // HACK for not updating Ruler for incremental Loading FV_View * pView = (FV_View *) pRuler->getView(); if(pView && (pView->getPoint() == 0)) { return 0; } } pRuler->mouseMotion(s_GetEMS(wParam),pG->tlu(signedLoWord(lParam)),pG->tlu(signedHiWord(lParam))); pRuler->isMouseOverTab(pG->tlu(signedLoWord(lParam)),pG->tlu(signedHiWord(lParam))); return 0; case WM_LBUTTONUP: pRuler->mouseRelease(s_GetEMS(wParam),EV_EMB_BUTTON1,pG->tlu(signedLoWord(lParam)),pG->tlu(signedHiWord(lParam))); ReleaseCapture(); return 0; case WM_MBUTTONUP: pRuler->mouseRelease(s_GetEMS(wParam),EV_EMB_BUTTON2,pG->tlu(signedLoWord(lParam)),pG->tlu(signedHiWord(lParam))); ReleaseCapture(); return 0; case WM_RBUTTONUP: pRuler->mouseRelease(s_GetEMS(wParam),EV_EMB_BUTTON3,pG->tlu(signedLoWord(lParam)),pG->tlu(signedHiWord(lParam))); ReleaseCapture(); return 0; case WM_PAINT: { // HACK for not updating Ruler for incremental Loading FV_View * pView = (FV_View *) pRuler->getView(); if(pView && (pView->getPoint() == 0)) { return 0; } PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); UT_return_val_if_fail(hdc, 0); UT_Rect r(pG->tlu(ps.rcPaint.left), pG->tlu(ps.rcPaint.top), pG->tlu(ps.rcPaint.right-ps.rcPaint.left+1), pG->tlu(ps.rcPaint.bottom-ps.rcPaint.top+1)); pRuler->draw(&r); EndPaint(hwnd,&ps); return 0; } case WM_SYSCOLORCHANGE: { pG->init3dColors(); return 0; } case WM_SETCURSOR: { pG->handleSetCursorMessage(); return 0; } default: break; } return UT_DefWindowProc(hwnd, iMsg, wParam, lParam); }
static void changed_cb (GOComponent *component, gpointer data) { if (data != NULL) { GOComponentView * pGOComponentView = static_cast<GOComponentView*> (data); pGOComponentView->update (); } else { XAP_Frame *pFrame = XAP_App::getApp()->getLastFocussedFrame(); FV_View* pView = static_cast<FV_View*>(pFrame->getCurrentView()); UT_Byte *buf; int length; void (*clearfunc) (gpointer); gpointer user_data = NULL; if (go_component_get_data (component, (void**) &buf, &length, &clearfunc, &user_data)) { if (buf && length) { UT_ByteBufPtr myByteBuf(new UT_ByteBuf); myByteBuf->append(buf, length); UT_String Props="embed-type: GOComponent"; guint i, nbprops; GType prop_type; GValue value = G_VALUE_INIT; char *prop = NULL; GParamSpec **specs = g_object_class_list_properties ( G_OBJECT_GET_CLASS (component), &nbprops); for (i = 0; i < nbprops; i++) { if (specs[i]->flags & GO_PARAM_PERSISTENT) { prop_type = G_PARAM_SPEC_VALUE_TYPE (specs[i]); memset(&value, 0, sizeof(value)); g_value_init (&value, prop_type); g_object_get_property (G_OBJECT (component), specs[i]->name, &value); if (!g_param_value_defaults (specs[i], &value)) switch (G_TYPE_FUNDAMENTAL (prop_type)) { case G_TYPE_CHAR: case G_TYPE_UCHAR: case G_TYPE_BOOLEAN: case G_TYPE_INT: case G_TYPE_UINT: case G_TYPE_LONG: case G_TYPE_ULONG: case G_TYPE_FLOAT: case G_TYPE_DOUBLE: { GValue str; memset(&str, 0, sizeof(str)); g_value_init (&str, G_TYPE_STRING); g_value_transform (&value, &str); prop = g_strdup (g_value_get_string (&str)); g_value_unset (&str); break; } case G_TYPE_STRING: { prop = g_strdup (g_value_get_string (&value)); break; } default: prop = NULL; break; } g_value_unset (&value); if (prop) { Props += UT_String_sprintf("; %s:%s", specs[i]->name, prop); g_free (prop); prop = NULL; } } } PT_DocPosition pos = pView->getPoint(); pView->cmdInsertEmbed(myByteBuf, pView->getPoint(), component->mime_type, Props.c_str ()); pView->cmdSelect(pos,pos+1); } if (clearfunc) clearfunc ((user_data)? user_data: buf); } g_object_unref (component); // destroy since we created a new one this will close the editor } }
void fp_EmbedRun::_draw(dg_DrawArgs* pDA) { GR_Graphics *pG = pDA->pG; #if 0 UT_DEBUGMSG(("Draw with class %x \n",pG)); UT_DEBUGMSG(("Contents of fp EmbedRun \n %s \n",m_sEmbedML.utf8_str())); #endif FV_View* pView = _getView(); UT_return_if_fail(pView); // need to draw to the full height of line to join with line above. UT_sint32 xoff= 0, yoff=0, DA_xoff = pDA->xoff; getLine()->getScreenOffsets(this, xoff, yoff); // need to clear full height of line, in case we had a selection UT_sint32 iFillHeight = getLine()->getHeight(); UT_sint32 iFillTop = pDA->yoff - getLine()->getAscent(); UT_uint32 iSelAnchor = pView->getSelectionAnchor(); UT_uint32 iPoint = pView->getPoint(); UT_uint32 iSel1 = UT_MIN(iSelAnchor, iPoint); UT_uint32 iSel2 = UT_MAX(iSelAnchor, iPoint); UT_ASSERT(iSel1 <= iSel2); UT_uint32 iRunBase = getBlock()->getPosition() + getOffsetFirstVis(); // Fill with background, then redraw. UT_sint32 iLineHeight = getLine()->getHeight(); bool bIsSelected = false; if ( !pG->queryProperties(GR_Graphics::DGP_PAPER) && (isInSelectedTOC() || (iSel1 <= iRunBase && iSel2 > iRunBase)) ) { // Need the painter lock to be released at the end of this block GR_Painter painter(pG); painter.fillRect(_getView()->getColorSelBackground(), /*pDA->xoff*/DA_xoff, iFillTop, getWidth(), iFillHeight); bIsSelected = true; getEmbedManager()->setColor(m_iEmbedUID,_getView()->getColorSelForeground()); } else { Fill(getGraphics(),pDA->xoff, pDA->yoff - getAscent(), getWidth()+getGraphics()->tlu(1), iLineHeight+getGraphics()->tlu(1)); getEmbedManager()->setColor(m_iEmbedUID,getFGColor()); } UT_Rect rec; rec.left = pDA->xoff; rec.top = pDA->yoff; rec.height = getHeight(); rec.width = getWidth(); if(getEmbedManager()->isDefault()) { rec.top -= _getLayoutPropFromObject("ascent"); } UT_DEBUGMSG(("Draw Embed object top %d \n",rec.top)); getEmbedManager()->render(m_iEmbedUID,rec); if(m_bNeedsSnapshot && !getEmbedManager()->isDefault() && getGraphics()->queryProperties(GR_Graphics::DGP_SCREEN) ) { UT_Rect myrec = rec; myrec.top -= getAscent(); if(!bIsSelected) { getEmbedManager()->makeSnapShot(m_iEmbedUID,myrec); m_bNeedsSnapshot = false; } } if(bIsSelected) { UT_Rect myrec = rec; if(!getEmbedManager()->isDefault()) { myrec.top -= getAscent(); } _drawResizeBox(myrec); } }
void AP_Dialog_FormatTable::setCurCellProps(void) { XAP_Frame *frame = XAP_App::getApp()->getLastFocussedFrame(); if (frame) { FV_View * pView = static_cast<FV_View *>(frame->getCurrentView()); if (m_bSettingsChanged || m_iOldPos == pView->getPoint()) // comparing the actual cell pos would be even better; but who cares :) return; m_iOldPos = pView->getPoint(); /* * update the border colors */ gchar * color = NULL; if (pView->getCellProperty("left-color", color)) m_vecProps.addOrReplaceProp("left-color", color); else m_vecProps.removeProp("left-color"); if (pView->getCellProperty("right-color", color)) m_vecProps.addOrReplaceProp("right-color", color); else m_vecProps.removeProp("right-color"); if (pView->getCellProperty("top-color", color)) m_vecProps.addOrReplaceProp("top-color", color); else m_vecProps.removeProp("top-color"); if (pView->getCellProperty("bot-color", color)) m_vecProps.addOrReplaceProp("bot-color", color); else m_vecProps.removeProp("bot-color"); /* * update the background color */ UT_RGBColor clr; gchar * bgColor = NULL; if (pView->getCellProperty("background-color", bgColor)) { m_vecProps.addOrReplaceProp("background-color", bgColor); clr.setColor(bgColor); setBackgroundColorInGUI(clr); } else { m_vecProps.removeProp("background-color"); setBackgroundColorInGUI(UT_RGBColor(255,255,255)); // No color == white for now - MARCM } if(pView->isImageAtStrux(m_iOldPos,PTX_SectionCell)) { if(pView->isInTable()) { fl_BlockLayout * pBL = pView->getCurrentBlock(); fl_CellLayout * pCell = static_cast<fl_CellLayout *>(pBL->myContainingLayout()); if(pCell->getContainerType() != FL_CONTAINER_CELL) { UT_ASSERT_HARMLESS(UT_SHOULD_NOT_HAPPEN); DELETEP(m_pGraphic); DELETEP(m_pImage); m_sImagePath.clear(); } else { FG_Graphic * pFG = FG_GraphicRaster::createFromStrux(pCell); if(pFG) { DELETEP(m_pGraphic); DELETEP(m_pImage); m_sImagePath.clear(); m_pGraphic = pFG; m_sImagePath = pFG->getDataId(); GR_Graphics * pG = m_pFormatTablePreview->getGraphics(); const UT_ByteBuf * pBB = pFG->getBuffer(); if(m_pGraphic->getType() == FGT_Raster) { m_pImage = static_cast<GR_Image *>( pG->createNewImage( m_sImagePath.c_str(), pBB, pFG->getMimeType(), pFG->getWidth(), pFG->getHeight(), GR_Image::GRT_Raster)); } else { m_pImage = static_cast<GR_Image *>( pG->createNewImage( m_sImagePath.c_str(), pBB, pFG->getMimeType(), m_pFormatTablePreview->getWindowWidth()-2, m_pFormatTablePreview->getWindowHeight()-2, GR_Image::GRT_Vector)); } } } } else { DELETEP(m_pGraphic); DELETEP(m_pImage); m_sImagePath.clear(); } } else { DELETEP(m_pGraphic); DELETEP(m_pImage); m_sImagePath.clear(); } UT_String bstmp = UT_String_sprintf("%d", FS_FILL); m_vecProps.addOrReplaceProp("bg-style", bstmp.c_str()); // draw the preview with the changed properties if(m_pFormatTablePreview) m_pFormatTablePreview->queueDraw(); } }
/*! * This method sets the sensitivity of the radio buttons to above/below/left/right merges * Because we can't merge to the left of column zero for example. * * Call this right after contructing the widget and before dropping into the main loop. */ void AP_Dialog_SplitCells::setAllSensitivities(void) { FV_View * pView = 0; if (XAP_Frame * pFrame = getApp()->getLastFocussedFrame()) { pView = static_cast<FV_View *>(pFrame->getCurrentView()); } if (!pView) { setSensitivity(vert_above, false); setSensitivity(vert_mid, false); setSensitivity(vert_below, false); setSensitivity(hori_left, false); setSensitivity(hori_mid, false); setSensitivity(hori_right, false); return; } if (!pView->isInTable()) { setSensitivity(vert_above, false); setSensitivity(vert_mid, false); setSensitivity(vert_below, false); setSensitivity(hori_left, false); setSensitivity(hori_mid, false); setSensitivity(hori_right, false); return; } PT_DocPosition iCurPos = pView->getPoint(); m_iCellSource = iCurPos; pView->getCellParams(iCurPos,&m_iLeft,&m_iRight,&m_iTop,&m_iBot); // // Now find the number of rows and columns inthis table. This is easiest to // get from the table container // fl_BlockLayout * pBL = pView->getLayout()->findBlockAtPosition(iCurPos); fp_Run * pRun; UT_sint32 xPoint,yPoint,xPoint2,yPoint2,iPointHeight; bool bDirection; pRun = pBL->findPointCoords(iCurPos, false, xPoint, yPoint, xPoint2, yPoint2, iPointHeight, bDirection); UT_return_if_fail(pRun); fp_Line * pLine = pRun->getLine(); UT_return_if_fail(pLine); fp_Container * pCon = pLine->getContainer(); UT_return_if_fail(pCon); fp_TableContainer * pTab = static_cast<fp_TableContainer *>(pCon->getContainer()); UT_return_if_fail(pTab); UT_return_if_fail(pTab->getContainerType() == FP_CONTAINER_TABLE); m_pTab = pTab; m_iNumRows = pTab->getNumRows(); m_iNumCols = pTab->getNumCols(); if(m_iBot > m_iTop+2) { setSensitivity(vert_above,true); setSensitivity(vert_below,true); } else { setSensitivity(vert_above,false); setSensitivity(vert_below,false); } UT_sint32 diff = m_iBot - m_iTop; if((m_iBot - m_iTop == 1) || (2*(diff/2) == diff)) { setSensitivity(vert_mid,true); } else { setSensitivity(vert_mid,false); } if(m_iRight > m_iLeft+2) { setSensitivity(hori_left,true); setSensitivity(hori_right,true); } else { setSensitivity(hori_left,false); setSensitivity(hori_right,false); } diff = m_iRight - m_iLeft; if((m_iRight - m_iLeft == 1) || (2*(diff/2) == diff)) { setSensitivity(hori_mid,true); } else { setSensitivity(hori_mid,false); } }
void AP_Dialog_FormatFrame::setCurFrameProps(void) { XAP_Frame * frame = m_pApp->getLastFocussedFrame(); if (!frame) { if (m_bSensitive) { m_bSensitive = false; setAllSensitivities(); } return; } FV_View * pView = static_cast<FV_View *>(frame->getCurrentView()); if (!pView) { if (m_bSensitive) { m_bSensitive = false; setAllSensitivities(); } return; } PT_DocPosition pos = pView->getPoint(); if (/* m_bSettingsChanged || */ m_iOldPos == pos) { // comparing the actual cell pos would be even better; but who cares :) return; } m_iOldPos = pos; if (!pView->isInFrame(pos)) { if (m_bSensitive) { m_bSensitive = false; setAllSensitivities(); } return; } m_bLineToggled = false; m_borderLineStyleRight = LS_NORMAL; m_borderLineStyleLeft = LS_NORMAL; m_borderLineStyleTop = LS_NORMAL; m_borderLineStyleBottom = LS_NORMAL; UT_RGBColor black(0,0,0); UT_RGBColor white(255,255,255); m_borderColor = black; m_borderColorRight = black; m_borderColorLeft = black; m_borderColorTop = black; m_borderColorBottom = black; m_borderThicknessRight = 1.0f; m_borderThicknessLeft = 1.0f; m_borderThicknessTop = 1.0f; m_borderThicknessBottom = 1.0f; m_sBorderThickness = "1.00pt", m_sBorderThicknessRight = "1.00pt"; m_sBorderThicknessLeft = "1.00pt"; m_sBorderThicknessTop = "1.00pt"; m_sBorderThicknessBottom = "1.00pt"; m_backgroundColor = white; m_bSetWrapping = false; m_iFramePositionTo = FL_FRAME_POSITIONED_TO_BLOCK; PD_Document * pDoc = pView->getDocument(); PL_StruxDocHandle sdh; m_bSensitive = false; if (pDoc->getStruxOfTypeFromPosition(pos, PTX_SectionFrame, &sdh)) if (PT_AttrPropIndex api = pDoc->getAPIFromSDH(sdh)) { const PP_AttrProp * pAP = 0; if (pDoc->getAttrProp(api, &pAP)) if (pAP) { m_bSensitive = true; #define REPLACE_CELL_PROPERTY(X) \ do { \ const gchar * prop = 0; \ if (pAP->getProperty(X, prop)) \ m_vecProps.addOrReplaceProp(X, prop); \ else \ m_vecProps.removeProp(X); \ } while (0) REPLACE_CELL_PROPERTY("right-style"); REPLACE_CELL_PROPERTY("left-style"); REPLACE_CELL_PROPERTY("top-style"); REPLACE_CELL_PROPERTY("bot-style"); REPLACE_CELL_PROPERTY("right-thickness"); REPLACE_CELL_PROPERTY("left-thickness"); REPLACE_CELL_PROPERTY("top-thickness"); REPLACE_CELL_PROPERTY("bot-thickness"); REPLACE_CELL_PROPERTY("right-color"); REPLACE_CELL_PROPERTY("left-color"); REPLACE_CELL_PROPERTY("top-color"); REPLACE_CELL_PROPERTY("bot-color"); REPLACE_CELL_PROPERTY("background-color"); REPLACE_CELL_PROPERTY("wrap-mode"); REPLACE_CELL_PROPERTY("position-to"); } } if (!m_bSensitive) { setAllSensitivities(); return; } if(pView->isImageAtStrux(m_iOldPos,PTX_SectionFrame)) { if(true /* pView->isInFrame(pView->getPoint()) */) { fl_BlockLayout * pBL = pView->getCurrentBlock(); fl_FrameLayout * pFrame = static_cast<fl_FrameLayout *>(pBL->myContainingLayout()); if(pFrame->getContainerType() != FL_CONTAINER_FRAME) { UT_ASSERT_HARMLESS(UT_SHOULD_NOT_HAPPEN); DELETEP(m_pGraphic); DELETEP(m_pImage); m_sImagePath.clear(); } else { FG_Graphic * pFG = FG_GraphicRaster::createFromStrux(pFrame); if(pFG) { DELETEP(m_pGraphic); DELETEP(m_pImage); m_sImagePath.clear(); m_pGraphic = pFG; m_sImagePath = pFG->getDataId(); GR_Graphics * pG = m_pFormatFramePreview->getGraphics(); m_pImage = _makeImageForRaster(m_sImagePath, pG, m_pGraphic); } } } else { DELETEP(m_pGraphic); DELETEP(m_pImage); m_sImagePath.clear(); } } else { DELETEP(m_pGraphic); DELETEP(m_pImage); m_sImagePath.clear(); } UT_String bstmp = UT_String_sprintf("%d", FS_FILL); m_vecProps.addOrReplaceProp("bg-style", bstmp.c_str()); // FIXME ?? const gchar * pszStyle = 0; m_vecProps.getProp("background-color", pszStyle); if (pszStyle) { m_backgroundColor.setColor(pszStyle); } /* update border properties */ long linestyle; pszStyle = 0; m_vecProps.getProp("right-style", pszStyle); if (pszStyle) { linestyle = LS_NORMAL; sscanf(pszStyle, "%ld", &linestyle); m_borderLineStyleRight = linestyle; } pszStyle = 0; m_vecProps.getProp("left-style", pszStyle); if (pszStyle) { linestyle = LS_NORMAL; sscanf(pszStyle, "%ld", &linestyle); m_borderLineStyleLeft = linestyle; } pszStyle = 0; m_vecProps.getProp("top-style", pszStyle); if (pszStyle) { linestyle = LS_NORMAL; sscanf(pszStyle, "%ld", &linestyle); m_borderLineStyleTop = linestyle; } pszStyle = 0; m_vecProps.getProp("bot-style", pszStyle); if (pszStyle) { linestyle = LS_NORMAL; sscanf(pszStyle, "%ld", &linestyle); m_borderLineStyleBottom = linestyle; } pszStyle = 0; m_vecProps.getProp("right-color", pszStyle); if (pszStyle) { m_borderColorRight.setColor(pszStyle); } pszStyle = 0; m_vecProps.getProp("left-color", pszStyle); if (pszStyle) { m_borderColorLeft.setColor(pszStyle); } pszStyle = 0; m_vecProps.getProp("top-color", pszStyle); if (pszStyle) { m_borderColorTop.setColor(pszStyle); } pszStyle = 0; m_vecProps.getProp("bot-color", pszStyle); if (pszStyle) { m_borderColorBottom.setColor(pszStyle); } UT_UTF8String thickness; pszStyle = 0; m_vecProps.getProp("right-thickness", pszStyle); if (pszStyle) { thickness = pszStyle; setBorderThicknessRight(thickness); } pszStyle = 0; m_vecProps.getProp("left-thickness", pszStyle); if (pszStyle) { thickness = pszStyle; setBorderThicknessLeft(thickness); } pszStyle = 0; m_vecProps.getProp("top-thickness", pszStyle); if (pszStyle) { thickness = pszStyle; setBorderThicknessTop(thickness); } pszStyle = 0; m_vecProps.getProp("bot-thickness", pszStyle); if (pszStyle) { thickness = pszStyle; setBorderThicknessBottom(thickness); } /* update wrap properties */ pszStyle = 0; m_vecProps.getProp("wrap-mode", pszStyle); if (pszStyle) { if (strcmp (pszStyle, "wrapped-both") == 0) { m_bSetWrapping = true; } } /* update position properties */ pszStyle = 0; m_vecProps.getProp("position-to", pszStyle); if (pszStyle) { if (strcmp (pszStyle, "block-above-text") == 0) { m_iFramePositionTo = FL_FRAME_POSITIONED_TO_BLOCK; } else if (strcmp (pszStyle, "column-above-text") == 0) { m_iFramePositionTo = FL_FRAME_POSITIONED_TO_COLUMN; } else if (strcmp (pszStyle, "page-above-text") == 0) { m_iFramePositionTo = FL_FRAME_POSITIONED_TO_PAGE; } } /* draw the preview with the changed properties */ if(m_pFormatFramePreview) { m_pFormatFramePreview->draw(); } m_bSettingsChanged = false; setActiveFrame(frame); // this is just to trigger the subclass to update the dialog }