Category: Sviluppo


MsgQuery

Another source code. PY_MsgQuery is a simple modal popup with some extras features.

#include "Python.h"
#include <aknglobalnote.h>
#include <eiknotapi.h>
#include <aknglobalconfirmationquery.h>
#include <aknglobalmsgquery.h>
#include <akngloballistquery.h>
#include <e32std.h>
#include <e32base.h>
#include <badesca.h>
#include "globaluimodule.h"
#define TO_MILLISEC(s) (s)*1000*1000
#define OKOnly R_AVKON_SOFTKEYS_OK_EMPTY
#define OKCancel R_AVKON_SOFTKEYS_OK_CANCEL
#define OKBack R_AVKON_SOFTKEYS_OK_BACK
#define CancelOnly R_AVKON_SOFTKEYS_CANCEL
#define BackOnly R_AVKON_SOFTKEYS_BACK
#define CloseOnly R_AVKON_SOFTKEYS_CLOSE
#define YesNo R_AVKON_SOFTKEYS_YES_NO
/* TYPE METHODS */
extern "C" PyObject*
infopopup(PyObject* /*self*/, PyObject* args)
{
 //TInt queryAnswer = 1;
 char* querystr = NULL;
 int querystr_l = 0;
 char* headerstr = NULL;
 int headerstr_l = 0;
 TRequestStatus msgQueryStatus = KRequestPending;
 TRequestStatus timerStatus = KRequestPending;
 int delayInSeconds = 0;
 int butType = 0;
 TInt timeout = 0;
if(!PyArg_ParseTuple(args, "u#u#|i|i:infopopup", &querystr, &querystr_l, &headerstr, &headerstr_l, &butType, &delayInSeconds)){
 return NULL;
 }

/*
 * Per v2 ho risolto splittando gli if 
 * altrimenti dava errore di compilazione
 * SOLO durante il build per ARMI e THUMB
 */
#ifdef EKA2
 if((butType != R_AVKON_SOFTKEYS_OK_EMPTY) and (butType != R_AVKON_SOFTKEYS_OK_CANCEL) and (butType != R_AVKON_SOFTKEYS_OK_BACK) and (butType != R_AVKON_SOFTKEYS_CANCEL) and (butType != R_AVKON_SOFTKEYS_BACK) and (butType != R_AVKON_SOFTKEYS_CLOSE) and (butType != R_AVKON_SOFTKEYS_YES_NO)){
 butType=R_AVKON_SOFTKEYS_OK_CANCEL;
 }
 #else
 if(butType == R_AVKON_SOFTKEYS_OK_EMPTY){
 /* DO NOTHING */
 } else {
 if(butType == R_AVKON_SOFTKEYS_OK_CANCEL){
 /* DO NOTHING */
 } else {
 if(butType == R_AVKON_SOFTKEYS_OK_BACK){
 /* DO NOTHING */
 } else {
 if(butType == R_AVKON_SOFTKEYS_CANCEL){
 /* DO NOTHING */
 } else{
 if(butType == R_AVKON_SOFTKEYS_BACK){
 /* DO NOTHING */
 } else {
 if(butType == R_AVKON_SOFTKEYS_CLOSE){
 /* DO NOTHING */
 } else {
 if(butType == R_AVKON_SOFTKEYS_YES_NO){
 /* DO NOTHING */
 } else {
 butType=R_AVKON_SOFTKEYS_OK_CANCEL;
 } } } } } } }
 #endif

 TPtrC query_str((TUint16*)querystr, querystr_l);
 TPtrC header_str((TUint16*)headerstr, headerstr_l);
 timeout = TO_MILLISEC(delayInSeconds);
 TTimeIntervalMicroSeconds32 timeoutValue = TTimeIntervalMicroSeconds32(timeout);
CAknGlobalMsgQuery *msgQueryDialog = NULL;
 TRAPD(err,
 {
 msgQueryDialog = CAknGlobalMsgQuery::NewL();
 });
 if(err != KErrNone){
 RETURN_ERROR_OR_PYNONE(err);
 }
 CleanupStack::PushL(msgQueryDialog);
 Py_BEGIN_ALLOW_THREADS
 TRAPD(err,
 {
 msgQueryDialog->ShowMsgQueryL(msgQueryStatus,query_str,butType,header_str, KNullDesC);
 });
 Py_END_ALLOW_THREADS
 if(err != KErrNone){
 CleanupStack::PopAndDestroy(msgQueryDialog);
 RETURN_ERROR_OR_PYNONE(err);
 } 
 bool dialogTimedOut = false;
 if (delayInSeconds > 0){
 RTimer timer;
 CleanupClosePushL(timer);
 timer.CreateLocal();
 timer.After(timerStatus,timeoutValue);
 Py_BEGIN_ALLOW_THREADS
 User::WaitForRequest(timerStatus,msgQueryStatus);
 Py_END_ALLOW_THREADS
 if (timerStatus != KRequestPending)
 dialogTimedOut = true; 
 timer.Cancel();
 msgQueryDialog->CancelMsgQuery();
 CleanupStack::PopAndDestroy(); // calls timer.Close()
 } 
 Py_BEGIN_ALLOW_THREADS
 User::WaitForRequest(msgQueryStatus);
 Py_END_ALLOW_THREADS

 CleanupStack::PopAndDestroy(msgQueryDialog);
 if (dialogTimedOut) {
 Py_INCREF(Py_None);
 return Py_None;
 } else
 return Py_BuildValue("i", 
 msgQueryStatus.Int() == EAknSoftkeyOk ? 1 : 0); 
}
/* INIT */
extern "C" {
 static const PyMethodDef globalui_methods[] = {
 //{"global_note", (PyCFunction)global_note, METH_VARARGS, NULL},
 //{"global_query", (PyCFunction)global_query, METH_VARARGS, NULL},
 {"infopopup", (PyCFunction)infopopup, METH_VARARGS, NULL},
 //{"global_popup_menu", (PyCFunction)global_popup_menu, METH_VARARGS, NULL},
 {NULL, NULL}/* sentinel*/
 };
 DL_EXPORT(void) initglobalui(void)
 {
 PyObject *m, *d;
 m = Py_InitModule("msgquery", (PyMethodDef*)globalui_methods);
 d = PyModule_GetDict(m);
PyDict_SetItemString(d, "OKREmpty", PyInt_FromLong(OKOnly));
 PyDict_SetItemString(d, "OKRCancel", PyInt_FromLong(OKCancel));
 PyDict_SetItemString(d, "OKRBack", PyInt_FromLong(OKBack));
 PyDict_SetItemString(d, "RCancel", PyInt_FromLong(CancelOnly));
 PyDict_SetItemString(d, "RBack", PyInt_FromLong(BackOnly));
 PyDict_SetItemString(d, "RClose", PyInt_FromLong(CloseOnly));
 PyDict_SetItemString(d, "LYesRNo", PyInt_FromLong(YesNo));

 }
} /* extern "C" */
#ifndef EKA2
GLDEF_C TInt E32Dll(TDllReason)
{
 return KErrNone;
}
#endif

