From cbf92c546fee9ae6b599a7dbe0e95cd3a8695b7a Mon Sep 17 00:00:00 2001 From: Dmintriy L. Kruglikov Date: Fri, 27 Jun 2008 16:53:15 +0300 Subject: [PATCH] MultyCell StatusBar. HardCoded Menu and Language sekector. --- src/ananas/ananasmainform.cpp | 166 ++++++++++++++++++++++++++++++++++++++--- src/ananas/ananasmainform.h | 13 +++ src/ananas/main.cpp | 42 +++++----- src/lib/amenubar.cpp | 22 +++-- src/lib/amenubar.h | 12 ++- src/plugins/engine.cpp | 41 +++++++---- src/plugins/engine.h | 14 ++-- 7 files changed, 245 insertions(+), 65 deletions(-) diff --git a/src/ananas/ananasmainform.cpp b/src/ananas/ananasmainform.cpp index 6a72de1..ba95cee 100644 --- a/src/ananas/ananasmainform.cpp +++ b/src/ananas/ananasmainform.cpp @@ -36,12 +36,14 @@ #include #include #include +#include #include "ananasmainform.h" #include "ananas.h" #include "aminicalc.h" #include "ananas.h" +#include "binreloc.h" MainForm *mainform=NULL; QWorkspace *mainformws=NULL; @@ -66,6 +68,26 @@ MainForm::MainForm( QWidget* parent, const char* name, WFlags fl ) ws->setScrollBarsEnabled( TRUE ); setCentralWidget( vb ); statusBar()->setName("statusbar"); + + statusLabel1 = new QLabel(" Status ", this); + statusLabel1->setMinimumSize(statusLabel1->sizeHint()); + + statusLabel2 = new QLabel(tr(" Info1 "),this); + statusLabel2->setAlignment(AlignHCenter); + statusLabel2->setMinimumSize(statusLabel2->sizeHint()); + statusLabel3 = new QLabel(tr(" Info2 "), this); + statusLabel3->setAlignment(AlignHCenter); + statusLabel3->setMinimumSize(statusLabel3->sizeHint()); + //statusLabel3->clear(); + statusLabel4 = new QLabel(tr(" Icon "), this); + statusLabel4->setMinimumSize(statusLabel4->sizeHint()); + statusLabel4->setAlignment(AlignHCenter); + statusLabel4->setPixmap(rcIcon("ru.png")); + statusBar()->addWidget(statusLabel1, 1); + statusBar()->addWidget(statusLabel2); + statusBar()->addWidget(statusLabel3); + statusBar()->addWidget(statusLabel4, 0, true); + if ( !name ) setName( "mainwindow" ); engine_settings.insertSearchPath( QSettings::Unix, QString(QDir::homeDirPath())+QString("/.ananas")); engine_settings.insertSearchPath( QSettings::Windows, "/ananasgroup/ananas" ); @@ -113,6 +135,8 @@ MainForm::initEngine() engine.ws = ws; engine.wl = wl; connect( &engine, SIGNAL( statusMessage( const QString & ) ), this, SLOT( statusMessage( const QString & ) ) ); + connect( &engine, SIGNAL( statusMessage( const QString &, const int & ) ), this, SLOT( statusMessage( const QString & , const int & ) ) ); + md = engine.md; if ( !md ) return false; initMenuBar(); @@ -125,21 +149,51 @@ void MainForm::initMenuBar() { QPopupMenu *m; - QPopupMenu *s; + QPopupMenu *tools; + QPopupMenu *p; + m = new QPopupMenu(); - s = new QPopupMenu(); + tools = new QPopupMenu(); + lang = new QPopupMenu(); + lang->setCheckable( TRUE ); + // TODO!!! Check *qm files and complit list + + statusLabel3->setText(QString("%1\n").arg(QTextCodec::locale())); + e_lang = lang->insertItem( tr("EN"), 0, 0); + lang->setItemChecked( e_lang, true ); + r_lang = lang->insertItem( tr("RU"), 1, 1); + lang->setItemChecked( r_lang, false ); + u_lang = lang->insertItem( tr("UA"), 2, 2); + lang->setItemChecked( u_lang, false ); + + connect(lang, SIGNAL(activated(int)), this, SLOT(setLang(int))); + windowsMenu = new QPopupMenu(); - connect( windowsMenu, SIGNAL( aboutToShow() ), + connect( windowsMenu, SIGNAL( aboutToShow() ), this, SLOT( windowsMenuAboutToShow() ) ); + systemMenu = new QPopupMenu(); + systemMenu->insertItem( tr( "Login As..." ), this, SLOT( loginAs() )); + systemMenu->insertItem( "&Language Selector", lang ); + systemMenu->insertSeparator(); + systemMenu->insertItem(rcIcon("ananas-32x32.png"), tr( "Exit" ), qApp, SLOT( closeAllWindows() ), CTRL+Key_Q); + m->insertItem(rcIcon("ananas-32x32.png"), tr( "About" ), this, SLOT( helpAbout() ), Key_F11); - s->insertItem(rcIcon("calc.png"), tr( "Calculator" ), this, SLOT( miniCalc() ), Key_F10); - s->insertItem(rcIcon("calendar.png"), tr( "Calendar" ), this, SLOT( ShowCalendar() ), Key_F12); + tools->insertItem(rcIcon("calc.png"), tr( "Calculator" ), this, SLOT( miniCalc() ), Key_F10); + tools->insertItem(rcIcon("calendar.png"), tr( "Calendar" ), this, SLOT( ShowCalendar() ), Key_F12); //windowsMenu->insertItem(rcIcon("ananas-32x32.png"), tr( "Windows" ), this, SLOT( windowsMenuAboutToShow() )); menubar = new AMenuBar( md, this, "menubar"); - InsertMainMenu( tr("&Tools"), s ); + InsertMainMenu( tr("&Tools"), tools ); InsertMainMenu( tr("&Help"), m ); - InsertMainMenu( tr("&Windows"), windowsMenu ); + InsertMainMenu( tr("&Windows"), windowsMenu ); + menuBar()->insertItem(tr("&System"),systemMenu,0,0); menuBar()->show(); + +} + +void +MainForm::loginAs() +{ + statusBar()->message( "Try again later...", 3000 ); } void @@ -180,7 +234,6 @@ MainForm::helpAbout() void MainForm::InsertMainMenu(QString text, QObject *pop){ menubar->insertItem(text, (QPopupMenu *) pop); - } @@ -190,6 +243,7 @@ MainForm::Exit(int code) qApp->exit(code); } + void MainForm::close() { @@ -205,11 +259,38 @@ MainForm::close() } void +MainForm::statusMessage( const QString &msg, const int &pos ) +{ + switch ( pos ) + { + case 0: + statusBar()->message( msg, 3000); + break; + case 1: + statusLabel1->setText( msg ); + break; + case 2: + statusLabel2->setText( msg ); + break; + case 3: + statusLabel3->setText( msg ); + break; + default: + statusBar()->message( msg, 3000 ); + break; + } + +} + + +void MainForm::statusMessage( const QString &msg ) { - statusBar()->message( msg ); + //statusBar()->message( msg ); + statusLabel1->setText( msg ); } + void MainForm::setBackground( const QPixmap &pix ){ ws->setBackgroundPixmap( pix ); @@ -240,6 +321,14 @@ MainForm::~MainForm() void MainForm::languageChange() { setCaption(QString( tr("Ananas")+" "+ananas_libversion() )+": "+md->info( md_info_name ) ); + + int i; + for (i=0; i < menuBar()->count(); ++i) + { + menuBar()->changeItem(i, QString(tr(menuBar()->text(i)))); + + } + //menuBar()->changeItem(6, QString( tr("&Windows"))); // setCaption( tr( "Ananas VERSION" ) ); } @@ -274,6 +363,7 @@ void MainForm::windowsMenuAboutToShow() }while( i < count ); } + void MainForm::tileHorizontal() { // primitive horizontal tiling @@ -316,6 +406,62 @@ void MainForm::windowsMenuActivated( int id ) } /* + * Language selector + */ +void MainForm::setLang( int lang_id ) +{ + QString langdir; + QString a_lang; + extern QTranslator tr_app; + extern QTranslator tr_lib; + extern QTranslator tr_plugins; + qApp->removeTranslator( &tr_app ); + qApp->removeTranslator( &tr_lib ); + qApp->removeTranslator( &tr_plugins ); + +#ifdef _Windows + langdir = qApp->applicationDirPath()+"/translations/"; +#else + //langdir = QString("/usr/share/ananas/translations/"); + langdir = QString(br_find_data_dir("/usr/share")) + QString("/ananas/translations/"); +#endif + if (lang_id == 0) + { + lang->setItemChecked( 0, true ); + lang->setItemChecked( 1, false ); + lang->setItemChecked( 2, false ); + a_lang = "en"; + } + if (lang_id == 1) + { + lang->setItemChecked( 0, false ); + lang->setItemChecked( 1, true ); + lang->setItemChecked( 2, false ); + a_lang = "ru"; + } + if (lang_id == 2) + { + lang->setItemChecked( 0, false ); + lang->setItemChecked( 1, false ); + lang->setItemChecked( 2, true ); + a_lang = "ua"; + } + + if (!tr_app.load("ananas-engine-"+a_lang.lower()+".qm", langdir)) printf("No tr_app.load\n"); + + if (!tr_lib.load("ananas-lib-"+a_lang.lower()+".qm", langdir)) printf("No tr_lib.load\n"); + + if (!tr_plugins.load("ananas-plugins-"+a_lang.lower()+".qm", langdir)) printf("No tr_plug.load\n"); + + qApp->installTranslator( &tr_app ); + qApp->installTranslator( &tr_lib ); + qApp->installTranslator( &tr_plugins ); + + languageChange(); + statusBar()->message( QString(tr("Ananas"))+ QString(tr(" : %1")).arg(lang->text(lang_id)), 2000 ); +} + +/* * Open a Calculator Widget */ void @@ -332,6 +478,6 @@ void MainForm::ShowCalendar() { PopupCalendar *calendar = new PopupCalendar(QDate::currentDate(), - QPoint(ws->width() / 2, ws->height() / 2 ), ws, ""); + QPoint(ws->width() / 2, ws->height() / 2 ), ws, ""); calendar->show(); } diff --git a/src/ananas/ananasmainform.h b/src/ananas/ananasmainform.h index f4af300..ee9a4b8 100644 --- a/src/ananas/ananasmainform.h +++ b/src/ananas/ananasmainform.h @@ -41,6 +41,8 @@ #include #include #include +#include +#include #include "ananas.h" #include "amenubar.h" #include "atoolbar.h" @@ -73,13 +75,20 @@ public: aEngine engine; aCfg *md; + int e_lang, r_lang, u_lang; AMenuBar* menubar; QPopupMenu *windowsMenu; + QPopupMenu *systemMenu; + QPopupMenu *lang; QWorkspace* ws; aWindowsList* wl; MiniCalc* calc; PopupCalendar* calendar; QString rcfile; + QLabel *statusLabel1; + QLabel *statusLabel2; + QLabel *statusLabel3; + QLabel *statusLabel4; public slots: bool init(); @@ -93,11 +102,15 @@ public slots: void helpAbout(); void miniCalc(); void ShowCalendar(); + void statusMessage( const QString &msg, const int &pos ); void statusMessage( const QString &msg ); + void windowsMenuAboutToShow(); void windowsMenuActivated( int id ); + void setLang( int lang_id ); void tileHorizontal(); void setBackground( const QPixmap &pix ); + void loginAs(); protected: protected slots: diff --git a/src/ananas/main.cpp b/src/ananas/main.cpp index 577234e..65edb60 100644 --- a/src/ananas/main.cpp +++ b/src/ananas/main.cpp @@ -39,8 +39,8 @@ #include "binreloc.h" //QApplication *application = 0; -QTranslator *translator = 0, tr_app(0), tr_lib(0), tr_plugins(0); -QString lang="en", +extern QTranslator *translator = 0, tr_app(0), tr_lib(0), tr_plugins(0); +QString lang="en", rcfile="", username="", userpassword=""; @@ -51,13 +51,13 @@ int setTranslator(QString lang) #ifdef _Windows langdir = qApp->applicationDirPath()+"/translations/"; #else - BrInitError error; - if (br_init_lib(&error) == 0 && error != BR_INIT_ERROR_DISABLED) { + BrInitError error; + if (br_init_lib(&error) == 0 && error != BR_INIT_ERROR_DISABLED) { aLog::print(aLog::MT_INFO, QObject::tr("Warning: BinReloc failed to initialize (error code %1)\n").arg(error)); aLog::print(aLog::MT_INFO, QObject::tr("Will fallback to hardcoded default path.\n")); - } + } aLog::print(aLog::MT_DEBUG, QObject::tr("setTranslator - BinReloc path to data dir is %1.\n").arg( br_find_data_dir("/usr/share") )); - + langdir = QString(br_find_data_dir("/usr/share")) + QString("/ananas/translations/"); #endif tr_app.load( langdir+"ananas-engine-"+lang.lower()+".qm","."); @@ -66,7 +66,7 @@ int setTranslator(QString lang) return 0; } -int +int parseCommandLine( int argc, char **argv ) { QString param, name, value; @@ -80,7 +80,7 @@ parseCommandLine( int argc, char **argv ) } lang = locale; setTranslator( lang ); -// printf("locale=%s\n", locale ); +// printf("locale=%s\n", locale ); QString str_ru=QString::null, str_en=QString::null; bool lang_setted = false; bool help_setted = false; @@ -95,12 +95,12 @@ parseCommandLine( int argc, char **argv ) str_ru = "Использование: ananas [--help] [--lang=] [--rc=]\n"; str_ru+= "LANG=ru|en\n"; str_ru+= "RC_PATH=путь к *.rc файлу описания бизнес схемы\n"; - + str_en = "Usage: ananas [--help] [--lang=] [--rc=]\n"; str_en+= "LANG=ru|en\n"; str_en+= "RC_PATH=path to *.rc file of paticular business scheme\n"; help_setted = true; - + } if (name == "--lang") { lang = value; @@ -120,7 +120,7 @@ parseCommandLine( int argc, char **argv ) printf("%s",str_en.ascii()); } return 1; - } + } return 0; } @@ -134,7 +134,7 @@ int main( int argc, char ** argv ) int rc = 1; bool ok; QPixmap pixmap; - BrInitError error; + BrInitError error; QTextCodec::setCodecForCStrings( QTextCodec::codecForName("UTF8") ); if ( parseCommandLine( qApp->argc(), qApp->argv() ) ) return 1; @@ -147,30 +147,30 @@ int main( int argc, char ** argv ) pixmap = QPixmap::fromMimeSource( qApp->applicationDirPath()+"/engine-splash-"+lang+".png" ); qApp->addLibraryPath( qApp->applicationDirPath() ); #else - if (br_init_lib(&error) == 0 && error != BR_INIT_ERROR_DISABLED) { + if (br_init_lib(&error) == 0 && error != BR_INIT_ERROR_DISABLED) { aLog::print(aLog::MT_INFO, QObject::tr("Warning: BinReloc failed to initialize (error code %1)\n").arg(error)); aLog::print(aLog::MT_INFO, QObject::tr("Will fallback to hardcoded default path.\n")); - } + } aLog::print(aLog::MT_DEBUG, QObject::tr("main - BinReloc path to data dir is %1.\n").arg( br_find_data_dir("/usr/share") )); aLog::print(aLog::MT_DEBUG, QObject::tr("main - BinReloc path to lib dir is %1.\n").arg( br_find_data_dir("/usr/lib") )); - + pixmap = QPixmap::fromMimeSource( QString(br_find_data_dir("/usr/share") ) + "/ananas/designer/locale/engine-splash-"+lang+".png"); qApp->addLibraryPath( QString( br_find_lib_dir("/usr/lib")) + "/ananas/qt3plugins" ); - + QStringList list = a.libraryPaths(); QString libPath = ""; QStringList::Iterator it = list.begin(); while( it != list.end() ) { libPath += *it+":"; ++it; - } + } aLog::print(aLog::MT_DEBUG, QString("main - qt library path is '%1'\n").arg( libPath)); #endif - printf("extensions: \n%s\n",( const char *) AExtensionFactory::keys().join("\n") ); + printf("extensions: \n%s\n",( const char *) AExtensionFactory::keys().join("\n") ); // Test create extension // AExtension *e = AExtensionFactory::create("AExtTest"); // if (e) printf("EXT OK\n"); else printf("NO EXT OK\n"); - + if ( pixmap.isNull() ) pixmap = QPixmap::fromMimeSource( "engine-splash-en.png" ); QSplashScreen *splash = new QSplashScreen( pixmap ); @@ -184,7 +184,7 @@ int main( int argc, char ** argv ) // userpassword = dlogin.password; // } // if (dselectdb.rcfile.isEmpty()) return 0; - + splash->show(); splash->message( QObject::tr("Init application"), Qt::AlignBottom, Qt::white ); MainForm *w = new MainForm( 0, "MainForm"); @@ -209,7 +209,7 @@ int main( int argc, char ** argv ) } aLog::close(); return rc; - } + } else { aLog::close(); diff --git a/src/lib/amenubar.cpp b/src/lib/amenubar.cpp index 2a213ae..79231a9 100644 --- a/src/lib/amenubar.cpp +++ b/src/lib/amenubar.cpp @@ -29,13 +29,15 @@ /****************************************************************** ******************************************************************/ - -#include "amenubar.h" +#include +#include +#include +#include "amenubar.h" AMenuBar::AMenuBar( QWidget* parent , const char* name ) - :QMenuBar( parent, name ) { - + :QMenuBar( parent, name ) +{ } AMenuBar::AMenuBar( aCfg *cfg, QWidget* parent , const char* name ) @@ -87,8 +89,8 @@ AMenuBar::ReadMenu( QPopupMenu *parent, aCfgItem obj ) aCfgItem cobj, apix; QPopupMenu *mparent; QString text, aKey; - long id, pid; - QPixmap pix; + long id, pid; + QPixmap pix; if ( !md ) return; @@ -128,16 +130,18 @@ AMenuBar::ReadMenu( QPopupMenu *parent, aCfgItem obj ) AMenuBar::~AMenuBar(){ } -int AMenuBar::insertItem ( const QString & text, QPopupMenu * popup, int id, int index ) { +int AMenuBar::insertItem ( const QString & text, QPopupMenu * popup, int id, int index ) +{ return QMenuBar::insertItem ( text, popup, id, index); }; + /* int AMenuBar::insertItem ( const QString & text, const QObject * receiver, const char * member, const QKeySequence & accel, int id , int index ) { return QMenuBar::insertItem( text, receiver, member, accel, id, index); } -int +int AMenuBar::insertItem ( const QPixmap & pixmap, const QObject * receiver, const char * member, const QKeySequence & accel , int id , int index ) { return QMenuBar::insertItem ( pixmap, receiver, member, accel, id, index); } @@ -176,5 +180,5 @@ int AMenuBar::insertItem ( QCustomMenuItem * custom, int id , int index ) { }; int AMenuBar::insertSeparator ( int index ) { return QMenuBar::insertSeparator ( index); -}; +}; */ diff --git a/src/lib/amenubar.h b/src/lib/amenubar.h index 2606fee..8c9fc2d 100644 --- a/src/lib/amenubar.h +++ b/src/lib/amenubar.h @@ -33,8 +33,9 @@ #ifndef AMENUBAR_H #define AMENUBAR_H -#include - +#include +#include +#include #include "acfg.h" class ANANAS_EXPORT AMenuBar : public QMenuBar @@ -44,6 +45,7 @@ class ANANAS_EXPORT AMenuBar : public QMenuBar private: aCfg *md; + public: AMenuBar( QWidget* parent = 0, const char* name = 0 ); AMenuBar( aCfg *cfg, QWidget* parent = 0, const char* name = 0 ); @@ -54,10 +56,9 @@ class ANANAS_EXPORT AMenuBar : public QMenuBar public slots: void on_Item(){}; - int insertItem ( const QString & text, QPopupMenu * popup, int id = -1, int index = -1 ); /* - int insertItem ( const QString & text, const QObject * receiver, const char * member, const QKeySequence & accel = 0, int id = -1, int index = -1 ); + int insertItem ( const QString & text, const QObject * receiver, const char * member, const QKeySequence & accel = 0, int id = -1, int index = -1 ); int insertItem ( const QPixmap & pixmap, const QObject * receiver, const char * member, const QKeySequence & accel = 0, int id = -1, int index = -1 ); int insertItem ( const QIconSet & icon, const QPixmap & pixmap, const QObject * receiver, const char * member, const QKeySequence & accel = 0, int id = -1, int index = -1 ); int insertItem ( const QString & text, int id = -1, int index = -1 ); @@ -71,9 +72,10 @@ class ANANAS_EXPORT AMenuBar : public QMenuBar int insertItem ( const QIconSet & icon, QCustomMenuItem * custom, int id = -1, int index = -1 ); int insertItem ( QCustomMenuItem * custom, int id = -1, int index = -1 ); int insertSeparator ( int index = -1 ); -*/ +*/ private: QIntDict cfgItems; + }; diff --git a/src/plugins/engine.cpp b/src/plugins/engine.cpp index a6c6aa4..088b223 100644 --- a/src/plugins/engine.cpp +++ b/src/plugins/engine.cpp @@ -95,7 +95,7 @@ aObjectsFactory::aObjectsFactory( aEngine *e ) //Register extensions classes QStringList extlist = AExtensionFactory::keys(); - for ( int i=0; iget( foid )->setFocus(); } - else + else { printf("execute action\n"); if ( oid ) @@ -608,14 +621,14 @@ aEngine::OpenForm(QString formName, int mode, int ido, aObject* selector, bool m aCfgItem form; int formOwnerId; int formId; - + form = md->find( formName ); if(!form.isNull()) { formOwner = md->parent(md->parent(form)); if( formOwner.isNull() ) return 0; Q_ULLONG idOfObjectToViewInForm = 0; - if (selector) + if (selector) { idOfObjectToViewInForm = selector->sysValue("id").toULongLong(); } @@ -730,7 +743,7 @@ aEngine::openForm(int formOwnerId, int formId, int defaultfor, int mode, ANANAS_ //printf("open form for edit %llu\n ",id); break; default: - aLog::print(aLog::MT_ERROR, tr("aEngine open form mode %1 not supported").arg(defaultfor)); + aLog::print(aLog::MT_ERROR, tr("aEngine open form mode %1 not supported").arg(defaultfor)); } connect( this, SIGNAL( event(const QString &, const QString&)), form, SLOT( on_event(const QString &, const QString&))); diff --git a/src/plugins/engine.h b/src/plugins/engine.h index 3fb2c21..e8c624e 100644 --- a/src/plugins/engine.h +++ b/src/plugins/engine.h @@ -57,7 +57,7 @@ class aWidget; * делая доступным работу с объектами зарегистрированного класса из Ананас.Скрипта. * Наследует QSObjectFactory. * \~ - */ + */ class ANANAS_EXPORT aObjectsFactory : public QSObjectFactory { public: @@ -78,9 +78,9 @@ class aForm; * \~russian * \brief Определяет программный интерфейс Runtime системы, который используется Ананас скриптом. * Наследует QObject. - * - * Класс, реализующий обработку и выполнение скриптов, открытие экранных форм, - * предварительную обработку скрипта перед выполнением (для последующего использования русских управляющих инструкций), + * + * Класс, реализующий обработку и выполнение скриптов, открытие экранных форм, + * предварительную обработку скрипта перед выполнением (для последующего использования русских управляющих инструкций), * системные функции получения даты и времени, печати сообщений об ошибках и т.д * \~ */ @@ -144,7 +144,7 @@ public: * \~ */ int next_obj_id; - + aEngine(); virtual ~aEngine(); virtual bool init( const QString &rcfile ); @@ -166,9 +166,10 @@ public slots: void Exit(); void Message(int n, const QString &msg ); void StatusMessage( const QString &msg ); + void StatusMessage( const QString &msg, const int &pos ); void settimer(int sec, QString proc); aForm * OpenForm(QString fname, int mode=0, aObject * selecter=0, bool modal=false); - aForm * OpenForm(QString fname, int mode, int ido,aObject * selecter=0, bool modal=false); + aForm * OpenForm(QString fname, int mode, int ido,aObject * selecter=0, bool modal=false); QVariant value( const QString &name ); void setValue( const QString &name, QVariant value = QVariant::Invalid ); @@ -185,6 +186,7 @@ private slots: void on_event( const QString &data ); signals: void statusMessage( const QString &msg ); + void statusMessage( const QString &msg, const int &pos ); void event( const QString &source, const QString &data ); private: -- 1.7.1