mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 06:05:58 -06:00
443 lines
9.3 KiB
C++
443 lines
9.3 KiB
C++
#include "ide.h"
|
|
|
|
#define METHOD_NAME "Ide::" << UPP_FUNCTION_NAME << "(): "
|
|
|
|
void Ide::SerializeWorkspace(Stream& s) {
|
|
int i;
|
|
int version = 22;
|
|
s / version;
|
|
s.Magic(0x12354);
|
|
if(s.IsStoring()) {
|
|
for(i = 0; i < filedata.GetCount(); i++) {
|
|
String fn = filedata.GetKey(i);
|
|
if(!fn.IsEmpty() && FileExists(fn)) {
|
|
s % fn;
|
|
s % filedata[i].editpos;
|
|
if(version >= 1)
|
|
s % filedata[i].columnline;
|
|
}
|
|
}
|
|
String h;
|
|
s % h;
|
|
}
|
|
else {
|
|
String fn;
|
|
filedata.Clear();
|
|
for(;;) {
|
|
s % fn;
|
|
if(fn.IsEmpty()) break;
|
|
FileData& fd = filedata.GetAdd(fn);
|
|
fd.Clear();
|
|
s % fd.editpos;
|
|
if(version >= 1)
|
|
s % fd.columnline;
|
|
}
|
|
}
|
|
String pk = GetActivePackage();
|
|
s % pk;
|
|
package.FindSetCursor(pk);
|
|
s % tablru;
|
|
s % mainconfigname;
|
|
s % mainconfigparam;
|
|
s % console.verbosebuild;
|
|
s % stoponerrors;
|
|
byte dummy = 0;
|
|
s % dummy;
|
|
s % runarg;
|
|
s % recent_runarg;
|
|
s % rundir;
|
|
s % stdout_file % recent_stdout_file / runmode;
|
|
if(version >= 1)
|
|
s % runexternal;
|
|
if(version >= 11) {
|
|
bool dummy = false;
|
|
s % dummy;
|
|
}
|
|
if(version >= 13)
|
|
s % consolemode;
|
|
if(version >= 14)
|
|
s % console_utf8;
|
|
if(version >= 17)
|
|
s % disable_uhd;
|
|
if(version >= 18)
|
|
s % darkmode;
|
|
if(version >= 21)
|
|
s % minimize;
|
|
s % editfile;
|
|
for(i = 0; i < 10; i++) {
|
|
s % bookmark[i];
|
|
}
|
|
editor.Serialize(s);
|
|
if(version >= 5)
|
|
s % editorsplit;
|
|
if(version == 6) {
|
|
String n;
|
|
int v;
|
|
s / v;
|
|
for(int i = 0; i < 10; i++) {
|
|
s % n;
|
|
s / v;
|
|
}
|
|
}
|
|
if(version >= 8) {
|
|
bool dummyb = false;
|
|
String dummy;
|
|
s % dummyb;
|
|
s % dummy;
|
|
}
|
|
SerializeFindInFiles(s);
|
|
String om;
|
|
s % om;
|
|
s % recentoutput;
|
|
s % recentflags;
|
|
s / editortabsize / indent_amount % indent_spaces;
|
|
if(version < 15)
|
|
for(int j = 0; j < GetIdeModuleCount(); j++)
|
|
GetIdeModule(j).Serialize(s);
|
|
else {
|
|
VectorMap<String, String> module_cfg;
|
|
for(int j = 0; j < GetIdeModuleCount(); j++) {
|
|
IdeModule& m = GetIdeModule(j);
|
|
module_cfg.Add(m.GetID(), StoreAsString(m));
|
|
}
|
|
s % module_cfg;
|
|
for(int j = 0; j < GetIdeModuleCount(); j++) {
|
|
IdeModule& m = GetIdeModule(j);
|
|
LoadFromString(m, module_cfg.Get(m.GetID(), String()));
|
|
}
|
|
}
|
|
SerializeWorkspaceConfigs(s);
|
|
SerializeOutputMode(s);
|
|
SerializeClosed(s);
|
|
if(version >= 10) {
|
|
bool dotabs = tabs_serialize;
|
|
if(version >= 19)
|
|
s % dotabs;
|
|
if(dotabs)
|
|
s % tabs;
|
|
}
|
|
if(version >= 11) {
|
|
s % find_file_search_string;
|
|
}
|
|
if(version >= 16) {
|
|
s % find_file_search_in_current_package;
|
|
}
|
|
if(version >= 12)
|
|
SerializePlacement(s);
|
|
if(version >= 20)
|
|
s % difflru;
|
|
if(version >= 22)
|
|
editor.SerializeNavigatorWorkspace(s);
|
|
}
|
|
|
|
void Ide::SerializeLastMain(Stream& s)
|
|
{
|
|
s % main;
|
|
String varsname = GetVarsName();
|
|
s % varsname;
|
|
s % pocfg;
|
|
if(s.IsLoading())
|
|
LoadVars(varsname);
|
|
}
|
|
|
|
void Ide::EditorMode()
|
|
{
|
|
Logd() << METHOD_NAME;
|
|
|
|
editormode = true;
|
|
main = Null;
|
|
pocfg = Null;
|
|
|
|
// TODO: This is probably bug with CtrlLib tool bar. If
|
|
// we did not call clear here - we will have blocked two icons
|
|
// in editor mode :(. This should be investigated with
|
|
// appropriate test case.
|
|
toolbar.Clear();
|
|
SetBar();
|
|
|
|
editor.SyncNavigator();
|
|
}
|
|
|
|
bool Ide::IsEditorMode() const
|
|
{
|
|
return editormode;
|
|
}
|
|
|
|
void Ide::SaveLastMain()
|
|
{
|
|
StoreToFile(THISBACK(SerializeLastMain), ConfigFile("lastmain.cfg"));
|
|
}
|
|
|
|
void Ide::LoadLastMain()
|
|
{
|
|
bool editor = IsEditorMode();
|
|
LoadFromFile(THISBACK(SerializeLastMain), ConfigFile("lastmain.cfg"));
|
|
if(editor)
|
|
main = Null;
|
|
}
|
|
|
|
void Sentinel(Stream& s, const char *txt)
|
|
{
|
|
String h;
|
|
h << "<123456789:" << txt << ":123456789>";
|
|
Buffer<char> hh(h.GetLength());
|
|
memcpy(hh, h, h.GetLength());
|
|
s.SerializeRaw((byte *)~hh, h.GetLength());
|
|
}
|
|
|
|
void Ide::Serialize(Stream& s)
|
|
{
|
|
int version = 33;
|
|
Sentinel(s, "before 12341234");
|
|
s.Magic(0x12341234);
|
|
Sentinel(s, "after magic");
|
|
s / version;
|
|
Sentinel(s, "before first FileSel");
|
|
s % AnySourceFs();
|
|
Sentinel(s, "after AnySourceFs");
|
|
s % BasedSourceFs();
|
|
Sentinel(s, "after BasedSourceFs");
|
|
s % AnyPackageFs();
|
|
Sentinel(s, "after AnyPackageFs");
|
|
s % pfsplit;
|
|
if (version >= 12)
|
|
s % weframe;
|
|
else {
|
|
Splitter dummy;
|
|
s % dummy;
|
|
}
|
|
package.SerializeSettings(s);
|
|
filelist.SerializeSettings(s);
|
|
s % editorfont;
|
|
s % tfont;
|
|
s % veditorfont;
|
|
s % consolefont;
|
|
s % font1;
|
|
s % font2;
|
|
s % show_status_bar;
|
|
s % toolbar_in_row;
|
|
if(version >= 33)
|
|
s % disable_custom_caption;
|
|
s % filetabs;
|
|
s % auto_enclose;
|
|
s % persistent_find_replace;
|
|
if(version >= 4) {
|
|
s % find_replace_restore_pos;
|
|
}
|
|
s % show_tabs;
|
|
if(version >= 18)
|
|
s % show_spaces;
|
|
if(version >= 29)
|
|
s % block_caret;
|
|
if(version >= 30)
|
|
s % bar_branch;
|
|
if(version >= 32)
|
|
s % search_downloads;
|
|
if(version >= 7)
|
|
s % warnwhitespace;
|
|
s % tabs_icons;
|
|
s % tabs_crosses;
|
|
s % tabs_grouping;
|
|
s % tabs_serialize;
|
|
s % tabs_stacking;
|
|
if(version >= 11)
|
|
s % spellcheck_comments;
|
|
if(version >= 13) {
|
|
s % wordwrap_comments;
|
|
s % wordwrap;
|
|
}
|
|
if(version >= 16) {
|
|
s % setmain_newide;
|
|
}
|
|
bool dummy_force_crlf = false;
|
|
s % dummy_force_crlf;
|
|
if(version >= 1)
|
|
s % line_endings;
|
|
s % no_parenthesis_indent;
|
|
s % hilite_scope;
|
|
s % hilite_if_endif;
|
|
s % hilite_bracket;
|
|
s % hilite_ifdef;
|
|
if(version >= 31)
|
|
s % hl_custom;
|
|
if(version >= 3)
|
|
s % thousands_separator;
|
|
if(version >= 5)
|
|
s % hline;
|
|
if(version >= 15)
|
|
s % vline;
|
|
s % barline;
|
|
s % qtfsel;
|
|
s % wrap_console_text;
|
|
s % mute_sounds;
|
|
s % line_numbers;
|
|
s % bookmark_pos;
|
|
s % use_target;
|
|
s % default_charset;
|
|
s % header_guards;
|
|
s % insert_include;
|
|
if(version >= 23)
|
|
s % libclang_options;
|
|
if(version >= 24)
|
|
s % libclang_coptions;
|
|
SerializeGlobalConfigs(s);
|
|
doc.Serialize(s);
|
|
s % right_split;
|
|
s % splash_screen;
|
|
s % editor.auto_assist;
|
|
if(version >= 9)
|
|
s % AutoIndexer;
|
|
if(version >= 27)
|
|
s % RelaxedIndexerDependencies;
|
|
if(version >= 10) {
|
|
bool dummy = false;
|
|
s % dummy;
|
|
}
|
|
if(version >= 21) {
|
|
bool dummy = false;
|
|
s % dummy;
|
|
}
|
|
s % editor.commentdp;
|
|
s % bordercolumn;
|
|
Color dummy_color;
|
|
s % dummy_color;
|
|
if(version >= 20)
|
|
s % find_pick_sel % find_pick_text % deactivate_save;
|
|
s % hydra1_threads;
|
|
if(s.IsLoading())
|
|
console.SetSlots(hydra1_threads);
|
|
if(version < 14) {
|
|
int dummy_gdb_selector = 0;
|
|
s % dummy_gdb_selector;
|
|
}
|
|
s % doc;
|
|
s % chstyle;
|
|
if(version < 25) { // deprecated
|
|
bool astyle_BracketIndent;
|
|
bool astyle_NamespaceIndent;
|
|
bool astyle_BlockIndent;
|
|
bool astyle_CaseIndent;
|
|
bool astyle_ClassIndent;
|
|
bool astyle_LabelIndent;
|
|
bool astyle_SwitchIndent;
|
|
bool astyle_PreprocessorIndent;
|
|
int astyle_MinInStatementIndentLength;
|
|
int astyle_MaxInStatementIndentLength;
|
|
bool astyle_BreakClosingHeaderBracketsMode;
|
|
bool astyle_BreakElseIfsMode;
|
|
bool astyle_BreakOneLineBlocksMode;
|
|
bool astyle_SingleStatementsMode;
|
|
bool astyle_BreakBlocksMode;
|
|
bool astyle_BreakClosingHeaderBlocksMode;
|
|
int astyle_BracketFormatMode;
|
|
int astyle_ParensPaddingMode;
|
|
bool astyle_ParensUnPaddingMode;
|
|
bool astyle_OperatorPaddingMode;
|
|
bool astyle_EmptyLineFill;
|
|
bool astyle_TabSpaceConversionMode;
|
|
WString astyle_TestBox;
|
|
|
|
s % astyle_BracketIndent;
|
|
s % astyle_NamespaceIndent;
|
|
s % astyle_BlockIndent;
|
|
s % astyle_CaseIndent;
|
|
s % astyle_ClassIndent;
|
|
s % astyle_LabelIndent;
|
|
s % astyle_SwitchIndent;
|
|
s % astyle_PreprocessorIndent;
|
|
s % astyle_MinInStatementIndentLength;
|
|
s % astyle_MaxInStatementIndentLength;
|
|
s % astyle_BreakClosingHeaderBracketsMode;
|
|
s % astyle_BreakElseIfsMode;
|
|
s % astyle_BreakOneLineBlocksMode;
|
|
s % astyle_SingleStatementsMode;
|
|
s % astyle_BreakBlocksMode;
|
|
s % astyle_BreakClosingHeaderBlocksMode;
|
|
s % astyle_BracketFormatMode;
|
|
s % astyle_ParensPaddingMode;
|
|
s % astyle_ParensUnPaddingMode;
|
|
s % astyle_OperatorPaddingMode;
|
|
s % astyle_EmptyLineFill;
|
|
s % astyle_TabSpaceConversionMode;
|
|
s % astyle_TestBox;
|
|
}
|
|
|
|
if(version >= 6 && version < 8) {
|
|
String dummy;
|
|
s % dummy;
|
|
}
|
|
s % HostConsole;
|
|
editor.SerializeNavigator(s);
|
|
s % showtime;
|
|
s % DiffFs();
|
|
s % sort;
|
|
s % output_per_assembly;
|
|
s.Magic();
|
|
if(version >= 17)
|
|
s % hlstyle_is_default;
|
|
if(version >= 19) {
|
|
s % gui_font % gui_font_override;
|
|
}
|
|
|
|
if(version >= 22) {
|
|
ClangConfigSerialize(s);
|
|
}
|
|
|
|
if(version >= 26)
|
|
s % prefer_clang_format;
|
|
|
|
if(version >= 28)
|
|
s % blk0_header;
|
|
|
|
#ifdef PLATFORM_WIN32
|
|
if(s.IsLoading() && HostConsole == "/usr/bin/xterm -e")
|
|
HostConsole = "powershell.exe";
|
|
#endif
|
|
}
|
|
|
|
Time Ide::ConfigTime()
|
|
{
|
|
return FileGetTime(ConfigFile());
|
|
}
|
|
|
|
void Ide::SaveConfig()
|
|
{
|
|
SaveChangedFile(ConfigFile(), StoreAsString(*this));
|
|
if(GetIniKey("DebugClipboard") == "1") {
|
|
SaveChangedFile(ConfigFile() + ".bak", StoreAsString(*this));
|
|
StoreToFile(*this, ConfigFile() + ".bak1");
|
|
}
|
|
SaveChangedFile(ConfigFile("ide.key"), StoreKeys());
|
|
SaveChangedFile(ConfigFile("ide.colors"), editor.StoreHlStyles());
|
|
config_time = ConfigTime();
|
|
}
|
|
|
|
void Ide::SaveConfigOnTime()
|
|
{
|
|
if(ConfigTime() == config_time)
|
|
SaveConfig();
|
|
}
|
|
|
|
void Ide::LoadConfig()
|
|
{
|
|
if(!LoadFromFile(*this) && GetIniKey("DebugClipboard") == "1") {
|
|
Exclamation("LoadConfig has failed!");
|
|
if(!LoadFromFile(*this, ConfigFile() + ".bak")) {
|
|
Exclamation("LoadConfig .bak has failed!");
|
|
if(!LoadFromFile(*this, ConfigFile() + ".bak1"))
|
|
Exclamation("LoadConfig .bak1 has failed!");
|
|
}
|
|
}
|
|
RestoreKeys(LoadFile(ConfigFile("ide.key")));
|
|
if(hlstyle_is_default)
|
|
editor.DefaultHlStyles();
|
|
else
|
|
editor.LoadHlStyles(LoadFile(ConfigFile("ide.colors")));
|
|
config_time = FileGetTime(ConfigFile());
|
|
UpdateFormat();
|
|
if(filelist.IsCursor()) {
|
|
FlushFile();
|
|
FileCursor();
|
|
}
|
|
SaveLoadPackage();
|
|
}
|