[PC-BSD Commits] r201 - in pcbsd/trunk: PBIdelete kcmPBMsource

svn at pcbsd.org svn at pcbsd.org
Wed May 2 11:03:39 PDT 2007


Author: kris
Date: 2007-05-02 19:03:39 +0100 (Wed, 02 May 2007)
New Revision: 201

Added:
   pcbsd/trunk/kcmPBMsource/demo.png
Modified:
   pcbsd/trunk/PBIdelete/Makefile
   pcbsd/trunk/PBIdelete/main.cpp
   pcbsd/trunk/kcmPBMsource/pbm.ui
   pcbsd/trunk/kcmPBMsource/pbm.ui.h
Log:
Fixed PBM removal tool, to use wrapper script, allowing PROGDIR and such variables to be used.

Also added new feature in PBI Removal tool, which now allows the adding / removing of components. 

Modified: pcbsd/trunk/PBIdelete/Makefile
===================================================================
--- pcbsd/trunk/PBIdelete/Makefile	2007-05-02 17:59:14 UTC (rev 200)
+++ pcbsd/trunk/PBIdelete/Makefile	2007-05-02 18:03:39 UTC (rev 201)
@@ -1,6 +1,6 @@
 #############################################################################
-# Makefile for building: PBIdelete
-# Generated by qmake (1.07a) (Qt 3.3.4) on: Wed Nov 16 10:31:24 2005
+# Makefile for building: /PCBSD/bin/PBIdelete
+# Generated by qmake (1.07a) (Qt 3.3.8) on: Wed May  2 11:05:36 2007
 # Project:  PBIdelete.pro
 # Template: app
 # Command: $(QMAKE) -o Makefile PBIdelete.pro
@@ -16,10 +16,10 @@
 CXXFLAGS = -pipe -Wall -W -O2 -fno-strict-aliasing -pipe  -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_TABLET_SUPPORT
 LEXFLAGS = 
 YACCFLAGS= -d
-INCPATH  = -I/usr/local/share/qt/mkspecs/freebsd-g++ -I. -I/usr/local/include -I$(QTDIR)/include -I.ui/ -I. -I.moc/
+INCPATH  = -I/usr/local/share/qt/mkspecs/freebsd-g++ -I. -I../../../../../../../local/include -I$(QTDIR)/include -I.ui/ -I. -I.moc/
 LINK     = c++
 LFLAGS   =  -Wl,-rpath,/usr/local/lib  -Wl,-rpath,$(QTDIR)/lib -pthread
-LIBS     = $(SUBLIBS) -L/usr/local/lib -L$(QTDIR)/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm
+LIBS     = $(SUBLIBS) -L/usr/local/lib -L$(QTDIR)/lib -L/usr/local/lib -lqt-mt -lXext -lX11 -lm
 AR       = ar cqs
 RANLIB   = 
 MOC      = $(QTDIR)/bin/moc
@@ -56,8 +56,8 @@
 OBJMOC = .obj/moc_PBIdelete.o
 DIST	   = PBIdelete.pro
 QMAKE_TARGET = PBIdelete
-DESTDIR  = 
-TARGET   = PBIdelete
+DESTDIR  = /PCBSD/bin/
+TARGET   = /PCBSD/bin/PBIdelete
 
 first: all
 ####### Implicit rules
@@ -84,6 +84,7 @@
 all: Makefile $(TARGET)
 
 $(TARGET):  $(UICDECLS) $(OBJECTS) $(OBJMOC)  
+	test -d /PCBSD/bin/ || mkdir -p /PCBSD/bin/
 	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(OBJCOMP) $(LIBS)
 
 mocables: $(SRCMOC)
@@ -92,7 +93,7 @@
 $(MOC): 
 	( cd $(QTDIR)/src/moc && $(MAKE) )
 
-Makefile: PBIdelete.pro  /usr/local/share/qt/mkspecs/freebsd-g++/qmake.conf /usr/X11R6/lib/libqt-mt.prl
+Makefile: PBIdelete.pro  /usr/local/share/qt/mkspecs/freebsd-g++/qmake.conf ../../../../../../../local/lib/libqt-mt.prl
 	$(QMAKE) -o Makefile PBIdelete.pro
 qmake: 
 	@$(QMAKE) -o Makefile PBIdelete.pro
@@ -117,7 +118,7 @@
 ####### Sub-libraries
 
 distclean: clean
-	-$(DEL_FILE) $(TARGET) $(TARGET)
+	-$(DEL_FILE) /PCBSD/bin/$(TARGET) $(TARGET)
 
 
 FORCE:

