HardCoded Menu and Language sekector.
#include <qapplication.h>
#include <qaction.h>
#include <qdir.h>
+#include <qtextcodec.h>
#include "ananasmainform.h"
#include "ananas.h"
#include "aminicalc.h"
#include "ananas.h"
+#include "binreloc.h"
MainForm *mainform=NULL;
QWorkspace *mainformws=NULL;
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" );
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();
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
void MainForm::InsertMainMenu(QString text, QObject *pop){
menubar->insertItem(text, (QPopupMenu *) pop);
-
}
qApp->exit(code);
}
+
void
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 );
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" ) );
}
}while( i < count );
}
+
void MainForm::tileHorizontal()
{
// primitive horizontal tiling
}
/*
+ * 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
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();
}
#include <qvbox.h>
#include <qapplication.h>
#include <qsettings.h>
+#include <qtranslator.h>
+#include <qlabel.h>
#include "ananas.h"
#include "amenubar.h"
#include "atoolbar.h"
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();
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:
#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="";
#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",".");
return 0;
}
-int
+int
parseCommandLine( int argc, char **argv )
{
QString param, name, value;
}
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;
str_ru = "Использование: ananas [--help] [--lang=<LANG>] [--rc=<RC_PATH>]\n";
str_ru+= "LANG=ru|en\n";
str_ru+= "RC_PATH=путь к *.rc файлу описания бизнес схемы\n";
-
+
str_en = "Usage: ananas [--help] [--lang=<LANG>] [--rc=<RC_PATH>]\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;
printf("%s",str_en.ascii());
}
return 1;
- }
+ }
return 0;
}
int rc = 1;
bool ok;
QPixmap pixmap;
- BrInitError error;
+ BrInitError error;
QTextCodec::setCodecForCStrings( QTextCodec::codecForName("UTF8") );
if ( parseCommandLine( qApp->argc(), qApp->argv() ) ) return 1;
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 );
// 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");
}
aLog::close();
return rc;
- }
+ }
else
{
aLog::close();
/******************************************************************
******************************************************************/
-
-#include "amenubar.h"
+#include <qapplication.h>
+#include <qpopupmenu.h>
+#include <qmenubar.h>
+#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 )
aCfgItem cobj, apix;
QPopupMenu *mparent;
QString text, aKey;
- long id, pid;
- QPixmap pix;
+ long id, pid;
+ QPixmap pix;
if ( !md )
return;
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);
}
};
int AMenuBar::insertSeparator ( int index ) {
return QMenuBar::insertSeparator ( index);
-};
+};
*/
#ifndef AMENUBAR_H
#define AMENUBAR_H
-#include <qmenubar.h>
-
+#include <qmenubar.h>
+#include <qpopupmenu.h>
+#include <qapplication.h>
#include "acfg.h"
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 );
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 );
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 <aCfgItem> cfgItems;
+
};
//Register extensions classes
QStringList extlist = AExtensionFactory::keys();
- for ( int i=0; i<extlist.count(); i++)
+ for ( int i=0; i<extlist.count(); i++)
registerClass(extlist[i],extlist[i]);
}
/*!
* \~english
- * Creates script object. Mapping Script name to real name.
+ * Creates script object. Mapping Script name to real name.
* \~russian
* Создает объект. Отображает имена из скрипта в имена объектов библиотеки.
* \param className - \~english scripn object name \~russian имя объекта в скрипте \~
* Constructor.
*\_en
*\ru
- * Конструктор. Создает новый объект с именем "sys". Доступ к функциям этого объекта из Ананас.Скрипта возможен примерно так:
+ * Конструктор. Создает новый объект с именем "sys". Доступ к функциям этого объекта из Ананас.Скрипта возможен примерно так:
* \code
* sys.Date(); // текущая дата
* sys.OpenForm("DocJournal.Системный журнал.Form.Список документов"); // открывает форму "Список Документов" журнала "Системный журнал"
/*!
- *\en
+ *\en
* Destructor
*\_en \ru
* Деструктор.
{
// QString mGlobal;
aCfgItem gobj, obj, obj0;
- QString sysf =
+ QString sysf =
// "function Message( t, msg ){ sys.Message( t, msg );}"
// "function StatusMessage( msg ){ sys.StatusMessage( msg );}"
// "function Date(){ return sys.Date();}"
cfg_message(n, (const char *) msg.utf8());
}
-
-
/*!
*\en
* Outputs status messages.
emit statusMessage( msg );
}
-
+/*!
+ *\en
+ * Outputs status messages in target label.
+ *\_en \ru
+ * Вывод сообщений в строке состояния в целевую метку.
+ * pos модет принимать любые значения.
+ * Если метка не 1, 2 или 3, то сообщение выводится
+ * в StatusBar на 3 секунды.
+ * \param msg - текст сообщения, \param pos - номер метки.
+ *\_ru
+ */
+void
+aEngine::StatusMessage( const QString &msg, const int &pos )
+{
+ emit statusMessage( msg, pos );
+}
/*!
*\en
*\en
*\_en \ru
* Вспомогательный метод.
- * Запускает действие в указанном контексте. Правильная работа не гарантируется (где-то там ошибки есть).
+ * Запускает действие в указанном контексте. Правильная работа не гарантируется (где-то там ошибки есть).
* \param act - ссылка на объект метаданных, описывающий действие
* \param context - контекст выполнения действия.
*\_ru
openEmbedCatalogueEditor(oid, NULL, false); //open to edit
break;
}
-
+
openForm(oid, foid, satype, 0, 0, 0 );
break;
/* if ( !arg.isEmpty() ) {
printf("form already exist,set focus \n");
wl->get( foid )->setFocus();
}
- else
+ else
{
printf("execute action\n");
if ( oid )
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();
}
//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&)));
* делая доступным работу с объектами зарегистрированного класса из Ананас.Скрипта.
* Наследует QSObjectFactory.
* \~
- */
+ */
class ANANAS_EXPORT aObjectsFactory : public QSObjectFactory
{
public:
* \~russian
* \brief Определяет программный интерфейс Runtime системы, который используется Ананас скриптом.
* Наследует QObject.
- *
- * Класс, реализующий обработку и выполнение скриптов, открытие экранных форм,
- * предварительную обработку скрипта перед выполнением (для последующего использования русских управляющих инструкций),
+ *
+ * Класс, реализующий обработку и выполнение скриптов, открытие экранных форм,
+ * предварительную обработку скрипта перед выполнением (для последующего использования русских управляющих инструкций),
* системные функции получения даты и времени, печати сообщений об ошибках и т.д
* \~
*/
* \~
*/
int next_obj_id;
-
+
aEngine();
virtual ~aEngine();
virtual bool init( const QString &rcfile );
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 );
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: