Skip to content

Commit a3e59ad

Browse files
committed
Merge branch 'master' into multiple_sections
2 parents 9377ed3 + 8114a10 commit a3e59ad

File tree

8 files changed

+47
-29
lines changed

8 files changed

+47
-29
lines changed

src/C4Console.cpp

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -596,22 +596,33 @@ bool C4Console::In(const char *szText)
596596
return true;
597597
}
598598

599-
bool C4Console::Out(const char *szText)
599+
bool C4Console::Out(std::string_view text)
600600
{
601601
#ifdef _WIN32
602602
if (!Active) return false;
603-
if (!szText || !*szText) return true;
604-
int len, len2; char *buffer, *buffer2;
605-
len = 65000;
606-
len2 = len + std::min<int>(strlen(szText) + 2, 5000);
607-
buffer = new char[len2];
608-
buffer[0] = 0;
609-
GetDlgItemText(hWindow, IDC_EDITOUTPUT, buffer, len);
610-
if (buffer[0]) SAppend("\r\n", buffer);
611-
SAppend(szText, buffer, len2 - 1);
612-
if (strlen(buffer) > 60000) buffer2 = buffer + strlen(buffer) - 60000; else buffer2 = buffer; // max log length: Otherwise, discard beginning
613-
SetDlgItemText(hWindow, IDC_EDITOUTPUT, buffer2);
614-
delete[] buffer;
603+
if (text.empty()) return true;
604+
605+
const bool hasNewline{text.ends_with("\r\n")};
606+
607+
std::string buffer;
608+
const LRESULT dlgItemTextSize{SendDlgItemMessage(hWindow, IDC_EDITOUTPUT, WM_GETTEXTLENGTH, 0, 0)};
609+
buffer.resize_and_overwrite(dlgItemTextSize + text.size() + (hasNewline ? 0 : 2), [dlgItemTextSize, hasNewline,&text, this](char *const ptr, std::size_t size)
610+
{
611+
const UINT textSize{GetDlgItemText(hWindow, IDC_EDITOUTPUT, ptr, dlgItemTextSize + 1)};
612+
char *newlinePtr{ptr + textSize + text.copy(ptr + textSize, text.size())};
613+
614+
if (!hasNewline)
615+
{
616+
*newlinePtr++ = '\r';
617+
*newlinePtr++ = '\n';
618+
}
619+
620+
return newlinePtr - ptr;
621+
});
622+
623+
const char *const newText{buffer.size() <= 60000 ? buffer.c_str() : buffer.c_str() + buffer.size() - 60000}; // max log length: Otherwise, discard beginning
624+
SetDlgItemText(hWindow, IDC_EDITOUTPUT, newText);
625+
615626
const auto lines = SendDlgItemMessage(hWindow, IDC_EDITOUTPUT, EM_GETLINECOUNT, 0, 0);
616627
SendDlgItemMessage(hWindow, IDC_EDITOUTPUT, EM_LINESCROLL, 0, static_cast<LPARAM>(lines));
617628
UpdateWindow(hWindow);
@@ -623,8 +634,12 @@ bool C4Console::Out(const char *szText)
623634
GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(txtLog));
624635
gtk_text_buffer_get_end_iter(buffer, &end);
625636

626-
gtk_text_buffer_insert(buffer, &end, C4Language::IconvUtf8(szText).getData(), -1);
627-
gtk_text_buffer_insert(buffer, &end, "\n", 1);
637+
gtk_text_buffer_insert(buffer, &end, C4Language::IconvUtf8(text.data()).getData(), -1);
638+
639+
if (!text.ends_with('\n'))
640+
{
641+
gtk_text_buffer_insert(buffer, &end, "\n", 1);
642+
}
628643

629644
gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(txtLog), gtk_text_buffer_get_insert(buffer), 0.0, FALSE, 0.0, 0.0);
630645

src/C4Console.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ class C4Console : public C4ConsoleBase
6969
bool Message(const char *szMessage, bool fQuery = false);
7070
void SetCaption(const char *szCaption);
7171
bool In(const char *szText);
72-
bool Out(const char *szText);
72+
bool Out(std::string_view text);
7373
bool ClearLog(); // empty log text
7474
void DoPlay();
7575
void DoHalt();

src/C4Game.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1281,7 +1281,6 @@ void C4Game::Default()
12811281
Parameters.ScenarioTitle.Ref("Loading...");
12821282
HaltCount = 0;
12831283
Evaluated = false;
1284-
Verbose = false;
12851284
TimeGo = false;
12861285
Time = 0;
12871286
StartTime = 0;
@@ -2546,7 +2545,7 @@ void C4Game::ParseCommandLine(const char *szCmdLine)
25462545

25472546
// verbose
25482547
if (SSearchNoCase(szCmdLine, "/verbose"))
2549-
Verbose = true;
2548+
Application.LogSystem.SetVerbose(true);
25502549

25512550
// startup dialog required?
25522551
Application.UseStartupDialog = Application.isFullScreen && !*DirectJoinAddress && !*ScenarioFilename && !RecordStream.getSize();

src/C4Game.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,6 @@ class C4Game
204204
int32_t iLobbyTimeout;
205205
bool fObserve;
206206
bool NetworkActive;
207-
bool Verbose; // default false; set to true only by command line
208207
StdStrBuf RecordDumpFile;
209208
StdStrBuf RecordStream;
210209
bool TempScenarioFile;

src/C4Log.cpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ void C4LogSystem::GuiSink::DoLog(const std::string &message)
196196
lobby->OnLog(message.c_str());
197197
}
198198

