OpenClonk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
C4ScenarioListLoader::Entry Class Referenceabstract

#include <C4StartupScenSelDlg.h>

Inheritance diagram for C4ScenarioListLoader::Entry:
[legend]
Collaboration diagram for C4ScenarioListLoader::Entry:
[legend]

Public Member Functions

 Entry (class C4ScenarioListLoader *pLoader, class Folder *pParent)
 
virtual ~Entry ()
 
bool Load (C4Group *pFromGrp, const StdStrBuf *psFilename, bool fLoadEx)
 
virtual bool LoadCustom (C4Group &rGrp, bool fNameLoaded, bool fIconLoaded)
 
virtual bool LoadCustomPre (C4Group &rGrp)
 
virtual bool Start ()=0
 
virtual FolderGetIsFolder ()
 
const StdStrBufGetName () const
 
const StdStrBufGetEntryFilename () const
 
const StdStrBufGetVersion () const
 
const StdStrBufGetAuthor () const
 
const C4FacetGetIconFacet () const
 
const C4FacetGetTitlePicture () const
 
const StdStrBufGetDesc () const
 
int GetIconIndex ()
 
int GetDifficulty ()
 
int GetFolderIndex ()
 
EntryGetNext () const
 
class FolderGetParent () const
 
virtual StdStrBuf GetTypeName ()=0
 
virtual bool GetAchievement (int32_t idx, C4Facet *out_facet, const char **out_description)
 
virtual bool CanOpen (StdStrBuf &sError)
 
virtual bool IsGrayed ()
 
virtual bool IsHidden ()
 
virtual bool HasMissionAccess () const
 
virtual bool HasUnregisteredAccess () const
 
virtual StdStrBuf GetOpenText ()=0
 
virtual StdStrBuf GetOpenTooltip ()=0
 
virtual const char * GetDefaultExtension ()
 
virtual bool SetTitleInGroup (C4Group &rGrp, const char *szNewTitle)
 
bool RenameTo (const char *szNewName)
 
virtual bool IsScenario ()
 
virtual C4ScenarioParameterDefsGetParameterDefs ()
 
virtual C4ScenarioParametersGetParameters ()
 

Static Public Member Functions

static EntryCreateEntryForFile (const StdStrBuf &sFilename, C4ScenarioListLoader *pLoader, Folder *pParent)
 

Protected Attributes

class C4ScenarioListLoaderpLoader
 
EntrypNext
 
class FolderpParent
 
StdCopyStrBuf sName
 
StdCopyStrBuf sFilename
 
StdCopyStrBuf sDesc
 
StdCopyStrBuf sVersion
 
StdCopyStrBuf sAuthor
 
C4FacetSurface fctIcon
 
C4FacetSurface fctTitle
 
bool fBaseLoaded
 
bool fExLoaded
 
int iIconIndex
 
int iDifficulty
 
int iFolderIndex
 

Friends

class Folder
 

Detailed Description

Definition at line 47 of file C4StartupScenSelDlg.h.

Constructor & Destructor Documentation

C4ScenarioListLoader::Entry::Entry ( class C4ScenarioListLoader pLoader,
class Folder pParent 
)

Definition at line 403 of file C4StartupScenSelDlg.cpp.

References iDifficulty, iFolderIndex, iIconIndex, C4ScenarioListLoader::Folder::pFirst, and pNext.

403  : pLoader(pLoader), pNext(nullptr), pParent(pParent), fBaseLoaded(false), fExLoaded(false)
404 {
405  // ctor: Put into parent tree node
406  if (pParent)
407  {
408  pNext = pParent->pFirst;
409  pParent->pFirst = this;
410  }
411  iIconIndex = -1;
412  iDifficulty = 0;
413  iFolderIndex = 0;
414 }
Entry * pNext
int iDifficulty
int iIconIndex
bool fBaseLoaded
bool fExLoaded
class C4ScenarioListLoader * pLoader
int iFolderIndex
class Folder * pParent
C4ScenarioListLoader::Entry::~Entry ( )
virtual

Definition at line 416 of file C4StartupScenSelDlg.cpp.

References pNext.

417 {
418  // dtor: unlink from parent list (MUST be in there)
419  if (pParent)
420  {
421  Entry **ppCheck = &(pParent->pFirst);
422  while (*ppCheck != this)
423  {
424  ppCheck = &(*ppCheck)->pNext;
425  }
426  *ppCheck = pNext;
427  }
428 }
Entry * pNext
Entry(class C4ScenarioListLoader *pLoader, class Folder *pParent)
class Folder * pParent