Example python usage:

from msgquery import infopopup,OKREmpty
infopopup('text body','title',OKREmpty)

As usually, if anyone want entire project, contact me. Thank you

Due to a request by email, I have decided to release some source code of some of my applications (or parts of them).

Start with ‘PY_ARGS‘, which is a library for python.

#include "Python.h"
#include "symbian_python_ext_util.h"
PyObject* commandLine(PyObject*)
 {
#ifndef EKA2
 TInt argLen = RProcess().CommandLineLength();
#else
 TInt argLen = User::CommandLineLength();
#endif // EKA2
 HBufC16* hBuf = HBufC::NewL(argLen);
 TPtr tPtr=hBuf->Des();
 delete hBuf;
#ifndef EKA2
 RProcess().CommandLine(tPtr);
#else
 User::CommandLine (tPtr);
#endif // EKA2
 if(tPtr.Length()>0)
 return Py_BuildValue("u#", tPtr.Ptr(), tPtr.Length());
 else
 return Py_None;
 }
/* INIT */
extern "C" {
static const PyMethodDef args_methods[] = {
 {"get", (PyCFunction)commandLine, METH_VARARGS,
 NULL}, // null
 {NULL, NULL} /* sentinel*/
};
DL_EXPORT(void) initargs(void)
 {
 PyObject *m, *d;
 m = Py_InitModule("args", (PyMethodDef*)args_methods);
 d = PyModule_GetDict(m);
 }
} /* extern "C" */
#ifndef EKA2
GLDEF_C TInt E32Dll(TDllReason)
 {
 return KErrNone;
 }
#endif

Example:

import args
args=args.get()

If anyone want entire project, send me an email. Thanks.

StartBackup 1.01

StartBackup

StartBackup 1.01

Oggi è giornata di rilasci; pubblico la versione 1.01, pronta oramai da qualche mese ma, come detto nel post precedente, non ho avuto tempo di pubblicarla.

Changelog:

* Aggiunta la possibilità di scegliere la memoria di destinazione qualora siano presente memoria di massa e scheda di memoria

* Aggiunta la possibilità di salvare le impostazioni di alcune applicazioni non native (BestScreenSnap, BestTimer, PowerBoot, RamBlow, PhotoViewer) su richiesta di faenil

