This is an automated email from the git hooks/post-receive script. odyx pushed a commit to branch upstream/latest in repository colobot.
commit 97e76e630394e99d8768f2377b60a5b19304da86 Author: krzys-h <krzy...@interia.pl> Date: Mon Nov 10 22:07:51 2014 +0100 Better handling of filenames longer than maximum allowed #354 --- src/ui/studio.cpp | 34 +++++++++++++++++++++++----------- src/ui/studio.h | 2 ++ 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/ui/studio.cpp b/src/ui/studio.cpp index 7198b91..5f4ca34 100644 --- a/src/ui/studio.cpp +++ b/src/ui/studio.cpp @@ -1091,10 +1091,6 @@ void CStudio::StartDialog(StudioDialog type) pe = pw->CreateEdit(pos, dim, 0, EVENT_DIALOG_EDIT); pe->SetState(STATE_SHADOW); - if ( m_dialog == SD_SAVE ) - { - pe->SetText(m_script->GetFilename()); - } GetResource(RES_TEXT, RT_IO_DIR, name); pla = pw->CreateLabel(pos, dim, 0, EVENT_DIALOG_LABEL3, name); @@ -1125,6 +1121,12 @@ void CStudio::StartDialog(StudioDialog type) UpdateDialogList(); UpdateDialogPublic(); UpdateDialogAction(); + + if ( m_dialog == SD_SAVE ) + { + SetFilenameField(pe, m_script->GetFilename()); + UpdateChangeEdit(); + } pe->SetCursor(999, 0); // selects all pe->SetFocus(true); @@ -1377,8 +1379,6 @@ void CStudio::UpdateChangeList() CWindow* pw; CList* pl; CEdit* pe; - char name[100]; - char* p; pw = static_cast< CWindow* >(m_interface->SearchControl(EVENT_WINDOW9)); if ( pw == nullptr ) return; @@ -1387,17 +1387,29 @@ void CStudio::UpdateChangeList() pe = static_cast< CEdit* >(pw->SearchControl(EVENT_DIALOG_EDIT)); if ( pe == nullptr ) return; - strcpy(name, pl->GetItemName(pl->GetSelect())); - name[pe->GetMaxChar()] = 0; // truncates according lg max editable - p = strchr(name, '\t'); // seeks first tab - if ( p != 0 ) *p = 0; - pe->SetText(name); + std::string name = pl->GetItemName(pl->GetSelect()); + name = name.substr(0, name.find_first_of("\t")); + SetFilenameField(pe, name); pe->SetCursor(999, 0); // selects all pe->SetFocus(true); UpdateDialogAction(); } +void CStudio::SetFilenameField(CEdit* edit, const std::string& filename) +{ + std::string name = filename; + if(name.length() > edit->GetMaxChar()) { + if(name.substr(name.length()-4) == ".txt") + name = name.substr(0, name.length()-4); + if(name.length() > edit->GetMaxChar()) { + CLogger::GetInstancePointer()->Warn("Tried to load too long filename!\n"); + name = name.substr(0, edit->GetMaxChar()); // truncates according to max length + } + } + edit->SetText(name.c_str()); +} + // Updates the list after a change in name. void CStudio::UpdateChangeEdit() diff --git a/src/ui/studio.h b/src/ui/studio.h index a11d706..c5c80f1 100644 --- a/src/ui/studio.h +++ b/src/ui/studio.h @@ -91,6 +91,8 @@ protected: std::string SearchDirectory(bool bCreate); bool ReadProgram(); bool WriteProgram(); + + void SetFilenameField(CEdit* edit, const std::string& filename); protected: Gfx::CEngine* m_engine; -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git _______________________________________________ Pkg-games-commits mailing list Pkg-games-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits