[bt-devel] namespace problems
Nikolay Igotti
bt-devel@crosswire.org
Sun, 20 Oct 2002 14:49:12 -0700 (PDT)
On Sun, 20 Oct 2002, Joachim Ansorg wrote:
> Hi Nicolay!
> It's nice to read something of you again! How are you?
Fine, sorry for long period of inactivity - very busy at my job.
> I think the current namespace solution is ways better than these ugly #defines
> :)
> But I'm open for any better solution which is translator and developer
> friendly.
> Any ideas?
Sure, something like this:
const QString& ResourseManager::getToolTip(QString& key) and call it like
this:
ResourseManager::getToolTip("mainMenu::file::quit")
BT is very C++ heavyweight (templates, STL) and add yet another C++
feature where it's not needed isn't a good idea.
Nikolay.
>
> Joachim
>
> > Joachim, are you sure this namespace based approach is good way to do
> > i18n and resources management? I feel it's not. Maybe resourse file
> > +resouse manager would be better?
> >
> > Nikolay.
> >
> > On Sat, 19 Oct 2002, Joachim Ansorg wrote:
> > > David White, I think this eMail is especially for you because you know
> > > the namespaces well.
> > >
> > > You pointed me into the direction to use namespaces for the treelike
> > > structure I wanted.
> > >
> > > Now I have something like
> > >
> > > namespace CResMgr {
> > > inline const QString makeToolTip( const QString& text ) {
> > > return text;
> > > };
> > > inline const QString makeWhatsThis( const QString& title, const
> > > QString& description ) {
> > > return
> > > QString::fromLatin1("<center><B>%1</B></center><HR>%2").arg(title).arg(de
> > >scription); };
> > >
> > > namespace mainMenu { //Main menu
> > > namespace file { //Main menu->File
> > > namespace clearQueue {
> > > const QString tooltip = makeToolTip( i18n("Clear the printing
> > > queue") );
> > > const QString whatsthis = makeWhatsThis( tooltip, i18n("Clear
> > > the print queue of BibleTime. All items will be removed from the list and
> > > the print button will be disabled.") );
> > > const QString icon = QString::fromLatin1("queue");
> > > const KShortcut accel = KShortcut();
> > > const char* actionName = "fileClearQueue_action";
> > > }
> > > namespace print { //a standard action
> > > const QString tooltip = makeToolTip( i18n("Open the
> > > printerdialog") );
> > > const QString whatsthis = makeWhatsThis( tooltip, i18n("Open
> > > the printer dialog of BibleTime. Here you can edit the print queue and
> > > assign styles to the items.") );
> > > }
> > > namespace quit { //a standard action
> > > const QString tooltip = makeToolTip( i18n("Close BibleTime")
> > > ); const QString whatsthis = makeWhatsThis( tooltip, i18n("Close
> > > BibleTime and save the settings.") );
> > > }
> > > }
> > > }
> > > etc.
> > >
> > > But compiling BibleTime with this header included in two or more places I
> > > get the following compiler warnings about multiple symbol definitions:
> > >
> > > ./frontend/searchdialog/libsearchdialog.a(csearchdialog.o)(.data+0x0):
> > > multiple definition of `CResMgr::mainMenu::file::clearQueue::actionName'
> > > bibletime_init.o(.data+0x0): first defined here
> > > ./frontend/searchdialog/libsearchdialog.a(csearchdialog.o)(.data+0x4):
> > > multiple definition of
> > > `CResMgr::mainMenu::view::showMainIndex::actionName'
> > > bibletime_init.o(.data+0x4): first defined here
> > > ./frontend/searchdialog/libsearchdialog.a(csearchdialog.o)(.data+0x8):
> > > multiple definition of `CResMgr::mainMenu::mainIndex::search::actionName'
> > > bibletime_init.o(.data+0x8): first defined here
> > > ./frontend/searchdialog/libsearchdialog.a(csearchdialog.o)(.data+0xc):
> > > multiple definition of
> > > `CResMgr::mainMenu::window::loadProfile::actionName'
> > > bibletime_init.o(.data+0xc): first defined here
> > >
> > > How can I avoid these problems? I have no idea.
> > > Thank you very much for any help!
>
>