* Migliorata la stabilità generale dell’applicazione

Per ulteriori informazioni lasciate un commento

Leggi l’articolo completo »

BatchCopy Plus (aka Zipper)

Oggi ho avuto un po’ di tempo a disposizione per dedicarmi alla pubblicazione di questo piccolo programmino che farà la felicità di qualche cooker. Si tratta di BatchCopy Plus, un semplice tool che vi consente di effettuare la copia di indefiniti file da una cartella ad un’altra a patto che la cartella di destinazione esista.
Il programma non genera alcuna icona al momento dell’installazione e può essere lanciato da qualsiasi applicazione o riga di comando. La lista dei file da copiare va scritta in un file, da creare da 0, nominato “BatchCopy.dat” (che fantasia :) ) con la seguente sintassi:

 C:\cartella\di\origine\file.txt > e:\destinazione\nuovofile.txt

La nozione importante è di inserire un’operazione per riga, quindi se si ha la necessità di copiare 3 files bisogna creare 3 righe simili all’esempio precedente. Infine bisogna inserie la riga di commento:

#madhacker

Leggi l’articolo completo »

TrackID Update

TrackID Sony-Ericsson

Grazie alla segnalazione e al lavoro di Taylor è stato possibile integrare nell’applicazione la lingua Ungherese; ne ho approfittato per inserire anche l’italiano.

ENGLISH

Thanks to the info and the work of Taylor I could be integrated in the app the Hungarian language; I took the opportunity to also enter the Italian.

Leggi l’articolo completo »

[HOT] StartBackup release

StartBackup Final

Sono felice di poter rilasciare ufficialmente per tutti StartBackup che nel frattempo è giunto alla versione 0.99, stessa versione che è stata integrata nel firmware personalizzato [n2o4] creato da faenil (http://i8910tuning.com). Dall’ultimo aggiornamento, StartBackup ha subito alcuni cambiamenti, quali l’aggiunta di uno sfondo, e la personalizzazione dei pulsanti per rendere l’interfaccia grafica ancora più intuitiva.

Ricordo che StartBackup è un’applicazione che consente di salvare, e qualora si voglia anche ripristinare, i dati sensibili sulla memoria esterna ( E: ); è sottointeso che il pulsante Active consente di attivare il backup automatico ad ogni avvio, mentre Restore fa sì che al successivo riavvio del telefono, i dati vengono ripristinati sul telefono. ATTENZIONE: dopo l’avvenuto ripristino, il programma si imposta AUTOMATICAMENTE sulla modalità Backup. Attraverso il pulsante Settings si può scegliere, infine, quali elementi salvare, o ripristinare, ad ogni riavvio.

Per qualsiasi suggerimento non esitate a contattarmi.

NB: StartBackup è un’applicazione in continuo sviluppo e ci tengo a rassicurare i possessori della n2o4 (di faenil) che il programma potrà essere aggiornato anche senza dover flashare nuovamente il telefono.
Leggi l’articolo completo »

TrackID4All

TrackID Sony-Ericsson

Oggi, con piacere, annuncio il rilascio di TrackID4All. Si tratta di una mod del noto programma TrackID della Sony-Ericsson che consente di far funzionare il programma su tutti i dispositivi 5th edition.

Leggi l’articolo completo »

i8910 Qt Installer 4.7(1)

Qt Installer

Da poco ho completato il confezionamento del pacchetto di installazione Qt, denominato i8910QtInstaller, per i Symbian non Nokia. La novità principale è l’aggiornamento del pacchetto QtMobility giunto alla versione 1.02, ma in realtà, ho colto l’occasione per modificare leggermente l’applicazione.

Ecco il link per il download: i8910qtinstaller

StartBackup 0.96

StartBackup 0.96

Altro aggiornamento ruguardante TUTTO il pacchetto StartBackup. Cosa fondamentale per gli utenti che la utilizzeranno è che da ora l’applicazione memorizza i settaggi degli elementi da salvare o ripristinare.

Leggi l’articolo completo »

StartBackup 0.94

Pronta già un’altra versione di StartBackup che, come gia’ annunciato poco prima, consente la scelta degli elementi da salvare attraverso il pulsante Settings. Oltre a cio’ e’ stato definitivamente rimosso l’eseguibile BootCopy di Wadowice e Basil, integrando il tutto in Zipper che consente la copia di singoli file o intere cartelle. Inoltre Zipper e’ in grado di ripristinare automaticamente lo stato da Restore a Backup dopo aver completato il ripristino.

Per ora e’ tutto, stay tuned!!!

Iscriviti

Get every new post delivered to your Inbox.