~ubuntu-branches/ubuntu/gutsy/kdebase-workspace/gutsy-backports

« back to all changes in this revision

Viewing changes to kicker/kicker/kicker-3.4-reverseLayout.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Riddell
  • Date: 2007-09-05 20:45:14 UTC
  • Revision ID: james.westby@ubuntu.com-20070905204514-632hhspl0nvrc84i
Tags: upstream-3.93.0
ImportĀ upstreamĀ versionĀ 3.93.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <QFile>
 
2
#include <QMap>
 
3
#include <QRegExp>
 
4
 
 
5
#include <QTextStream>
 
6
 
 
7
#include <kapplication.h>
 
8
#include <kcmdlineargs.h>
 
9
#include <kglobal.h>
 
10
#include <klocale.h>
 
11
#include <kprocess.h>
 
12
#include <kstandarddirs.h>
 
13
#include <ktemporaryfile.h>
 
14
 
 
15
struct AppletInfo
 
16
{
 
17
    double freeSpace;
 
18
    QString configFile;
 
19
    QString desktopFile;
 
20
};
 
21
typedef QMap<QString, AppletInfo> AppletInfoMap;
 
22
 
 
23
int main(int argc, char** argv)
 
24
{
 
25
    // We must disguise as Kicker in order to obtain the correct reverseLayout setting.
 
26
    KCmdLineArgs::init(argc, argv, "kicker", 0, KLocalizedString(), "", KLocalizedString(), false);
 
27
    KApplication app(false);
 
28
 
 
29
    QStringList stretchableApplets;
 
30
    stretchableApplets << "taskbarapplet.desktop";
 
31
 
 
32
    QTextStream in (stdin, QIODevice::ReadOnly);
 
33
    QTextStream out(stdout, QIODevice::WriteOnly);
 
34
 
 
35
    QStringList appletIds;
 
36
    AppletInfoMap applets;
 
37
 
 
38
    QRegExp rxGroup("^\\[(.+)\\]$");
 
39
    QRegExp rxKeyValue("([^=]+)=[ \t]*([^\n]+)");
 
40
    QString currentGroup;
 
41
 
 
42
    QString line;
 
43
    while (!(line = in.readLine()).isNull())
 
44
    {
 
45
        if (rxGroup.indexIn(line) != -1)
 
46
        {
 
47
            currentGroup = rxGroup.cap(1);
 
48
            continue;
 
49
        }
 
50
 
 
51
        if (rxKeyValue.indexIn(line) != -1)
 
52
        {
 
53
            QString key   = rxKeyValue.cap(1);
 
54
            QString value = rxKeyValue.cap(2);
 
55
 
 
56
            if (key == "Applets")
 
57
            {
 
58
                appletIds = value.split(",", QString::SkipEmptyParts);
 
59
            }
 
60
            else if (key == "FreeSpace")
 
61
            {
 
62
                applets[currentGroup].freeSpace = value.toDouble();
 
63
            }
 
64
            else if (key == "ConfigFile")
 
65
            {
 
66
                applets[currentGroup].configFile = value;
 
67
            }
 
68
            else if (key == "DesktopFile")
 
69
            {
 
70
                applets[currentGroup].desktopFile = value;
 
71
            }
 
72
        }
 
73
    }
 
74
 
 
75
    if (QApplication::isRightToLeft())
 
76
    {
 
77
        // Reverse appletIds
 
78
        QStringList appletIdsRev;
 
79
        QStringList::ConstIterator it;
 
80
        for (it = appletIds.begin(); it != appletIds.end(); ++it)
 
81
        {
 
82
            appletIdsRev.prepend(*it);
 
83
        }
 
84
        appletIds = appletIdsRev;
 
85
 
 
86
        // Adjust the FreeSpace values
 
87
        for (it = appletIds.begin(); it != appletIds.end(); ++it)
 
88
        {
 
89
            applets[*it].freeSpace = 1 - applets[*it].freeSpace;
 
90
 
 
91
            // Take care of stretchable applets.
 
92
            if (stretchableApplets.contains(applets[*it].desktopFile))
 
93
            {
 
94
                if (it != appletIds.begin())
 
95
                {
 
96
                    applets[*it].freeSpace = applets[*(--it)].freeSpace; 
 
97
                    ++it;
 
98
                }
 
99
                else
 
100
                {
 
101
                    applets[*it].freeSpace = 0;
 
102
                }
 
103
            }
 
104
        }
 
105
    }
 
106
 
 
107
    // Write the changed entries to stdout.
 
108
    if (!appletIds.empty())
 
109
    {
 
110
        out << "[General]" << endl;
 
111
        out << "Applets2=" << appletIds.join(",") << endl;
 
112
        QStringList::ConstIterator it;
 
113
        for (it = appletIds.begin(); it != appletIds.end(); ++it)
 
114
        {
 
115
            out << "[" << *it << "]" << endl;
 
116
            out << "FreeSpace2=" << applets[*it].freeSpace << endl;
 
117
        }
 
118
    }
 
119
 
 
120
    // Build a list of childpanel config files.
 
121
    QStringList childPanelConfigFiles;
 
122
    AppletInfoMap::ConstIterator it2;
 
123
    QStringList::ConstIterator it;
 
124
    for (it2 = applets.begin(); it2 != applets.end(); ++it2)
 
125
    {
 
126
        if (it2.value().desktopFile == "childpanelextension.desktop")
 
127
        {
 
128
            childPanelConfigFiles << it2.value().configFile;
 
129
        }
 
130
    }
 
131
 
 
132
    if (!childPanelConfigFiles.isEmpty())
 
133
    {
 
134
        // Create a temporary kconf_update .upd file for updating the childpanels
 
135
        KTemporaryFile tempFile;
 
136
        tempFile.setSuffix(".upd");
 
137
        tempFile.open();
 
138
        QTextStream upd ( &tempFile );
 
139
        for (it = childPanelConfigFiles.begin(); it != childPanelConfigFiles.end(); ++it)
 
140
        {
 
141
            upd << "Id=kde_3.4_reverseLayout" << endl;
 
142
            upd << "File=" << *it << endl;
 
143
            upd << "Script=kicker-3.4-reverseLayout" << endl;
 
144
            upd << endl;
 
145
        }
 
146
        upd.flush();
 
147
 
 
148
        // Run kconf_update on the childpanel config files.
 
149
        KProcess kconf_update;
 
150
        kconf_update << KStandardDirs::findExe("kconf_update") << tempFile.fileName();
 
151
        kconf_update.execute();
 
152
    }
 
153
}