Member Function Documentation

virtual bool C4ScenarioListLoader::Entry::CanOpen ( StdStrBuf sError)
inlinevirtual

Reimplemented in C4ScenarioListLoader::Folder, and C4ScenarioListLoader::Scenario.

Definition at line 91 of file C4StartupScenSelDlg.h.

Referenced by C4StartupScenSelDlg::DoOK(), and C4StartupScenSelDlg::ScenListItem::ScenListItem().

91 { return true; } // whether item can be started/opened (e.g. mission access, unregistered)

Here is the caller graph for this function:

C4ScenarioListLoader::Entry * C4ScenarioListLoader::Entry::CreateEntryForFile ( const StdStrBuf sFilename,
C4ScenarioListLoader pLoader,
Folder pParent 
)
static

Definition at line 544 of file C4StartupScenSelDlg.cpp.

References C4CFN_FolderFiles, C4CFN_ScenarioFiles, DirContainsScenarios(), DirectoryExists(), StdStrBuf::getData(), GetExtension(), and WildcardMatch().

Referenced by C4ScenarioListLoader::SubFolder::DoLoadContents(), and C4ScenarioListLoader::RegularFolder::DoLoadContents().

545 {
546  // determine entry type by file type
547  const char *szFilename = sFilename.getData();
548  if (!szFilename || !*szFilename) return nullptr;
549  if (WildcardMatch(C4CFN_ScenarioFiles, sFilename.getData())) return new Scenario(pLoader, pParent);
550  if (WildcardMatch(C4CFN_FolderFiles, sFilename.getData())) return new SubFolder(pLoader, pParent);
551  // regular, open folder (C4Group-packed folders without extensions are not regarded, because they could contain anything!)
552  const char *szExt = GetExtension(szFilename);
553  if ((!szExt || !*szExt) && DirectoryExists(sFilename.getData()))
554  {
555  // open folders only if they contain a scenario or folder
556  if (DirContainsScenarios(szFilename))
557  return new RegularFolder(pLoader, pParent);
558  }
559  // type not recognized
560  return nullptr;
561 }
const char * getData() const
Definition: StdBuf.h:442
#define C4CFN_FolderFiles
Definition: C4Components.h:175
bool DirContainsScenarios(const char *szDir)
char * GetExtension(char *szFilename)
Definition: StdFile.cpp:121
bool DirectoryExists(const char *szFilename)
Definition: StdFile.cpp:684
bool WildcardMatch(const char *szWildcard, const char *szString)
Definition: StdFile.cpp:374
#define C4CFN_ScenarioFiles
Definition: C4Components.h:174
class Folder * pParent

Here is the call graph for this function:

Here is the caller graph for this function:

virtual bool C4ScenarioListLoader::Entry::GetAchievement ( int32_t  idx,
C4Facet out_facet,
const char **  out_description 
)
inlinevirtual

Reimplemented in C4ScenarioListLoader::Scenario.

Definition at line 87 of file C4StartupScenSelDlg.h.

Referenced by C4StartupScenSelDlg::ScenListItem::ScenListItem().

87 { return false; } // return true and fill output parameters if player got the indexed achievement

Here is the caller graph for this function:

const StdStrBuf& C4ScenarioListLoader::Entry::GetAuthor ( ) const
inline

Definition at line 77 of file C4StartupScenSelDlg.h.

References sAuthor.

77 { return sAuthor; }
StdCopyStrBuf sAuthor
virtual const char* C4ScenarioListLoader::Entry::GetDefaultExtension ( )
inlinevirtual

Reimplemented in C4ScenarioListLoader::SubFolder, and C4ScenarioListLoader::Scenario.

Definition at line 99 of file C4StartupScenSelDlg.h.

99 { return nullptr; } // extension to be added when item is renamed
const StdStrBuf& C4ScenarioListLoader::Entry::GetDesc ( ) const
inline

Definition at line 80 of file C4StartupScenSelDlg.h.

References sDesc.

80 { return sDesc; }
StdCopyStrBuf sDesc
int C4ScenarioListLoader::Entry::GetDifficulty ( )
inline

Definition at line 82 of file C4StartupScenSelDlg.h.

References iDifficulty.

Referenced by EntrySortFunc().

Here is the caller graph for this function:

const StdStrBuf& C4ScenarioListLoader::Entry::GetEntryFilename ( ) const
inline

Definition at line 75 of file C4StartupScenSelDlg.h.

References sFilename.

Referenced by C4StartupScenSelDlg::DeleteConfirm(), C4StartupScenSelDlg::KeyDelete(), and C4StartupScenSelDlg::StartScenario().

