| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. |  | 
| 2 # Use of this source code is governed by a BSD-style license that can be |  | 
| 3 # found in the LICENSE file. |  | 
| 4 |  | 
| 5 import os |  | 
| 6 import datetime |  | 
| 7 import util |  | 
| 8 |  | 
| 9 H_FILE_TEMPLATE = \ |  | 
| 10 """// Copyright %(year)d The Chromium Authors. All rights reserved. |  | 
| 11 // Use of this source code is governed by a BSD-style license that can be |  | 
| 12 // found in the LICENSE file. |  | 
| 13 |  | 
| 14 // NOTE: this file is generated from "%(source)s". Do not modify directly. |  | 
| 15 |  | 
| 16 #ifndef %(include_guard)s |  | 
| 17 #define %(include_guard)s |  | 
| 18 |  | 
| 19 #include "base/macros.h" |  | 
| 20 #include "components/webui_generator/view_model.h" |  | 
| 21 #include "%(export_h_include_path)s" |  | 
| 22 |  | 
| 23 namespace content { |  | 
| 24 class BrowserContext; |  | 
| 25 } |  | 
| 26 |  | 
| 27 %(children_forward_declarations)s |  | 
| 28 |  | 
| 29 namespace gen { |  | 
| 30 |  | 
| 31 class %(export_macro)s %(class_name)s : public ::webui_generator::ViewModel { |  | 
| 32  public: |  | 
| 33   using FactoryFunction = %(class_name)s* (*)(content::BrowserContext*); |  | 
| 34 |  | 
| 35 %(context_keys)s |  | 
| 36 |  | 
| 37   static %(class_name)s* Create(content::BrowserContext* context); |  | 
| 38   static void SetFactory(FactoryFunction factory); |  | 
| 39 |  | 
| 40   %(class_name)s(); |  | 
| 41 |  | 
| 42 %(children_getters)s |  | 
| 43 |  | 
| 44 %(context_getters)s |  | 
| 45 |  | 
| 46 %(event_handlers)s |  | 
| 47 |  | 
| 48  void Initialize() override {} |  | 
| 49  void OnAfterChildrenReady() override {} |  | 
| 50  void OnViewBound() override {} |  | 
| 51 |  | 
| 52  private: |  | 
| 53   void OnEvent(const std::string& event) final; |  | 
| 54 |  | 
| 55   static FactoryFunction factory_function_; |  | 
| 56 }; |  | 
| 57 |  | 
| 58 }  // namespace gen |  | 
| 59 |  | 
| 60 #endif  // %(include_guard)s |  | 
| 61 """ |  | 
| 62 |  | 
| 63 CHILD_FORWARD_DECLARATION_TEMPLATE = \ |  | 
| 64 """namespace gen { |  | 
| 65   class %(child_type)s; |  | 
| 66 } |  | 
| 67 """ |  | 
| 68 CONTEXT_KEY_DECLARATION_TEMPLATE = \ |  | 
| 69 """  static const char %s[];""" |  | 
| 70 |  | 
| 71 CHILD_GETTER_DECLARATION_TEMPLATE = \ |  | 
| 72 """  virtual gen::%(child_type)s* %(method_name)s() const;"""; |  | 
| 73 |  | 
| 74 CONTEXT_VALUE_GETTER_DECLARATION_TEMPLATE = \ |  | 
| 75 """  %(type)s %(method_name)s() const;""" |  | 
| 76 |  | 
| 77 EVENT_HANDLER_DECLARATION_TEMPLATE = \ |  | 
| 78 """  virtual void %s() = 0;""" |  | 
| 79 |  | 
| 80 CC_FILE_TEMPLATE = \ |  | 
| 81 """// Copyright %(year)d The Chromium Authors. All rights reserved. |  | 
| 82 // Use of this source code is governed by a BSD-style license that can be |  | 
| 83 // found in the LICENSE file. |  | 
| 84 |  | 
| 85 // NOTE: this file is generated from "%(source)s". Do not modify directly. |  | 
| 86 |  | 
| 87 #include "%(header_path)s" |  | 
| 88 |  | 
| 89 #include "base/logging.h" |  | 
| 90 #include "components/webui_generator/view.h" |  | 
| 91 %(children_includes)s |  | 
| 92 |  | 
| 93 namespace gen { |  | 
| 94 |  | 
| 95 %(context_keys)s |  | 
| 96 |  | 
| 97 %(class_name)s::FactoryFunction %(class_name)s::factory_function_; |  | 
| 98 |  | 
| 99 %(class_name)s* %(class_name)s::Create(content::BrowserContext* context) { |  | 
| 100   CHECK(factory_function_) << "Factory function for %(class_name)s was not " |  | 
| 101       "set."; |  | 
| 102   return factory_function_(context); |  | 
| 103 } |  | 
| 104 |  | 
| 105 void %(class_name)s::SetFactory(FactoryFunction factory) { |  | 
| 106   factory_function_ = factory; |  | 
| 107 } |  | 
| 108 |  | 
| 109 %(class_name)s::%(class_name)s() { |  | 
| 110 %(constructor_body)s |  | 
| 111 } |  | 
| 112 |  | 
| 113 %(children_getters)s |  | 
| 114 |  | 
| 115 %(context_getters)s |  | 
| 116 |  | 
| 117 void %(class_name)s::OnEvent(const std::string& event) { |  | 
| 118 %(event_dispatcher_body)s |  | 
| 119   LOG(ERROR) << "Unknown event '" << event << "'"; |  | 
| 120 } |  | 
| 121 |  | 
| 122 }  // namespace gen |  | 
| 123 """ |  | 
| 124 |  | 
| 125 CONTEXT_KEY_DEFINITION_TEMPLATE = \ |  | 
| 126 """const char %(class_name)s::%(name)s[] = "%(value)s";""" |  | 
| 127 |  | 
| 128 CHILD_GETTER_DEFINITION_TEMPLATE = \ |  | 
| 129 """gen::%(child_type)s* %(class_name)s::%(method_name)s() const { |  | 
| 130   return static_cast<gen::%(child_type)s*>( |  | 
| 131       view()->GetChild("%(child_id)s")->GetViewModel()); |  | 
| 132 } |  | 
| 133 """ |  | 
| 134 |  | 
| 135 CONTEXT_VALUE_GETTER_DEFINITION_TEMPLATE = \ |  | 
| 136 """%(type)s %(class_name)s::%(method_name)s() const { |  | 
| 137     return context().%(context_getter)s(%(key_constant)s); |  | 
| 138 } |  | 
| 139 """ |  | 
| 140 |  | 
| 141 FIELD_TYPE_TO_GETTER_TYPE = { |  | 
| 142   'boolean': 'bool', |  | 
| 143   'integer': 'int', |  | 
| 144   'double': 'double', |  | 
| 145   'string': 'std::string', |  | 
| 146   'string_list': 'login::StringList' |  | 
| 147 } |  | 
| 148 |  | 
| 149 DISPATCH_EVENT_TEMPLATE = \ |  | 
| 150 """  if (event == "%(event_id)s") { |  | 
| 151     %(method_name)s(); |  | 
| 152     return; |  | 
| 153   }""" |  | 
| 154 |  | 
| 155 def GetCommonSubistitutions(declaration): |  | 
| 156   subs = {} |  | 
| 157   subs['year'] = datetime.date.today().year |  | 
| 158   subs['class_name'] = declaration.view_model_class |  | 
| 159   subs['source'] = declaration.path |  | 
| 160   return subs |  | 
| 161 |  | 
| 162 def FieldNameToConstantName(field_name): |  | 
| 163   return 'kContextKey' + util.ToUpperCamelCase(field_name) |  | 
| 164 |  | 
| 165 def GenContextKeysDeclarations(fields): |  | 
| 166   return '\n'.join( |  | 
| 167       (CONTEXT_KEY_DECLARATION_TEMPLATE % \ |  | 
| 168           FieldNameToConstantName(f.name) for f in fields)) |  | 
| 169 |  | 
| 170 def GenChildrenForwardDeclarations(children): |  | 
| 171   lines = [] |  | 
| 172   for declaration in set(children.itervalues()): |  | 
| 173     lines.append(CHILD_FORWARD_DECLARATION_TEMPLATE % { |  | 
| 174                      'child_type': declaration.view_model_class |  | 
| 175                  }) |  | 
| 176   return '\n'.join(lines) |  | 
| 177 |  | 
| 178 def ChildIdToChildGetterName(id): |  | 
| 179   return 'Get%s' % util.ToUpperCamelCase(id) |  | 
| 180 |  | 
| 181 def GenChildrenGettersDeclarations(children): |  | 
| 182   lines = [] |  | 
| 183   for id, declaration in children.iteritems(): |  | 
| 184     lines.append(CHILD_GETTER_DECLARATION_TEMPLATE % { |  | 
| 185                      'child_type': declaration.view_model_class, |  | 
| 186                      'method_name': ChildIdToChildGetterName(id) |  | 
| 187                  }) |  | 
| 188   return '\n'.join(lines) |  | 
| 189 |  | 
| 190 def FieldNameToGetterName(field_name): |  | 
| 191   return 'Get%s' % util.ToUpperCamelCase(field_name) |  | 
| 192 |  | 
| 193 def GenContextGettersDeclarations(context_fields): |  | 
| 194   lines = [] |  | 
| 195   for field in context_fields: |  | 
| 196     lines.append(CONTEXT_VALUE_GETTER_DECLARATION_TEMPLATE % { |  | 
| 197                      'type': FIELD_TYPE_TO_GETTER_TYPE[field.type], |  | 
| 198                      'method_name': FieldNameToGetterName(field.name) |  | 
| 199                  }) |  | 
| 200   return '\n'.join(lines) |  | 
| 201 |  | 
| 202 def EventIdToMethodName(event): |  | 
| 203   return 'On' + util.ToUpperCamelCase(event) |  | 
| 204 |  | 
| 205 def GenEventHandlersDeclarations(events): |  | 
| 206   lines = [] |  | 
| 207   for event in events: |  | 
| 208     lines.append(EVENT_HANDLER_DECLARATION_TEMPLATE % |  | 
| 209                      EventIdToMethodName(event)) |  | 
| 210   return '\n'.join(lines) |  | 
| 211 |  | 
| 212 def GenHFile(declaration): |  | 
| 213   subs = GetCommonSubistitutions(declaration) |  | 
| 214   subs['include_guard'] = \ |  | 
| 215       util.PathToIncludeGuard(declaration.view_model_include_path) |  | 
| 216   subs['context_keys'] = GenContextKeysDeclarations(declaration.fields) |  | 
| 217   subs['children_forward_declarations'] = \ |  | 
| 218       GenChildrenForwardDeclarations(declaration.children) |  | 
| 219   subs['children_getters'] = \ |  | 
| 220       GenChildrenGettersDeclarations(declaration.children); |  | 
| 221   subs['context_getters'] = \ |  | 
| 222       GenContextGettersDeclarations(declaration.fields); |  | 
| 223   subs['event_handlers'] = GenEventHandlersDeclarations(declaration.events) |  | 
| 224   subs['export_h_include_path'] = declaration.export_h_include_path |  | 
| 225   subs['export_macro'] = declaration.component_export_macro |  | 
| 226   return H_FILE_TEMPLATE % subs |  | 
| 227 |  | 
| 228 def GenContextKeysDefinitions(declaration): |  | 
| 229   lines = [] |  | 
| 230   for field in declaration.fields: |  | 
| 231     definition = CONTEXT_KEY_DEFINITION_TEMPLATE % { |  | 
| 232       'class_name': declaration.view_model_class, |  | 
| 233       'name': FieldNameToConstantName(field.name), |  | 
| 234       'value': field.id |  | 
| 235     } |  | 
| 236     lines.append(definition) |  | 
| 237   return '\n'.join(lines) |  | 
| 238 |  | 
| 239 def GenChildrenIncludes(children): |  | 
| 240   lines = [] |  | 
| 241   for declaration in set(children.itervalues()): |  | 
| 242     lines.append('#include "%s"' % declaration.view_model_include_path) |  | 
| 243   return '\n'.join(lines) |  | 
| 244 |  | 
| 245 def GenContextFieldInitialization(field): |  | 
| 246   lines = [] |  | 
| 247   key_constant = FieldNameToConstantName(field.name) |  | 
| 248   setter_method = 'Set' + util.ToUpperCamelCase(field.type) |  | 
| 249   if field.type == 'string_list': |  | 
| 250     lines.append('  {') |  | 
| 251     lines.append('    std::vector<std::string> defaults;') |  | 
| 252     for s in field.default_value: |  | 
| 253       lines.append('    defaults.push_back("%s");' % s) |  | 
| 254     lines.append('    context().%s(%s, defaults);' % |  | 
| 255                      (setter_method, key_constant)) |  | 
| 256     lines.append('  }') |  | 
| 257   else: |  | 
| 258     setter = '  context().%s(%s, ' % (setter_method, key_constant) |  | 
| 259     if field.type in ['integer', 'double']: |  | 
| 260       setter += str(field.default_value) |  | 
| 261     elif field.type == 'boolean': |  | 
| 262       setter += 'true' if field.default_value else 'false' |  | 
| 263     else: |  | 
| 264       assert field.type == 'string' |  | 
| 265       setter += '"%s"' % field.default_value |  | 
| 266     setter += ");" |  | 
| 267     lines.append(setter) |  | 
| 268   return '\n'.join(lines) |  | 
| 269 |  | 
| 270 def GenChildrenGettersDefenitions(declaration): |  | 
| 271   lines = [] |  | 
| 272   for id, child in declaration.children.iteritems(): |  | 
| 273     lines.append(CHILD_GETTER_DEFINITION_TEMPLATE % { |  | 
| 274                      'child_type': child.view_model_class, |  | 
| 275                      'class_name': declaration.view_model_class, |  | 
| 276                      'method_name': ChildIdToChildGetterName(id), |  | 
| 277                      'child_id': id |  | 
| 278                  }); |  | 
| 279   return '\n'.join(lines) |  | 
| 280 |  | 
| 281 def GenContextGettersDefinitions(declaration): |  | 
| 282   lines = [] |  | 
| 283   for field in declaration.fields: |  | 
| 284     lines.append(CONTEXT_VALUE_GETTER_DEFINITION_TEMPLATE % { |  | 
| 285                      'type': FIELD_TYPE_TO_GETTER_TYPE[field.type], |  | 
| 286                      'class_name': declaration.view_model_class, |  | 
| 287                      'method_name': FieldNameToGetterName(field.name), |  | 
| 288                      'context_getter': 'Get' + util.ToUpperCamelCase( |  | 
| 289                                                         field.type), |  | 
| 290                      'key_constant': FieldNameToConstantName(field.name) |  | 
| 291                  }); |  | 
| 292   return '\n'.join(lines) |  | 
| 293 |  | 
| 294 def GenEventDispatcherBody(events): |  | 
| 295   lines = [] |  | 
| 296   for event in events: |  | 
| 297     lines.append(DISPATCH_EVENT_TEMPLATE % { |  | 
| 298                      'event_id': util.ToLowerCamelCase(event), |  | 
| 299                      'method_name': EventIdToMethodName(event) |  | 
| 300                  }); |  | 
| 301   return '\n'.join(lines) |  | 
| 302 |  | 
| 303 def GenCCFile(declaration): |  | 
| 304   subs = GetCommonSubistitutions(declaration) |  | 
| 305   subs['header_path'] = declaration.view_model_include_path |  | 
| 306   subs['context_keys'] = GenContextKeysDefinitions(declaration) |  | 
| 307   subs['children_includes'] = GenChildrenIncludes(declaration.children) |  | 
| 308   initializations = [GenContextFieldInitialization(field) \ |  | 
| 309                          for field in declaration.fields] |  | 
| 310   initializations.append('  base::DictionaryValue diff;'); |  | 
| 311   initializations.append('  context().GetChangesAndReset(&diff);'); |  | 
| 312   subs['constructor_body'] = '\n'.join(initializations) |  | 
| 313   subs['children_getters'] = GenChildrenGettersDefenitions(declaration) |  | 
| 314   subs['context_getters'] = GenContextGettersDefinitions(declaration) |  | 
| 315   subs['event_dispatcher_body'] = GenEventDispatcherBody(declaration.events) |  | 
| 316   return CC_FILE_TEMPLATE % subs |  | 
| 317 |  | 
| 318 def ListOutputs(declaration, destination): |  | 
| 319   dirname = os.path.join(destination, os.path.dirname(declaration.path)) |  | 
| 320   h_file_path = os.path.join(dirname, declaration.view_model_h_name) |  | 
| 321   cc_file_path = os.path.join(dirname, declaration.view_model_cc_name) |  | 
| 322   return [h_file_path, cc_file_path] |  | 
| 323 |  | 
| 324 def Gen(declaration, destination): |  | 
| 325   h_file_path, cc_file_path = ListOutputs(declaration, destination) |  | 
| 326   util.CreateDirIfNotExists(os.path.dirname(h_file_path)) |  | 
| 327   open(h_file_path, 'w').write(GenHFile(declaration)) |  | 
| 328   open(cc_file_path, 'w').write(GenCCFile(declaration)) |  | 
| 329 |  | 
| OLD | NEW | 
|---|