bool pt_PieceTable::appendStyle(const gchar ** attributes) { // this function can only be called while loading the document. //UT_ASSERT(m_pts==PTS_Loading); // first, store the attributes and properties and get an index to them. PT_AttrPropIndex indexAP; if (!m_varset.storeAP(attributes,&indexAP)) return false; // verify unique name UT_ASSERT_HARMLESS(sizeof(char) == sizeof(gchar)); const char * szName = UT_getAttribute(PT_NAME_ATTRIBUTE_NAME, attributes); if (!szName || !*szName) { UT_ASSERT_HARMLESS(UT_SHOULD_NOT_HAPPEN); return true; // silently ignore unnamed styles } UT_DEBUGMSG(("STYLE: Appending style %s \n",szName)); PD_Style * pStyle = NULL; if (getStyle(szName,&pStyle) == true) { // duplicate name UT_return_val_if_fail (pStyle, false); if (pStyle->isUserDefined()) { // already loaded, ignore redefinition UT_DEBUGMSG(("appendStyle[%s]: duplicate definition ignored\n", szName)); return true; } // override builtin definition return pStyle->setIndexAP(indexAP); } else { // this is a new name pStyle = new PD_Style(this, indexAP, szName); UT_DEBUGMSG(("STYLE: Creating new style %s saving in hash \n",szName)); // // TODO: Learn how to use Dom's AbiObject instead of this hack. // Rob asks, as AbiObject is no more, is this still a hack? // if (pStyle) m_hashStyles.insert(szName,pStyle); return true; } }
bool pt_PieceTable::removeStyle (const gchar * szName) { UT_return_val_if_fail (szName, false); UT_ASSERT_HARMLESS(sizeof(char) == sizeof(gchar)); UT_DEBUGMSG(("DOM: remove the style, maybe recode the hash-table\n")); PD_Style * pStyle; if (getStyle(szName,&pStyle)) { if (!pStyle->isUserDefined()) return false; // can't destroy a builtin style delete pStyle; m_hashStyles.remove (szName, NULL); return true; } return false; }
void AP_UnixDialog_Styles::event_ModifyClicked(void) { PD_Style * pStyle = NULL; const char * szCurrentStyle = getCurrentStyle (); m_sNewStyleName = szCurrentStyle; if(szCurrentStyle) getDoc()->getStyle(szCurrentStyle, &pStyle); if (!pStyle) { // TODO: error message - nothing selected return; } // // Allow built-ins to be modified // #if 0 if (!pStyle->isUserDefined ()) { // can't change builtin, error message const XAP_StringSet * pSS = m_pApp->getStringSet(); UT_UTF8String s; pSS->getValueUTF8 (AP_STRING_ID_DLG_Styles_ErrStyleBuiltin,s); const gchar * msg = s.utf8_str(); getFrame()->showMessageBox (static_cast<const char *>(msg), XAP_Dialog_MessageBox::b_O, XAP_Dialog_MessageBox::a_OK); return; } #endif #if HIDE_MAIN_DIALOG // // Hide the old window // gtk_widget_hide(m_windowMain); #endif // // fill the data structures needed for the Modify dialog // setIsNew(false); modifyRunModal(); if(m_answer == AP_Dialog_Styles::a_OK) { applyModifiedStyleToDoc(); getDoc()->updateDocForStyleChange(getCurrentStyle(),true); getDoc()->signalListeners(PD_SIGNAL_UPDATE_LAYOUT); } else { // // Do other stuff // } // // Restore the values in the main dialog // #if HIDE_MAIN_DIALOG // // Reveal main window again // gtk_widget_show( m_windowMain); #endif }