75 { return sFilename; }
StdCopyStrBuf sFilename

Here is the caller graph for this function:

int C4ScenarioListLoader::Entry::GetFolderIndex ( )
inline

Definition at line 83 of file C4StartupScenSelDlg.h.

References iFolderIndex.

Referenced by EntrySortFunc().

Here is the caller graph for this function:

const C4Facet& C4ScenarioListLoader::Entry::GetIconFacet ( ) const
inline

Definition at line 78 of file C4StartupScenSelDlg.h.

References fctIcon.

Referenced by C4StartupScenSelDlg::ScenListItem::ScenListItem().

78 { return fctIcon; }
C4FacetSurface fctIcon

Here is the caller graph for this function:

int C4ScenarioListLoader::Entry::GetIconIndex ( )
inline

Definition at line 81 of file C4StartupScenSelDlg.h.

References iIconIndex.

Referenced by EntrySortFunc().

Here is the caller graph for this function:

virtual Folder* C4ScenarioListLoader::Entry::GetIsFolder ( )
inlinevirtual

Reimplemented in C4ScenarioListLoader::Folder.

Definition at line 72 of file C4StartupScenSelDlg.h.

Referenced by C4ScenarioListLoader::Folder::ClearChildren(), and EntrySortFunc().

72 { return nullptr; } // return this if this is a folder

Here is the caller graph for this function:

const StdStrBuf& C4ScenarioListLoader::Entry::GetName ( ) const
inline

Definition at line 74 of file C4StartupScenSelDlg.h.

References sName.

Referenced by EntrySortFunc(), C4StartupScenSelDlg::KeyDelete(), and C4StartupScenSelDlg::ScenListItem::ScenListItem().

74 { return sName; }
StdCopyStrBuf sName

Here is the caller graph for this function:

Entry* C4ScenarioListLoader::Entry::GetNext ( ) const
inline

Definition at line 84 of file C4StartupScenSelDlg.h.

References pNext.

Referenced by C4ScenarioListLoader::Folder::FindEntryByName().

84 { return pNext; }
Entry * pNext

Here is the caller graph for this function:

virtual StdStrBuf C4ScenarioListLoader::Entry::GetOpenText ( )
pure virtual
virtual StdStrBuf C4ScenarioListLoader::Entry::GetOpenTooltip ( )
pure virtual
virtual C4ScenarioParameterDefs* C4ScenarioListLoader::Entry::GetParameterDefs ( )
inlinevirtual

Reimplemented in C4ScenarioListLoader::Scenario.

Definition at line 104 of file C4StartupScenSelDlg.h.

104 { return nullptr; }
virtual C4ScenarioParameters* C4ScenarioListLoader::Entry::GetParameters ( )
inlinevirtual

Reimplemented in C4ScenarioListLoader::Scenario.

Definition at line 105 of file C4StartupScenSelDlg.h.

105 { return nullptr; }
class Folder* C4ScenarioListLoader::Entry::GetParent ( ) const
inline

Definition at line 85 of file C4StartupScenSelDlg.h.

References pParent.

Referenced by C4ScenarioListLoader::FolderBack().

85 { return pParent; }
class Folder * pParent

Here is the caller graph for this function:

const C4Facet& C4ScenarioListLoader::Entry::GetTitlePicture ( ) const
inline

Definition at line 79 of file C4StartupScenSelDlg.h.

References fctTitle.

79 { return fctTitle; }
C4FacetSurface fctTitle
virtual StdStrBuf C4ScenarioListLoader::Entry::GetTypeName ( )
pure virtual

Implemented in C4ScenarioListLoader::RegularFolder, C4ScenarioListLoader::SubFolder, and C4ScenarioListLoader::Scenario.

Referenced by C4StartupScenSelDlg::KeyDelete().

Here is the caller graph for this function:

const StdStrBuf& C4ScenarioListLoader::Entry::GetVersion ( ) const
inline

Definition at line 76 of file C4StartupScenSelDlg.h.

References sVersion.

76 { return sVersion; }
StdCopyStrBuf sVersion
virtual bool C4ScenarioListLoader::Entry::HasMissionAccess ( ) const
inlinevirtual

Reimplemented in C4ScenarioListLoader::Scenario.

Definition at line 94 of file C4StartupScenSelDlg.h.

94 { return true; }
virtual bool C4ScenarioListLoader::Entry::HasUnregisteredAccess ( ) const
inlinevirtual

Definition at line 95 of file C4StartupScenSelDlg.h.