Modified: pcbsd/trunk/PBIdelete/main.cpp
===================================================================
--- pcbsd/trunk/PBIdelete/main.cpp	2007-05-02 17:59:14 UTC (rev 200)
+++ pcbsd/trunk/PBIdelete/main.cpp	2007-05-02 18:03:39 UTC (rev 201)
@@ -134,7 +134,19 @@
     {
 	cout << "Running custom removal script\n";
 
-	QString command = "/Programs/" + ProgDirName + "/PBI.RemoveScript.sh";
+       // Write out the wrapper script
+       QFile file( "/Programs/" + ProgDirName + "/.PBIwrapper.sh" );
+       if ( file.open( IO_WriteOnly ) ) {
+       	 QTextStream stream( &file );
+		stream << "#!/bin/sh\n";
+		stream << "PROGDIR=\"" + ProgDirName + "\"; export PROGDIR\n";
+		stream << "USERNAME=\"root\"; export USERNAME\n";
+		stream << "INSTALLMODE=\"TEXT\"; export INSTALLMODE\n";
+		stream << "sh /Programs/" + ProgDirName + "/PBI.RemoveScript.sh ${PROGDIR}\nexit ${?}";
+       	file.close();
+       }
+
+	QString command = "sh /Programs/" + ProgDirName + "/.PBIwrapper.sh";
         QString inputLine = getLineFromCommandOutput(command);
 	startDelete();
 

Added: pcbsd/trunk/kcmPBMsource/demo.png


Property changes on: pcbsd/trunk/kcmPBMsource/demo.png
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:mime-type
   + application/octet-stream

Modified: pcbsd/trunk/kcmPBMsource/pbm.ui
===================================================================
--- pcbsd/trunk/kcmPBMsource/pbm.ui	2007-05-02 17:59:14 UTC (rev 200)
+++ pcbsd/trunk/kcmPBMsource/pbm.ui	2007-05-02 18:03:39 UTC (rev 201)
@@ -9,149 +9,352 @@
             <x>0</x>
             <y>0</y>
             <width>414</width>
-            <height>482</height>
+            <height>480</height>
         </rect>
     </property>
     <property name="caption">
         <string>PC-BSD Package Manager</string>
     </property>
     <property name="icon">
-        <pixmap>application.png</pixmap>
+        <pixmap>image0</pixmap>
     </property>
     <grid>
         <property name="name">
             <cstring>unnamed</cstring>
         </property>
-        <widget class="QLayoutWidget" row="0" column="0">
+        <widget class="QTabWidget" row="0" column="0">
             <property name="name">
-                <cstring>layout7</cstring>
+                <cstring>tabPBM</cstring>
             </property>
-            <grid>
+            <widget class="QWidget">
                 <property name="name">
-                    <cstring>unnamed</cstring>
+                    <cstring>tab</cstring>
                 </property>
-                <widget class="QGroupBox" row="0" column="0">
+                <attribute name="title">
+                    <string>Installed PBIs</string>
+                </attribute>
+                <grid>
                     <property name="name">
-                        <cstring>groupBox1</cstring>
+                        <cstring>unnamed</cstring>
                     </property>
-                    <property name="frameShape">
-                        <enum>GroupBoxPanel</enum>
-                    </property>
-                    <property name="frameShadow">
-                        <enum>Sunken</enum>
-                    </property>
-                    <property name="title">
-                        <string>Installed Software</string>
-                    </property>
-                    <hbox>
+                    <widget class="QLayoutWidget" row="0" column="0">
                         <property name="name">
-                            <cstring>unnamed</cstring>
+                            <cstring>layout6</cstring>
                         </property>
-                        <widget class="QListBox">
+                        <vbox>
                             <property name="name">
-                                <cstring>SoftwareListBox</cstring>
+                                <cstring>unnamed</cstring>
                             </property>
-                            <property name="sizePolicy">
-                                <sizepolicy>
-                                    <hsizetype>5</hsizetype>
-                                    <vsizetype>7</vsizetype>
-                                    <horstretch>0</horstretch>
-                                    <verstretch>0</verstretch>
-                                </sizepolicy>
-                            </property>
-                        </widget>
-                    </hbox>
-                </widget>
-                <widget class="QLayoutWidget" row="1" column="0">
+                            <widget class="QLayoutWidget">
+                                <property name="name">
+                                    <cstring>layout5</cstring>
+                                </property>
+                                <hbox>
+                                    <property name="name">
+                                        <cstring>unnamed</cstring>
+                                    </property>
+                                    <widget class="QLabel">
+                                        <property name="name">
+                                            <cstring>pixmapLabel2</cstring>
+                                        </property>
+                                        <property name="minimumSize">
+                                            <size>
+                                                <width>64</width>
+                                                <height>64</height>
+                                            </size>
+                                        </property>
+                                        <property name="maximumSize">
+                                            <size>
+                                                <width>64</width>
+                                                <height>64</height>
+                                            </size>
+                                        </property>
+                                        <property name="pixmap">
+                                            <pixmap>image0</pixmap>
+                                        </property>
+                                        <property name="scaledContents">
+                                            <bool>true</bool>
+                                        </property>
+                                    </widget>
+                                    <widget class="QLabel">
+                                        <property name="name">
+                                            <cstring>textLabel1_2</cstring>
+                                        </property>
+                                        <property name="text">
+                                            <string>Installed PBI Software</string>
+                                        </property>
+                                    </widget>
+                                </hbox>
+                            </widget>
+                            <widget class="QListBox">
+                                <property name="name">
+                                    <cstring>SoftwareListBox</cstring>
+                                </property>
+                                <property name="sizePolicy">
+                                    <sizepolicy>
+                                        <hsizetype>5</hsizetype>
+                                        <vsizetype>7</vsizetype>
+                                        <horstretch>0</horstretch>
+                                        <verstretch>0</verstretch>
+                                    </sizepolicy>
+                                </property>
+                            </widget>
+                            <widget class="QLayoutWidget">
+                                <property name="name">
+                                    <cstring>layout6</cstring>
+                                </property>
+                                <hbox>
+                                    <property name="name">
+                                        <cstring>unnamed</cstring>
+                                    </property>
+                                    <widget class="QPushButton">
+                                        <property name="name">
+                                            <cstring>RemoveButton</cstring>
+                                        </property>
+                                        <property name="sizePolicy">
+                                            <sizepolicy>
+                                                <hsizetype>0</hsizetype>
+                                                <vsizetype>0</vsizetype>
+                                                <horstretch>0</horstretch>
+                                                <verstretch>0</verstretch>
+                                            </sizepolicy>
+                                        </property>
+                                        <property name="text">
+                                            <string>&amp;Remove</string>
+                                        </property>
+                                        <property name="accel">
+                                            <string>Alt+R</string>
+                                        </property>
+                                    </widget>
+                                    <spacer>
+                                        <property name="name">
+                                            <cstring>spacer1</cstring>
+                                        </property>
+                                        <property name="orientation">
+                                            <enum>Horizontal</enum>
+                                        </property>
+                                        <property name="sizeType">
+                                            <enum>Expanding</enum>
+                                        </property>
+                                        <property name="sizeHint">
+                                            <size>
+                                                <width>202</width>
+                                                <height>31</height>
+                                            </size>
+                                        </property>
+                                    </spacer>
+                                    <widget class="QPushButton">
+                                        <property name="name">
+                                            <cstring>ExitButton</cstring>
+                                        </property>
+                                        <property name="sizePolicy">
+                                            <sizepolicy>
+                                                <hsizetype>0</hsizetype>
+                                                <vsizetype>0</vsizetype>
+                                                <horstretch>0</horstretch>
+                                                <verstretch>0</verstretch>
+                                            </sizepolicy>
+                                        </property>
+                                        <property name="text">
+                                            <string>&amp;Quit</string>
+                                        </property>
+                                        <property name="accel">
+                                            <string>Alt+Q</string>
+                                        </property>
+                                    </widget>
+                                </hbox>
+                            </widget>
+                        </vbox>
+                    </widget>
+                </grid>
+            </widget>
+            <widget class="QWidget">
+                <property name="name">
+                    <cstring>tab</cstring>
+                </property>
+                <attribute name="title">
+                    <string>System Components</string>
+                </attribute>
+                <grid>
                     <property name="name">
-                        <cstring>layout6</cstring>
+                        <cstring>unnamed</cstring>
                     </property>
-                    <hbox>
+                    <widget class="QLayoutWidget" row="0" column="0">
                         <property name="name">
-                            <cstring>unnamed</cstring>
+                            <cstring>layout4</cstring>
                         </property>
-                        <widget class="QPushButton">
+                        <vbox>
                             <property name="name">
-                                <cstring>RemoveButton</cstring>
+                                <cstring>unnamed</cstring>
                             </property>
-                            <property name="sizePolicy">
-                                <sizepolicy>
-                                    <hsizetype>0</hsizetype>
-                                    <vsizetype>0</vsizetype>
-                                    <horstretch>0</horstretch>
-                                    <verstretch>0</verstretch>
-                                </sizepolicy>
-                            </property>
-                            <property name="text">
-                                <string>&amp;Remove</string>
-                            </property>
-                            <property name="accel">
-                                <string>Alt+R</string>
-                            </property>
-                        </widget>
-                        <spacer>
-                            <property name="name">
-                                <cstring>spacer1</cstring>
-                            </property>
-                            <property name="orientation">
-                                <enum>Horizontal</enum>
-                            </property>
-                            <property name="sizeType">
-                                <enum>Expanding</enum>
-                            </property>
-                            <property name="sizeHint">
-                                <size>
-                                    <width>202</width>
-                                    <height>31</height>
-                                </size>
-                            </property>
-                        </spacer>
-                        <widget class="QPushButton">
-                            <property name="name">
-                                <cstring>ExitButton</cstring>
-                            </property>
-                            <property name="sizePolicy">
-                                <sizepolicy>
-                                    <hsizetype>0</hsizetype>
-                                    <vsizetype>0</vsizetype>
-                                    <horstretch>0</horstretch>
-                                    <verstretch>0</verstretch>
-                                </sizepolicy>
-                            </property>
-                            <property name="text">
-                                <string>&amp;Quit</string>
-                            </property>
-                            <property name="accel">
-                                <string>Alt+Q</string>
-                            </property>
-                        </widget>
-                    </hbox>
-                </widget>
-            </grid>
+                            <widget class="QLayoutWidget">
+                                <property name="name">
+                                    <cstring>layout3</cstring>
+                                </property>
+                                <hbox>
+                                    <property name="name">
+                                        <cstring>unnamed</cstring>
+                                    </property>
+                                    <widget class="QLabel">
+                                        <property name="name">
+                                            <cstring>pixmapLabel1</cstring>
+                                        </property>
+                                        <property name="minimumSize">
+                                            <size>
+                                                <width>64</width>
+                                                <height>64</height>
+                                            </size>
+                                        </property>
+                                        <property name="maximumSize">
+                                            <size>
+                                                <width>64</width>
+                                                <height>64</height>
+                                            </size>
+                                        </property>
+                                        <property name="pixmap">
+                                            <pixmap>image1</pixmap>
+                                        </property>
+                                        <property name="scaledContents">
+                                            <bool>true</bool>
+                                        </property>
+                                    </widget>
+                                    <widget class="QLabel">
+                                        <property name="name">
+                                            <cstring>textLabel1</cstring>
+                                        </property>
+                                        <property name="text">
+                                            <string>Available system components</string>
+                                        </property>
+                                    </widget>
+                                </hbox>
+                            </widget>
+                            <widget class="QListBox">
+                                <property name="name">
+                                    <cstring>componentListbox</cstring>
+                                </property>
+                            </widget>
+                            <widget class="QLayoutWidget">
+                                <property name="name">
+                                    <cstring>layout6_2</cstring>
+                                </property>
+                                <hbox>
+                                    <property name="name">
+                                        <cstring>unnamed</cstring>
+                                    </property>
+                                    <widget class="QPushButton">
+                                        <property name="name">
+                                            <cstring>componentInstallButton</cstring>
+                                        </property>
+                                        <property name="sizePolicy">
+                                            <sizepolicy>
+                                                <hsizetype>0</hsizetype>
+                                                <vsizetype>0</vsizetype>
+                                                <horstretch>0</horstretch>
+                                                <verstretch>0</verstretch>
+                                            </sizepolicy>
+                                        </property>
+                                        <property name="text">
+                                            <string>&amp;Install</string>
+                                        </property>
+                                        <property name="accel">
+                                            <string>Alt+I</string>
+                                        </property>
+                                    </widget>
+                                    <spacer>
+                                        <property name="name">
+                                            <cstring>spacer1_2</cstring>
+                                        </property>
+                                        <property name="orientation">
+                                            <enum>Horizontal</enum>
+                                        </property>
+                                        <property name="sizeType">
+                                            <enum>Expanding</enum>
+                                        </property>
+                                        <property name="sizeHint">
+                                            <size>
+                                                <width>202</width>
+                                                <height>31</height>
+                                            </size>
+                                        </property>
+                                    </spacer>
+                                    <widget class="QPushButton">
+                                        <property name="name">
+                                            <cstring>ExitButton2</cstring>
+                                        </property>
+                                        <property name="sizePolicy">
+                                            <sizepolicy>
+                                                <hsizetype>0</hsizetype>
+                                                <vsizetype>0</vsizetype>
+                                                <horstretch>0</horstretch>
+                                                <verstretch>0</verstretch>
+                                            </sizepolicy>
+                                        </property>
+                                        <property name="text">
+                                            <string>&amp;Quit</string>
+                                        </property>
+                                        <property name="accel">
+                                            <string>Alt+Q</string>
+                                        </property>
+                                    </widget>
+                                </hbox>
+                            </widget>
+                        </vbox>
+                    </widget>
+                </grid>
+            </widget>
         </widget>
     </grid>
 </widget>
+<images>
+    <image name="image0">
+        <data format="PNG" length="5219">89504e470d0a1a0a0000000d4948445200000040000000400806000000aa6971de0000142a49444154789ce59b598c1cc779c77f55dd73ef31bbcbdde5b1a44891944851a26ed1b2a2c8966dc470ecc04890c33002d806ecc0886120c9531e022441803c39c883fd90c0488c04b1ecc401122089ec38d6194bb244893ab8244572c9e5b94beebdb3b333ddd3dd9587aaeaaee91dd21425cb01dc40a3ababababebfb7f477ddf57d54229c52ff2e103fcce77d4ab9d988944259110fa81b9e8abb8f17b807c1f5d65b7f2dd1e0a7c1f569ab178f2f959197cf396fd4013086f94b13e8014ecdc3d22863de911279028b2ab3993445f23e7b9fb2c52ba3e494c1bccbd732a737dcf0e018284ce7a085202ec01a680c51bedc20710420507c705250fda11843104110431b46d3982560ced0e84117494a9739e05e6dd7607824497ed1927d0494025ef2d00746264d8400805300a5c7c275df8b6d089412867d066c0f68c921cd7cd55a1b98de1ac0294a30202ad12f654efa50a0840829069a7f29d76d1fd82e82e0a342822f72c2fc5795def3af3f6e26770bc9b7eaf89d84f53d5fc73e514845bf7ff7c924955c08ab26bbce2fc99538338a7229d44ab8e3dd3fb583f57f603efd521805810c5206f12e8140099041448488c9!
 21af54208f0005f802fa1e041197db61554250412024f1bc7d0cb6c48141b10623d3b740c68d73d54d7e5fa870015c7f825c5721b82774cbe9d05501c1c5a65bcdaa19388f4e35684dd7ba59c7a53b6d2a354d6de7da67ad4a5fdd1bb3ff27db0b16fd2764a7de509c4899b05404ac1b6f121c6fa54364fe73e4256dd1398fc803700972728474ce2bc63c7e002dbf35d042a0a693796f1dfb1fd770000f07c1f21b5b8770d3a479c2da76d725c4a072b36b649dc7b610816597de27ccf6a4a62daa8dcbbf65e4a08634172932e7d66047b10e5de7781a2b2c1f5aaefcdad8d9c4c12585c0e989b6b313fd7a2b116d2e944c451429224201452825f900cd68b0c8fd6181eae51e92b23a4347daa7735d1f8f90a952b5f8bf85ee2efb6b337f9b20296563a4c9f5b637a7a8d959588a22fe8affa54cb0586072a0821504a912845ab15d26c069c9f6bf0d6ab57f10a319bc6aaecd833c2c48e11ca45f9de00d06ba05d40388df252e28a6e9791ccd5cd2d841c3bdee0c2c516d5a264db588d07f797a90f14a9567cfc820152e8d962b10171a49db1208c585f6b3337d7e0c2e5455efad1398ad5696ebf6384ad9b8ba0acf2de2400d70282dcbdea6a94119807ceb50bebed84d78f363875bac5a6bacf23f70cb37d73995a5582cc02aa04b4af20b47a35433db50a40489fd2601f3!
 beb7ddcba7b0bcb8b0d4e4ecdf0c64f66982c066220a803147987eef00600d!
 cc1a7e59
c38e48d5e1e13f7fd4b33013f79b501093c7adf20bbb797295784263a760847735a19d75925faea49f34da57d8a40c160152676f633beb99f3dbb36f3c6d169ee59bec4e86ffef9170ebff0c499994bc7af00d14d03c03588ca13774dc20d48c74fb639fcfa1abbb7953874578dfaa0d42175eca88ad05e5c22745dea462b90429f4a00069082a7cf28068ab06de700232307193f36cc9152e957ebc3db87cebcfdfc978510279452e10d03d093c06b88755abe8ed53f72749dc9132187eeeae3be7d653c5f479c2ac91226124d388901411a42cd34272c00a69d5050f2417aa61fa5f310953a7ce4b109368f0ef0f48f8b1ff4fde23ff97ee9f78410af0181ba4e76249380bc5edb5374139a27b8eb7553ffea9b6d4e9ceef0e107aa1cd85d4ce30b89265226867053a7a426c88220cc375c00102024948a4e586d063058854d7538f4d00095cafd7cff2979679cc4df7cb8d3fae28bcf7eeb5521c43541480dc6062bde03987c0fae2db0f7c74e06bc3d15f1f80355eebebd88905acfc110842644d8abd179299de746423ca1eba5c925140a5afc6d5f09d057867a0da20e144b70f7c10a1f7ffc7eb66fdbb57ff7edbffcf5fd777dec36b471ec796cb098bd80b00e8c5b9f72dcde2bb87425e2f563111f3c58e2c09e42eaa979cea08536fc29619638a1f433843328a98da095!
 8472c1bc671e173c1819d0cf00e2180a4538785789c71fbd97d1d1897b0edef7a9bf004684103deddd0609b0e55edcdde0f63a2fb402c5e13742f6df52e0aebd0582083a917ec7973665670896dd9cb6755612945b6fa4c0f7a0583003365233dc0fa542e6910a0342a90cf71eacf181fbeea63e3cf1895ff9b53ffe3c302084d8c0f08d129053ee9e9a93e3bc02de3ad1a154943c78a040186be26313122b340116049b1e4bb9efd4d93274ab40a160a644a3fbb532f45737aaa505a16f001e3e34c6febdb77b639b6fffea9df77ce25ea0725d00ae35d5255c83f3a63cbf9470f6a2e2c1fd05fca2a01d66c447168424136757ffbdeb80e0791908253f13f54241735f98016c4889290dc2d8387ce0c13d8c8d4e8cedddffa1afa055a1d0130095bbba5c86de96df5afda327236e19f7d83ae6b1da72d2e6ce1925baade7e5b86fca56b75da9b086d1f7a0e8676deb3528f8ddd2d90b042961efde22070feca35edffab17b1ffcf50f02352144da3c032067ed55cf1b5d4e63746061296171090edc2a6975a0d3c9a5cfe2ecb40e906bd8bab82e1d493006501ae2adfad4ca502d19bdcf519d07218aa05285bbeedcc2d8d8d6dac42df7fd163004a452b04105ba1c9cfca9d8a026d31763368f48ea0392d5755d17474e1add70dfde5b9b90ce02d218456776c05c3da90da8e5!
 7ed1d77aef669a7b81a054063a0a26b649f6ecdac9607dcb637bf63dba1fc7!
 16f40c1c
f2046fc8c89833ecc0cc1cecdc2269479a389b34b52b497935484150d934281d09b0f7be993e0bbe31a002fa2abace32210f82225bb3b06d92046a35d8bb7b338383a3c3133bee7e14e81742785d006ce07e2f9d370ded4c31bf942094c7a62149a3b551efe368a32a44ce35317a9afa0a0ac24e42ab1d1304119d304290e049a896a15c725455904e87902dcbd9e756cb95f9c68eed15c6368d32589ff8003088718ea44bd8466a73e0384d14307b3561535d2f50b602fdb12431dcb712e048452fc39898c106a1a2b11ed16cc5b4da11ed7644d0eed06a06b45a01452f49ed853bae94f02e9130b388b52302ea7598d8b6856a7560efe8d8addb8112e4a2c19ebaae7ad49bebe20adcba45e8bc7f6c7c746bedd391f446345d228b20ec288230d14e930fe5924fb904411813863124118d4642ff408982af234ad73bcddb04a5cc3a45a419d30aa11dc2c8a64d542ab54db5fe4d7be6ae9e794308b1da150de60d5c5e2052bd32d720d046693dd41cf612e3c9196e0b30d18e79c9447e4820d6b7410861a8f024f45525455f30bf1cb1de8e18ec2f30522fd0586b138631abab01f5c132c2506c898e95b6f8a121b81d6aa2834ee6900909e56a91a1a1b1d2f8967dbba6a75eae02de0600ae99fc706c836d2f85a05c823523feb1225dfd955287aa5e7e21c47a83e8c59320542!
 805d5b2244a144ffdb8c9e4c9791acb4b0cd4123efed8760eec1b636e615da7c55a1d2ad5221d435c3b34abd1a10eb72327c982cafc0e21a0522930d03fccfcd5b3dbd06b3b1bb3e91ba63e87f5f929d1f704055f1044992ea657c716e4efad4d08cd52bb340ec153afc4bcfad63441f3792ab5b75968ccf1ad278e706a6a8e6ab544d081859588c555585ad367a3ad399da8cc69f27d137f38b30c02fc02148b4506ea9b07d036c0eb7284aeb5eae302e14a83f5d43a516eda5319e1bd7c013b230491befa1e5c9e87b3979af8e208c39b47d8b5ff361ef8a5ed78e5841f3d779a58091225093b097194e8a9d26487ec54e95ba327333f22f5328d5325258c8def1940db3f991941d16d03dc82253ac93d97c65fb7bb3f84d16f61f5dd401c2719c0890265821a817ebf5c14ac0710b52f53e9ef63f3f65b18df3a815f28b27820e6caa9abc45187524110187b21dd247062fab44c32e348d06371cd50b158248e2389b6d372e3c2480fce7719c85c3b2bdaca7cccaedc58cf2e49320e950a3aa62f16747013865a7a8abea25a02e10f52aaf433303844a5d68f9092f6baa2562d522e7a34d7231d2079c6557666ab2e30ac7534a024496607e238464a1b54e772825db380ca5dcd03cb5cfb2c8a49139dbe715d7d4368ada453581543b4154febef2789365c4107b66c128c0c0!
 d33b7b0956633a41684cc5e58e1c49b97f8ed4feea350f0504942c117140bb!
 26baf51e
cd09f6ed05299240a9b63501045312b2b573ab67db71f90473467fcdc760051ac4862c54045a0140c5474b0522a68bfdd063d38fd5af114686325430802c5603f7ce8fe224f3e37c6e4ab731c3d7c82d585068f3fb28b870fddc25a33407a502efa140b5a72ece0dcf109ab0e86782533039924d0891216e7cf354c0be5a79d38145e2ff4753f18468a4e04fb26b404d8d83e550fd3d04aa48df2ac047952ab473b84d5b58491bae4538f0f71e97281f5569b6d63bbd8b56380b5f50eed7644c997f4f515d348d18ed5b35c32759e535646f98580a01dd36aad1375da4be8750375cd9521d7e9e9b51ea8002913d6d63d8abe76446295110a39c29db037ed4440a9248895a2b90e4b6b319592e0c0ed03f8de205127617139a4134508047d7d252a25a9d3eb9efb816cb069ffb66c9c20805633a4d1584ad656af5c023a40ecbb047559fb1cc7eda0dd5c40ad9a30b7ec1841dbccdc08b26908e7991ba878128a05c98a4a8812c55a2b218e8d7c270942287c5f52ab1428147d12a50dea064e59f09daa1467a557a19696d65858bcdc6cb71b97d11b4ae25402847116ecc0dd4edc7be1743c3c943033a3680702cfcbb6bfd8cc8e740815cecb2e0849a2ddd66241fbf852297c0f140acff7281624e59247a1208863eb801910dc813903f615442ee840d882ab730b5c993975b9b9!
 b67801680151360bc41d3d67268ea557dd1957d7f24a05a34331a7cf74985f2eb06d4c122799f3e18ec98e53386262c3d4b516ac07da7e80a452866ac943a09052a419643b95599053100011671f12422bb7e7aa03b0bc1871656e8e2b33274e2649bc04ac93aa8052f2f5a9c570325c5a8d95ece9fde100601da24e14d30a86facf5c1c2dedd89c0dc85507f7704110424f7fab2d5d0e63ed16d7caa6ad103a5f90402c34e0d6f38c0d87ecb46b99957ec7619a903a4d77f1c222b3572e742e4c1f7e0d68006da5943682d293835f7bbe5238726426c4f784dd77daeb50b9bb7b46975a5fac8c94961b92813e914e4f7695d77d27950403e65233f31fac3f9f02eda88934fd59d549d046571829f03c07006b8085f60f3c010b5761fac22ce7a70f4fadae5c9d0456309bca7c802868fed7f2d2c2aef64ad3a3e029c3a71b3ade6c74fc93b78c944e4c8f541e39e8d1719e5d4b1204b0d2d4a1abef6967288c8cead829d9f11f5ce7cb238da6e9b892609539268b38257402383bb5ccc5cb1793b78ffef039a5d4556015b37cee033cf1d9fecf033b803a3d5c80eb1d2d9057b67cebd3c7b77de68ff64c0886eb524b8121a26b764013d90a61693d23368c3408452f9b89ec61d307f6880d089e30490fd3b18d021120a2cca85fbe9830f9f639a64ebd7866e6d289e78179604d!
 291db85bdcd68173c0e51b25dc3d9e7df21b97f6def5d1470f1f1f7de86387!
 8aa93394
7a92229d608813986fe8c1fb868876c7c41432cb9908470a1232e900bdb26c679a38c9e4d54684f81aa4e51538f2c62c672f9c895f7fe5bb4fc671741158c0d953690188d086e1a68ee9d3af2c2f5e39f9a7a76a83ff32312a6b77dee613b85b139406410a586a18ab6fb86d3339aeaa588b9f862caabb2e215307a574e2c54a9bddcddae9c0e4648b378f4d71fc8dfff8c9ece5d3cf00578055a5541a3e48406f357b7767f2577ff2f8d34bf3e7fff6a5c980992b31a5ae05282db26b012cae194c8c7e0751f673867b5857ba676a5e650e9b940648936bb0dd9c9a4a78f1f029a6cfbc367be4e5ef7d4f293503cc016df73b3dd7056ef208bef7f77ff097b3b3b34f3ef54a9bb98584a2912f21b48e5f5dcee6711b49b6c36c29ad8bf024f343aca799669d55f64ca17d8f34fba4e0f419f8e1b3a738757ab2f5c2d3dff8c76673f52de0129afb5d49baf70c00a5943af6fa7f2fbefcf4dffde1b98b73affde0a575e6173349985bd156df75dec28ed936a3ba25a02be7e0729d6eeedbf70466ad10387b167ef0d4298e9d7cbbf3e2335fffcea58ba79e032ea08d9f3b4901d7da2475f320c4428829cf2f7e297ee4b37ff3643c76ff470f55a90ffa2cad1b9135c65101ad8e59be32bebd1b23d8f582d4f0d16d136ce2c3ee1f8822983e1bf3cc0b67983c7ea2f3c28ffefadb2!
 78ebdf06f68e33e83717c7ea60018103a4288a3ed56e34bd1639ffb5a3bd8f6a1437756181f2fb3d4d222ef27e69fa34e46303800a49d65e1f50610ec5540a301c74f3479f1f034a7a78eadbdf4ecd7fff9e81bcffd3b308de6fe5a5ef4ed217e56ff0d0a214ae35b6fdbfcd92f7ff3cfc6b7eefdcc1db7568b77ecae218b1e6b012c37a1d1caf6000801637518ae65090c9b3972cbe9a2aa0749085766138e1c9de5ade3e7397feef5f32f3efd8d6f9f9d3afabf68ce5fa487debf2f0018108a40fd735ffd87dfdd7eeb43bfbf757c68d7be5d55766cad102a8ff9a6768a62a5899a1886c19a134e8b6c2b4dba5d46e835c7a58584a9b3cb4c9ebcc2f48573c1d4b1ff7cf1f00bdffdd78585b9e368aecf721dcebf2f0018103c60e09e439fdefff087bff085d12db77d726c64607ce796325bc62b94cb0562e111c47ac353a568bc4723fa1263132268b5140b0b6dce5f5ce5ccf97966aece4597cebd7cecc45b4f7effad23cffcd8103d837676da3f8df8f7050000b339a90cd41f7af43307f7dffb894f8e8eeffdc8d0d0c8ce91c1527978b0c8405f915ab540a9e061d7f7924411068a46336471a9c9fc729bc5c54516172e2f5e9d397aecf4b1ff79e1f8e44b87832098453b39f3404329b5c1da5f736cefe7bfc366ab5a05181cdeb463f37d0fffc603e3dbeeb877a0be6!
 56fb53a30512856860b9e571252782a494025b4db6b511034d7d7d796e7561!
 6a72ecec
d9e3e393df5dadbd36726cf00cbe8bf4497d09e6c78235cef1ad3cfe3e769034409a8017de6aca2a5c4eef8b6e1838d2a22204467729a6882d7ccfd3b263c1dcbcff3ef71a31a1e7acf4e013d2ddb64971b1ed8a83826032202e2ebed03bea131fca2ff3eff7f003d339138edf0c00000000049454e44ae426082</data>
+    </image>
+    <image name="image1">
+        <data format="PNG" length="6578">89504e470d0a1a0a0000000d4948445200000040000000400806000000aa6971de0000197949444154789ced9a796c5dd79ddf3ff7dc7bdf7d0bc9c79de2a2cda2646b97255bb26539192772ec28aea74d669c7450a040d2c645021428fa87ff489020fda3458306a91b2040676a754b80c4e9d8a374b2b8711c8f2a39922259e222919248715f44f2916fbffb39fde3be473f52922d0f269d4ee11f7170977779eff97e7fcbf99ddf39f0917c241fc9df31d12a4dffcd6f7ed3383333736c6666e6094054eeff7f255a4dd36fdcb8f1f0e2e2e23fcb66b37f96cbe5fa8bc562502e9755a95452b95ceef44b2fbd942622e2437de0ff25a9f6475cbc78b1bdababeb89783c7e48d7f523baae1fd4753d2d44844f0881a6458f4b2909c390d9d9d9af6fdbb6eddf01ee87fde0df86ac827df5d55713478e1c79b8aeaeee88aeeb47344d3b649ae6564dd3568156c1ae79c1ba7bd96cf6526b6beba7801c107e984efcbea5f63b62606060477b7bfb91582c7648d7f5278410bb8410561530b07afcc017d79020a5e4eb5ffffae3dffef6b72f739f56f0fb226055bba74f9f6eeeeded3d649ae66386611c314df3514dd35ade4fb355b91b094ac1ecec3c67cffe6f5e78e18fdffb60e53d972f5ffe378f3efae8bf068af7d351e!
 3fe31dd53aa08b4975f7ed97ceeb9e7f6a5d3e92386611c010e99a6b9b316682de0f7030f15df9670e1c2052efcee0217ce5fe0fa8d5b34b774512ce6d8b26533870f1f06402985a6696cdab4e969e0bb80cd7db8c15fc70256b57beedcb94d9b366d3a6459d613428823a669eed3342d752fc0777d59cdef4a29161632bcfd576f73f9f215ce5fb840b118b26dfb3eb6f6ee66dfc3c7483734a2a1989abcced5775fe77bdffbde9af78561187ee52b5f79f4e4c993d7b80f37f8200256c1fef0873f6c387cf8f081bababac386611cab44e5ae5a53feb05af643b8f8bb8b5cba789173e7cf31323a4532d5c6033b0ed0bbe300db1f3a107d5c5388ca60181d1502c5bffada9f70f1c2993bde7bf1e2c5af3ffef8e3ff1e287d1802d604aaab57afee4ba5528762b1d8114dd38e98a6b94b08a1d746e65a80557fbdb7e635161697f9ed6fdfe1cae52b5cbc74996c7691634f1c65fffefd747575535f5f572146a0e949b279c5724e43184914124d0364e588e4f59f7c9f2ffea36779e69967d67c697979f97c4747c7df0396f90037a82619627878f8f1783cfe19c3308e18867150d3b4f4fa885c0bae9684eabd5a2bf002c5d0d561fafafa78f7f2bb5c1f99002d4dcfe6bdecdaf9009f78722781b7c2fcfc3c42085a5a5aa8abab43081ddff72897cb689a463299245f3298b!
 c0d8a385206481922439fccd22c37fa5ee3e4c9936b400541107ef5ab5fbd2!
 f37d000e
3faf5eb9f6a6a6afa591886f704b5dec46b35af94c66226c7e0c0008383830c5c1d627ea144aaa187f6ce87e879e0200df56dc4cc90bddb6ce2fa0a535353ecdebd9b8d9b1e40d74dd02a99ac062840532025b9ec32b76fcf22846074da27938d11ca00dff7d134c99ffd877fc13b67de249148ac0176e9d2a5af3df6d8632ff3016ea0010d13131357ebeaea7a5cd7bdc3846b8156cf1d0fc6c7c619be3eccd0d010d76f4cb29c0b49d66f26ddda4b73db7612890471cbc28ac788c54c1296cfb10392a9f1ab6cd9b2858d9bb78134904894526b3aa40981aeebe8ba5eb13e45b99c279fcd307d3be4e66440e8fbf8becbe9b75ee58f9e3fcce73ffff935c0eed70d0ca0d1f7fd1ec330701ce78e07a484cc4a915bb746191d1965f8e60863634b94dc0452b461c4bb882577d1d86391482448242c148250698440a840e0736cbfcff8e8550e1e3c8469a52997c3d57e699a4054a29c5212a542aa966b1806a619c7301b686e4d505797438812d7c722b61e7ef438a74efde00e02d2e9f4235ffce2177b4e9e3c99ff2002520b0b0b0bddddddedb59a705d973f7fed1403d72699985ea1ec3560fb8d046a1386b90d4317e842a06122038534209410861a61084a82941a4a2a0eeff6999b1965dffe87f16512cff6317403c3b4308d189a10d4c64c4d031906f8be4ba9e4806663!
 c553c4cc1822d6c49e072d0ae5156617cab4b476737568825c2e473a9d5e7d87aeebfa97bffce54f9f3c79f206ef130704a0dfba756b24f26585949149c662312ef78ff3d6c526c6167ac914bb70c206148a200c080249104ac2501248159d4b89941229596d1dcd4574b5444fcf461ccfc275259a964418f54815c30bc0f5258e27f13c89e74b5c5f124a81d013985603a1d4c9665728148b789ec297719e78a49358cc44e8068f3c7e82d75f7f7db5ef55d9ba75ebf34012d0df8f006f666666a85028a0ebd1734a2994523cbc772386517d611494948caea219988c880842fc20ac90a208a52490a094e4f06e937c3e8fd4ea29bb1ac26c20503ab617e27a326a6ed41c4fe2b812af72ee7a92200423568761d691cde628144b94ca0a84c1be879ad0349d038f3ccd5ffee5cf56fb2ea55ce306bc4fc62b00e7f2e5cb83f97c1ecbb256c12ba5d8ba750b8d7501ab2979d54e2b9c48a5088310df0f2312bc00df0ff103451886b4a50bb8f60aed1d5de4ed18bad988e369d88ec4b643ca4e88ed46a0cb4e48c90e2895038ab61ffd5621c4712552b330cc344b4b4b945d8fb945975ddb9b317488271a58580e585c5c5c0526a55c7583f7234007acb1b131f1c20b2fbcb061c306c3b6edd568afeb3ae72f0e932d2640441159080d4dd44c6234adc287b69a1f444de7a92349!
 8ab91974ab0b61b61148f00389ef8591d9bb01b613623b72d50d228b0871dc!
 10cf0d09
0255892d0a0d9d3094e4732bc4cc3a745d603b36d9bc42088d526e9cfdfbf7af82534a615956fc3bdff9ce6b447140b14e04e0964aa5fcf8f8f898699a6be2407b7b3b3d1b0c84ae630881a6093404a2b6e8a21428451084789e8fe3b8388e4321bf4c3a59c2344d4a7e136557512a8714cb21b9824f66d96139eb92cbbb14cb2ea5b28fed04949d80b21352b67d8a658f6cc161256f53287a94ed004dafa358f6c8acacb0b8ecd0dd6ea1143cb8eb095eff8b9fdea1e1743afde8f1e3c75bb947a548003e509a9e9e1e725d7795b96a30d9fb501b42e86842203471c76b24aa425a481004b8ae47d976708b53084d82a8235fd22896024ab62457f05929f8144a1e85a24ba168932fb8948a1ee5b28fe3f8d88e8fe386d86e886dfb944a2eb9bccd72cea6507211463df373b3ccdd76684e1bd1506b26f0559a999999351600c4bef6b5af7d0688dd8b8000288f8d8d0d65b35962b1d8da38b0a59be6b48a08a892509be62b8592122a24848187eb38a830836118941c412653249b73c917036c5be17a0adb0e2955482816ca144b0eb6ede23a01be17565a80e707b85e9508876cb644d9562c678b8c4f2d60590632f408c3805dfb3ec9a953a7502a8a416118a29462dbb66d9f06e277b302419424d8bffef5afaf64b3d93b02615b5b1b1b5ab81338a02a7f524964182265343!
 47a4e81c0771042b0b4623331b3ccfcc20a2bd9326547e20782500a8250e1b80165c7a5542e532ad9388e8b5701ee0721be2ff1bd00d7f3715c9f92ed522896299642466edd424a895d2e512ebbb476eee47fbdf957770c878d8d8dc78e1f3fdece5d86c328cf04f7dab56b73d3d3d30bd538504b4077c79dc3a842a164142f64280965481804c8c0c7f38a94ca3e4110502efb0c5e9ba76f609ee11bf34c4e67c8173c34ddc23013e87a0c25c1f37c6cc7a1542ee338369ee7e3fb017e10e00712c7f5c9171d96964a4c4c67995d2853c82ee0fb3ed96c9e81ab13fccf5f0c303e1b636464644d5f755d8f7de31bdff8f4dddca04a800f94c6c7c76f5413a26ad3759d877a1bef244046a6afa4240c83a80501810c097d8f6c3e9a57a4eb4d3ccfa350b6b9bd98676a6699d1b1db8c4f2e932f4148829038b60bf9a24b365b6271b9c0f27281cc72914ca6cce25291e5952856d88e879421ba6ed2de92209fcff3f35f5de3dc851bdcbebd80a336f0c61b6fdcd1df2d5bb67ce66e6e50252000ca333333432b2b2b54ad00a240f2c0e636ea536bdd4713a252b29291ef876134550d0282d0c3f302c6a7b36ce949118601411091a4648094019e67532e1790a12495aaa7b1a999643c892674a454788147e07b84d247682142287401426884a16271a94077f706faaece90cbdb9!
 5ef4b02d5c6afde3a770701f772832aaa00b007060606565656ee8803cdcdc!
 df4d4ba8
106bad0b1ac385a3506c89040864819a2940e4a71e6dc189d1d69bada2d406208d088aa399aa6408684818d0a7dea1271367476d0d9d94173631d092b861913988642d7151a9272d961763ecbd8c412d95c99a78eede6ecf9b5e60e30bd60313030b0e6debddca04a4008386fbdf5d6f0d2d292bb3e0e343434b06563fcbd7fd2a2a4c888c548a79bb1e28928484a85540a4d33910a2e5c59c60f42fee0b1560c1d0c43c3300442074327d2a80e420b8100d3d0686aaea7bbbb939eae761ad3f5689aa058f4c8ac94c8971c94022b66f0c8812e3455e4d2e09dc55f477673faf4e93beedfcd0daa278a4a42343a3a3a56b5806a34350c83ed5b1a2adad7a22151d7310c133366d1d2d6497b6737c9bafaa86ea05ba0090a45979fbd39c6f1277b686f89a31b609a1ab19840370486a9611a1a8641a469112208d1758d645d3dcd2d6db4b5b5d3d49ca6a13e4e5ddc24111724123ac78f75f3d35f5ce0f6528858577ef36503bf39dd4f18ae9d05dfcd0d6a09f081d2ececec60a954a236184a29d9b9bd95b855298d11cde1755da09b314cc3a0ae2ecde6cd3bd8baed21dada3a89279a51d2e717a797999e5de69f7ce1414c5d4404181a960931a34a8040d7350c0186809809094ba3a1cea0bd3dcdd64d5d6cddb2918e0d2d34d42579644f0acbf0f88b3766d1aa495a4dc1c630!
 0425af89bebebed589d1bddca03620684062ebd6ad1b0f1e3cf8b1783c8eeffbeffda8690c0c2fb3b4ec83a645e07513c38c11332dcc580cd3308927923435b5d1d2da89a6b9082349ff708e7ff887db696b4b736baa48dc3249c44d12098378dc20993048c67512098344c22461e958318169ea18bac0d435623193783c497ba3c7815df5fcf71fbfc9e561014a118b19b4b5d6b379530b3b1fdcc09e9d5d34b7b462e7863974e850a4e1caba81aeebeae5975ffe2995b9c1fa01decae7f3c6b3cf3efbf9d6d6d6351522210473f30586470b1542a22286d004ba6112336218660cc38861982689643dbaae48252d9a3bf6d0772dc3179eeba1a3bd81a9b932c98449326e924c9aa41206c984492a69924c4444c44d1dd31018ba86a6477987a116e86ef3f9c9ab3fc2d26d1edcb5938e8e4e766e6fa7ab334d536302cb32a349996e3135f62e4f7ff2c9d5693e402291e8fee52f7ff95fe7e7e7f3805c4f80b9b2b2923c7efcf8891d3b76d4158bc555ed0b21f0fc8033bf5b04a5d094069a5a6556e81111a619c3344d74dd201eafc7b573084da199ed5c1c2c71ec509aa30737902d28744327953057c1a792d17522ae138febc40c2d0a9204d45b796222c7a953a7c8e7f3ecdef510a13dc9eedd7bc8db066118e524b522439fce3693cececedadaa6f9e0830f0efde0073f!
 1800fcf5f3641f288e8f8f5fd7346d436d3a09b06b470b8621080249280394!
 1f154854
653ea0948a6aec159fd48d3875e92e722bd3480c1ca78e7ffb1fa7f9c4d106fef093ede48a1a734b2eaeab482645e406964ec202d3d4d175b04c58ce2c73e177039cbf729bdead07d860cf73a5ef2afbf6ee667efcd76ced3ec6d8ac451898b84e09cf5d207417886b59b2d9ec6a4ea3691a4a297a7b7b4f003f069c5a025603e1dcdcdc502693f9b86118f8bebfaae56422c6d64d0ddcbc954575ceb0fdefdfc62d984cfde820320cf17d0fcf75f15c97bafa0692c93a62f1061a9a7ac82d4f61c4d2202c5eff45865fbe35cab1479af8f891361edc5c8f6ec4512a1a25342485fc32b353f3dc189de3d694c7cc6d9b7c2e647ee136cf3ed54baf940c0c5c45370413533f46e8165e607070ff76b66cd9ccd6adc7e8e8e858055d2b2d2d2d9f3c74e850d3a54b970aeb5d4003e24d4d4d4d870f1f3ed1d8d848758a5c657071d963e8e60ada936739f64c17e9ed21b36379fcb926a4ac90e0b9b8ae4310f8082188594912c9069cf20abe5726661924e3825cdee1c65881be6bf3f40ddce2facd49aef48d72e6dc752e5c9ee5f2b0cbe894cff4f41cc5429ec0f709438fb1f1710e1de8255fc873f2e47f269d4ef3dc674e307af31afbf7efe7d8b163a452a948ab35e0abe7420873f3e6cd577ff4a31f5d5def0221e0bcf1c61b432fbef8a2bb79f366abaafdea70b8e7a136fef!
 c67a364afb671f16a8cb4b189f9d469d2b2b7f2950057298220c0716c0a851c1ded2df4f4b4b2e3815d185a01bb9c45d74d346112860ac7f5281605f34b515d310c159e53c2b6e708039b740a366e48a0bc251aea0d9a9a3a318c282e1d3a7488b367cf22a5e4f9e79fe7d4a953b4b6b6b277ef5e6afb5e2bbaaee3384e1c88ad2740011e501c1b1b1b7df2c92777adffe703bbdad0d068f4ff88bdb91328e972717e9cc227ff07a9d3cf117f7086ce7f3042e68dedece153b4b6a448c44d74ddc5d02496152795eac175cab84e9150799886065211041e2a28a2ab2ccd4987d68d160f6cdec8860d1b686e6e26954a313d3d8d6ddb00747676d2d3d383e7799c3d7b16cff378fae9a7f9fef7bfcf8b2fbeb85a1e1342609a662538eb4c4e4edefcd297be7419d0ee4640350e0c168bc55da232e9a94a2a69f0c003cdf4ddb699cc2b0af53fe7d03f1f416b4832fdf1d7d8fc503b4d463b0df145dacf26103a04a1040254a57466983aa611a3a1b1034357587a0ea1b2583ad4a7ea696cdc48737333c964f28ea5baeeee6ee6e6e6b06d9b1d3b76502814b06d9bddbb7773e1c2051cc7e1631ffb18dffdee7779e9a597387af468655a5ee6f6eddbf6e0e0e08d6f7deb5bffa9582ce681e06ed5d200284f4e4e5e5b5c5c249d4eaf2e542aa5f03c8f638f6e824b334cddfc2d617!
 a10e7e10c32aea11ef649580d4c17e6981d156c559504048994020d856e285!
 aea439ad
2651a5305ea53d11a846575128bc5d62cc95533d1ea5aa4520a21049d9d9d4c4e4ea294e2f0e1c34829711c07cff3b872e50a8ee370f8f061bef9cd6ff2b9cf7d6e399bcd5e79fbedb747de7cf3cd5bc002700b5802bcbb111002cef9f3e7fb979696686b6ba3547a6f7db1542af1a93fd8ce72ce671701f0715eebff19ad27348c448277ae5c61ffe92ff08cf7386890b40c3a3be2b43719b434e934a4560311baaeaf59685def6ef792ea6ab2e7791886c1891327705d17dbb6715d97a1a1215cd765cf9e3dfce99ffe69ddc8c8c8d572b97cbe027a09b80dac70973c004002eec4c4c4c2e4e4e4ccfefdfbbb6b3b160401ed1b626bf6ef1c9ffc97fcb7fe17d933fa2c7f5278910736b7b2b12b45476b8c545ce279de6a7dae5a3ebf5b705a7fafaa7d00d33489c7e3589685aeeb5896c5f8f838434343d9e1e1e189fefefec9c5c5c59e969696877ddfe7e6cd9b388e436f6f6fac542afdd3b9b9b9fe72b93c04e489b6cff880bcd7828147a54224a5ecae35450053f7696e4a91cb3bd42563ecebd9cf3faebb46d7330912b19052a984ebba785e9962b0766fc1ddc0d59e579fd5759d783c4e3c1e8f4aeba512cbcbcb4c4d4d65fbfafac6060606c67ffef39f5f5f5a5aca05415022b2dce4be7dfbdca6a6a6c75cd765727212c771e8eaea8adbb6fd7210047fec79deaf2a!
 e081bbaf98ac06c28585856b8b8b8b4f5513a2aa944a253e77a29798a148589262b148a994637971f18e9d5fd5005abbc9e26ec3531570229120168b61db36d96c96e1e1e1d2e0e0e0645f5fdfc899336746878686e688d6fc8b156d16810291e536f6f7f7e776eedc291b1b1b8f0641c0fcfc3c8ee3d0d8d8982c97cbaf8661f8d9300cdf228a75f75c320a01fbc68d1b57171717d9b469139ee7ad6a2b9bcda2eb85ca2605ed8ec055abc9eaf57a228410585675493d81e779643219c6c7c7bdbebebec9a1a1a1b1b367cfdeb87cf9f23450ae80ccd7b442e5bec37bab3ef540796868e895dede5eeaeaea8e36373793c964705d17cbb2528661bc1686e16781b7b8c72840854df7cc9933c3b3b3b3766f6f6fa20a1ea2381004c107ee00ab250258051c8fc79152b2b2b2c2d4d454303c3c3c77eddab5b177df7df7e63befbc331e044155abb5808b449aaf051d56fa5aad7c389573353232f2cac68d1b49269347a3ca7116c771d0342d05bc067c1678eb5e04d42644234f3df5d4def5138ad5076b86a9f5a0a3e12d022d842093c9303131c1f0f0f0dcd0d0d0787f7fffad3367ce8cd8b65d6bca79a2adae851ac076a53f7e0de0bb0d192ed18e1000a6a6a65ed9b06103f178fc682a95a266769b524afd04d8fa7e04f84069717171a85028ecd5346d4d4274375f360c63!
 55c3a669b2b2b2c2cccc0ca3a3a3cb83838363434343b7ce9d3b773393c9ac!
 540056fd
385f735d22d2a45769d5ad24f73346aaf524cccfcfbfd2d2d2826559478320c0b6ed6a7f5340d7fbed14ad96caaf2d2c2cd0d1d141a15058f3806118ab913a1e8fb3b2b2c2dcdc1cd3d3d385fefefef1919191f173e7ce5d9f99995964ad86ab80ab5a766b4057cd7aede4fefee50e123299cc2b0d0d0d98a6793408023ccf93c0cbdc230fa84a08b867cf9ebdfcfcf3cfcbeddbb70b5dd7f13c6fd5ac4ba5120b0b0bccccccb8838383e3232323b7fafbfb6f5dbf7e7d9ab5913a5769a54ab32b9dac35ebbf2ee0fb22219fcfbf924824f2428887805f036f738f4cb02a12703299cc425f5fdf3ba6691edbbe7d3bb66db3b0b0100c0e0e4e8f8e8e8e0d0f0f8f5cb972657c1de0f591bad68f03ded3f2ef53d693206ddbfe2f44a69f012680ecfb85710d48001b4dd37cf8139ff8c4730d0d0d1d131313337d7d7de3aeeb5601ae075cd57055cb0111d8e06f18e0fd8a4654054e03cd8045a4900c50f8a071cc041a81cd400fd138eb13693a5739d606ae2ae00f13b8fe6f884654018f558e01118ef07e364bc78880a72be7019176ab80ff2602d7df9adc4f26a3112da0189563751cfe3b09f823f9483e928fe423f948de93ff03a9c7f667c2af67520000000049454e44ae426082</data>
+    </image>
+</images>
+<connections>
+    <connection>
+        <sender>componentListbox</sender>
+        <signal>selectionChanged(QListBoxItem*)</signal>
+        <receiver>PBM</receiver>
+        <slot>componentSelectionChangedSlot(QListBoxItem*)</slot>
+    </connection>
+    <connection>
+        <sender>componentInstallButton</sender>
+        <signal>clicked()</signal>
+        <receiver>PBM</receiver>
+        <slot>componentButtonClicked()</slot>
+    </connection>
+</connections>
 <includes>
     <include location="local" impldecl="in declaration">qprocess.h</include>
     <include location="local" impldecl="in declaration">qmessagebox.h</include>
+    <include location="global" impldecl="in declaration">kdirwatch.h</include>
     <include location="global" impldecl="in declaration">qfile.h</include>
-    <include location="global" impldecl="in declaration">kdirwatch.h</include>
     <include location="local" impldecl="in implementation">pbm.ui.h</include>
 </includes>
 <variables>
+    <variable access="private">int DeleteItem;</variable>
+    <variable access="private">QProcess *RemoveFile;</variable>
+    <variable access="private">QString RealUserName;</variable>
+    <variable access="private">QProcess *CheckRoot;</variable>
+    <variable access="private">QProcess *RemoveScript;</variable>
+    <variable access="private">QString MimeFile[800][100];</variable>
+    <variable access="private">QString ProgExe[800][100];</variable>
+    <variable access="private">QString ProgWeb[800];</variable>
+    <variable access="private">QString ProgAuthor[800];</variable>
+    <variable access="private">QString ProgIcon[800];</variable>
+    <variable access="private">QString ProgVer[800];</variable>
     <variable access="private">QProcess *InfoWindow;</variable>
     <variable access="private">QString *ProgName;</variable>
-    <variable access="private">QString ProgVer[800];</variable>
-    <variable access="private">QString ProgIcon[800];</variable>
-    <variable access="private">QString ProgAuthor[800];</variable>
-    <variable access="private">QString ProgWeb[800];</variable>
-    <variable access="private">QString ProgExe[800][100];</variable>
-    <variable access="private">QString MimeFile[800][100];</variable>
-    <variable access="private">QProcess *RemoveScript;</variable>
-    <variable access="private">QProcess *CheckRoot;</variable>
-    <variable access="private">QString RealUserName;</variable>
-    <variable access="private">QProcess *RemoveFile;</variable>
-    <variable access="private">int DeleteItem;</variable>
+    <variable access="private">QString ComponentName[500];</variable>
+    <variable access="private">QString ComponentDescr[500];</variable>
+    <variable access="private">QString ComponentDir[500];</variable>
+    <variable access="private">int ComponentInstalled[500];</variable>
+    <variable access="private">int ComponentWorkingItem;</variable>
+    <variable access="private">QProcess *removeComponentProc;</variable>
+    <variable access="private">QProcess *installComponentProc;</variable>
 </variables>
 <slots>
     <slot access="private">RemoveButtonSlot()</slot>
@@ -160,12 +363,20 @@
     <slot access="private">CheckRootSlot()</slot>
     <slot access="private">CheckScriptSlot()</slot>
     <slot access="private">startDelete()</slot>
+    <slot access="private">installComponentSlot()</slot>
+    <slot access="private">removeComponentSlot()</slot>
+    <slot access="private" returnType="bool">checkComponentSlot( int component )</slot>
+    <slot access="private">refreshComponentsSlot()</slot>
+    <slot access="private">componentSelectionChangedSlot(QListBoxItem * item)</slot>
+    <slot access="private">componentButtonClicked()</slot>
+    <slot access="private">removeComponentFinishedSlot()</slot>
+    <slot access="private">installComponentFinishedSlot()</slot>
 </slots>
 <functions>
     <function>ProgramInit()</function>
     <function access="private">CleanPackageList( int RemNum )</function>
     <function access="private">RemoveFiles( int RemNum )</function>
+    <function access="private">loadComponents()</function>
 </functions>
-<pixmapinproject/>
 <layoutdefaults spacing="6" margin="11"/>
 </UI>

Modified: pcbsd/trunk/kcmPBMsource/pbm.ui.h
===================================================================
--- pcbsd/trunk/kcmPBMsource/pbm.ui.h	2007-05-02 17:59:14 UTC (rev 200)
+++ pcbsd/trunk/kcmPBMsource/pbm.ui.h	2007-05-02 18:03:39 UTC (rev 201)
@@ -22,6 +22,8 @@
     
     ExitButton->setEnabled(FALSE);
     ExitButton->setHidden(TRUE);
+    ExitButton2->setHidden(TRUE);
+    ExitButton2->setEnabled(FALSE);
     
     connect(RemoveButton, SIGNAL( clicked() ), this, SLOT(RemoveButtonSlot() ) );
     connect(ExitButton, SIGNAL( clicked() ), this, SLOT(ExitButtonSlot() ) );
@@ -48,7 +50,11 @@
             	      RealUserName = stream3.readLine();
 	}
     }
