2009-10-09 Chris Toshok <toshok@ximian.com>
[moon.git] / src / template.cpp
blobdb7b4e49951129596e6a93a34e7ecd114f0980a2
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 /*
3 * template.cpp:
5 * Contact:
6 * Moonlight List (moonlight-list@lists.ximian.com)
8 * Copyright 2008 Novell, Inc. (http://www.novell.com)
10 * See the LICENSE file included with the distribution for details.
15 #include <config.h>
16 #include "template.h"
17 #include "namescope.h"
19 FrameworkTemplate::FrameworkTemplate ()
21 SetObjectType (Type::FRAMEWORKTEMPLATE);
23 xaml_buffer = NULL;
24 xaml_context = NULL;
27 FrameworkTemplate::~FrameworkTemplate ()
29 if (xaml_buffer) {
30 g_free (xaml_buffer);
31 xaml_buffer = NULL;
33 delete xaml_context;
34 xaml_context = NULL;
37 void
38 FrameworkTemplate::SetXamlBuffer (XamlContext *xaml_context, const char *xaml_buffer)
40 // printf ("%p setting xaml buffer to %s\n", this, xaml_buffer);
41 this->xaml_buffer = g_strdup (xaml_buffer);
42 this->xaml_context = xaml_context;
45 DependencyObject*
46 FrameworkTemplate::GetVisualTree (FrameworkElement *templateBindingSource)
48 if (xaml_buffer) {
49 XamlLoader *loader = new XamlLoader (GetResourceBase(), NULL, xaml_buffer, GetSurface(), xaml_context);
50 Type::Kind dummy;
52 loader->SetExpandingTemplate (true);
53 loader->SetImportDefaultXmlns (true);
55 xaml_context->SetTemplateBindingSource (templateBindingSource);
57 DependencyObject *result = loader->CreateDependencyObjectFromString (xaml_buffer, true, &dummy);
59 delete loader;
61 if (result)
62 NameScope::GetNameScope (result)->Lock ();
63 return result;
66 return NULL;
69 ControlTemplate::ControlTemplate ()
71 SetObjectType (Type::CONTROLTEMPLATE);
74 DataTemplate::DataTemplate ()
76 SetObjectType (Type::DATATEMPLATE);
79 DependencyObject *
80 DataTemplate::GetVisualTree (FrameworkElement *templateBindingSource)
82 // DataTemplate ignores the source paramater and always uses null
83 return FrameworkTemplate::GetVisualTree (NULL);