95 { return false; }
virtual bool C4ScenarioListLoader::Entry::IsGrayed ( )
inlinevirtual

Reimplemented in C4ScenarioListLoader::Folder, and C4ScenarioListLoader::Scenario.

Definition at line 92 of file C4StartupScenSelDlg.h.

Referenced by C4StartupScenSelDlg::ScenListItem::ScenListItem().

92 { return false; } // additional condition for graying out - notice unreg folders are grayed but can still be opened

Here is the caller graph for this function:

virtual bool C4ScenarioListLoader::Entry::IsHidden ( )
inlinevirtual

Reimplemented in C4ScenarioListLoader::Scenario.

Definition at line 93 of file C4StartupScenSelDlg.h.

93 { return false; } // condition for hiding element completely
virtual bool C4ScenarioListLoader::Entry::IsScenario ( )
inlinevirtual

Reimplemented in C4ScenarioListLoader::Scenario.

Definition at line 102 of file C4StartupScenSelDlg.h.

102 { return false; }
bool C4ScenarioListLoader::Entry::Load ( C4Group pFromGrp,
const StdStrBuf psFilename,
bool  fLoadEx 
)

Definition at line 431 of file C4StartupScenSelDlg.cpp.

References C4CFN_IconPNG, C4CFN_ScenarioDesc, C4CFN_ScenarioIcon, C4CFN_ScenarioTitle, C4CFN_Title, C4CFN_Version, C4FCT_Full, C4StartupScenSel_DefaultIcon_OldIconBG, C4FacetSurface::Clear(), Config, C4Facet::Draw(), C4StartupGraphics::fctScenSelIcons, C4Group::FindEntry(), C4Config::General, C4Startup::Get(), C4ComponentHost::GetData(), StdStrBuf::getData(), GetFilename(), C4Group::GetFullName(), C4ComponentHost::GetLanguageString(), C4Facet::GetPhase(), C4Surface::GetPixDw(), C4Startup::Graphics, C4Facet::Hgt, C4ConfigGeneral::LanguageEx, C4ComponentHost::Load(), C4FacetSurface::Load(), C4Language::LoadComponentHost(), C4Group::LoadEntryString(), C4Surface::Lock(), C4Group::Open(), C4Group::OpenAsChild(), RemoveExtension(), C4Surface::SetPixDw(), C4Facet::Surface, C4Surface::Unlock(), and C4Facet::Wdt.

Referenced by C4ScenarioListLoader::SubFolder::DoLoadContents(), C4ScenarioListLoader::RegularFolder::DoLoadContents(), and C4ScenarioListLoader::LoadExtended().