-    
+
+
+   // Load the Components
+   loadComponents();
+
 }
 
 
@@ -79,6 +85,8 @@
 	if ( !InfoWindow->start() ) {
 	      //QMessageBox::information( this, tr("Error!", "Error displaying info window!") );
 	}
+
+	 tabPBM->setEnabled(FALSE);
 	     
           // Check for any custom script to run before remove
           CheckScriptSlot();
@@ -437,11 +445,31 @@
     QFile CheckScript("/Programs/" + ProgDirName + "/PBI.RemoveScript.sh");
     if (CheckScript.exists() )
     {
-	// Remove the script
+
+        	    // Write out the wrapper script
+    	    QFile file( "/Programs/" + ProgDirName + "/.PBIwrapper.sh" );
+   	    if ( file.open( IO_WriteOnly ) ) {
+        	 QTextStream stream( &file );
+			stream << "#!/bin/sh\n";
+			stream << "PROGDIR=\"" + ProgDirName + "\"; export PROGDIR\n";
+			stream << "USERNAME=\"" + RealUserName + "\"; export USERNAME\n";
+			stream << "INSTALLMODE=\"GUI\"; export INSTALLMODE\n";
+			stream << "sh /Programs/" + ProgDirName + "/PBI.RemoveScript.sh ${PROGDIR}\nexit ${?}";
+
+        	file.close();
+    	    }
+
 	RemoveScript = new QProcess( this );
-	RemoveScript->addArgument( "/Programs/" + ProgDirName + "/PBI.RemoveScript.sh");
-	RemoveScript->addArgument( ProgDirName ); 
+	RemoveScript->addArgument( "sh" );
+        RemoveScript->addArgument( "/Programs/" + ProgDirName + "/.PBIwrapper.sh" );
 
+
+
+	// Remove the script
+	//RemoveScript = new QProcess( this );
+	//RemoveScript->addArgument( "/Programs/" + ProgDirName + "/PBI.RemoveScript.sh");
+	//RemoveScript->addArgument( ProgDirName ); 
+
 	connect( RemoveScript, SIGNAL(processExited()), this, SLOT(startDelete() ) );
 
 	if ( !RemoveScript->start() ) {
@@ -479,7 +507,250 @@
 	// Re-enable the buttons
 	RemoveButton->setEnabled(TRUE);
 	ExitButton->setEnabled(TRUE);
-	
+	tabPBM->setEnabled(TRUE);
                QMessageBox::information( this, tr("Success!"), tr("The package was deleted!") );
 
 }
+
+
+void PBM::loadComponents()
+{
+	componentListbox->clear();
+
+    
+        int found = 0;
+    
+        QDir d( "/PCBSD/Components");
+	
+        d.setFilter( QDir::Dirs );
+        d.setSorting( QDir::Name );
+	
+        for ( int i = 0; i < d.count(); i++ )
+        {
+	    QFile file( "/PCBSD/Components/" + d[i] + "/component.cfg" );
+	    if ( file.open( IO_ReadOnly ) ) {
+		
+		ComponentDir[found]=d[i];
+		
+		QTextStream stream( &file );
+		QString line;
+		while ( !stream.atEnd() ) {
+		    line = stream.readLine(); // line of text excluding '\n'
+		   
+		    if ( line.find("name:") == 0)
+		    {
+			ComponentName[found] = line.replace("name: ", "");
+		    }
+		    
+		    if ( line.find("description:") == 0)
+		    {
+			ComponentDescr[found] = line.replace("description: ", "");
+		    }
+		    
+		    
+		}
+		file.close();
+
+	       // Insert a new item here, KPM!!!!!!
+	       QImage *Icon = new QImage("/PCBSD/Components/" + ComponentDir[found] + "/component.png");
+	       QPixmap PixmapIcon;
+	       PixmapIcon.convertFromImage(Icon->smoothScale(40,40));
+	       if ( checkComponentSlot(found) ) {
+		ComponentInstalled[found] = 0;
+		componentListbox->insertItem(PixmapIcon, ComponentName[found] + " (" + ComponentDescr[found] + ") - INSTALLED");
+               } else {
+		ComponentInstalled[found] = 1;
+	        componentListbox->insertItem(PixmapIcon, ComponentName[found] + " (" + ComponentDescr[found] + ") - NOT INSTALLED");
+	       }
+		
+		found++;
+	    }
+        }
+
+   componentListbox->setCurrentItem(0);
+
+}
+
+
+void PBM::installComponentSlot()
+{
+    if (componentListbox->currentItem() != -1)
+    {
+             ComponentWorkingItem = componentListbox->currentItem();
+	     
+             switch( QMessageBox::warning( this, tr("Install Component?"), tr("Do you want to install ") + ComponentName[ComponentWorkingItem] + "? This can be removed later from this menu.", tr("OK"), tr("Cancel"), 0, 0, 1 ) ) {
+             case 0: // The user clicked the OK again button or pressed Enter    
+            break;
+            case 1: // The user clicked the cancel button
+                 return;
+            break;
+          }
+
+	InfoWindow = new QProcess( this );
+	InfoWindow->addArgument( "kdialog");
+	InfoWindow->addArgument( "--passivepopup" ); 
+	InfoWindow->addArgument( "Please Wait.. Installing " + ComponentName[ComponentWorkingItem] + ".." ); 
+	InfoWindow->addArgument( "300" ); 
+	
+	if ( !InfoWindow->start() ) {
+	      //QMessageBox::information( this, tr("Error!", "Error displaying info window!") );
+	}
+
+        
+	tabPBM->setEnabled(FALSE);
+
+        
+	// Remove the component
+	installComponentProc = new QProcess( this );
+	installComponentProc->addArgument( "/PCBSD/Components/" + ComponentDir[ComponentWorkingItem] + "/install.sh");
+
+	connect( installComponentProc, SIGNAL(processExited()), this, SLOT(installComponentFinishedSlot() ) );
+
+	if ( !installComponentProc->start() ) {
+	      QMessageBox::information( this, tr("Error!"), tr("Error starting component install!") );
+	}
+
+
+    }
+}
+
+
+void PBM::removeComponentSlot()
+{
+
+    if (componentListbox->currentItem() != -1)
+    {
+             ComponentWorkingItem = componentListbox->currentItem();
+	     
+             switch( QMessageBox::warning( this, tr("Remove Component?"), tr("Do you want to remove ") + ComponentName[ComponentWorkingItem] + "? This can be re-added later from this menu.", tr("OK"), tr("Cancel"), 0, 0, 1 ) ) {
+             case 0: // The user clicked the OK again button or pressed Enter    
+            break;
+            case 1: // The user clicked the cancel button
+                 return;
+            break;
+          }
+
+	InfoWindow = new QProcess( this );
+	InfoWindow->addArgument( "kdialog");
+	InfoWindow->addArgument( "--passivepopup" ); 
+	InfoWindow->addArgument( "Please Wait.. Removing " + ComponentName[ComponentWorkingItem] + ".." ); 
+	InfoWindow->addArgument( "300" ); 
+	
+	if ( !InfoWindow->start() ) {
+	      //QMessageBox::information( this, tr("Error!", "Error displaying info window!") );
+	}
+
+        
+	tabPBM->setEnabled(FALSE);
+
+        
+	// Remove the component
+	removeComponentProc = new QProcess( this );
+	removeComponentProc->addArgument( "/PCBSD/Components/" + ComponentDir[ComponentWorkingItem] + "/remove.sh");
+
+	connect( removeComponentProc, SIGNAL(processExited()), this, SLOT(removeComponentFinishedSlot() ) );
+
+	if ( !removeComponentProc->start() ) {
+	      QMessageBox::information( this, tr("Error!"), tr("Error starting component removal!") );
+	}
+
+
+    }
+
+}
+
+
+bool PBM::checkComponentSlot( int component )
+{
+	int exit = system("/PCBSD/Components/" + ComponentDir[component] + "/install-check.sh");
+	if ( exit == 0 )
+	{
+	   return TRUE;
+	} else {
+	   return FALSE;
+	}
+}
+
+
+void PBM::refreshComponentsSlot()
+{
+   loadComponents();
+}
+
+
+void PBM::componentSelectionChangedSlot( QListBoxItem * item )
+{
+
+    int selectedItem;
+
+    if (componentListbox->currentItem() != -1)
+    {
+	
+        selectedItem = componentListbox->currentItem();
+        componentInstallButton->setEnabled(TRUE);
+	if ( ComponentInstalled[selectedItem] == 0 ) {
+ 		componentInstallButton->setText("Remove");
+	} else {
+		componentInstallButton->setText("Install");
+	}
+	     
+
+    } else {
+	componentInstallButton->setEnabled(FALSE);
+    }
+
+}
+
+
+void PBM::componentButtonClicked()
+{
+ // If the user clicked to remove / install a component, check which one
+    int selectedItem;
+
+    if (componentListbox->currentItem() != -1)
+    {
+	
+        selectedItem = componentListbox->currentItem();
+        if ( ComponentInstalled[selectedItem] == 0 ) {
+ 		removeComponentSlot();
+	} else {
+		installComponentSlot();
+	}
+	     
+
+    }
+
+}
+
+
+void PBM::removeComponentFinishedSlot()
+{
+	// The removal process is done, now refresh and inform the user
+       refreshComponentsSlot();
+
+       if ( InfoWindow->isRunning() )
+       {
+	    InfoWindow->kill();
+       }
+
+	tabPBM->setEnabled(TRUE);
+        QMessageBox::information( this, tr("Success!"), tr("The component was removed!") );
+}
+
+// removeComponentProc
+// installComponentProc
+
+void PBM::installComponentFinishedSlot()
+{
+
+	// The install process is done, now refresh and inform the user
+       refreshComponentsSlot();
+
+       if ( InfoWindow->isRunning() )
+       {
+	    InfoWindow->kill();
+       }
+
+	tabPBM->setEnabled(TRUE);
+        QMessageBox::information( this, tr("Success!"), tr("The component was installed!") );
+}



More information about the Commits mailing list