// Does the initial show/hide of toolbars (based on the user prefs). // This is needed because toggleBar is called only when the user // (un)checks the show {Stantandard,Format,Extra} toolbar checkbox, // and thus we have to manually call this function at startup. void AP_UnixFrameImpl::_showOrHideToolbars() { XAP_Frame* pFrame = getFrame(); bool *bShowBar = static_cast<AP_FrameData*>(pFrame->getFrameData())->m_bShowBar; UT_uint32 cnt = m_vecToolbarLayoutNames.getItemCount(); for (UT_uint32 i = 0; i < cnt; i++) { // TODO: The two next lines are here to bind the EV_Toolbar to the // AP_FrameData, but their correct place are next to the toolbar creation (JCA) EV_UnixToolbar * pUnixToolbar = static_cast<EV_UnixToolbar *> (m_vecToolbars.getNthItem(i)); static_cast<AP_FrameData*> (pFrame->getFrameData())->m_pToolbar[i] = pUnixToolbar; static_cast<AP_UnixFrame *>(pFrame)->toggleBar(i, bShowBar[i]); } }
// Does the initial show/hide of statusbar (based on the user prefs). // Idem. void AP_UnixFrameImpl::_showOrHideStatusbar() { #ifdef ENABLE_STATUSBAR XAP_Frame* pFrame = getFrame(); bool bShowStatusBar = static_cast<AP_FrameData*> (pFrame->getFrameData())->m_bShowStatusBar; static_cast<AP_UnixFrame *>(pFrame)->toggleStatusBar(bShowStatusBar); #endif }
GtkWidget * AP_UnixFrameImpl::_createStatusBarWindow() { #ifdef ENABLE_STATUSBAR XAP_Frame* pFrame = getFrame(); AP_UnixStatusBar * pUnixStatusBar = new AP_UnixStatusBar(pFrame); UT_ASSERT(pUnixStatusBar); static_cast<AP_FrameData *>(pFrame->getFrameData())->m_pStatusBar = pUnixStatusBar; return pUnixStatusBar->createWidget(); #else return NULL; #endif }
bool AP_Win32App::_pasteFormatFromClipboard(PD_DocumentRange * pDocRange, const char * szFormat, const char * szType, bool bWide) { HANDLE hData; bool bSuccess = false; if (!(hData = m_pClipboard->getHandleInFormat(szFormat))) return bSuccess; // It's a bitmap if (g_ascii_strcasecmp(szFormat, AP_CLIPBOARD_BMP)==0) { HBITMAP hBitmap; PBITMAPINFO bi; HWND hWnd; HDC hdc; IE_ImpGraphic* pIEG = NULL; FG_Graphic* pFG = NULL; UT_Error errorCode; UT_ByteBuf byteBuf; IEGraphicFileType iegft = IEGFT_BMP; XAP_Frame* pFrame; AP_FrameData* pFrameData; FL_DocLayout* pDocLy; FV_View* pView; UT_ByteBuf* bBufBMP = new UT_ByteBuf; hBitmap = (HBITMAP)hData; hWnd = GetDesktopWindow(); hdc = GetDC(hWnd); // Create a BMP file from a BITMAP bi = CreateBitmapInfoStruct(hBitmap); CreateBMP(hWnd, *bBufBMP, bi, hBitmap,hdc); // Since we are providing the file type, there is not need to pass the bytebuff filled up errorCode = IE_ImpGraphic::constructImporter(*bBufBMP, iegft, &pIEG); if(errorCode != UT_OK) return false; errorCode = pIEG->importGraphic(bBufBMP, &pFG); if(errorCode != UT_OK || !pFG) { DELETEP(bBufBMP); DELETEP(pIEG); return false; } // sunk in importGraphic bBufBMP = NULL; // Insert graphic in the view pFrame = getLastFocussedFrame(); pFrameData = (AP_FrameData*) pFrame->getFrameData(); pDocLy = pFrameData->m_pDocLayout; pView = pDocLy->getView(); errorCode = pView->cmdInsertGraphic(pFG); DELETEP(pIEG); //DELETEP(pFG); bSuccess = true; } else { unsigned char * pData = static_cast<unsigned char *>(GlobalLock(hData)); UT_DEBUGMSG(("Paste: [fmt %s %s][hdata 0x%08lx][pData 0x%08lx]\n", szFormat, szType, hData, pData)); UT_uint32 iSize = GlobalSize(hData); UT_uint32 iStrLen = bWide ? wcslen(reinterpret_cast<const wchar_t *>(pData)) * 2 : strlen(reinterpret_cast<const char *>(pData)); UT_uint32 iLen = UT_MIN(iSize,iStrLen); IE_Imp * pImp = 0; IE_Imp::constructImporter(pDocRange->m_pDoc, IE_Imp::fileTypeForSuffix(szType), &pImp, 0); if (pImp) { const char * szEncoding = 0; if (bWide) szEncoding = XAP_EncodingManager::get_instance()->getUCS2LEName(); else ; // TODO Get code page using CF_LOCALE pImp->pasteFromBuffer(pDocRange,pData,iLen,szEncoding); delete pImp; } GlobalUnlock(hData); bSuccess = true; } return bSuccess; }
GtkWidget * AP_UnixFrameImpl::_createDocumentWindow() { XAP_Frame* pFrame = getFrame(); bool bShowRulers = static_cast<AP_FrameData*>(pFrame->getFrameData())->m_bShowRuler; // create the rulers AP_UnixTopRuler * pUnixTopRuler = NULL; AP_UnixLeftRuler * pUnixLeftRuler = NULL; if ( bShowRulers ) { pUnixTopRuler = new AP_UnixTopRuler(pFrame); UT_ASSERT(pUnixTopRuler); m_topRuler = pUnixTopRuler->createWidget(); if (static_cast<AP_FrameData*>(pFrame->getFrameData())->m_pViewMode == VIEW_PRINT) { pUnixLeftRuler = new AP_UnixLeftRuler(pFrame); UT_ASSERT(pUnixLeftRuler); m_leftRuler = pUnixLeftRuler->createWidget(); // get the width from the left ruler and stuff it into the top ruler. //pUnixTopRuler->setOffsetLeftRuler(pUnixLeftRuler->getWidth()); } else { m_leftRuler = NULL; //pUnixTopRuler->setOffsetLeftRuler(0); } } else { m_topRuler = NULL; m_leftRuler = NULL; } static_cast<AP_FrameData*>(pFrame->getFrameData())->m_pTopRuler = pUnixTopRuler; static_cast<AP_FrameData*>(pFrame->getFrameData())->m_pLeftRuler = pUnixLeftRuler; // set up for scroll bars. m_pHadj = reinterpret_cast<GtkAdjustment *>(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); m_hScroll = gtk_hscrollbar_new(m_pHadj); g_object_set_data(G_OBJECT(m_pHadj), "user_data", this); g_object_set_data(G_OBJECT(m_hScroll), "user_data", this); m_iHScrollSignal = g_signal_connect(G_OBJECT(m_pHadj), "value_changed", G_CALLBACK(XAP_UnixFrameImpl::_fe::hScrollChanged), NULL); m_pVadj = reinterpret_cast<GtkAdjustment *>(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); m_vScroll = gtk_vscrollbar_new(m_pVadj); g_object_set_data(G_OBJECT(m_pVadj), "user_data", this); g_object_set_data(G_OBJECT(m_vScroll), "user_data", this); m_iVScrollSignal = g_signal_connect(G_OBJECT(m_pVadj), "value_changed", G_CALLBACK(XAP_UnixFrameImpl::_fe::vScrollChanged), NULL); // we don't want either scrollbar grabbing events from us GTK_WIDGET_UNSET_FLAGS(m_hScroll, GTK_CAN_FOCUS); GTK_WIDGET_UNSET_FLAGS(m_vScroll, GTK_CAN_FOCUS); // create a drawing area in the for our document window. m_dArea = ap_DocView_new(); g_object_set_data(G_OBJECT(m_dArea), "user_data", this); UT_DEBUGMSG(("!!! drawing area m_dArea created! %p for %p \n",m_dArea,this)); GTK_WIDGET_SET_FLAGS (m_dArea, GTK_CAN_FOCUS); // allow it to be focussed gtk_widget_set_events(GTK_WIDGET(m_dArea), (GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_FOCUS_CHANGE_MASK | GDK_LEAVE_NOTIFY_MASK)); gtk_widget_set_double_buffered(GTK_WIDGET(m_dArea), FALSE); g_signal_connect(G_OBJECT(m_dArea), "expose_event", G_CALLBACK(XAP_UnixFrameImpl::_fe::expose), NULL); g_signal_connect(G_OBJECT(m_dArea), "key_press_event", G_CALLBACK(XAP_UnixFrameImpl::_fe::key_press_event), NULL); g_signal_connect(G_OBJECT(m_dArea), "key_release_event", G_CALLBACK(XAP_UnixFrameImpl::_fe::key_release_event), NULL); g_signal_connect(G_OBJECT(m_dArea), "button_press_event", G_CALLBACK(XAP_UnixFrameImpl::_fe::button_press_event), NULL); g_signal_connect(G_OBJECT(m_dArea), "button_release_event", G_CALLBACK(XAP_UnixFrameImpl::_fe::button_release_event), NULL); g_signal_connect(G_OBJECT(m_dArea), "motion_notify_event", G_CALLBACK(XAP_UnixFrameImpl::_fe::motion_notify_event), NULL); g_signal_connect(G_OBJECT(m_dArea), "scroll_event", G_CALLBACK(XAP_UnixFrameImpl::_fe::scroll_notify_event), NULL); g_signal_connect(G_OBJECT(m_dArea), "configure_event", G_CALLBACK(XAP_UnixFrameImpl::_fe::configure_event), NULL); // focus and XIM related g_signal_connect(G_OBJECT(m_dArea), "enter_notify_event", G_CALLBACK(ap_focus_in_event), this); g_signal_connect(G_OBJECT(m_dArea), "leave_notify_event", G_CALLBACK(ap_focus_out_event), this); // // Need this to fix screen flicker for abiwidget on focus in/out // g_signal_connect(G_OBJECT(m_dArea), "focus_in_event", G_CALLBACK(XAP_UnixFrameImpl::_fe::focus_in_event), this); g_signal_connect(G_OBJECT(m_dArea), "focus_out_event", G_CALLBACK(XAP_UnixFrameImpl::_fe::focus_out_event), this); // create a table for scroll bars, rulers, and drawing area m_table = gtk_table_new(1, 1, FALSE); //was 1,1 g_object_set_data(G_OBJECT(m_table),"user_data", this); // NOTE: in order to display w/ and w/o rulers, gtk needs two tables to // work with. The 2 2x2 tables, (i)nner and (o)uter divide up the 3x3 // table as follows. The inner table is at the 1,1 table. // +-----+---+ // | i i | o | // | i i | | // +-----+---+ // | o | o | // +-----+---+ // scroll bars gtk_table_attach(GTK_TABLE(m_table), m_hScroll, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), // was just GTK_FILL 0, 0); gtk_table_attach(GTK_TABLE(m_table), m_vScroll, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), // was just GTK_FILL (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); // arrange the widgets within our inner table. m_innertable = gtk_table_new(2,2,FALSE); gtk_table_attach( GTK_TABLE(m_table), m_innertable, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); if ( bShowRulers ) { gtk_table_attach(GTK_TABLE(m_innertable), m_topRuler, 0, 2, 0, 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_FILL), 0, 0); if (m_leftRuler) gtk_table_attach(GTK_TABLE(m_innertable), m_leftRuler, 0, 1, 1, 2, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); gtk_table_attach(GTK_TABLE(m_innertable), m_dArea, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); } else // no rulers { gtk_table_attach(GTK_TABLE(m_innertable), m_dArea, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); } // create a 3d box and put the table in it, so that we // get a sunken in look. m_wSunkenBox = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(m_wSunkenBox), GTK_SHADOW_IN); gtk_container_add(GTK_CONTAINER(m_wSunkenBox), m_table); // (scrollbars are shown, only if needed, by _setScrollRange) gtk_widget_show(m_dArea); gtk_widget_show(m_innertable); gtk_widget_show(m_table); return m_wSunkenBox; }