432 {
433  // nothing to do if already loaded
434  if (fBaseLoaded && (fExLoaded || !fLoadEx)) return true;
435  C4Group Group;
436  // group specified: Load as child
437  if (pFromGrp)
438  {
439  assert(psFilename);
440  if (!Group.OpenAsChild(pFromGrp, psFilename->getData())) return false;
441  // set FN by complete entry name
442  this->sFilename.Take(Group.GetFullName());
443  }
444  else
445  {
446  // set FN by complete entry name
447  if (psFilename) this->sFilename.Copy(*psFilename);
448  // no parent group: Direct load from filename
449  if (!Group.Open(sFilename.getData())) return false;
450  }
451  // okay; load standard stuff from group
452  bool fNameLoaded=false, fIconLoaded=false;
453  if (fBaseLoaded)
454  {
455  fNameLoaded = fIconLoaded = true;
456  }
457  else
458  {
459  // Set default name as filename without extension
461  char *szBuf = sName.GrabPointer();
462  RemoveExtension(szBuf);
463  sName.Take(szBuf);
464  // load entry specific stuff that's in the front of the group
465  if (!LoadCustomPre(Group))
466  return false;
467  // Load entry name
468  C4ComponentHost DefNames;
471  fNameLoaded = true;
472  // load entry icon
473  if (Group.FindEntry(C4CFN_IconPNG) && fctIcon.Load(Group, C4CFN_IconPNG, C4FCT_Full, C4FCT_Full, false, 0))
474  fIconLoaded = true;
475  else
476  {
477  C4FacetSurface fctTemp;
478  if (Group.FindEntry(C4CFN_ScenarioIcon) && fctTemp.Load(Group, C4CFN_ScenarioIcon, C4FCT_Full, C4FCT_Full, true, 0))
479  {
480  // old style icon: Blit it on a pieace of paper
481  fctTemp.Surface->Lock();
482  for (int y=0; y<fctTemp.Hgt; ++y)
483  for (int x=0; x<fctTemp.Wdt; ++x)
484  {
485  uint32_t dwPix = fctTemp.Surface->GetPixDw(x,y, false);
486  // transparency has some tolerance...
487  if (Inside<uint8_t>(dwPix & 0xff, 0xb8, 0xff))
488  if (Inside<uint8_t>((dwPix>>0x08) & 0xff, 0x00, 0x0f))
489  if (Inside<uint8_t>((dwPix>>0x10) & 0xff, 0xb8, 0xff))
490  fctTemp.Surface->SetPixDw(x,y,0x00ffffff);
491  }
492  fctTemp.Surface->Unlock();
493  int iIconSize = C4Startup::Get()->Graphics.fctScenSelIcons.Hgt;
494  fctIcon.Create(iIconSize, iIconSize, C4FCT_Full, C4FCT_Full);
496  fctTemp.Draw(fctIcon.Surface, (fctIcon.Wdt-fctTemp.Wdt)/2, (fctIcon.Hgt-fctTemp.Hgt)/2);
497  fctTemp.Clear();
498  fIconLoaded = true;
499  }
500  }
501  // load any entryx-type-specific custom data (e.g. fallbacks for scenario title, and icon)
502  if (!LoadCustom(Group, fNameLoaded, fIconLoaded)) return false;
503  fBaseLoaded = true;
504  }
505  // load extended stuff: title picture
506  if (fLoadEx && !fExLoaded)
507  {
508  // load desc
509  C4ComponentHost DefDesc;
511  {
512  sDesc.Copy(DefDesc.GetData());
513  }
514  // load title
516  fExLoaded = true;
517  // load version
519  }
520  // done, success
521  return true;
522 }
char * GetFilename(char *szPath)
Definition: StdFile.cpp:45
const char * getData() const
Definition: StdBuf.h:442
bool FindEntry(const char *szWildCard, StdStrBuf *sFileName=nullptr, size_t *iSize=nullptr)
Definition: C4Group.cpp:1774
C4Config Config
Definition: C4Config.cpp:833
char * GrabPointer()
Definition: StdBuf.h:459
const int32_t C4StartupScenSel_DefaultIcon_OldIconBG
C4ConfigGeneral General
Definition: C4Config.h:251
bool Load(C4Group &hGroup, const char *szName, int iWdt, int iHgt, bool fNoErrIfNotFound, int iFlags)
Definition: C4FacetEx.cpp:78
const char * GetData() const
bool Lock()
Definition: C4Surface.cpp:453
bool Unlock()
Definition: C4Surface.cpp:464
#define C4CFN_Version
Definition: C4Components.h:72
StdCopyStrBuf sDesc
C4FacetID fctScenSelIcons
Definition: C4Startup.h:61
StdCopyStrBuf sName
StdCopyStrBuf sFilename
bool GetLanguageString(const char *szLanguage, StdStrBuf &rTarget)
static bool LoadComponentHost(C4ComponentHost *host, C4Group &hGroup, const char *szFilename, const char *szLanguage)
Definition: C4Language.cpp:232
#define C4CFN_Title
Definition: C4Components.h:82
StdCopyStrBuf sVersion
bool SetPixDw(int iX, int iY, DWORD dwCol)
Definition: C4Surface.cpp:576
StdStrBuf GetFullName() const
Definition: C4Group.cpp:2078
bool Open(const char *szGroupName, bool fCreate=false)
Definition: C4Group.cpp:514
virtual bool LoadCustom(C4Group &rGrp, bool fNameLoaded, bool fIconLoaded)
void Take(char *pnData)
Definition: StdBuf.h:457
void Draw(C4Facet &cgo, bool fAspect=true, int32_t iPhaseX=0, int32_t iPhaseY=0, bool fTransparent=true)
Definition: C4Facet.cpp:154
DWORD GetPixDw(int iX, int iY, bool fApplyModulation)
Definition: C4Surface.cpp:491
char LanguageEx[CFG_MaxString+1]
Definition: C4Config.h:37
void RemoveExtension(char *szFilename)
Definition: StdFile.cpp:306
C4FacetSurface fctIcon
bool fBaseLoaded
bool fExLoaded
bool LoadEntryString(const char *szEntryName, StdStrBuf *Buf)
Definition: C4Group.cpp:1932
#define C4CFN_IconPNG
Definition: C4Components.h:86
float Hgt
Definition: C4Facet.h:118
#define C4CFN_ScenarioDesc
Definition: C4Components.h:88
bool Create(int iWdt, int iHgt, int iWdt2=C4FCT_Full, int iHgt2=C4FCT_Full)
Definition: C4FacetEx.cpp:54
static C4Startup * Get()
Definition: C4Startup.h:133
C4Surface * Surface
Definition: C4Facet.h:117
const int C4FCT_Full
Definition: C4FacetEx.h:26
#define C4CFN_ScenarioIcon
Definition: C4Components.h:85
void Copy()
Definition: StdBuf.h:467
float Wdt
Definition: C4Facet.h:118
C4Facet GetPhase(int iPhaseX=0, int iPhaseY=0)
Definition: C4Facet.cpp:59
C4StartupGraphics Graphics
Definition: C4Startup.h:100
void Clear()
Definition: C4FacetEx.h:44
#define C4CFN_ScenarioTitle
Definition: C4Components.h:84
bool OpenAsChild(C4Group *pMother, const char *szEntryName, bool fExclusive=false, bool fCreate=false)
Definition: C4Group.cpp:1585
virtual bool LoadCustomPre(C4Group &rGrp)
C4FacetSurface fctTitle

