On Wed, Oct 27, 2010 at 06:34:22AM +0200, Vincent van Ravesteijn wrote: > >> I did something like this for Buffer::loadLyxFile(). Where would you > >> advice to put the UI then ? I can now spit out a lot of error messages > >> according to the number the functions comes up with. In Buffer ? In > >> buffer_funcs ? In GuiView ? > > > > Any direct user interaction in src/frontends/*, > > I don't want to put all the error messages in frontends/*. If you have > another gui, you don't want to implement all the error messages all > over again, so these need to be in src/ somewhere.
I don't comment on "Another gui" for the sake of my mental health. Note that I did not say "error messages" but "user interaction". Of course the/a gui can pull static/localized strings from the core if it wishes. But the decision on how to proceed after the message has been shown belongs into the gui. > I think the best is to put them for e.g. in Buffer, so that it is > easier for maintenance (close to the location where the error is > reported). The error _is_ reported in the Gui. Adding a new user visible string is certainly _more_ effort this way. > Do I need a Buffer::errorMessage(int n) function ? Or maybe > src/ErrorMessage.cpp that stores all errormessages for the whole LyX > project. Reminds me of the old days, when programs produced numbers instead of "real error messages" and the user had to look them up in the manual ;-) > > worker methods that can run unattended, possibly > > bailing out on error in src/{!frontend}. > > That was the idea. Returning some enum-value that would tell the > caller of the function exactly what happened. Next problem is how to > handle the user interaction part. How can we continue where we bailed > out to ask the user something ? > > > > If errors are non-fatal they could be accumulated and returned > > Hmm, do we already have some accumulation design in LyX ? > > I wrote something for Buffer::save: > > enum WriteStatus { > WriteSuccess, > WriteFailure, > WriteDiskFull, > [..etc..] > } > > struct WriteStatusW > { > WriteStatus backup; > WriteStatus write; > } > > Buffer:WriteStatusW Buffer::save() > { > WriteStatusW status; > > status.backup = makeBackup(file...); > status.write = writeFile(file...); > > if (status.write != WriteSuccess) { > if (status.backup == WriteSuccess) > restoreBackup(file....); > } > return status; > } > > To tell the gui whether the write was succesfull or why we bailed out > and if we have stored/restored/removed.. the backup file. > > > or signalled individually to the gui using a signaling mechanism that does > > _not_ > > require the existence of an "observer" (gui or lyxserver) > > What does this mean in english ? Not to use the > buffer->workareamanager->workarea->guiworkarea connection ? Exactly. > Using Qt signals ? Using boost ? sending an LFUN :S ? Signals from the core to the gui. For some reason I think using _Qt_ signals would make most sense. Andre'