static void ui_layout_save_load(void** state) { UILayout layout; (void)state; assert_true(UILayout_saveLayout(&s_layout, "t2-output/temp_layout.json")); assert_true(UILayout_loadLayout(&layout, "t2-output/temp_layout.json")); compareLayouts(&layout, &s_layout); }
static void ui_session_layout(void** state) { UILayout layout; UILayout layout2; (void)state; PluginHandler_addStaticPlugin(&s_pluginData); imguiSetup(1024, 768); ImGuiIO& io = ImGui::GetIO(); Session* session = Session_create(); Session* session2 = Session_create(); PluginData* registersPlugin = PluginHandler_findPlugin(0, "registers_plugin", "Registers View", true); PluginData* sourcecodePlugin = PluginHandler_findPlugin(0, "sourcecode_plugin", "Source Code View", true); ViewPluginInstance* i0 = PluginInstance_createViewPlugin(registersPlugin); ViewPluginInstance* i1 = PluginInstance_createViewPlugin(sourcecodePlugin); Session_addViewPlugin(session, i0); Session_addViewPlugin(session, i1); PluginUI_setWindowRect(i0, &s_t0); PluginUI_setWindowRect(i1, &s_t1); Session_getLayout(session, &layout, io.DisplaySize.x, io.DisplaySize.y); UILayout_saveLayout(&layout, "t2-output/temp_layout2.json"); // Tear down Session_removeViewPlugin(session, i0); Session_removeViewPlugin(session, i1); PluginHandler_unloadAllPlugins(); // Load the layout UILayout_loadLayout(&layout2, "t2-output/temp_layout2.json"); compareLayouts(&layout, &layout2); int count = 0; Session_setLayout(session2, &layout2, io.DisplaySize.x, io.DisplaySize.y); ViewPluginInstance** plugins = Session_getViewPlugins(session2, &count); assert_int_equal(layout.layoutItemCount, count); for (int i = 0; i < layout.layoutItemCount; ++i) { FloatRect rect; PluginUI_getWindowRect(plugins[i], &rect); const LayoutItem* item = &layout2.layoutItems[i]; assert_int_equal((int)(item->rect.x * io.DisplaySize.x), (int)rect.x); assert_int_equal((int)(item->rect.y * io.DisplaySize.y), (int)rect.y); assert_int_equal((int)(item->rect.width * io.DisplaySize.x), (int)rect.width); assert_int_equal((int)(item->rect.height * io.DisplaySize.y), (int)rect.height); } }
bool KPrPageLayouts::loadOdf( KoPALoadingContext & context ) { QHash<QString, KoXmlElement*> layouts = context.odfLoadingContext().stylesReader().presentationPageLayouts(); QHash<QString, KoXmlElement*>::iterator it( layouts.begin() ); // TODO need to use the correct page size // we should check which layouts are already loaded const QMap<QString, KoPAMasterPage *> & masterPages = context.masterPages(); if ( ! masterPages.isEmpty() ) { KoPageLayout & layout = masterPages.begin().value()->pageLayout(); QRectF pageRect( 0, 0, layout.width, layout.height ); for ( ; it != layouts.end(); ++it ) { KPrPageLayout * pageLayout = new KPrPageLayout(); if ( pageLayout->loadOdf( *( it.value() ), pageRect ) ) { QMap<KPrPageLayoutWrapper, KPrPageLayout *>::const_iterator it( m_pageLayouts.constFind( KPrPageLayoutWrapper( pageLayout ) ) ); if ( it != m_pageLayouts.constEnd() ) { delete pageLayout; } else { m_pageLayouts.insert( KPrPageLayoutWrapper( pageLayout ), pageLayout ); } } else { delete pageLayout; } } } // handel default styles layouts = context.odfLoadingContext().defaultStylesReader().presentationPageLayouts(); it = layouts.begin(); QList<KPrPageLayout *> defaultLayouts; for ( ; it != layouts.end(); ++it ) { KPrPageLayout * pageLayout = new KPrPageLayout(); // this is not used but needed QRectF pageRect( 0, 0, 800, 600 ); if ( pageLayout->loadOdf( *( it.value() ), pageRect ) ) { defaultLayouts.append( pageLayout ); } else { delete pageLayout; } } QList<KPrPageLayout *> documentLayouts = m_pageLayouts.values(); qSort( documentLayouts.begin(), documentLayouts.end(), compareLayouts ); qSort( defaultLayouts.begin(), defaultLayouts.end(), compareLayouts ); QList<KPrPageLayout *>::const_iterator docIt = documentLayouts.constBegin(); QList<KPrPageLayout *>::const_iterator defaultIt = defaultLayouts.constBegin(); while ( defaultIt != defaultLayouts.constEnd() ) { if ( docIt == documentLayouts.constEnd() || compareLayouts( *defaultIt, *docIt ) ) { m_pageLayouts.insert( KPrPageLayoutWrapper( *defaultIt ), *defaultIt ); ++defaultIt; } else if ( compareLayouts( *docIt, *defaultIt ) ) { ++docIt; } else { // it already exist ++docIt; ++defaultIt; } } return true; }