199-
Console.Out(message.c_str());
199+
Console.Out(message);
200200

201201
if (Game.GraphicsSystem.MessageBoard.Active)
202202
{
@@ -241,9 +241,7 @@ C4LogSystem::C4LogSystem()
241241
{
242242
spdlog::set_automatic_registration(false);
243243

244-
const auto logLevel = Game.Verbose ? spdlog::level::debug : spdlog::level::warn;
245-
246-
loggerSilentGuiSink = std::make_shared<GuiSink>(logLevel, true);
244+
loggerSilentGuiSink = std::make_shared<GuiSink>(spdlog::level::warn, true);
247245

248246
#ifdef _WIN32
249247
debugSink = std::make_shared<spdlog::sinks::msvc_sink_mt>();
@@ -273,7 +271,7 @@ C4LogSystem::C4LogSystem()
273271
void C4LogSystem::OpenLog()
274272
{
275273
stdoutSink = std::static_pointer_cast<spdlog::sinks::sink>(std::make_shared<spdlog::sinks::stdout_color_sink_mt>());
276-
stdoutSink->set_level(Game.Verbose ? spdlog::level::debug : spdlog::level::info);
274+
stdoutSink->set_level(spdlog::level::info);
277275

278276
clonkLogSink = std::make_shared<LogSink>();
279277
clonkLogFD = clonkLogSink->GetFD();
@@ -302,13 +300,13 @@ std::shared_ptr<spdlog::logger> C4LogSystem::CreateLogger(std::string name, cons
302300
auto newLogger = std::make_shared<spdlog::logger>(std::move(name));
303301
newLogger->set_level(spdlog::level::trace);
304302

305-
if (options.GuiLogLevel != spdlog::level::n_levels && !options.ShowLoggerNameInGui)
303+
if (options.GuiLogLevel == spdlog::level::n_levels && !options.ShowLoggerNameInGui)
306304
{
307305
newLogger->sinks().emplace_back(loggerSilentGuiSink);
308306
}
309307
else
310308
{
311-
const auto level = options.GuiLogLevel != spdlog::level::n_levels ? std::min(options.GuiLogLevel, loggerSilentGuiSink->level()) : loggerSilentGuiSink->level();
309+
const auto level = options.GuiLogLevel != spdlog::level::n_levels ? std::max(options.GuiLogLevel, loggerSilentGuiSink->level()) : loggerSilentGuiSink->level();
312310
newLogger->sinks().emplace_back(std::make_shared<GuiSink>(level, options.ShowLoggerNameInGui));
313311
}
314312

@@ -338,6 +336,12 @@ void C4LogSystem::EnableDebugLog(const bool enable)
338336
loggerDebugGuiSink->set_level(enable ? spdlog::level::debug : spdlog::level::off);
339337
}
340338

339+
void C4LogSystem::SetVerbose(const bool verbose)
340+
{
341+
loggerSilentGuiSink->set_level(verbose ? spdlog::level::trace : spdlog::level::warn);
342+
stdoutSink->set_level(verbose ? spdlog::level::trace : spdlog::level::info);
343+
}
344+
341345
void C4LogSystem::AddFatalError(std::string message)
342346
{
343347
logger->critical("{}", LoadResStr(C4ResStrTableKey::IDS_ERR_FATAL, message));

src/C4Log.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ class C4LogSystem
124124
std::shared_ptr<spdlog::logger> GetOrCreate(std::string name, C4LogSystemCreateLoggerOptions options = {});
125125

126126
void EnableDebugLog(bool enable);
127+
void SetVerbose(bool verbose);
127128

128129
private:
129130
std::shared_ptr<spdlog::logger> logger;

src/C4ObjectMenu.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ bool C4ObjectMenu::DoRefillInternal(bool &rfRefilled)
278278
pObj->Picture2Facet(fctSymbol);
279279
// Commands
280280
command = std::format("AppendCommand(this,\"Sell\",Object({}),{},0,Object({}),0,{})&&ExecuteCommand()", pTarget->Number, 1, pObj->Number, C4IdText(pDef->id));
281-
command2 = std::format("AppendCommand(this,\"Sell\",Object({}),{},0,Object({}),0,{})&&ExecuteCommand()", pTarget->Number, pObj->Contents.ObjectCount(pDef->id), pObj->Number, C4IdText(pDef->id));
281+
command2 = std::format("AppendCommand(this,\"Sell\",Object({}),{},0,,0,{})&&ExecuteCommand()", pTarget->Number, pTarget->Contents.ObjectCount(pDef->id), C4IdText(pDef->id));
282282
// Selling value
283283
int32_t iSellValue = pObj->GetValue(pTarget, Object ? Object->Owner : NO_OWNER);
284284
// Add menu item

src/C4ToolsDlg.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -806,11 +806,11 @@ void C4ToolsDlg::UpdateLandscapeModeCtrls()
806806
switch (iMode)
807807
{
808808
case C4LSC_Dynamic:
809-
caption = LoadResStr(C4ResStrTableKey::IDS_DLG_EXACT);
809+
caption = LoadResStr(C4ResStrTableKey::IDS_DLG_DYNAMIC);
810810
break;
811811

812812
case C4LSC_Static:
813-
caption = LoadResStr(C4ResStrTableKey::IDS_DLG_EXACT);
813+
caption = LoadResStr(C4ResStrTableKey::IDS_DLG_STATIC);
814814
break;
815815

816816
default:

0 commit comments

Comments
 (0)