Here is the call graph for this function:

Here is the caller graph for this function:

virtual bool C4ScenarioListLoader::Entry::LoadCustom ( C4Group rGrp,
bool  fNameLoaded,
bool  fIconLoaded 
)
inlinevirtual

Reimplemented in C4ScenarioListLoader::RegularFolder, C4ScenarioListLoader::SubFolder, and C4ScenarioListLoader::Scenario.

Definition at line 69 of file C4StartupScenSelDlg.h.

69 { return true; } // load custom data for entry type (e.g. scenario title fallback in Scenario.txt)
virtual bool C4ScenarioListLoader::Entry::LoadCustomPre ( C4Group rGrp)
inlinevirtual

Reimplemented in C4ScenarioListLoader::Folder, and C4ScenarioListLoader::Scenario.

Definition at line 70 of file C4StartupScenSelDlg.h.

70 { return true; } // preload stuff that's early in the group (Scenario.txt)
bool C4ScenarioListLoader::Entry::RenameTo ( const char *  szNewName)

Definition at line 563 of file C4StartupScenSelDlg.cpp.

References _MAX_PATH, C4GUI::MessageDialog::btnOK, C4CFN_Title, C4Group_IsGroup(), C4Group_MoveItem(), C4Group::Close(), C4Group::Delete(), StdStrBuf::Format(), StdStrBuf::getData(), C4Group::GetError(), GetFilename(), C4GUI::Ico_Error, ItemExists(), ItemIdentical(), LoadResStr(), MakeFilenameFromTitle(), C4Group::Open(), pGUI, SAppend(), SCopy(), SEqual(), and C4GUI::Screen::ShowMessageModal().

