1 /* 2 * This file is part of the Code::Blocks IDE and licensed under the GNU Lesser General Public License, version 3 3 * http://www.gnu.org/licenses/lgpl-3.0.html 4 * 5 * $Revision: 11887 $ 6 * $Id: scriptbindings.cpp 11887 2019-10-26 09:12:28Z fuscated $ 7 * $HeadURL: svn://svn.code.sf.net/p/codeblocks/code/branches/release-20.xx/src/sdk/scripting/bindings/scriptbindings.cpp $ 8 */ 9 10 #include <sdk_precomp.h> 11 #ifndef CB_PRECOMP 12 #include <settings.h> 13 #include <manager.h> 14 #include <logmanager.h> 15 #include <configmanager.h> 16 #include <editormanager.h> 17 #include <projectmanager.h> 18 #include <macrosmanager.h> 19 #include <compilerfactory.h> 20 #include <cbproject.h> 21 #include <cbeditor.h> 22 #include <globals.h> 23 #endif 24 #include "cbstyledtextctrl.h" 25 26 #include "scriptbindings.h" 27 #include <cbexception.h> 28 #include "sc_base_types.h" 29 30 namespace ScriptBindings 31 { 32 extern void Register_Constants(); 33 extern void Register_Globals(); 34 extern void Register_wxTypes(); 35 extern void Register_Dialog(); 36 extern void Register_ProgressDialog(); 37 extern void Register_UtilDialogs(); 38 extern void Register_IO(); 39 extern void Register_ScriptPlugin(); 40 ConfigManager_Read(HSQUIRRELVM v)41 SQInteger ConfigManager_Read(HSQUIRRELVM v) 42 { 43 StackHandler sa(v); 44 int paramCount = sa.GetParamCount(); 45 if (paramCount == 3) 46 { 47 wxString key = *SqPlus::GetInstance<wxString,false>(v, 2); 48 if (sa.GetType(3) == OT_INTEGER) 49 return sa.Return((SQInteger)Manager::Get()->GetConfigManager(_T("scripts"))->ReadInt(key, sa.GetInt(3))); 50 else if (sa.GetType(3) == OT_BOOL) 51 return sa.Return(Manager::Get()->GetConfigManager(_T("scripts"))->ReadBool(key, sa.GetBool(3))); 52 else if (sa.GetType(3) == OT_FLOAT) 53 return sa.Return((float)Manager::Get()->GetConfigManager(_T("scripts"))->ReadDouble(key, sa.GetFloat(3))); 54 else 55 { 56 wxString val = *SqPlus::GetInstance<wxString,false>(v, 3); 57 wxString ret = Manager::Get()->GetConfigManager(_T("scripts"))->Read(key, val); 58 return SqPlus::ReturnCopy(v, ret); 59 } 60 } 61 return sa.ThrowError("Invalid arguments to \"ConfigManager::Read\""); 62 } ConfigManager_Write(HSQUIRRELVM v)63 SQInteger ConfigManager_Write(HSQUIRRELVM v) 64 { 65 StackHandler sa(v); 66 int paramCount = sa.GetParamCount(); 67 if (paramCount == 3) 68 { 69 wxString key = *SqPlus::GetInstance<wxString,false>(v, 2); 70 if (sa.GetType(3) == OT_INTEGER) 71 { 72 Manager::Get()->GetConfigManager(_T("scripts"))->Write(key, (int)sa.GetInt(3)); 73 return SQ_OK; 74 } 75 else if (sa.GetType(3) == OT_BOOL) 76 { 77 Manager::Get()->GetConfigManager(_T("scripts"))->Write(key, (bool)sa.GetBool(3)); 78 return SQ_OK; 79 } 80 else if (sa.GetType(3) == OT_FLOAT) 81 { 82 Manager::Get()->GetConfigManager(_T("scripts"))->Write(key, sa.GetFloat(3)); 83 return SQ_OK; 84 } 85 else 86 { 87 Manager::Get()->GetConfigManager(_T("scripts"))->Write(key, *SqPlus::GetInstance<wxString,false>(v, 3)); 88 return SQ_OK; 89 } 90 } 91 else if (paramCount == 4) 92 { 93 wxString key = *SqPlus::GetInstance<wxString,false>(v, 2); 94 wxString val = *SqPlus::GetInstance<wxString,false>(v, 3); 95 if (sa.GetType(4) == OT_BOOL) 96 { 97 Manager::Get()->GetConfigManager(_T("scripts"))->Write(key, val, sa.GetBool(4)); 98 return SQ_OK; 99 } 100 } 101 return sa.ThrowError("Invalid arguments to \"ConfigManager::Write\""); 102 } EditorManager_GetBuiltinEditor(HSQUIRRELVM v)103 SQInteger EditorManager_GetBuiltinEditor(HSQUIRRELVM v) 104 { 105 StackHandler sa(v); 106 int paramCount = sa.GetParamCount(); 107 if (paramCount == 2) 108 { 109 cbEditor* ed = nullptr; 110 if (sa.GetType(2) == OT_INTEGER) 111 ed = Manager::Get()->GetEditorManager()->GetBuiltinEditor(sa.GetInt(2)); 112 else 113 ed = Manager::Get()->GetEditorManager()->GetBuiltinEditor(*SqPlus::GetInstance<wxString,false>(v, 2)); 114 SqPlus::Push(v, ed); 115 return 1; 116 } 117 return sa.ThrowError("Invalid arguments to \"EditorManager::GetBuiltinEditor\""); 118 } EditorManager_Open(HSQUIRRELVM v)119 SQInteger EditorManager_Open(HSQUIRRELVM v) 120 { 121 StackHandler sa(v); 122 int paramCount = sa.GetParamCount(); 123 if (paramCount == 2) 124 { 125 cbEditor* ed = Manager::Get()->GetEditorManager()->Open(*SqPlus::GetInstance<wxString,false>(v, 2)); 126 SqPlus::Push(v, ed); 127 return 1; 128 } 129 return sa.ThrowError("Invalid arguments to \"EditorManager::Open\""); 130 } EditorManager_Close(HSQUIRRELVM v)131 SQInteger EditorManager_Close(HSQUIRRELVM v) 132 { 133 StackHandler sa(v); 134 int paramCount = sa.GetParamCount(); 135 if (paramCount == 2) 136 { 137 if (sa.GetType(2) == OT_INTEGER) 138 return sa.Return(Manager::Get()->GetEditorManager()->Close(sa.GetInt(2))); 139 else 140 return sa.Return(Manager::Get()->GetEditorManager()->Close(*SqPlus::GetInstance<wxString,false>(v, 2))); 141 } 142 return sa.ThrowError("Invalid arguments to \"EditorManager::Close\""); 143 } EditorManager_Save(HSQUIRRELVM v)144 SQInteger EditorManager_Save(HSQUIRRELVM v) 145 { 146 StackHandler sa(v); 147 int paramCount = sa.GetParamCount(); 148 if (paramCount == 2) 149 { 150 if (sa.GetType(2) == OT_INTEGER) 151 return sa.Return(Manager::Get()->GetEditorManager()->Save(sa.GetInt(2))); 152 else 153 return sa.Return(Manager::Get()->GetEditorManager()->Save(*SqPlus::GetInstance<wxString,false>(v, 2))); 154 } 155 return sa.ThrowError("Invalid arguments to \"EditorManager::Save\""); 156 } cbProject_RemoveFile(HSQUIRRELVM v)157 SQInteger cbProject_RemoveFile(HSQUIRRELVM v) 158 { 159 StackHandler sa(v); 160 int paramCount = sa.GetParamCount(); 161 if (paramCount == 2) 162 { 163 cbProject* prj = SqPlus::GetInstance<cbProject,false>(v, 1); 164 if (sa.GetType(2) == OT_INTEGER) 165 return sa.ThrowError("Invalid arguments to \"cbProject::RemoveFile\""); 166 else 167 return sa.Return(prj->RemoveFile(SqPlus::GetInstance<ProjectFile,false>(v, 2))); 168 } 169 return sa.ThrowError("Invalid arguments to \"cbProject::RemoveFile\""); 170 } cbProject_AddFile(HSQUIRRELVM v)171 SQInteger cbProject_AddFile(HSQUIRRELVM v) 172 { 173 StackHandler sa(v); 174 int paramCount = sa.GetParamCount(); 175 if (paramCount >= 3) 176 { 177 cbProject* prj = SqPlus::GetInstance<cbProject,false>(v, 1); 178 wxString str = *SqPlus::GetInstance<wxString,false>(v, 3); 179 bool b1 = paramCount >= 4 ? sa.GetBool(4) : true; 180 bool b2 = paramCount >= 5 ? sa.GetBool(5) : true; 181 int i = paramCount == 6 ? sa.GetInt(6) : 50; 182 ProjectFile* pf = nullptr; 183 if (sa.GetType(2) == OT_INTEGER) 184 pf = prj->AddFile(sa.GetInt(2), str, b1, b2, i); 185 else 186 pf = prj->AddFile(*SqPlus::GetInstance<wxString,false>(v, 2), str, b1, b2, i); 187 SqPlus::Push(v, pf); 188 return 1; 189 } 190 return sa.ThrowError("Invalid arguments to \"cbProject::AddFile\""); 191 } cbProject_GetBuildTarget(HSQUIRRELVM v)192 SQInteger cbProject_GetBuildTarget(HSQUIRRELVM v) 193 { 194 StackHandler sa(v); 195 int paramCount = sa.GetParamCount(); 196 if (paramCount == 2) 197 { 198 cbProject* prj = SqPlus::GetInstance<cbProject,false>(v, 1); 199 ProjectBuildTarget* bt = nullptr; 200 if (sa.GetType(2) == OT_INTEGER) 201 bt = prj->GetBuildTarget(sa.GetInt(2)); 202 else 203 bt = prj->GetBuildTarget(*SqPlus::GetInstance<wxString,false>(v, 2)); 204 SqPlus::Push(v, bt); 205 return 1; 206 } 207 return sa.ThrowError("Invalid arguments to \"cbProject::GetBuildTarget\""); 208 } cbProject_RenameBuildTarget(HSQUIRRELVM v)209 SQInteger cbProject_RenameBuildTarget(HSQUIRRELVM v) 210 { 211 StackHandler sa(v); 212 int paramCount = sa.GetParamCount(); 213 if (paramCount == 3) 214 { 215 cbProject* prj = SqPlus::GetInstance<cbProject,false>(v, 1); 216 if (sa.GetType(2) == OT_INTEGER) 217 return sa.Return(prj->RenameBuildTarget(sa.GetInt(2), *SqPlus::GetInstance<wxString,false>(v, 3))); 218 else 219 return sa.Return(prj->RenameBuildTarget(*SqPlus::GetInstance<wxString,false>(v, 2), *SqPlus::GetInstance<wxString,false>(v, 3))); 220 } 221 return sa.ThrowError("Invalid arguments to \"cbProject::RenameBuildTarget\""); 222 } cbProject_DuplicateBuildTarget(HSQUIRRELVM v)223 SQInteger cbProject_DuplicateBuildTarget(HSQUIRRELVM v) 224 { 225 StackHandler sa(v); 226 int paramCount = sa.GetParamCount(); 227 if (paramCount == 3) 228 { 229 cbProject* prj = SqPlus::GetInstance<cbProject,false>(v, 1); 230 ProjectBuildTarget* bt = nullptr; 231 if (sa.GetType(2) == OT_INTEGER) 232 bt = prj->DuplicateBuildTarget(sa.GetInt(2), *SqPlus::GetInstance<wxString,false>(v, 3)); 233 else 234 bt = prj->DuplicateBuildTarget(*SqPlus::GetInstance<wxString,false>(v, 2), *SqPlus::GetInstance<wxString,false>(v, 3)); 235 SqPlus::Push(v, bt); 236 return 1; 237 } 238 return sa.ThrowError("Invalid arguments to \"cbProject::DuplicateBuildTarget\""); 239 } cbProject_RemoveBuildTarget(HSQUIRRELVM v)240 SQInteger cbProject_RemoveBuildTarget(HSQUIRRELVM v) 241 { 242 StackHandler sa(v); 243 int paramCount = sa.GetParamCount(); 244 if (paramCount == 2) 245 { 246 cbProject* prj = SqPlus::GetInstance<cbProject,false>(v, 1); 247 if (sa.GetType(2) == OT_INTEGER) 248 return sa.Return(prj->RemoveBuildTarget(sa.GetInt(2))); 249 else 250 return sa.Return(prj->RemoveBuildTarget(*SqPlus::GetInstance<wxString,false>(v, 2))); 251 } 252 return sa.ThrowError("Invalid arguments to \"cbProject::RemoveBuildTarget\""); 253 } cbProject_ExportTargetAsProject(HSQUIRRELVM v)254 SQInteger cbProject_ExportTargetAsProject(HSQUIRRELVM v) 255 { 256 StackHandler sa(v); 257 int paramCount = sa.GetParamCount(); 258 if (paramCount == 2) 259 { 260 cbProject* prj = SqPlus::GetInstance<cbProject,false>(v, 1); 261 if (sa.GetType(2) == OT_INTEGER) 262 return sa.Return(prj->ExportTargetAsProject(sa.GetInt(2))); 263 else 264 return sa.Return(prj->ExportTargetAsProject(*SqPlus::GetInstance<wxString,false>(v, 2))); 265 } 266 return sa.ThrowError("Invalid arguments to \"cbProject::ExportTargetAsProject\""); 267 } 268 269 struct FindXmlElementResult 270 { 271 TiXmlElement *element = nullptr; 272 wxString errorStr; 273 }; 274 FindExtensionElement(cbProject * project,const wxString & query)275 static FindXmlElementResult FindExtensionElement(cbProject *project, const wxString &query) 276 { 277 TiXmlNode *extensionNode = project->GetExtensionsNode(); 278 if (!extensionNode) 279 return FindXmlElementResult(); 280 TiXmlElement *currentElem = extensionNode->ToElement(); 281 if (!currentElem) 282 return FindXmlElementResult(); 283 284 // Note: This is slow! 285 const wxArrayString names = GetArrayFromString(query, wxT("/"), false); 286 for (const wxString &name : names) 287 { 288 const wxString::size_type openBracePos = name.find_first_of(wxT("[(")); 289 if (openBracePos != wxString::npos) 290 { 291 if (name[openBracePos] == wxT('[')) 292 { 293 const wxString::size_type closeBracePos = name.find(wxT(']'), openBracePos + 1); 294 if (closeBracePos == wxString::npos || closeBracePos != name.length() - 1) 295 { 296 FindXmlElementResult result; 297 result.errorStr.Printf(wxT("Invalid index format in '%s'!"), name.wx_str()); 298 return result; 299 } 300 301 const wxString nameStripped = name.substr(0, openBracePos); 302 long lIndex; 303 const wxString indexStr = name.substr(openBracePos + 1, 304 closeBracePos - openBracePos - 1); 305 if (!indexStr.ToLong(&lIndex)) 306 { 307 FindXmlElementResult result; 308 result.errorStr.Printf(wxT("Can't convert '%s' to integer!"), 309 indexStr.wx_str()); 310 return result; 311 } 312 313 const int index = int(lIndex); 314 315 int currentIndex = -1; 316 for (TiXmlNode *child = currentElem->FirstChild(); 317 child; 318 child = child->NextSibling()) 319 { 320 TiXmlElement *childElement = child->ToElement(); 321 if (wxString(childElement->Value(), wxConvUTF8) != nameStripped) 322 continue; 323 ++currentIndex; 324 if (currentIndex == index) 325 { 326 currentElem = childElement; 327 break; 328 } 329 } 330 if (currentIndex != index) 331 return FindXmlElementResult(); 332 } 333 else if (name[openBracePos] == wxT('(')) 334 { 335 const wxString::size_type closeBracePos = name.find(wxT(')'), openBracePos + 1); 336 if (closeBracePos == wxString::npos || closeBracePos != name.length() - 1) 337 { 338 FindXmlElementResult result; 339 result.errorStr.Printf(wxT("Invalid attribute format in '%s'!"), 340 name.wx_str()); 341 return result; 342 } 343 344 const wxString nameStripped = name.substr(0, openBracePos); 345 const wxString attributeStr = name.substr(openBracePos + 1, 346 closeBracePos - openBracePos - 1); 347 const wxString::size_type equalPos = attributeStr.find(wxT('=')); 348 if (equalPos == wxString::npos) 349 { 350 FindXmlElementResult result; 351 result.errorStr.Printf(wxT("Invalid attribute format in '%s'!"), 352 attributeStr.wx_str()); 353 return result; 354 } 355 356 const std::string attributeName = wxString(attributeStr.substr(0, equalPos)).utf8_str().data(); 357 const std::string attributeValue = wxString(attributeStr.substr(equalPos + 1)).utf8_str().data(); 358 for (TiXmlNode *child = currentElem->FirstChild(); 359 child; 360 child = child->NextSibling()) 361 { 362 TiXmlElement *childElement = child->ToElement(); 363 if (wxString(childElement->Value(), wxConvUTF8) != nameStripped) 364 continue; 365 366 const char *value = childElement->Attribute(attributeName.c_str()); 367 if (value != nullptr && attributeValue == value) 368 { 369 currentElem = childElement; 370 break; 371 } 372 } 373 } 374 } 375 else 376 currentElem = currentElem->FirstChildElement(name.utf8_str().data()); 377 378 if (!currentElem) 379 return FindXmlElementResult(); 380 } 381 382 FindXmlElementResult result; 383 result.element = currentElem; 384 return result; 385 } 386 FindFullExtensionPathForNode(const TiXmlNode * node)387 wxString FindFullExtensionPathForNode(const TiXmlNode *node) 388 { 389 if (!node) 390 return wxString(); 391 392 struct StackItem 393 { 394 const char *name; 395 int index; 396 }; 397 std::vector<StackItem> extensionStack; 398 399 while (node) 400 { 401 const char *nodeValue = node->ToElement()->Value(); 402 if (strcmp(nodeValue, "Extensions") == 0) 403 break; 404 405 int index = 0; 406 // Find index by going back through the siblings and matching the names. 407 for (const TiXmlNode *sibling = node->PreviousSibling(); 408 sibling; 409 sibling = sibling->PreviousSibling()) 410 { 411 const char *value = sibling->ToElement()->Value(); 412 if (strcmp(nodeValue, value) == 0) 413 index++; 414 } 415 416 StackItem item; 417 item.name = nodeValue; 418 item.index = index; 419 extensionStack.push_back(item); 420 421 node = node->Parent(); 422 } 423 424 wxString result; 425 for (std::vector<StackItem>::reverse_iterator it = extensionStack.rbegin(); 426 it != extensionStack.rend(); 427 ++it) 428 { 429 if (!result.empty()) 430 result << wxT('/'); 431 result << wxString(it->name, wxConvUTF8) << wxT('[') << it->index << wxT(']'); 432 } 433 return result; 434 } 435 436 /// Squirrel function would expect a cbProject and an extension string. It will return a 437 /// wxArrayString object. cbProject_ExtensionListNodes(HSQUIRRELVM v)438 SQInteger cbProject_ExtensionListNodes(HSQUIRRELVM v) 439 { 440 StackHandler sa(v); 441 int paramCount = sa.GetParamCount(); 442 if (paramCount != 2) 443 return sa.ThrowError("Invalid arguments to \"cbProject::ExtensionListNodes\""); 444 445 cbProject *project = SqPlus::GetInstance<cbProject, false>(v, 1); 446 if (!project) 447 return sa.ThrowError("Invalid project argument to \"cbProject::ExtensionListNodes\""); 448 const wxString *extension = SqPlus::GetInstance<wxString, false>(v, 2); 449 if (!extension) 450 return sa.ThrowError("Invalid extension argument to \"cbProject::ExtensionListNodes\""); 451 452 FindXmlElementResult queryResult = FindExtensionElement(project, *extension); 453 if (queryResult.element == nullptr) 454 { 455 if (queryResult.errorStr.empty()) 456 return SqPlus::ReturnCopy(v, wxArrayString()); 457 else 458 return sa.ThrowError(queryResult.errorStr.utf8_str().data()); 459 } 460 461 wxArrayString result; 462 int index = 0; 463 for (const TiXmlNode *child = queryResult.element->FirstChild(); 464 child; 465 child = child->NextSibling()) 466 { 467 wxString msg = *extension + wxT("/") + wxString(child->Value(), wxConvUTF8); 468 msg << wxT('[') << index << wxT(']'); 469 result.Add(msg); 470 ++index; 471 } 472 return SqPlus::ReturnCopy(v, result); 473 } 474 475 /// Squirrel function would expect a cbProject and an extension string. It will return a 476 /// wxArrayString object. cbProject_ExtensionListNodeAttributes(HSQUIRRELVM v)477 SQInteger cbProject_ExtensionListNodeAttributes(HSQUIRRELVM v) 478 { 479 StackHandler sa(v); 480 int paramCount = sa.GetParamCount(); 481 if (paramCount != 2) 482 return sa.ThrowError("Invalid arguments to \"cbProject::ExtensionListNodeAttributes\""); 483 484 cbProject *project = SqPlus::GetInstance<cbProject, false>(v, 1); 485 if (!project) 486 return sa.ThrowError("Invalid project argument to \"cbProject::ExtensionListNodeAttributes\""); 487 const wxString *extension = SqPlus::GetInstance<wxString, false>(v, 2); 488 if (!extension) 489 return sa.ThrowError("Invalid extension argument to \"cbProject::ExtensionListNodeAttributes\""); 490 491 FindXmlElementResult queryResult = FindExtensionElement(project, *extension); 492 if (queryResult.element == nullptr) 493 { 494 if (queryResult.errorStr.empty()) 495 return SqPlus::ReturnCopy(v, wxArrayString()); 496 else 497 return sa.ThrowError(queryResult.errorStr.utf8_str().data()); 498 } 499 500 wxArrayString result; 501 for (const TiXmlAttribute *attr = queryResult.element->FirstAttribute(); 502 attr; 503 attr = attr->Next()) 504 { 505 result.Add(wxString(attr->Name(), wxConvUTF8)); 506 } 507 return SqPlus::ReturnCopy(v, result); 508 } 509 510 /// Squirrel function would expect a cbProject, an extension string and attribute name. It will 511 /// return a wxString object. cbProject_ExtensionGetNodeAttribute(HSQUIRRELVM v)512 SQInteger cbProject_ExtensionGetNodeAttribute(HSQUIRRELVM v) 513 { 514 StackHandler sa(v); 515 int paramCount = sa.GetParamCount(); 516 if (paramCount != 3) 517 return sa.ThrowError("Invalid arguments to \"cbProject::ExtensionGetNodeAttribute\""); 518 519 cbProject *project = SqPlus::GetInstance<cbProject, false>(v, 1); 520 if (!project) 521 return sa.ThrowError("Invalid project argument to \"cbProject::ExtensionGetNodeAttribute\""); 522 const wxString *extension = SqPlus::GetInstance<wxString, false>(v, 2); 523 if (!extension) 524 return sa.ThrowError("Invalid extension argument to \"cbProject::ExtensionGetNodeAttribute\""); 525 const wxString *attributeName = SqPlus::GetInstance<wxString, false>(v, 3); 526 if (!attributeName) 527 return sa.ThrowError("Invalid attribute name argument to \"cbProject::ExtensionGetNodeAttribute\""); 528 529 FindXmlElementResult queryResult = FindExtensionElement(project, *extension); 530 if (queryResult.element == nullptr) 531 { 532 if (queryResult.errorStr.empty()) 533 return SqPlus::ReturnCopy(v, wxString()); 534 else 535 return sa.ThrowError(queryResult.errorStr.utf8_str().data()); 536 } 537 538 wxString result; 539 const char *attributeValue = queryResult.element->Attribute(attributeName->utf8_str().data()); 540 if (attributeValue) 541 result = wxString(attributeValue, wxConvUTF8); 542 return SqPlus::ReturnCopy(v, result); 543 } 544 545 /// Squirrel function would expect a cbProject, an extension string, attribute name and 546 /// attribute value. cbProject_ExtensionSetNodeAttribute(HSQUIRRELVM v)547 SQInteger cbProject_ExtensionSetNodeAttribute(HSQUIRRELVM v) 548 { 549 StackHandler sa(v); 550 int paramCount = sa.GetParamCount(); 551 if (paramCount != 4) 552 return sa.ThrowError("Invalid arguments to \"cbProject::ExtensionSetNodeAttribute\""); 553 554 cbProject *project = SqPlus::GetInstance<cbProject, false>(v, 1); 555 if (!project) 556 return sa.ThrowError("Invalid project argument to \"cbProject::ExtensionSetNodeAttribute\""); 557 const wxString *extension = SqPlus::GetInstance<wxString, false>(v, 2); 558 if (!extension) 559 return sa.ThrowError("Invalid extension argument to \"cbProject::ExtensionSetNodeAttribute\""); 560 const wxString *attributeName = SqPlus::GetInstance<wxString, false>(v, 3); 561 if (!attributeName) 562 return sa.ThrowError("Invalid attribute name argument to \"cbProject::ExtensionSetNodeAttribute\""); 563 const wxString *attributeValue = SqPlus::GetInstance<wxString, false>(v, 4); 564 if (!attributeName) 565 return sa.ThrowError("Invalid attribute value argument to \"cbProject::ExtensionSetNodeAttribute\""); 566 567 FindXmlElementResult queryResult = FindExtensionElement(project, *extension); 568 if (queryResult.element == nullptr) 569 { 570 if (queryResult.errorStr.empty()) 571 { 572 queryResult.errorStr.Printf(wxT("Can't find extension node '%s'!"), 573 extension->wx_str()); 574 } 575 return sa.ThrowError(queryResult.errorStr.utf8_str().data()); 576 } 577 578 queryResult.element->SetAttribute(attributeName->utf8_str().data(), 579 attributeValue->utf8_str().data()); 580 project->SetModified(true); 581 return sa.Return(); 582 } 583 584 /// Squirrel function would expect a cbProject, an extension string, attribute name. cbProject_ExtensionRemoveNodeAttribute(HSQUIRRELVM v)585 SQInteger cbProject_ExtensionRemoveNodeAttribute(HSQUIRRELVM v) 586 { 587 StackHandler sa(v); 588 int paramCount = sa.GetParamCount(); 589 if (paramCount != 3) 590 return sa.ThrowError("Invalid arguments to \"cbProject::ExtensionRemoveNodeAttribute\""); 591 592 cbProject *project = SqPlus::GetInstance<cbProject, false>(v, 1); 593 if (!project) 594 return sa.ThrowError("Invalid project argument to \"cbProject::ExtensionRemoveNodeAttribute\""); 595 const wxString *extension = SqPlus::GetInstance<wxString, false>(v, 2); 596 if (!extension) 597 return sa.ThrowError("Invalid extension argument to \"cbProject::ExtensionRemoveNodeAttribute\""); 598 const wxString *attributeName = SqPlus::GetInstance<wxString, false>(v, 3); 599 if (!attributeName) 600 return sa.ThrowError("Invalid attribute name argument to \"cbProject::ExtensionRemoveNodeAttribute\""); 601 602 FindXmlElementResult queryResult = FindExtensionElement(project, *extension); 603 if (queryResult.element == nullptr) 604 { 605 if (queryResult.errorStr.empty()) 606 { 607 queryResult.errorStr.Printf(wxT("Can't find extension node '%s'!"), 608 extension->wx_str()); 609 } 610 return sa.ThrowError(queryResult.errorStr.utf8_str().data()); 611 } 612 613 queryResult.element->RemoveAttribute(attributeName->utf8_str().data()); 614 project->SetModified(true); 615 return sa.Return(); 616 } 617 618 /// Squirrel function would expect a cbProject, an extension string and node name. 619 /// It will return the extension of the newly created node, so it could be used in other 620 /// node calls. cbProject_ExtensionAddNode(HSQUIRRELVM v)621 SQInteger cbProject_ExtensionAddNode(HSQUIRRELVM v) 622 { 623 StackHandler sa(v); 624 int paramCount = sa.GetParamCount(); 625 if (paramCount != 3) 626 return sa.ThrowError("Invalid arguments to \"cbProject::ExtensionAddNode\""); 627 628 cbProject *project = SqPlus::GetInstance<cbProject, false>(v, 1); 629 if (!project) 630 return sa.ThrowError("Invalid project argument to \"cbProject::ExtensionAddNode\""); 631 const wxString *extension = SqPlus::GetInstance<wxString, false>(v, 2); 632 if (!extension) 633 return sa.ThrowError("Invalid extension argument to \"cbProject::ExtensionAddNode\""); 634 const wxString *nodeName = SqPlus::GetInstance<wxString, false>(v, 3); 635 if (!nodeName) 636 return sa.ThrowError("Invalid node name argument to \"cbProject::ExtensionAddNode\""); 637 638 FindXmlElementResult queryResult = FindExtensionElement(project, *extension); 639 if (queryResult.element == nullptr) 640 { 641 if (queryResult.errorStr.empty()) 642 { 643 queryResult.errorStr.Printf(wxT("Can't find extension node '%s'!"), 644 extension->wx_str()); 645 } 646 return sa.ThrowError(queryResult.errorStr.utf8_str().data()); 647 } 648 649 TiXmlNode *newNode = queryResult.element->InsertEndChild(TiXmlElement(cbU2C(*nodeName))); 650 const wxString resultExtension = FindFullExtensionPathForNode(newNode); 651 project->SetModified(true); 652 return SqPlus::ReturnCopy(v, resultExtension); 653 } 654 655 /// Squirrel function would expect a cbProject and extension string. cbProject_ExtensionRemoveNode(HSQUIRRELVM v)656 SQInteger cbProject_ExtensionRemoveNode(HSQUIRRELVM v) 657 { 658 StackHandler sa(v); 659 int paramCount = sa.GetParamCount(); 660 if (paramCount != 2) 661 return sa.ThrowError("Invalid arguments to \"cbProject::ExtensionRemoveNode\""); 662 663 cbProject *project = SqPlus::GetInstance<cbProject, false>(v, 1); 664 if (!project) 665 return sa.ThrowError("Invalid project argument to \"cbProject::ExtensionRemoveNode\""); 666 const wxString *extension = SqPlus::GetInstance<wxString, false>(v, 2); 667 if (!extension) 668 return sa.ThrowError("Invalid extension argument to \"cbProject::ExtensionRemoveNode\""); 669 670 FindXmlElementResult queryResult = FindExtensionElement(project, *extension); 671 if (queryResult.element == nullptr) 672 { 673 if (queryResult.errorStr.empty()) 674 { 675 queryResult.errorStr.Printf(wxT("Can't find extension node '%s'!"), 676 extension->wx_str()); 677 } 678 return sa.ThrowError(queryResult.errorStr.utf8_str().data()); 679 } 680 681 TiXmlNode *parent = queryResult.element->Parent(); 682 parent->RemoveChild(queryResult.element); 683 project->SetModified(true); 684 return sa.Return(); 685 } 686 ProjectManager_AddFileToProject(HSQUIRRELVM v)687 SQInteger ProjectManager_AddFileToProject(HSQUIRRELVM v) 688 { 689 StackHandler sa(v); 690 int paramCount = sa.GetParamCount(); 691 if (paramCount == 4) 692 { 693 if (sa.GetType(4) == OT_INTEGER) 694 { 695 wxString fname = *SqPlus::GetInstance<wxString,false>(v, 2); 696 cbProject* prj = SqPlus::GetInstance<cbProject,false>(v, 3); 697 int idx = sa.GetInt(4); 698 return sa.Return((SQInteger)Manager::Get()->GetProjectManager()->AddFileToProject(fname, prj, idx)); 699 } 700 } 701 return sa.ThrowError("Invalid arguments to \"ProjectManager::AddFileToProject\""); 702 } 703 ProjectManager_GetProjectCount(HSQUIRRELVM v)704 SQInteger ProjectManager_GetProjectCount(HSQUIRRELVM v) 705 { 706 StackHandler sa(v); 707 int count = sa.GetParamCount(); 708 if (count != 1) 709 return sa.ThrowError("Invalid arguments to \"ProjectManager::GetProjectCount\""); 710 else 711 { 712 ProjectManager *manager = SqPlus::GetInstance<ProjectManager, false>(v, 1); 713 int project_count = manager->GetProjects()->GetCount(); 714 return sa.Return((SQInteger)project_count); 715 } 716 } 717 ProjectManager_GetProject(HSQUIRRELVM v)718 SQInteger ProjectManager_GetProject(HSQUIRRELVM v) 719 { 720 StackHandler sa(v); 721 int count = sa.GetParamCount(); 722 if (count != 2) 723 return sa.ThrowError("Invalid arguments to \"ProjectManager::GetProject\""); 724 else 725 { 726 ProjectManager *manager = SqPlus::GetInstance<ProjectManager, false>(v, 1); 727 int index = sa.GetInt(2); 728 int project_count = manager->GetProjects()->GetCount(); 729 if(index >= project_count) 730 return sa.ThrowError("Index out of bounds in \"ProjectManager::GetProject\""); 731 else 732 { 733 cbProject *project = (*manager->GetProjects())[index]; 734 SqPlus::Push(v, project); 735 return 1; 736 } 737 } 738 } ProjectManager_RebuildTree(HSQUIRRELVM v)739 SQInteger ProjectManager_RebuildTree(HSQUIRRELVM v) 740 { 741 StackHandler sa(v); 742 int paramCount = sa.GetParamCount(); 743 if (paramCount == 1) 744 { 745 ProjectManager *manager = SqPlus::GetInstance<ProjectManager, false>(v, 1); 746 if (manager) 747 { 748 manager->GetUI().RebuildTree(); 749 return sa.Return(); 750 } 751 return sa.ThrowError("'this' is NULL!?! (type of ProjectManager*)"); 752 } 753 return sa.ThrowError("Invalid arguments to \"ProjectManager::RebuildTree\""); 754 } 755 cbEditor_SetText(HSQUIRRELVM v)756 SQInteger cbEditor_SetText(HSQUIRRELVM v) 757 { 758 StackHandler sa(v); 759 int paramCount = sa.GetParamCount(); 760 if (paramCount == 2) 761 { 762 cbEditor* self = SqPlus::GetInstance<cbEditor,false>(v, 1); 763 if (self) 764 { 765 self->GetControl()->SetText(*SqPlus::GetInstance<wxString,false>(v, 2)); 766 return sa.Return(); 767 } 768 return sa.ThrowError("'this' is NULL!?! (type of cbEditor*)"); 769 } 770 return sa.ThrowError("Invalid arguments to \"cbEditor::SetText\""); 771 } cbEditor_GetText(HSQUIRRELVM v)772 SQInteger cbEditor_GetText(HSQUIRRELVM v) 773 { 774 StackHandler sa(v); 775 int paramCount = sa.GetParamCount(); 776 if (paramCount == 1) 777 { 778 cbEditor* self = SqPlus::GetInstance<cbEditor,false>(v, 1); 779 if (self) 780 { 781 wxString str = self->GetControl()->GetText(); 782 return SqPlus::ReturnCopy(v, str); 783 } 784 return sa.ThrowError("'this' is NULL!?! (type of cbEditor*)"); 785 } 786 return sa.ThrowError("Invalid arguments to \"cbEditor::GetText\""); 787 } CompilerFactory_GetCompilerIndex(HSQUIRRELVM v)788 SQInteger CompilerFactory_GetCompilerIndex(HSQUIRRELVM v) 789 { 790 StackHandler sa(v); 791 int paramCount = sa.GetParamCount(); 792 if (paramCount == 2) 793 return sa.Return((SQInteger)CompilerFactory::GetCompilerIndex(*SqPlus::GetInstance<wxString,false>(v, 2))); 794 return sa.ThrowError("Invalid arguments to \"CompilerFactory::GetCompilerIndex\""); 795 } 796 CompilerFactory_GetCompilerIDByName(const wxString & name)797 wxString CompilerFactory_GetCompilerIDByName(const wxString &name) 798 { 799 Compiler *compiler = CompilerFactory::GetCompilerByName(name); 800 return (compiler ? compiler->GetID() : wxString(wxEmptyString)); 801 } 802 RegisterBindings()803 void RegisterBindings() 804 { 805 if (!SquirrelVM::GetVMPtr()) 806 cbThrow(_T("Scripting engine not initialized!?")); 807 808 Register_wxTypes(); 809 Register_Constants(); 810 Register_Globals(); 811 Register_IO(); // IO is enabled, but just for harmless functions 812 Register_Dialog(); 813 Register_ProgressDialog(); 814 Register_UtilDialogs(); 815 816 SqPlus::SQClassDef<ConfigManager>("ConfigManager"). 817 staticFuncVarArgs(&ConfigManager_Read, "Read", "*"). 818 staticFuncVarArgs(&ConfigManager_Write, "Write", "*"); 819 820 SqPlus::SQClassDef<ProjectFile>("ProjectFile"). 821 func(&ProjectFile::AddBuildTarget, "AddBuildTarget"). 822 func(&ProjectFile::RenameBuildTarget, "RenameBuildTarget"). 823 func(&ProjectFile::RemoveBuildTarget, "RemoveBuildTarget"). 824 func(&ProjectFile::GetBuildTargets, "GetBuildTargets"). 825 func(&ProjectFile::GetBaseName, "GetBaseName"). 826 func(&ProjectFile::GetObjName, "GetObjName"). 827 func(&ProjectFile::SetObjName, "SetObjName"). 828 func(&ProjectFile::GetParentProject, "GetParentProject"). 829 func(&ProjectFile::SetUseCustomBuildCommand, "SetUseCustomBuildCommand"). 830 func(&ProjectFile::SetCustomBuildCommand, "SetCustomBuildCommand"). 831 func(&ProjectFile::GetUseCustomBuildCommand, "GetUseCustomBuildCommand"). 832 func(&ProjectFile::GetCustomBuildCommand, "GetCustomBuildCommand"). 833 var(&ProjectFile::file, "file"). 834 var(&ProjectFile::relativeFilename, "relativeFilename"). 835 var(&ProjectFile::relativeToCommonTopLevelPath, "relativeToCommonTopLevelPath"). 836 var(&ProjectFile::compile, "compile"). 837 var(&ProjectFile::link, "link"). 838 var(&ProjectFile::weight, "weight"). 839 var(&ProjectFile::compilerVar, "compilerVar"). 840 var(&ProjectFile::buildTargets, "buildTargets"); 841 842 SqPlus::SQClassDef<CompileOptionsBase>("CompileOptionsBase"). 843 func(&CompileOptionsBase::AddPlatform, "AddPlatform"). 844 func(&CompileOptionsBase::RemovePlatform, "RemovePlatform"). 845 func(&CompileOptionsBase::SetPlatforms, "SetPlatforms"). 846 func(&CompileOptionsBase::GetPlatforms, "GetPlatforms"). 847 func(&CompileOptionsBase::SupportsCurrentPlatform, "SupportsCurrentPlatform"). 848 func(&CompileOptionsBase::SetLinkerOptions, "SetLinkerOptions"). 849 func(&CompileOptionsBase::SetLinkLibs, "SetLinkLibs"). 850 func(&CompileOptionsBase::SetLinkerExecutable, "SetLinkerExecutable"). 851 func(&CompileOptionsBase::GetLinkerExecutable, "GetLinkerExecutable"). 852 func(&CompileOptionsBase::SetCompilerOptions, "SetCompilerOptions"). 853 func(&CompileOptionsBase::SetResourceCompilerOptions, "SetResourceCompilerOptions"). 854 func(&CompileOptionsBase::SetIncludeDirs, "SetIncludeDirs"). 855 func(&CompileOptionsBase::SetResourceIncludeDirs, "SetResourceIncludeDirs"). 856 func(&CompileOptionsBase::SetLibDirs, "SetLibDirs"). 857 func(&CompileOptionsBase::SetCommandsBeforeBuild, "SetCommandsBeforeBuild"). 858 func(&CompileOptionsBase::SetCommandsAfterBuild, "SetCommandsAfterBuild"). 859 func(&CompileOptionsBase::GetLinkerOptions, "GetLinkerOptions"). 860 func(&CompileOptionsBase::GetLinkLibs, "GetLinkLibs"). 861 func(&CompileOptionsBase::GetCompilerOptions, "GetCompilerOptions"). 862 func(&CompileOptionsBase::GetResourceCompilerOptions, "GetResourceCompilerOptions"). 863 func(&CompileOptionsBase::GetIncludeDirs, "GetIncludeDirs"). 864 func(&CompileOptionsBase::GetResourceIncludeDirs, "GetResourceIncludeDirs"). 865 func(&CompileOptionsBase::GetLibDirs, "GetLibDirs"). 866 func(&CompileOptionsBase::GetCommandsBeforeBuild, "GetCommandsBeforeBuild"). 867 func(&CompileOptionsBase::GetCommandsAfterBuild, "GetCommandsAfterBuild"). 868 func(&CompileOptionsBase::GetModified, "GetModified"). 869 func(&CompileOptionsBase::SetModified, "SetModified"). 870 func(&CompileOptionsBase::AddLinkerOption, "AddLinkerOption"). 871 func(&CompileOptionsBase::AddLinkLib, "AddLinkLib"). 872 func(&CompileOptionsBase::AddCompilerOption, "AddCompilerOption"). 873 func(&CompileOptionsBase::AddResourceCompilerOption, "AddResourceCompilerOption"). 874 func(&CompileOptionsBase::AddIncludeDir, "AddIncludeDir"). 875 func(&CompileOptionsBase::AddResourceIncludeDir, "AddResourceIncludeDir"). 876 func(&CompileOptionsBase::AddLibDir, "AddLibDir"). 877 func(&CompileOptionsBase::AddCommandsBeforeBuild, "AddCommandsBeforeBuild"). 878 func(&CompileOptionsBase::AddCommandsAfterBuild, "AddCommandsAfterBuild"). 879 func(&CompileOptionsBase::ReplaceLinkerOption, "ReplaceLinkerOption"). 880 func(&CompileOptionsBase::ReplaceLinkLib, "ReplaceLinkLib"). 881 func(&CompileOptionsBase::ReplaceCompilerOption, "ReplaceCompilerOption"). 882 func(&CompileOptionsBase::ReplaceResourceCompilerOption, "ReplaceResourceCompilerOption"). 883 func(&CompileOptionsBase::ReplaceIncludeDir, "ReplaceIncludeDir"). 884 func(&CompileOptionsBase::ReplaceResourceIncludeDir, "ReplaceResourceIncludeDir"). 885 func(&CompileOptionsBase::ReplaceLibDir, "ReplaceLibDir"). 886 func(&CompileOptionsBase::RemoveLinkerOption, "RemoveLinkerOption"). 887 func(&CompileOptionsBase::RemoveLinkLib, "RemoveLinkLib"). 888 func(&CompileOptionsBase::RemoveCompilerOption, "RemoveCompilerOption"). 889 func(&CompileOptionsBase::RemoveIncludeDir, "RemoveIncludeDir"). 890 func(&CompileOptionsBase::RemoveResourceCompilerOption, "RemoveResourceCompilerOption"). 891 func(&CompileOptionsBase::RemoveResourceIncludeDir, "RemoveResourceIncludeDir"). 892 func(&CompileOptionsBase::RemoveLibDir, "RemoveLibDir"). 893 func(&CompileOptionsBase::RemoveCommandsBeforeBuild, "RemoveCommandsBeforeBuild"). 894 func(&CompileOptionsBase::RemoveCommandsAfterBuild, "RemoveCommandsAfterBuild"). 895 func(&CompileOptionsBase::GetAlwaysRunPostBuildSteps, "GetAlwaysRunPostBuildSteps"). 896 func(&CompileOptionsBase::SetAlwaysRunPostBuildSteps, "SetAlwaysRunPostBuildSteps"). 897 func(&CompileOptionsBase::SetBuildScripts, "SetBuildScripts"). 898 func(&CompileOptionsBase::GetBuildScripts, "GetBuildScripts"). 899 func(&CompileOptionsBase::AddBuildScript, "AddBuildScript"). 900 func(&CompileOptionsBase::RemoveBuildScript, "RemoveBuildScript"). 901 func(&CompileOptionsBase::SetVar, "SetVar"). 902 func(&CompileOptionsBase::GetVar, "GetVar"). 903 func(&CompileOptionsBase::UnsetVar, "UnsetVar"). 904 func(&CompileOptionsBase::UnsetAllVars, "UnsetAllVars"); 905 906 SqPlus::SQClassDef<CompileTargetBase>("CompileTargetBase", "CompileOptionsBase"). 907 func(&CompileTargetBase::SetTargetFilenameGenerationPolicy, "SetTargetFilenameGenerationPolicy"). 908 // func(&CompileTargetBase::GetTargetFilenameGenerationPolicy, "GetTargetFilenameGenerationPolicy"). // not exposed because its args are non-const references 909 func(&CompileTargetBase::GetFilename, "GetFilename"). 910 func(&CompileTargetBase::GetTitle, "GetTitle"). 911 func(&CompileTargetBase::SetTitle, "SetTitle"). 912 func(&CompileTargetBase::SetOutputFilename, "SetOutputFilename"). 913 func(&CompileTargetBase::SetWorkingDir, "SetWorkingDir"). 914 func(&CompileTargetBase::SetObjectOutput, "SetObjectOutput"). 915 func(&CompileTargetBase::SetDepsOutput, "SetDepsOutput"). 916 func(&CompileTargetBase::GetOptionRelation, "GetOptionRelation"). 917 func(&CompileTargetBase::SetOptionRelation, "SetOptionRelation"). 918 func(&CompileTargetBase::GetWorkingDir, "GetWorkingDir"). 919 func(&CompileTargetBase::GetObjectOutput, "GetObjectOutput"). 920 func(&CompileTargetBase::GetDepsOutput, "GetDepsOutput"). 921 func(&CompileTargetBase::GetOutputFilename, "GetOutputFilename"). 922 func(&CompileTargetBase::SuggestOutputFilename, "SuggestOutputFilename"). 923 func(&CompileTargetBase::GetExecutableFilename, "GetExecutableFilename"). 924 func(&CompileTargetBase::GetDynamicLibFilename, "GetDynamicLibFilename"). 925 func(&CompileTargetBase::GetDynamicLibDefFilename, "GetDynamicLibDefFilename"). 926 func(&CompileTargetBase::GetStaticLibFilename, "GetStaticLibFilename"). 927 func(&CompileTargetBase::GetBasePath, "GetBasePath"). 928 func(&CompileTargetBase::SetTargetType, "SetTargetType"). 929 func(&CompileTargetBase::GetTargetType, "GetTargetType"). 930 func(&CompileTargetBase::GetExecutionParameters, "GetExecutionParameters"). 931 func(&CompileTargetBase::SetExecutionParameters, "SetExecutionParameters"). 932 func(&CompileTargetBase::GetHostApplication, "GetHostApplication"). 933 func(&CompileTargetBase::SetHostApplication, "SetHostApplication"). 934 func(&CompileTargetBase::SetCompilerID, "SetCompilerID"). 935 func(&CompileTargetBase::GetCompilerID, "GetCompilerID"). 936 func(&CompileTargetBase::GetMakeCommandFor, "GetMakeCommandFor"). 937 func(&CompileTargetBase::SetMakeCommandFor, "SetMakeCommandFor"). 938 func(&CompileTargetBase::MakeCommandsModified, "MakeCommandsModified"); 939 940 SqPlus::SQClassDef<ProjectBuildTarget>("ProjectBuildTarget", "CompileTargetBase"). 941 func<const cbProject* (ProjectBuildTarget::*)() const>(&ProjectBuildTarget::GetParentProject, "GetParentProject"). 942 func(&ProjectBuildTarget::GetFullTitle, "GetFullTitle"). 943 func(&ProjectBuildTarget::GetExternalDeps, "GetExternalDeps"). 944 func(&ProjectBuildTarget::SetExternalDeps, "SetExternalDeps"). 945 func(&ProjectBuildTarget::SetAdditionalOutputFiles, "SetAdditionalOutputFiles"). 946 func(&ProjectBuildTarget::GetAdditionalOutputFiles, "GetAdditionalOutputFiles"). 947 func(&ProjectBuildTarget::GetIncludeInTargetAll, "GetIncludeInTargetAll"). 948 func(&ProjectBuildTarget::SetIncludeInTargetAll, "SetIncludeInTargetAll"). 949 func(&ProjectBuildTarget::GetCreateDefFile, "GetCreateDefFile"). 950 func(&ProjectBuildTarget::SetCreateDefFile, "SetCreateDefFile"). 951 func(&ProjectBuildTarget::GetCreateStaticLib, "GetCreateStaticLib"). 952 func(&ProjectBuildTarget::SetCreateStaticLib, "SetCreateStaticLib"). 953 func(&ProjectBuildTarget::GetUseConsoleRunner, "GetUseConsoleRunner"). 954 func(&ProjectBuildTarget::SetUseConsoleRunner, "SetUseConsoleRunner"). 955 func(&ProjectBuildTarget::GetFilesCount, "GetFilesCount"). 956 func(&ProjectBuildTarget::GetFile, "GetFile"); 957 958 SqPlus::SQClassDef<cbProject>("cbProject", "CompileTargetBase"). 959 func(&cbProject::GetModified, "GetModified"). 960 func(&cbProject::SetModified, "SetModified"). 961 func(&cbProject::GetMakefile, "GetMakefile"). 962 func(&cbProject::SetMakefile, "SetMakefile"). 963 func(&cbProject::IsMakefileCustom, "IsMakefileCustom"). 964 func(&cbProject::SetMakefileCustom, "SetMakefileCustom"). 965 func(&cbProject::CloseAllFiles, "CloseAllFiles"). 966 func(&cbProject::SaveAllFiles, "SaveAllFiles"). 967 func(&cbProject::Save, "Save"). 968 // func(&cbProject::SaveAs, "SaveAs"). // *UNSAFE* 969 func(&cbProject::SaveLayout, "SaveLayout"). 970 func(&cbProject::LoadLayout, "LoadLayout"). 971 // func(&cbProject::ShowOptions, "ShowOptions"). 972 func(&cbProject::GetCommonTopLevelPath, "GetCommonTopLevelPath"). 973 func(&cbProject::GetFilesCount, "GetFilesCount"). 974 func(&cbProject::GetFile, "GetFile"). 975 func(&cbProject::GetFileByFilename, "GetFileByFilename"). 976 staticFuncVarArgs(&cbProject_RemoveFile, "RemoveFile", "*"). 977 staticFuncVarArgs(&cbProject_AddFile, "AddFile", "*"). 978 func(&cbProject::GetBuildTargetsCount, "GetBuildTargetsCount"). 979 staticFuncVarArgs(&cbProject_GetBuildTarget, "GetBuildTarget", "*"). 980 func(&cbProject::AddBuildTarget, "AddBuildTarget"). 981 staticFuncVarArgs(&cbProject_RenameBuildTarget, "RenameBuildTarget", "*"). 982 staticFuncVarArgs(&cbProject_DuplicateBuildTarget, "DuplicateBuildTarget", "*"). 983 staticFuncVarArgs(&cbProject_RemoveBuildTarget, "RemoveBuildTarget", "*"). 984 staticFuncVarArgs(&cbProject_ExportTargetAsProject, "ExportTargetAsProject", "*"). 985 func(&cbProject::BuildTargetValid, "BuildTargetValid"). 986 func(&cbProject::GetFirstValidBuildTargetName, "GetFirstValidBuildTargetName"). 987 func(&cbProject::SetDefaultExecuteTarget, "SetDefaultExecuteTarget"). 988 func(&cbProject::GetDefaultExecuteTarget, "GetDefaultExecuteTarget"). 989 func(&cbProject::SetActiveBuildTarget, "SetActiveBuildTarget"). 990 func(&cbProject::GetActiveBuildTarget, "GetActiveBuildTarget"). 991 func(&cbProject::SelectTarget, "SelectTarget"). 992 func<const ProjectBuildTarget* (cbProject::*)() const>(&cbProject::GetCurrentlyCompilingTarget, "GetCurrentlyCompilingTarget"). 993 func(&cbProject::SetCurrentlyCompilingTarget, "SetCurrentlyCompilingTarget"). 994 func(&cbProject::GetModeForPCH, "GetModeForPCH"). 995 func(&cbProject::SetModeForPCH, "SetModeForPCH"). 996 func(&cbProject::SetExtendedObjectNamesGeneration, "SetExtendedObjectNamesGeneration"). 997 func(&cbProject::GetExtendedObjectNamesGeneration, "GetExtendedObjectNamesGeneration"). 998 func(&cbProject::SetNotes, "SetNotes"). 999 func(&cbProject::GetNotes, "GetNotes"). 1000 func(&cbProject::SetShowNotesOnLoad, "SetShowNotesOnLoad"). 1001 func(&cbProject::GetShowNotesOnLoad, "GetShowNotesOnLoad"). 1002 func(&cbProject::SetCheckForExternallyModifiedFiles, "SetCheckForExternallyModifiedFiles"). 1003 func(&cbProject::GetCheckForExternallyModifiedFiles, "GetCheckForExternallyModifiedFiles"). 1004 func(&cbProject::ShowNotes, "ShowNotes"). 1005 func(&cbProject::AddToExtensions, "AddToExtensions"). 1006 staticFuncVarArgs(cbProject_ExtensionListNodes, "ExtensionListNodes", "*"). 1007 staticFuncVarArgs(cbProject_ExtensionListNodeAttributes, "ExtensionListNodeAttributes", "*"). 1008 staticFuncVarArgs(cbProject_ExtensionGetNodeAttribute, "ExtensionGetNodeAttribute", "*"). 1009 staticFuncVarArgs(cbProject_ExtensionSetNodeAttribute, "ExtensionSetNodeAttribute", "*"). 1010 staticFuncVarArgs(cbProject_ExtensionRemoveNodeAttribute, "ExtensionRemoveNodeAttribute", "*"). 1011 staticFuncVarArgs(cbProject_ExtensionAddNode, "ExtensionAddNode", "*"). 1012 staticFuncVarArgs(cbProject_ExtensionRemoveNode, "ExtensionRemoveNode", "*"). 1013 func(&cbProject::DefineVirtualBuildTarget, "DefineVirtualBuildTarget"). 1014 func(&cbProject::HasVirtualBuildTarget, "HasVirtualBuildTarget"). 1015 func(&cbProject::RemoveVirtualBuildTarget, "RemoveVirtualBuildTarget"). 1016 func(&cbProject::GetVirtualBuildTargets, "GetVirtualBuildTargets"). 1017 func(&cbProject::GetVirtualBuildTargetGroup, "GetVirtualBuildTargetGroup"). 1018 func(&cbProject::GetExpandedVirtualBuildTargetGroup, "GetExpandedVirtualBuildTargetGroup"). 1019 func(&cbProject::CanAddToVirtualBuildTarget, "CanAddToVirtualBuildTarget"). 1020 func(&cbProject::SetTitle, "SetTitle"); 1021 1022 1023 SqPlus::SQClassDef<ProjectManager>("ProjectManager"). 1024 func(&ProjectManager::GetDefaultPath, "GetDefaultPath"). 1025 func(&ProjectManager::SetDefaultPath, "SetDefaultPath"). 1026 func(&ProjectManager::GetActiveProject, "GetActiveProject"). 1027 staticFuncVarArgs(&ProjectManager_GetProjectCount, "GetProjectCount", "*"). 1028 staticFuncVarArgs(&ProjectManager_GetProject, "GetProject", "*"). 1029 func(&ProjectManager::SetProject, "SetProject"). 1030 func(&ProjectManager::LoadWorkspace, "LoadWorkspace"). 1031 func(&ProjectManager::SaveWorkspace, "SaveWorkspace"). 1032 func(&ProjectManager::SaveWorkspaceAs, "SaveWorkspaceAs"). 1033 func(&ProjectManager::CloseWorkspace, "CloseWorkspace"). 1034 func(&ProjectManager::IsOpen, "IsOpen"). 1035 func(&ProjectManager::LoadProject, "LoadProject"). 1036 func(&ProjectManager::SaveProject, "SaveProject"). 1037 func(&ProjectManager::SaveProjectAs, "SaveProjectAs"). 1038 func(&ProjectManager::SaveActiveProject, "SaveActiveProject"). 1039 func(&ProjectManager::SaveActiveProjectAs, "SaveActiveProjectAs"). 1040 func(&ProjectManager::SaveAllProjects, "SaveAllProjects"). 1041 func(&ProjectManager::CloseProject, "CloseProject"). 1042 func(&ProjectManager::CloseActiveProject, "CloseActiveProject"). 1043 func(&ProjectManager::CloseAllProjects, "CloseAllProjects"). 1044 func(&ProjectManager::NewProject, "NewProject"). 1045 staticFuncVarArgs(&ProjectManager_AddFileToProject, "AddFileToProject", "*"). 1046 // func(&ProjectManager::AskForBuildTargetIndex, "AskForBuildTargetIndex"). 1047 func(&ProjectManager::AddProjectDependency, "AddProjectDependency"). 1048 func(&ProjectManager::RemoveProjectDependency, "RemoveProjectDependency"). 1049 func(&ProjectManager::ClearProjectDependencies, "ClearProjectDependencies"). 1050 func(&ProjectManager::RemoveProjectFromAllDependencies, "RemoveProjectFromAllDependencies"). 1051 func(&ProjectManager::GetDependenciesForProject, "GetDependenciesForProject"). 1052 // func(&ProjectManager::ConfigureProjectDependencies, "ConfigureProjectDependencies"); 1053 staticFuncVarArgs(&ProjectManager_RebuildTree, "RebuildTree", "*"); 1054 1055 SqPlus::SQClassDef<EditorBase>("EditorBase"). 1056 func(&EditorBase::GetFilename, "GetFilename"). 1057 func(&EditorBase::SetFilename, "SetFilename"). 1058 func(&EditorBase::GetShortName, "GetShortName"). 1059 func(&EditorBase::GetModified, "GetModified"). 1060 func(&EditorBase::SetModified, "SetModified"). 1061 func(&EditorBase::GetTitle, "GetTitle"). 1062 func(&EditorBase::SetTitle, "SetTitle"). 1063 func(&EditorBase::Activate, "Activate"). 1064 func(&EditorBase::Close, "Close"). 1065 func(&EditorBase::Save, "Save"). 1066 func(&EditorBase::IsBuiltinEditor, "IsBuiltinEditor"). 1067 func(&EditorBase::ThereAreOthers, "ThereAreOthers"). 1068 func(&EditorBase::GotoLine, "GotoLine"). 1069 func(&EditorBase::Undo, "Undo"). 1070 func(&EditorBase::Redo, "Redo"). 1071 func(&EditorBase::Cut, "Cut"). 1072 func(&EditorBase::Copy, "Copy"). 1073 func(&EditorBase::Paste, "Paste"). 1074 func(&EditorBase::CanUndo, "CanUndo"). 1075 func(&EditorBase::CanRedo, "CanRedo"). 1076 func(&EditorBase::CanPaste, "CanPaste"). 1077 func(&EditorBase::IsReadOnly, "IsReadOnly"). 1078 func(&EditorBase::HasSelection, "HasSelection"); 1079 1080 SqPlus::SQClassDef<cbEditor>("cbEditor", "EditorBase"). 1081 func(&cbEditor::SetEditorTitle, "SetEditorTitle"). 1082 func(&cbEditor::GetProjectFile, "GetProjectFile"). 1083 func(&cbEditor::Save, "Save"). 1084 func(&cbEditor::SaveAs, "SaveAs"). 1085 func(&cbEditor::FoldAll, "FoldAll"). 1086 func(&cbEditor::UnfoldAll, "UnfoldAll"). 1087 func(&cbEditor::ToggleAllFolds, "ToggleAllFolds"). 1088 func(&cbEditor::FoldBlockFromLine, "FoldBlockFromLine"). 1089 func(&cbEditor::UnfoldBlockFromLine, "UnfoldBlockFromLine"). 1090 func(&cbEditor::ToggleFoldBlockFromLine, "ToggleFoldBlockFromLine"). 1091 func(&cbEditor::GetLineIndentInSpaces, "GetLineIndentInSpaces"). 1092 func(&cbEditor::GetLineIndentString, "GetLineIndentString"). 1093 func(&cbEditor::Touch, "Touch"). 1094 func(&cbEditor::Reload, "Reload"). 1095 func(&cbEditor::Print, "Print"). 1096 func(&cbEditor::AutoComplete, "AutoComplete"). 1097 func(&cbEditor::AddBreakpoint, "AddBreakpoint"). 1098 func(&cbEditor::RemoveBreakpoint, "RemoveBreakpoint"). 1099 func(&cbEditor::ToggleBookmark, "ToggleBookmark"). 1100 func(&cbEditor::HasBookmark, "HasBookmark"). 1101 func(&cbEditor::GotoNextBookmark, "GotoNextBookmark"). 1102 func(&cbEditor::GotoPreviousBookmark, "GotoPreviousBookmark"). 1103 func(&cbEditor::ClearAllBookmarks, "ClearAllBookmarks"). 1104 func(&cbEditor::ToggleBreakpoint, "ToggleBreakpoint"). 1105 func(&cbEditor::HasBreakpoint, "HasBreakpoint"). 1106 func(&cbEditor::GotoNextBreakpoint, "GotoNextBreakpoint"). 1107 func(&cbEditor::GotoPreviousBreakpoint, "GotoPreviousBreakpoint"). 1108 1109 1110 // these are not present in cbEditor; included to help scripts edit text 1111 staticFuncVarArgs(&cbEditor_SetText, "SetText", "*"). 1112 staticFuncVarArgs(&cbEditor_GetText, "GetText", "*"); 1113 1114 SqPlus::SQClassDef<EditorManager>("EditorManager"). 1115 func(&EditorManager::New, "New"). 1116 staticFuncVarArgs(&EditorManager_Open, "Open"). 1117 func(&EditorManager::IsBuiltinOpen, "IsBuiltinOpen"). 1118 staticFuncVarArgs(&EditorManager_GetBuiltinEditor, "GetBuiltinEditor", "*"). 1119 func(&EditorManager::GetBuiltinActiveEditor, "GetBuiltinActiveEditor"). 1120 func(&EditorManager::GetActiveEditor, "GetActiveEditor"). 1121 func(&EditorManager::ActivateNext, "ActivateNext"). 1122 func(&EditorManager::ActivatePrevious, "ActivatePrevious"). 1123 func(&EditorManager::SwapActiveHeaderSource, "SwapActiveHeaderSource"). 1124 func(&EditorManager::CloseActive, "CloseActive"). 1125 staticFuncVarArgs(&EditorManager_Close, "Close", "*"). 1126 func(&EditorManager::CloseAll, "CloseAll"). 1127 staticFuncVarArgs(&EditorManager_Save, "Save", "*"). 1128 func(&EditorManager::SaveActive, "SaveActive"). 1129 func(&EditorManager::SaveAs, "SaveAs"). 1130 func(&EditorManager::SaveActiveAs, "SaveActiveAs"). 1131 func(&EditorManager::SaveAll, "SaveAll"); 1132 // func(&EditorManager::ShowFindDialog, "ShowFindDialog"); 1133 1134 SqPlus::SQClassDef<UserVariableManager>("UserVariableManager"). 1135 func(&UserVariableManager::Exists, "Exists"); 1136 1137 SqPlus::SQClassDef<ScriptingManager>("ScriptingManager"). 1138 func(&ScriptingManager::RegisterScriptMenu, "RegisterScriptMenu"); 1139 1140 typedef bool(*CF_INHERITSFROM)(const wxString&, const wxString&); // CompilerInheritsFrom 1141 1142 SqPlus::SQClassDef<CompilerFactory>("CompilerFactory"). 1143 staticFunc(&CompilerFactory::IsValidCompilerID, "IsValidCompilerID"). 1144 staticFuncVarArgs(&CompilerFactory_GetCompilerIndex, "GetCompilerIndex", "*"). 1145 staticFunc(&CompilerFactory::GetDefaultCompilerID, "GetDefaultCompilerID"). 1146 staticFunc(&CompilerFactory::GetCompilerVersionString, "GetCompilerVersionString"). 1147 staticFunc<CF_INHERITSFROM>(&CompilerFactory::CompilerInheritsFrom, "CompilerInheritsFrom"). 1148 staticFunc(CompilerFactory_GetCompilerIDByName, "GetCompilerIDByName"); 1149 1150 SqPlus::SQClassDef<PluginInfo>("PluginInfo"). 1151 emptyCtor(). 1152 var(&PluginInfo::name, "name"). 1153 var(&PluginInfo::title, "title"). 1154 var(&PluginInfo::version, "version"). 1155 var(&PluginInfo::description, "description"). 1156 var(&PluginInfo::author, "author"). 1157 var(&PluginInfo::authorEmail, "authorEmail"). 1158 var(&PluginInfo::authorWebsite, "authorWebsite"). 1159 var(&PluginInfo::thanksTo, "thanksTo"). 1160 var(&PluginInfo::license, "license"); 1161 1162 SqPlus::SQClassDef<FileTreeData>("FileTreeData"). 1163 func(&FileTreeData::GetKind, "GetKind"). 1164 func(&FileTreeData::GetProject, "GetProject"). 1165 func(&FileTreeData::GetFileIndex, "GetFileIndex"). 1166 func(&FileTreeData::GetProjectFile, "GetProjectFile"). 1167 func(&FileTreeData::GetFolder, "GetFolder"). 1168 func(&FileTreeData::SetKind, "SetKind"). 1169 func(&FileTreeData::SetProject, "SetProject"). 1170 func(&FileTreeData::SetFileIndex, "SetFileIndex"). 1171 func(&FileTreeData::SetProjectFile, "SetProjectFile"). 1172 func(&FileTreeData::SetFolder, "SetFolder"); 1173 1174 // called last because it needs a few previously registered types 1175 Register_ScriptPlugin(); 1176 } 1177 } // namespace ScriptBindings 1178