diff -Naur psi-0.10-test3-orig/iconsets/system/default/emergencyStatusNo.png psi-0.10-test3/iconsets/system/default/emergencyStatusNo.png
--- psi-0.10-test3-orig/iconsets/system/default/emergencyStatusNo.png 1970-01-01 00:00:00.000000000 +0000
+++ psi-0.10-test3/iconsets/system/default/emergencyStatusNo.png 2005-12-01 21:49:41.000000000 +0000
@@ -0,0 +1,9 @@
+PNG
+
+
IHDR sO/ bKGD pHYs
+
+B4 tIME%
+H
tEXtComment Created with The GIMPd%n -IDAT(ύӽN1B
+, 6n]ћD@<ލ`n,1 ւ RfKɳX}:R2Mb\@
B#*|Ss MݿI֛h78#V
+
+o'JϭUT\u%X<ԭ{-4+U6n}~T8+BpBv-vRD9<0'_{6r3'$hD949F)P8'_<7jW^ha IENDB`
\ Brak znaku nowej linii na kocu pliku
diff -Naur psi-0.10-test3-orig/iconsets/system/default/emergencyStatusYes.png psi-0.10-test3/iconsets/system/default/emergencyStatusYes.png
--- psi-0.10-test3-orig/iconsets/system/default/emergencyStatusYes.png 1970-01-01 00:00:00.000000000 +0000
+++ psi-0.10-test3/iconsets/system/default/emergencyStatusYes.png 2005-12-01 21:49:41.000000000 +0000
@@ -0,0 +1,7 @@
+PNG
+
+
IHDR sO/ bKGD pHYs
+
+B4 tIME%\S tEXtComment Created with The GIMPd%n .IDAT(ύ1kTA->BJ@RxVB
+͛6&褱I
+a}* X^Y}I00sÝ*lH5)mAŏg $ͤ/Z ~Nz|)x'u|-AL1_K7ܲh{9/0.$M^=_cWEݾ^u%q9Xd"B\4"ֽ9XtgpZQTU2C|AW;jmO dZ'3of/Qic䅁յpxfe_}A IENDB`
\ Brak znaku nowej linii na kocu pliku
diff -Naur psi-0.10-test3-orig/iconsets/system/default/icondef.xml psi-0.10-test3/iconsets/system/default/icondef.xml
--- psi-0.10-test3-orig/iconsets/system/default/icondef.xml 2005-12-01 21:48:37.000000000 +0000
+++ psi-0.10-test3/iconsets/system/default/icondef.xml 2005-12-01 21:49:41.000000000 +0000
@@ -50,6 +50,11 @@
psi/clearChat
+
+
+ psi/emergencyStatusYes
+
+
psi/compact
@@ -57,6 +62,11 @@
+ psi/emergencyStatusNo
+
+
+
+
psi/groupChat
diff -Naur psi-0.10-test3-orig/src/chatdlg.cpp psi-0.10-test3/src/chatdlg.cpp
--- psi-0.10-test3-orig/src/chatdlg.cpp 2005-12-01 21:48:43.000000000 +0000
+++ psi-0.10-test3/src/chatdlg.cpp 2005-12-01 21:49:41.000000000 +0000
@@ -87,6 +87,8 @@
PsiToolBar *toolbar;
IconAction *act_send, *act_clear, *act_history, *act_info, *act_pgp, *act_icon, *act_file, *act_compact;
+ IconAction *act_emergencyStatus; // k
+
int pending;
bool keepOpen, warnSend;
@@ -241,6 +243,9 @@
d->act_clear = new IconAction (tr("Clear chat window"), "psi/clearChat", tr("Clear chat window"), 0, this);
connect( d->act_clear, SIGNAL( activated() ), SLOT( doClearButton() ) );
+ d->act_emergencyStatus = new IconAction( tr( "Emergency Status Away" ), "psi/emergencyStatusNo", tr( "Emergency Status Away" ), 0, this, 0, true ); // k
+ connect( d->act_emergencyStatus, SIGNAL( activated() ), SLOT( doEmergencyStatus() ) ); // k
+
connect(pa->psi()->iconSelectPopup(), SIGNAL(textSelected(QString)), d, SLOT(addEmoticon(QString)));
d->act_icon = new IconAction( tr( "Select icon" ), "psi/smile", tr( "Select icon" ), 0, this );
d->act_icon->setPopup( pa->psi()->iconSelectPopup() );
@@ -262,6 +267,9 @@
d->act_clear->addTo( d->toolbar );
d->toolbar->setStretchableWidget(new StretchWidget(d->toolbar));
+ d->act_emergencyStatus->addTo( d->toolbar ); // k
+ toggleEmergencyAwayStatus(d->pa->getEmergencyAwayStatusStatus()); // k
+
d->act_icon->addTo( d->toolbar );
d->act_file->addTo( d->toolbar );
d->act_pgp->addTo( d->toolbar );
@@ -676,6 +684,11 @@
#endif
}
+// k
+void ChatDlg::toggleEmergencyAwayStatus(bool signal) {
+ d->act_emergencyStatus->setOn(signal);
+}
+
void ChatDlg::setLooks()
{
@@ -714,6 +727,11 @@
d->act_pgp->setIcon( 0 );
d->act_pgp->setIconSet( i );
+ QIconSet iea;
+ iea.setPixmap(IconsetFactory::icon("psi/emergencyStatusNo"), QIconSet::Automatic, QIconSet::Normal, QIconSet::Off);
+ iea.setPixmap(IconsetFactory::icon("psi/emergencyStatusYes"), QIconSet::Automatic, QIconSet::Normal, QIconSet::On);
+ d->act_emergencyStatus->setIcon( 0 );
+ d->act_emergencyStatus->setIconSet( iea );
/*QBrush brush;
brush.setPixmap( QPixmap( option.chatBgImage ) );
@@ -896,6 +914,12 @@
}
}
+// k
+void ChatDlg::doEmergencyStatus()
+{
+ d->pa->psi()->setEmergencyStatus();
+}
+
void ChatDlg::doneSend()
{
appendMessage(d->m, true);
diff -Naur psi-0.10-test3-orig/src/chatdlg.h psi-0.10-test3/src/chatdlg.h
--- psi-0.10-test3-orig/src/chatdlg.h 2005-08-21 17:44:40.000000000 +0000
+++ psi-0.10-test3/src/chatdlg.h 2005-12-01 21:49:41.000000000 +0000
@@ -71,6 +71,7 @@
void activated();
void updateAvatar();
void updateAvatar(const Jid&);
+ void toggleEmergencyAwayStatus(bool state); // k
private slots:
void doInfo();
@@ -90,6 +91,7 @@
void toggleEncryption();
void buildMenu();
void logSelectionChanged();
+ void doEmergencyStatus(); // k
public:
class Private;
diff -Naur psi-0.10-test3-orig/src/common.h psi-0.10-test3/src/common.h
--- psi-0.10-test3-orig/src/common.h 2005-12-01 21:48:43.000000000 +0000
+++ psi-0.10-test3/src/common.h 2005-12-01 21:49:41.000000000 +0000
@@ -125,6 +125,7 @@
bool use_asAway, use_asXa, use_asOffline, use_asWhileDnd;
bool use_asMessage;
QString asMessage;
+ QString eaMessage;
QString onevent[10];
bool oneventIsActive[10];
diff -Naur psi-0.10-test3-orig/src/options/opt_presence.cpp psi-0.10-test3/src/options/opt_presence.cpp
--- psi-0.10-test3-orig/src/options/opt_presence.cpp 2005-08-21 17:44:28.000000000 +0000
+++ psi-0.10-test3/src/options/opt_presence.cpp 2005-12-01 21:49:41.000000000 +0000
@@ -64,6 +64,10 @@
tr("Specifies an extended message to use if you allow Psi"
" to set your status automatically. See options above."));
+ QWhatsThis::add(d->te_asMessage,
+ tr("Specifies an extended message to use if you set"
+ " Emergency Away Status.")); // k
+
return w;
}
@@ -80,6 +84,7 @@
opt->use_asXa = d->ck_asXa->isChecked();
opt->use_asOffline = d->ck_asOffline->isChecked();
opt->asMessage = d->te_asMessage->text();
+ opt->eaMessage = d->te_eaMessage->text(); // k
}
void OptionsTabPresenceAuto::restoreOptions(const Options *opt)
@@ -104,6 +109,7 @@
d->ck_asXa->setChecked( opt->use_asXa );
d->ck_asOffline->setChecked( opt->use_asOffline );
d->te_asMessage->setText( opt->asMessage );
+ d->te_eaMessage->setText( opt->eaMessage ); // k
}
//----------------------------------------------------------------------------
diff -Naur psi-0.10-test3-orig/src/options/opt_status.cpp psi-0.10-test3/src/options/opt_status.cpp
--- psi-0.10-test3-orig/src/options/opt_status.cpp 2005-12-01 21:48:43.000000000 +0000
+++ psi-0.10-test3/src/options/opt_status.cpp 2005-12-01 21:49:41.000000000 +0000
@@ -56,6 +56,10 @@
tr("Specifies an extended message to use if you allow Psi"
" to set your status automatically. See options above."));
+ QWhatsThis::add(d->te_eaMessage,
+ tr("Specifies an extended message to use if you set"
+ " Emergency Away Status.")); // k
+
d->pb_spNew->setEnabled(TRUE);
d->pb_spDelete->setEnabled(FALSE);
d->te_sp->setEnabled(FALSE);
@@ -106,6 +110,7 @@
opt->use_asWhileDnd = d->ck_asWhileDnd->isChecked();
opt->use_asMessage = d->ck_asMessage->isChecked();
opt->asMessage = d->te_asMessage->text();
+ opt->eaMessage = d->te_eaMessage->text(); // k
opt->clLogStatus = d->ck_LogStatus->isChecked();
opt->clLogEmptyStatus = d->ck_LogEmptyStatus->isChecked();
@@ -141,6 +146,7 @@
d->ck_asMessage->setChecked( opt->use_asMessage );
d->te_asMessage->setEnabled( opt->use_asMessage );
d->te_asMessage->setText( opt->asMessage );
+ d->te_eaMessage->setText( opt->eaMessage ); // k
d->ck_LogStatus->setChecked( opt->clLogStatus );
d->ck_LogEmptyStatus->setEnabled( opt->clLogStatus );
d->ck_LogEmptyStatus->setChecked( opt->clLogEmptyStatus );
diff -Naur psi-0.10-test3-orig/src/options/opt_status-ui.ui psi-0.10-test3/src/options/opt_status-ui.ui
--- psi-0.10-test3-orig/src/options/opt_status-ui.ui 2005-12-01 21:48:43.000000000 +0000
+++ psi-0.10-test3/src/options/opt_status-ui.ui 2005-12-01 21:49:41.000000000 +0000
@@ -194,6 +194,28 @@
+
+
+
+ TextLabel1_8ea
+
+
+ Emergency Away Status Message:
+
+
+
+
+ te_eaMessage
+
+
+
+ 32767
+ 50
+
+
+
+
+
groupBox10
@@ -353,6 +375,7 @@
ck_asOffline
sb_asOffline
te_asMessage
+ te_eaMessage
lb_sp
pb_spNew
pb_spDelete
diff -Naur psi-0.10-test3-orig/src/psiaccount.cpp psi-0.10-test3/src/psiaccount.cpp
--- psi-0.10-test3-orig/src/psiaccount.cpp 2005-12-01 21:48:43.000000000 +0000
+++ psi-0.10-test3/src/psiaccount.cpp 2005-12-01 22:21:33.000000000 +0000
@@ -402,6 +402,7 @@
notifyOnlineOk = false;
doReconnect = false;
usingAutoStatus = false;
+ usingEmergencyStatus = false; // k
presenceSent = false;
d->loginStatus = Status("", "");
@@ -1750,6 +1751,7 @@
// cancel auto-status and reconnect
usingAutoStatus = false;
+ usingEmergencyStatus = false; // k
doReconnect = false;
Status s = _s;
@@ -1860,6 +1862,68 @@
}
}
+// k
+void PsiAccount::setEmergencyStatus()
+{
+ if(!usingEmergencyStatus) {
+ d->origStatus = d->loginStatus;
+ setStatus(Status("away", expandStatusTemplate(option.eaMessage), d->acc.priority));
+ usingEmergencyStatus = true;
+ QPtrListIterator it(d->dialogList);
+ for(item_dialog2 *i; (i = it.current()); ++it) {
+ if ( i->className == "ChatDlg" ) {
+ ChatDlg *dlg = (ChatDlg*)(i->widget);
+ if ( dlg )
+ dlg->toggleEmergencyAwayStatus(true);
+
+ }
+ }
+ } else if(usingEmergencyStatus) {
+ setStatus(d->origStatus);
+ usingEmergencyStatus = false;
+ QPtrListIterator it(d->dialogList);
+ for(item_dialog2 *i; (i = it.current()); ++it) {
+ if ( i->className == "ChatDlg" ) {
+ ChatDlg *dlg = (ChatDlg*)(i->widget);
+ if ( dlg )
+ dlg->toggleEmergencyAwayStatus(false);
+ }
+ }
+ }
+}
+// k
+bool PsiAccount::getEmergencyAwayStatusStatus() {
+ return usingEmergencyStatus;
+}
+
+QString PsiAccount::expandStatusTemplate(const QString &statusTemplate)
+{
+ QString res;
+
+ QRegExp rx("<([^:]*):originalStatus:([^>]*)>");
+ rx.setCaseSensitive(false);
+
+ const QString orig = d->origStatus.status();
+
+ int start = 0;
+ int end = 0;
+
+ while ( (start=rx.search(statusTemplate, end)) != -1 ) {
+ res += statusTemplate.mid(end, start-end);
+
+ if ( !orig.isEmpty() ) {
+ res += rx.cap(1);
+ res += orig;
+ res += rx.cap(2);
+ }
+
+ end = start + rx.matchedLength();
+ }
+ res += statusTemplate.mid(end);
+
+ return res;
+}
+
void PsiAccount::secondsIdle(int x)
{
if(!loggedIn())
@@ -1890,22 +1954,23 @@
if(option.use_asOffline && option.asOffline > 0 && minutes >= option.asOffline) {
lastStatus = Status("", "", d->acc.priority, false);
usingAutoStatus = false;
+ usingEmergencyStatus = false; // k
logout();
}
else if(option.use_asXa && option.asXa > 0 && minutes >= option.asXa) {
if(ls.show() != "xa" && lastStatus.show() != "xa") {
- lastStatus = Status("xa", (option.use_asMessage)? option.asMessage : status().status(), d->acc.priority);
if(!usingAutoStatus)
d->origStatus = d->loginStatus;
+ lastStatus = Status("xa", expandStatusTemplate((option.use_asMessage)? option.asMessage : status().status()), d->acc.priority);
setStatusDirect(lastStatus);
usingAutoStatus = true;
}
}
else if(option.use_asAway && option.asAway > 0 && minutes >= option.asAway) {
if(ls.show() != "away" && lastStatus.show() != "away") {
- lastStatus = Status("away", (option.use_asMessage)? option.asMessage : status().status(), d->acc.priority);
if(!usingAutoStatus)
d->origStatus = d->loginStatus;
+ lastStatus = Status("away", expandStatusTemplate((option.use_asMessage)? option.asMessage : status().status()), d->acc.priority);
setStatusDirect(lastStatus);
usingAutoStatus = true;
}
diff -Naur psi-0.10-test3-orig/src/psiaccount.h psi-0.10-test3/src/psiaccount.h
--- psi-0.10-test3-orig/src/psiaccount.h 2005-12-01 21:48:43.000000000 +0000
+++ psi-0.10-test3/src/psiaccount.h 2005-12-01 21:49:41.000000000 +0000
@@ -157,6 +157,8 @@
Status status() const;
void setStatusDirect(const Status &);
void setStatusActual(const Status &);
+ void setEmergencyStatus(); // k
+ bool getEmergencyAwayStatusStatus(); // k
void login();
void logout(bool fast=false, const Status &s = Status("", "Logged out", 0, false));
bool loggedIn() const;
@@ -238,6 +240,7 @@
public slots:
void setStatus(const Status &);
+ QString expandStatusTemplate(const QString &statusTemplate);
void secondsIdle(int);
void openNextEvent();
@@ -390,7 +393,7 @@
EventDlg *ensureEventDlg(const Jid &);
friend class PsiCon;
- bool isDisconnecting, notifyOnlineOk, doReconnect, usingAutoStatus, rosterDone, presenceSent, v_isActive;
+ bool isDisconnecting, notifyOnlineOk, doReconnect, usingAutoStatus, usingEmergencyStatus, rosterDone, presenceSent, v_isActive; // k
void cleanupStream();
QString expandQuoteHeadlineTemplate(const Template &headerTemplate,
diff -Naur psi-0.10-test3-orig/src/psicon.cpp psi-0.10-test3/src/psicon.cpp
--- psi-0.10-test3-orig/src/psicon.cpp 2005-12-01 21:48:43.000000000 +0000
+++ psi-0.10-test3/src/psicon.cpp 2005-12-01 21:49:41.000000000 +0000
@@ -1000,6 +1000,27 @@
pa->setStatus(s);
}
+// k
+void PsiCon::setEmergencyStatus()
+{
+ // Check whether all accounts are logged off
+ bool allOffline = true;
+ PsiAccountListIt i(d->listEnabled);
+ PsiAccount *pa;
+ for( ; (pa = i.current()); ++i) {
+ if ( pa->isActive() ) {
+ allOffline = false;
+ break;
+ }
+ }
+
+ // globally set each account which is logged in
+ PsiAccountListIt it(d->listEnabled);
+ for( ; (pa = it.current()); ++it)
+ if (allOffline || pa->isActive())
+ pa->setEmergencyStatus();
+}
+
void PsiCon::pa_updatedActivity()
{
PsiAccount *pa = (PsiAccount *)sender();
diff -Naur psi-0.10-test3-orig/src/psicon.h psi-0.10-test3/src/psicon.h
--- psi-0.10-test3-orig/src/psicon.h 2005-12-01 21:48:43.000000000 +0000
+++ psi-0.10-test3/src/psicon.h 2005-12-01 21:49:41.000000000 +0000
@@ -163,6 +163,7 @@
public slots:
void setGlobalStatus(const Status &);
+ void setEmergencyStatus(); // k
QWidget *doToolbars();
private slots:
diff -Naur psi-0.10-test3-orig/src/psi_profiles.cpp psi-0.10-test3/src/psi_profiles.cpp
--- psi-0.10-test3-orig/src/psi_profiles.cpp 2005-12-01 21:48:43.000000000 +0000
+++ psi-0.10-test3/src/psi_profiles.cpp 2005-12-01 22:21:50.000000000 +0000
@@ -380,6 +380,7 @@
prefs.use_asOffline = FALSE;
prefs.use_asMessage = TRUE;
prefs.asMessage = QObject::tr("Auto Status (idle)");
+ prefs.eaMessage = QObject::tr("Emergency away! BRB.<\n-- \n:originalStatus:>");
prefs.scrollTo = TRUE;
prefs.useStatusLinebreak = true;
prefs.smShowResource = false;
@@ -1076,6 +1077,12 @@
tag.appendChild(textTag(doc, "LogEmptyStatus", prefs.clLogEmptyStatus));
}
{
+ QDomElement tag = doc.createElement("emergencyAwayStatus");
+ p_pres.appendChild(tag);
+
+ tag.appendChild(textTag(doc, "message", prefs.eaMessage));
+ }
+ {
p_pres.appendChild(prefs.sp.toXml(doc, "statuspresets"));
}
{
@@ -1921,6 +1928,11 @@
readEntry(tag, "message", &prefs.asMessage);
}
+ // k
+ tag = findSubTag(p_pres, "emergencyAwayStatus", &found);
+ if(found)
+ readEntry(tag, "message", &prefs.eaMessage);
+
tag = findSubTag(p_pres, "statuspresets", &found);
if(found)
prefs.sp.fromXml(tag);