X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffiledlg.C;h=bbd63ba7ed6809cf7285ec94dc8b5752fe18c739;hb=a858be7332e331e0244e4dba7b0931b6072ffd3d;hp=6037454c905d89dbed2533549a8d922539385200;hpb=0eccdd1c3613e5170deb77b22174dd0afde833e9;p=lyx.git diff --git a/src/filedlg.C b/src/filedlg.C index 6037454c90..bbd63ba7ed 100644 --- a/src/filedlg.C +++ b/src/filedlg.C @@ -75,6 +75,12 @@ static const long ONE_HOUR_SEC = 60L * 60L; // global instance (user cache root) UserCache lyxUserCache = UserCache(string(),0,0); +// some "C" wrappers around callbacks +extern "C" void C_LyXFileDlg_FileDlgCB(FL_OBJECT *, long lArgument); +extern "C" void C_LyXFileDlg_DoubleClickCB(FL_OBJECT *, long); +extern "C" int C_LyXFileDlg_CancelCB(FL_FORM *, void *); +extern "C" int C_LyXDirEntryC_ldeCompProc(const void* r1, + const void* r2); // Add: creates a new user entry UserCache * UserCache::Add(uid_t ID) @@ -196,6 +202,13 @@ int LyXDirEntry::ldeCompProc(const LyXDirEntry * r1, return r1->pszName.compare(r2->pszName); } +extern "C" int C_LyXDirEntry_ldeCompProc(const void * r1, + const void * r2) +{ + return LyXDirEntry::ldeCompProc((const LyXDirEntry *)r1, + (const LyXDirEntry *)r2); +} + // *** LyXFileDlg class implementation // static members @@ -280,14 +293,13 @@ void LyXFileDlg::Reread() File = AddName(pszDirectory, fname); fileInfo.newFile(File, true); - fileInfo.modeString(szMode); unsigned int nlink = fileInfo.getNumberOfLinks(); string user = lyxUserCache.Find(fileInfo.getUid()); string group = lyxGroupCache.Find(fileInfo.getGid()); time_t modtime = fileInfo.getModificationTime(); - Time += ctime(&modtime); + Time = ctime(&modtime); if (curTime > fileInfo.getModificationTime() + SIX_MONTH_SEC || curTime < fileInfo.getModificationTime() @@ -297,13 +309,14 @@ void LyXFileDlg::Reread() // factor for what is considered "the future", to // allow for NFS server/client clock disagreement. // Show the year instead of the time of day. -#warning fix! - Time.erase(10, 9); + Time.erase(15, string::npos); + } else { + Time.erase(16, string::npos); } - Buffer = szMode + ' ' + - nlink + ' ' + + Buffer = string(szMode) + ' ' + + tostr(nlink) + ' ' + user + ' ' + group + ' ' + Time.substr(4, string::npos) + ' '; @@ -361,7 +374,7 @@ void LyXFileDlg::Reread() // Sort the names qsort(pCurrentNames, iNumNames, sizeof(LyXDirEntry), - (int (*)(const void *, const void *))LyXDirEntry::ldeCompProc); + C_LyXDirEntry_ldeCompProc); // Add them to directory box for (i = 0; i < iNumNames; ++i) { @@ -412,27 +425,28 @@ LyXFileDlg::LyXFileDlg() pFileDlgForm = create_form_FileDlg(); // Set callbacks. This means that we don't need a patch file fl_set_object_callback(pFileDlgForm->DirBox, - LyXFileDlg::FileDlgCB,0); + C_LyXFileDlg_FileDlgCB,0); fl_set_object_callback(pFileDlgForm->PatBox, - LyXFileDlg::FileDlgCB,1); + C_LyXFileDlg_FileDlgCB,1); fl_set_object_callback(pFileDlgForm->List, - LyXFileDlg::FileDlgCB,2); + C_LyXFileDlg_FileDlgCB,2); fl_set_object_callback(pFileDlgForm->Filename, - LyXFileDlg::FileDlgCB,3); + C_LyXFileDlg_FileDlgCB,3); fl_set_object_callback(pFileDlgForm->Rescan, - LyXFileDlg::FileDlgCB,10); + C_LyXFileDlg_FileDlgCB,10); fl_set_object_callback(pFileDlgForm->Home, - LyXFileDlg::FileDlgCB,11); + C_LyXFileDlg_FileDlgCB,11); fl_set_object_callback(pFileDlgForm->User1, - LyXFileDlg::FileDlgCB,12); + C_LyXFileDlg_FileDlgCB,12); fl_set_object_callback(pFileDlgForm->User2, - LyXFileDlg::FileDlgCB,13); + C_LyXFileDlg_FileDlgCB,13); // Make sure pressing the close box doesn't crash LyX. (RvdK) - fl_set_form_atclose(pFileDlgForm->FileDlg, CancelCB, 0); + fl_set_form_atclose(pFileDlgForm->FileDlg, + C_LyXFileDlg_CancelCB, 0); // Register doubleclick callback fl_set_browser_dblclick_callback(pFileDlgForm->List, - DoubleClickCB,0); + C_LyXFileDlg_DoubleClickCB,0); } fl_hide_object(pFileDlgForm->User1); fl_hide_object(pFileDlgForm->User2); @@ -469,7 +483,7 @@ void LyXFileDlg::SetButton(int iIndex, string const & pszName, *pTemp = pszPath; } else { fl_hide_object(pObject); - (*pTemp).erase(); + (*pTemp).clear(); } } @@ -559,6 +573,11 @@ void LyXFileDlg::FileDlgCB(FL_OBJECT *, long lArgument) } } +extern "C" void C_LyXFileDlg_FileDlgCB(FL_OBJECT *ob, long data) +{ + LyXFileDlg::FileDlgCB(ob, data); +} + // Handle callback from list void LyXFileDlg::HandleListHit() @@ -581,6 +600,10 @@ void LyXFileDlg::DoubleClickCB(FL_OBJECT *, long) pCurrentDlg->Force(false); } +extern "C" void C_LyXFileDlg_DoubleClickCB(FL_OBJECT *ob, long data) +{ + LyXFileDlg::DoubleClickCB(ob, data); +} // Handle double click from list bool LyXFileDlg::HandleDoubleClick() @@ -620,7 +643,7 @@ bool LyXFileDlg::HandleDoubleClick() Temp += pszTemp; } else { // Directory higher up - Temp.erase(); + Temp.clear(); for (i = 0; i < iSelect; ++i) { string piece = fl_get_browser_line(pFileDlgForm->List, i+1); // The '+2' is here to count the '@b' (JMarc) @@ -685,6 +708,10 @@ int LyXFileDlg::CancelCB(FL_FORM *, void *) return FL_IGNORE; } +extern "C" int C_LyXFileDlg_CancelCB(FL_FORM *fl, void *xev) +{ + return LyXFileDlg::CancelCB(fl, xev); +} // Simulates a click on OK/Cancel void LyXFileDlg::Force(bool cancel)