564 {
565  // change name+filename
566  // some name sanity validation
567  if (!szNewName || !*szNewName) return false;
568  if (SEqual(szNewName, sName.getData())) return true;
569  char fn[_MAX_PATH+1];
570  SCopy(szNewName, fn, _MAX_PATH);
571  // generate new file name
573  if (!*fn) return false;
574  const char *szExt = GetDefaultExtension();
575  if (szExt) { SAppend(".", fn, _MAX_PATH); SAppend(szExt, fn, _MAX_PATH); }
576  char fullfn[_MAX_PATH+1];
577  SCopy(sFilename.getData(), fullfn, _MAX_PATH);
578  char *fullfn_fn = GetFilename(fullfn);
579  SCopy(fn, fullfn_fn, _MAX_PATH - (fullfn_fn - fullfn));
580  StdCopyStrBuf strErr(LoadResStr("IDS_FAIL_RENAME"));
581  // check if a rename is due
582  if (!ItemIdentical(sFilename.getData(), fullfn))
583  {
584  // check for duplicate filename
585  if (ItemExists(fullfn))
586  {
587  StdStrBuf sMsg; sMsg.Format(LoadResStr("IDS_ERR_FILEEXISTS"), fullfn);
589  return false;
590  }
591  // OK; then rename
592  if (!C4Group_MoveItem(sFilename.getData(), fullfn, true))
593  {
594  StdStrBuf sMsg; sMsg.Format(LoadResStr("IDS_ERR_RENAMEFILE"), sFilename.getData(), fullfn);
596  return false;
597  }
598  sFilename.Copy(fullfn);
599  }
600  // update real name in group, if this is a group
601  if (C4Group_IsGroup(fullfn))
602  {
603  C4Group Grp;
604  if (!Grp.Open(fullfn))
605  {
606  StdStrBuf sMsg; sMsg.Format(LoadResStr("IDS_ERR_OPENFILE"), sFilename.getData(), Grp.GetError());
608  return false;
609  }
610  if (!Grp.Delete(C4CFN_Title))
611  {
612  StdStrBuf sMsg; sMsg.Format(LoadResStr("IDS_ERR_DELOLDTITLE"), sFilename.getData(), Grp.GetError());
614  return false;
615  }
616  if (!SetTitleInGroup(Grp, szNewName)) return false;
617  if (!Grp.Close())
618  {
619  StdStrBuf sMsg; sMsg.Format(LoadResStr("IDS_ERR_WRITENEWTITLE"), sFilename.getData(), Grp.GetError());
621  return false;
622  }
623  }
624  // update title
625  sName.Copy(szNewName);
626  // done
627  return true;
628 }
char * GetFilename(char *szPath)
Definition: StdFile.cpp:45
const char * getData() const
Definition: StdBuf.h:442
void SCopy(const char *szSource, char *sTarget, size_t iMaxL)
Definition: Standard.cpp:130
void SAppend(const char *szSource, char *szTarget, int iMaxL)
Definition: Standard.cpp:235
bool ItemIdentical(const char *szFilename1, const char *szFilename2)
Definition: StdFile.cpp:855
virtual const char * GetDefaultExtension()
void Format(const char *szFmt,...) GNUC_FORMAT_ATTRIBUTE_O
Definition: StdBuf.cpp:174
bool Delete(const char *szFiles, bool fRecursive=false)
Definition: C4Group.cpp:1334
#define _MAX_PATH
bool SEqual(const char *szStr1, const char *szStr2)
Definition: Standard.h:93
StdCopyStrBuf sName
StdCopyStrBuf sFilename
const char * LoadResStr(const char *id)
Definition: C4Language.h:83
void MakeFilenameFromTitle(char *szTitle)
Definition: StdFile.cpp:402
C4GUIScreen * pGUI
Definition: C4Gui.cpp:1191
#define C4CFN_Title
Definition: C4Components.h:82
bool ShowMessageModal(const char *szMessage, const char *szCaption, DWORD dwButtons, Icons icoIcon, int32_t *piConfigDontShowAgainSetting=nullptr)
bool Open(const char *szGroupName, bool fCreate=false)
Definition: C4Group.cpp:514
bool C4Group_IsGroup(const char *szFilename)
Definition: C4Group.cpp:94
bool Close()
Definition: C4Group.cpp:755
virtual bool SetTitleInGroup(C4Group &rGrp, const char *szNewTitle)
const char * GetError()
Definition: C4Group.cpp:504
bool C4Group_MoveItem(const char *szSource, const char *szTarget1, bool fNoSort)
Definition: C4Group.cpp:144
bool ItemExists(const char *szItemName)
Definition: StdFile.h:75
void Copy()
Definition: StdBuf.h:467

Here is the call graph for this function:

bool C4ScenarioListLoader::Entry::SetTitleInGroup ( C4Group rGrp,
const char *  szNewTitle 
)
virtual

Definition at line 630 of file C4StartupScenSelDlg.cpp.

References C4Group::Add(), C4GUI::MessageDialog::btnOK, C4CFN_WriteTitle, Config, StdStrBuf::Copy(), StdStrBuf::Format(), C4Config::General, StdStrBuf::getData(), C4Group::GetError(), GetFilename(), StdStrBuf::GrabPointer(), C4GUI::Ico_Error, C4ConfigGeneral::Language, LoadResStr(), pGUI, RemoveExtension(), SEqual(), C4GUI::Screen::ShowMessageModal(), and StdStrBuf::Take().

631 {
632  // default for group files: Create a title text file and set the title in there
633  // no title needed if filename is sufficient - except for scenarios, where a Scenario.txt could overwrite the title
634  if (!IsScenario())
635  {
636  StdStrBuf sNameByFile; sNameByFile.Copy(GetFilename(sFilename.getData()));
637  char *szBuf = sNameByFile.GrabPointer();
638  RemoveExtension(szBuf);
639  sNameByFile.Take(szBuf);
640  if (SEqual(szNewTitle, sNameByFile.getData())) return true;
641  }
642  // okay, make a title
643  StdStrBuf sTitle; sTitle.Format("%s:%s", Config.General.Language, szNewTitle);
644  if (!rGrp.Add(C4CFN_WriteTitle, sTitle, false, true))
645  {
646  StdStrBuf sMsg; sMsg.Format(LoadResStr("IDS_ERR_ERRORADDINGNEWTITLEFORFIL"), sFilename.getData(), rGrp.GetError());
648  return false;
649  }
650  return true;
651 }
char * GetFilename(char *szPath)
Definition: StdFile.cpp:45
const char * getData() const
Definition: StdBuf.h:442
#define C4CFN_WriteTitle
Definition: C4Components.h:83
C4Config Config
Definition: C4Config.cpp:833
char * GrabPointer()
Definition: StdBuf.h:459
C4ConfigGeneral General
Definition: C4Config.h:251
void Format(const char *szFmt,...) GNUC_FORMAT_ATTRIBUTE_O
Definition: StdBuf.cpp:174
virtual bool IsScenario()
bool SEqual(const char *szStr1, const char *szStr2)
Definition: Standard.h:93
StdCopyStrBuf sFilename
const char * LoadResStr(const char *id)
Definition: C4Language.h:83
C4GUIScreen * pGUI
Definition: C4Gui.cpp:1191
bool ShowMessageModal(const char *szMessage, const char *szCaption, DWORD dwButtons, Icons icoIcon, int32_t *piConfigDontShowAgainSetting=nullptr)
void Take(char *pnData)
Definition: StdBuf.h:457
void RemoveExtension(char *szFilename)
Definition: StdFile.cpp:306
char Language[CFG_MaxString+1]
Definition: C4Config.h:36
const char * GetError()
Definition: C4Group.cpp:504
bool Add(const char *szFile, const char *szAddAs)
Definition: C4Group.cpp:1316
void Copy()
Definition: StdBuf.h:467

Here is the call graph for this function:

virtual bool C4ScenarioListLoader::Entry::Start ( )
pure virtual

Implemented in C4ScenarioListLoader::Folder, and C4ScenarioListLoader::Scenario.

Referenced by C4StartupScenSelDlg::DoOK().

Here is the caller graph for this function:

Friends And Related Function Documentation

friend class Folder
friend

Definition at line 54 of file C4StartupScenSelDlg.h.

Member Data Documentation

bool C4ScenarioListLoader::Entry::fBaseLoaded
protected

Definition at line 59 of file C4StartupScenSelDlg.h.

C4FacetSurface C4ScenarioListLoader::Entry::fctIcon
protected

Definition at line 58 of file C4StartupScenSelDlg.h.

Referenced by GetIconFacet().

C4FacetSurface C4ScenarioListLoader::Entry::fctTitle
protected

Definition at line 58 of file C4StartupScenSelDlg.h.

Referenced by GetTitlePicture().

bool C4ScenarioListLoader::Entry::fExLoaded
protected

Definition at line 59 of file C4StartupScenSelDlg.h.

int C4ScenarioListLoader::Entry::iDifficulty
protected

Definition at line 61 of file C4StartupScenSelDlg.h.

Referenced by Entry(), and GetDifficulty().

int C4ScenarioListLoader::Entry::iFolderIndex
protected

Definition at line 62 of file C4StartupScenSelDlg.h.

Referenced by Entry(), and GetFolderIndex().

int C4ScenarioListLoader::Entry::iIconIndex
protected

Definition at line 60 of file C4StartupScenSelDlg.h.

Referenced by Entry(), and GetIconIndex().

class C4ScenarioListLoader* C4ScenarioListLoader::Entry::pLoader
protected

Definition at line 50 of file C4StartupScenSelDlg.h.

Entry* C4ScenarioListLoader::Entry::pNext
protected
class Folder* C4ScenarioListLoader::Entry::pParent
protected

Definition at line 52 of file C4StartupScenSelDlg.h.

Referenced by GetParent().

StdCopyStrBuf C4ScenarioListLoader::Entry::sAuthor
protected

Definition at line 57 of file C4StartupScenSelDlg.h.

Referenced by GetAuthor().

StdCopyStrBuf C4ScenarioListLoader::Entry::sDesc
protected

Definition at line 57 of file C4StartupScenSelDlg.h.

Referenced by GetDesc().

StdCopyStrBuf C4ScenarioListLoader::Entry::sFilename
protected

Definition at line 57 of file C4StartupScenSelDlg.h.

Referenced by GetEntryFilename().

StdCopyStrBuf C4ScenarioListLoader::Entry::sName
protected

Definition at line 57 of file C4StartupScenSelDlg.h.

Referenced by GetName().

StdCopyStrBuf C4ScenarioListLoader::Entry::sVersion
protected

Definition at line 57 of file C4StartupScenSelDlg.h.

Referenced by GetVersion().


The documentation for this class was generated from the following files: