summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-03-01 19:19:25 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-03-01 19:19:25 +0000
commite0311ffdf88fc311006351582b959a69d8aad328 (patch)
treedccf6212f21ef7e3824b54837be7b1d14139d2e1
downloadwlassistant-e0311ffd.tar.gz
wlassistant-e0311ffd.zip
Added KDE3 version of wlassistant
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/wlassistant@1097621 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
-rw-r--r--ChangeLog588
-rw-r--r--SConstruct35
-rw-r--r--VERSION1
-rw-r--r--bksys/generic.py644
-rw-r--r--bksys/kde.py884
-rw-r--r--bksys/parser.py142
-rw-r--r--bksys/scons-mini.tar.bz2bin0 -> 58130 bytes
-rw-r--r--config.bks28
-rwxr-xr-xconfigure87
-rw-r--r--description-pak2
-rw-r--r--doc/AUTHORS25
-rw-r--r--doc/COPYING340
-rw-r--r--doc/NEWS97
-rw-r--r--doc/README9
-rw-r--r--doc/TODO364
-rw-r--r--icons/hi16-app-wlassistant.pngbin0 -> 997 bytes
-rw-r--r--icons/hi32-app-wlassistant.pngbin0 -> 2873 bytes
-rw-r--r--po/ar.po969
-rw-r--r--po/ca.po997
-rw-r--r--po/es.po983
-rw-r--r--po/fr.po987
-rw-r--r--po/nb.po973
-rw-r--r--po/pl.po980
-rw-r--r--po/pt_BR.po976
-rw-r--r--po/sv.po978
-rw-r--r--po/wlassistant.pot860
-rw-r--r--po/zh_CN.po960
-rw-r--r--po/zh_TW.po963
-rw-r--r--src/SConscript26
-rw-r--r--src/main.cpp56
-rw-r--r--src/netlistviewitem.cpp239
-rw-r--r--src/netlistviewitem.h176
-rw-r--r--src/netparams.h289
-rw-r--r--src/ui_NetParamsEdit.ui1111
-rw-r--r--src/ui_NetParamsWizard.ui892
-rw-r--r--src/ui_main.ui759
-rw-r--r--src/ui_netparamsedit.cpp174
-rw-r--r--src/ui_netparamsedit.h53
-rw-r--r--src/ui_netparamswizard.cpp107
-rw-r--r--src/ui_netparamswizard.h53
-rw-r--r--src/waconfig.cpp29
-rw-r--r--src/waconfig.h45
-rw-r--r--src/watools.cpp312
-rw-r--r--src/watools.h76
-rw-r--r--src/wlassistant.cpp1264
-rw-r--r--src/wlassistant.desktop55
-rw-r--r--src/wlassistant.h120
47 files changed, 19708 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..c673c3b
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,588 @@
+2007-04-03 Paweł Nawrocki <pnawrocki@gmail.com>
+
+ * WPA-PSK support, UI cleanup and much more.
+
+2007-02-27 Paweł Nawrocki <pnawrocki@gmail.com>
+
+ * dhclient connection: get gateway from stdout, so there's no need to check later.
+
+2007-02-27 Paweł Nawrocki <pnawrocki@gmail.com>
+
+ * get rid of many external proc calls in favor of ioctls, WATools cleanup
+
+2007-02-27 Paweł Nawrocki <pnawrocki@gmail.com>
+
+ * Don't check for active connection while wizard is running
+
+2007-02-27 Paweł Nawrocki <pnawrocki@gmail.com>
+
+ * Fixed connection success detection
+
+2007-02-27 Paweł Nawrocki <pnawrocki@gmail.com>
+
+ * Beginnings of WPA-PSK support
+
+2007-02-09 Paweł Nawrocki <pnawrocki@gmail.com>
+
+ * Got rid of "iwconfig_status" action. Get essid with iwlib calls.
+
+2007-02-03 Paweł Nawrocki <pnawrocki@gmail.com>
+
+ * Added option to group APs with the same ESSID
+
+2007-02-03 Paweł Nawrocki <pnawrocki@gmail.com>
+
+ * Hide security keys in dialogs and console output
+
+2006-11-22 RELEASE 0.5.6
+
+2006-11-22 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added an option to wait before getting scan results - fixes a problem when some networks were not visible after initial scan.
+
+2006-11-22 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added option to automatically connect to best network at startup.
+
+2006-11-22 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added customizable per-network commands before/after connection/disconnection.
+
+2006-11-14 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Removed the '-q' option from dhclient execution (problem reported by marshallbanana)
+
+2006-11-14 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added Arabic translation (by Mohammed Gamal)
+
+2006-11-14 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added Norwegian Bokm� translation (by Alexander Nicolaysen S?rnes)
+
+2006-11-14 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added Swedish translation (by Daniel Nylander)
+
+2006-11-14 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Updated Spanish translation (by Enrique Mat�s S�chez)
+
+2006-11-14 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Made automatic reconnection option more visible (modified patch by Henry Kay)
+
+2006-03-11 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Fix bug 1447119 - ignore hostap's wifi0 interface (reported and patched by Andreas Nolda)
+
+2006-03-09 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Wait a little bit before checking if connection was successful (a working connection was sometimes not detected)
+
+2006-03-09 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Fixed detection of a running DHCP client (patch by James Ots)
+ * Fixed gateway detection for SUSE10 (patch by James Ots)
+
+2006-03-04 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added .info files path for SUSE10
+
+2006-03-01 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Skip channel setting if not supported (fixes bug 1349228)
+
+2006-02-16 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Revised and completed Portugese (Brazil) translation (by BRUNO GON�LVES)
+
+2006-02-13 RELEASE 0.5.5
+
+2006-02-13 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Get device list from iwconfig
+
+2006-02-13 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added AUTHORS file
+
+2006-02-12 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Updated to latest bksys (based on kdissert)
+
+2006-02-12 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Show system tray icon by default. Added categories. (wlassistant.desktop)
+
+2006-02-12 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Always try to kill stale dhcp client before connecting (fixes bug #1305952)
+
+2006-02-12 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * New quality level indication. Fixes bug #1323274 "Link quality seems strangefully low..."
+
+2006-02-12 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Updated Portugese (Brazilian) translation (changes by Wintceas Godois)
+
+2006-02-12 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added Chinese (Simplified and Traditional) translations (by Peter Zhang)
+
+2006-02-12 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Fixed "unknown escape sequence" warning (thanks to Achim Bohnet)
+
+2006-02-12 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Return to iwlist scan results parsing
+ * Pass essid as the last argument - fixes bug #1366531
+
+2006-01-14 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added license to src/waconfig.h
+
+2005-10-24 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Automatically detect paths to .pid and .info/.leases files. Fixes bug #1323263
+
+2005-10-07 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * No concole output if radio ok
+ * Added missing i18n(...) (wlassistant.cpp line 382)
+
+2005-10-07 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added Catalan translation (by Adonay Sanz Alsina)
+
+2005-09-30 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Normalize quality returned by scan results (range 0-100)
+
+2005-09-30 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Open kernel socket once, reuse it till program exits.
+
+2005-09-29 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Fixed possible division by zero problem.
+
+2005-09-27 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * FIxed initialization of some variables in WATools.
+
+2005-09-27 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * WATools::scanResults does not freeze UI anymore (using callback function to update UI)
+
+2005-09-23 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Small fixes to the WATools::scanResults parsing. (wlassistant.cpp)
+ * Migrated to bksys/scons
+
+2005-09-20 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Get Wireless Extensions version from iw_get_kernel_we_version() (watools.cpp)
+
+2005-09-14 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added configure check for iwlib.h (patch by Sheldon Lee-Wen)
+
+2005-09-13 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Migrated from iwlist scan results parsing to direct iwlib calls.
+
+2005-09-11 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added version number in window title (main.cpp)
+
+2005-09-11 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Removed redundant <string> include (watools.h)
+ * Default (fallback) interface in WATools
+ * Auto set fallback interface in WATools::interfaceList() if none set.
+ * Made returned variables static in WATools functions
+ * Renamed devices() to interfaceList() in WATools, adjusted references.
+
+2005-09-06 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added French translation (by Olivier Butler)
+
+2005-09-06 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added 'ASCII' checkbox next to WEP key fields.
+
+2005-09-02 RELEASE 0.5.4a
+
+2005-09-01 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Made WATools::txpower return -1 if radio is disabled.
+ * Use WATools::txpower instead of output parsing to check if radio is enabled.
+
+2005-09-01 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * List only managed (& master) networks
+
+2005-09-01 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Removed setIfname and ifname from WATools, made 'iface' argument in functions mandatory..
+ * Don't check for active connection when no scan results.
+ * Changed linux/socket.h to sys/socket.h (watools.cpp)
+ * Only bring interface up (before scanning) if it is down. ('no scan results' fix, part 1)
+ * Don't bring interface down if there were no scan results. ('no scan results' fix, part 2)
+ * added "ifconfig_status" action (output to check if interface is up) (netparams.cpp)
+
+2005-08-30 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Removed double #include for qcursor
+
+2005-08-27 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Changed linux/socket.h include to sys/socket.h (watools.cpp)
+ * Don't check for active connection if there are no scan results (wlassistant.cpp)
+
+2005-08-20 RELEASE 0.5.4
+
+2005-08-20 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Reviewed 'timerConnectionCheck' occurences. Make it work regardless of connectedItem presence (to detect if connected from an outside app)
+ * Fixed 'wlassistant crashes when pressing 'scan' a lot' bug.
+ * Set config groups
+ * Created README with usage hints
+ * Changed 'restricted' to 'shared key'
+ * Changed 'open' to 'open system' (WEP mode)
+ * Fixed 'connect from selected network' to 'connect to connected network'
+ * Added Portugese Brazilian translation (by Daniel Nascimento)
+ * Added Polish translation
+ * Added Polish description to .desktop file (Comment[pl])
+
+2005-08-16 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added WATools:: txpower, ap, iface, setIface. (watools.h/.cpp)
+ * Added getGateway() function. (wlassistant.h/.cpp)
+
+2005-08-15 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Pressing 'Quit' kills all background processes. (wlassistant.cpp)
+
+2005-08-15 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Changed 'Scan' to 'Refresh' (ui_main.ui)
+
+2005-08-13 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Fix: if no gateway (manual config or DHCP) - report that connection failed.
+ * Properly detect connection on startup, if only gateway accessible.
+ * Wait 2sec before checking for internet after establishing connection.
+ * Wait 150ms after DHCP client finishes before getting gateway from route.
+ * Added more detailed output to stdout.
+
+2005-08-13 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Changed host to ping to www.ibiblio.org
+
+2005-08-13 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Fix: set mInternet to false when mConnected is false.
+
+2005-08-11 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Reworked connection status monitoring & indication.
+
+2005-08-09 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added WATools::devices that returns comma separated list of wireless devices.
+ * Migrated to WATools::devices (wlassistant.cpp)
+
+2005-08-08 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added WATools::isWireless to determine if interface supports wireless extensions.
+
+2005-08-08 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Removed KConfigXT, .kcfg & .kcfgc files. Variables to store are added in wlassistant.cpp files.
+ * Changed 'WaSettings' to WAConfig.
+
+2005-08-08 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Introduced helper class WATools (uses iwlib directly).
+ * Get currentItem quality with WATools::quality instead of parsing iwconfig output.
+
+2005-08-07 RELEASE 0.5.3
+
+2005-08-07 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Removed redundant includes.
+
+2005-08-07 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Removed "ui_confgeneral.h" dependancy (wlassistant.cpp).
+
+2005-08-07 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Removed KDE version dependancy (ui_main.ui).
+
+2005-08-07 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added ToolTips and 'What's This' help to all elements.
+ * Changed 'Close' to 'Quit'.
+
+2005-08-07 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Change 'Settings' to 'Options' where appropriate.
+
+2005-08-07 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added formatting to message boxes.
+ * Change 'Close' to 'Stop' only if process runs longer than 1.5sec
+
+2005-08-07 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Last used interface is saved in config file and reused next time the app is run.
+
+2005-08-07 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * While running external executables, 'Close' button changes to 'Stop' that terminates current process.
+
+2005-08-07 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added DHCP client timeout and GUI to configure it.
+
+2005-08-07 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * New settings GUI (wlassistant.h/.cpp, ui_main.ui).
+ * Droppen kconfigdialog.h dependancy.
+ * Fixed item height with the new settings GUI (netlistviewitem.h/.cpp).
+
+2005-08-06 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Removed 'netReconnect()' function.
+ * Reduced CPU usage while running external executables. Thanks to Remco Treffkorn.
+
+2005-08-05 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Removed 'Honor KDE single click' UI.
+ * Removed 'Honor KDE single click' from kcfg.
+ * Connect signal/slots in wlassistant.cpp, not in the .ui files.
+ * Removed 'Reconnect' context menu action. (sometimes froze the app for unknown reasons).
+
+2005-08-05 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Changes to global KDE settings take immediate effect in wlassistant.
+
+2005-08-05 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * If encryption is "off" - disable it, enable if anything else. This fixes encryption detection for drivers that return '****-****-****-**' instead of just 'on'
+
+2005-08-05 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Changed connected item's context menu (part II) so that default action is listed first.
+ * Make mouse behaviour (Single- or Double-Click) consistent with KDE global settings.
+ * 'Connect' button caption changes to 'Disconnect' when connected item is selected.
+ * Double clicking on an item connects/disconnects (when mouse settings require this behaviour).
+
+2005-08-04 RELEASE 0.5.2f
+
+2005-08-04 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Fixed sorting by channel number (e.g. 11 is now after 10, not after 1)
+ * #ifdef to check for KDE 3.4 - this should make wlassistant compile on KDE 3.3
+
+2005-08-04 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Fixed recognition of '<hidden>' ESSID.
+
+2005-08-04 RELEASE 0.5.2e
+
+2005-08-04 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Try to kill stale DHCP client instance (if any) when connection fails.
+
+2005-08-04 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Try to kill any stale DHCP client if connection fails. This seems to be dhclient only.
+
+2005-08-03 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Bring interface up before setting network parameters (esp. wep key) - this fixes problems with connecting to encrypted networks using a DHCP client.
+
+2005-08-03 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Fixed network encryption and frequency (if no channel info available) detection.
+
+2005-08-03 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Changed connected item's context menu so that default action is listed first.
+
+2005-08-03 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * automatically disconnect from current network when connecting to a different one.
+
+2005-08-02 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Try to kill running instance of DHCP client (if any) before connecting.
+
+2005-08-02 Pawel Nawrocki <pnawrocki@gmail.com>
+
+ * Added semicolons to DNS labels in the 'Edit Settings' dialog.
+
+*** version 0.5.2d:
+* FIX: Wait 1.5sec for dhcp client to quit. This fixes reconnecting problems.
+* FIX: Default action when clicking on a connected item is "Disconnect..." again.
+
+*** version 0.5.2c:
+* FIX: On some systems user got disconnected on app startup.
+
+*** version 0.5.2b:
+* FIX: Network status monitoring.
+* FIX: Wrong WEP indication
+* FIX: Few more fixes of ridiculous bugs.
+
+*** version 0.5.2a:
+* FIX: uncommented lines that were commented out for testing only.
+
+*** version 0.5.2:
+* NEW: Connection status monitoring, ask to reconnect when connection lost.
+* NEW: If no scan results returned - check if external radio switch (laptops) is turned on.
+* The above feature is tested with madwifi driver only. Please let me know if it works with different ones.
+* NEW: Connected network marked with an icon.
+* NEW: 'Don't ask again' checkboxes for some dialogs (No GUI to switch them back on yet, you will need to edit 'wlassistantrc' manually)
+* FIX: Fixed crash on startup/scan (thanks go to Remco Treffkorn for reporting this).
+* FIX: No not report half a star when quality is 0.
+* FIX: Reduced flicker when populating network list.
+* FIX: Workaround for some drivers wrongly reporting that connection is available when it is not.
+* FIX: Workaround for drivers overusing cache when returning scan results/errors (works with madwifi at least).
+* Lots of other fixes and internal improvements, code cleanup.
+
+*** version 0.5.1a (BUGFIX RELEASE):
+* NEW: Actions for a network that is connected but not configured.
+* FIX: Network is no longer shown as 'connected' if link quality is 0.
+* FIX: Tab order in "Edit Settings..." dialog.
+* FIX/ADD: The AP column is back :)
+* FIX: Changed default action of connected item to 'Reconnect'.
+
+*** version 0.5.1:
+* NEW: Dialog to edit existing network settings.
+* NEW: Basic network settings change monitoring, proper actions if needed (e.g. if an ESSID of a configured network (AP) is no longer broadcasted, you will be asked what to do).
+* NEW: connected network item always first and highlighted and bold and whatnot.
+* NEW: Dynamic quality indication for the connected network.
+* NEW: Disconnect functionality.
+* NEW: Moved to i18n strings.
+* NEW: If radio is off, user is asked if it should be switched on.
+* NEW/FIX: '<hidden>' gets replaced by ESSID if network configured (code was there in 0.5.0 but it only worked for older wireless-tools).
+* NEW: If connection fails, user is asked whether to review settings. Comment if it annoys you...
+* FIX: Rewritten item drawing code. Reduced flicker.
+* FIX: Changed dhclient command arguments. Does this one work for everybody?
+* FIX: UI refinements (thanks to Stephan Binner for pointing these out)
+* FIX: Couldn't connect after channel/frequency of a network changed.
+* FIX: Hack to prevent wrong column width setting.
+* FIX/REM: AP column removed.
+* Changed scan results parsing to use qregexp and optimised.
+* Quite a few other bug fixes, some code cleanup.
+
+* NEW: Wireless Assistant now has a CVS repository. You can find instructions on how to use it at: http://sourceforge.net/cvs/?group_id=134488
+* THANKS go to Stephan Binner for giving me some valuable hints.
+
+*** version 0.5.0:
+*** This release is a major rewrite. Loads of under-the-hood changes. Huge part of the code has been rewritten, reimplemented, organised, cleaned up, optimised and made easier to extend in the future.
+* NEW: Network profiles (finally!). Comments please!
+* NEW: Automatic path detection. No manual config.
+* NEW: Support for networks with hidden ESSIDs.
+* NEW: Context menu for each found network.
+* NEW: Sysfs based device detection (kernel 2.6.x required!).
+* NEW: Device selection combo is hidden if only one interface is found.
+* NEW: wlassistant runs using sudo to avoid permissions mess in different distros.
+* FIX: Much shorter startup time.
+* FIX: Proper connection checking.
+* REM: Real interface name lookup removed.
+* REM: Only managed networks supported (Ad-Hoc & other didn't work most of the time anyway. Will rewrite it sometime later, depending on how badly the users want it. Comment pls.).
+* REM: Removed "Scan upon startup" option - it is the default behaviour now.
+* REM: Removed "Skip encrypted networks" scanning option.
+* REM: Removed "Connection timeout" option for dhcpcd. Hardcoded to 25s.
+
+* NOTE: As for now, per network profiles can not be edited. You have to delete one and re-enter all the settings. It might be an inconvenience if you are using networks that change their parameters often, but I wanted to release and get early feedback on the whole profiles implementation.
+* NOTE: You might encounter some annoying "This function is not yet implemented" messages. Reason? See above.
+* NOTE: I am well aware that the configuration dialog needs redesigning. I'm actually considering removing it completely and implementing more per network options. Comments pls!
+* NOTE: See TODO before giving ideas or feature requests to get an overview of what is already planned for the next releases.
+
+*** 0.3.9:
+* NEW: the long-awaited dhclient support
+* NEW: button to terminate current process
+* some bugfixes and ui changes
+
+*** 0.3.8a BUGFIX RELEASE:
+* FIX: Quality detection (again, last time, hopefully)
+* FIX: some cards reported 'Managed' as 'Master'
+* FIX: ESSIDs including space now are correctly set
+* FIX: no more unnecessary errors from iwlist & others
+* FIX: kcfg file now installed in the proper location
+* FIX: path detection (now only accepts files in /usr/.. or /sbin or /bin)
+* FIX: existing dhcpcd instance now properly quits if necessary
+* some code cleanup
+
+*** version 0.3.8:
+* NEW: manual interface configuration (not DHCP)
+* NEW: Option to run custom command upon connection
+* NEW: use frequency if channel number not available
+* NEW: honor KDE single-click behaviour (option)
+* NEW: Quit upon successful connection (option)
+* NEW: Use ping to verify that connection is successfully established.
+* NEW: Case-sensitive essid matching option
+* FIX: Support for dhcpcd .pid files
+* FIX: Column width set correctly
+* FIX: Removed "Auto mode" option (shouldn't be needed)
+* FIX: All columns now movable & resizable
+* FIX: Proper quality detection / estimation (if no noise level reported)
+* FIX: Icon
+
+*** version 0.3.7:
+* NEW: app now aware of channel number (thanks to Michael Long)
+* FIX: network list is sorted properly now
+* FIX: interfaces should be now detected properly if more than 1 is present (feedback pls!)
+* FIX: 'Detect' and 'Configure...' buttons disabled while connecting
+* FIX: quality should be now reported properly on all cards (with help of Michael Long, feedback pls!)
+* FIX: mode changed to 'Managed' before scanning to ensure proper results
+* other minor fixes
+
+*** version 0.3.6:
+* NEW: Encryption status shown using an icon
+* NEW: Graphical link quality indicator
+* NEW: automatic key selection if name matches ESSID.
+* FIX: revert cursor after setting ad-hoc parameters
+* some UI refinements
+* status info if ad-hoc and/or encrypted networks skipped during scanning
+* other small fixes I don't remember.
+
+
+*** version 0.3.5:
+* NEW: WEP support (please test it, I have no wlan with WEP atm)
+* FIX: compile problem fixed, thanks to elitecodex (& his friend)
+* FIX: do not try to get info from dhcp when in ad-hoc mode.
+* changed binary name to wlassistant (shorter), so make sure to uninstall any previous version!
+* changed defaults.
+
+
+*** version 0.3.1:
+* NEW: human-readable interface names (PCI devices only, udev required).
+* NEW: option to automatically scan at startup (using first detected device)
+* FIX: signal quality now shown correctly.
+* FIX: other small fixes.
+
+****** DESCRIPTION ******
+
+Wireless Assistant (wlassistant) is a small application that allows you to connect to wireless networks.
+
+* MAIN FEATURES:
+- Managed Networks Support
+- WEP Encryption Support
+- Not Broadcasted ("hidden") ESSIDs Support
+- Per Network (AP) Configuration Profiles
+- Automatic (DHCP, both dhcpcd and dhclient) and manual configuration options.
+
+The program uses wireless-tools, route, ifconfig, dhcpcd/dhclient as its backends so they need to be installed.
+
+*** IMPORTANT: As of this release wlassistant is run using 'sudo'. As a result no 'permission denied' errors are handled. Make sure your sudo is configured properly so you can run wlassistant.
+EXAMPLE: If you want to create a e.x. 'wifi' group wich users should be allowed to use wlassistant, add the following line to your /etc/sudoers:
+ %wifi ALL=NOPASSWD: <your_kde_dir>/bin/wlassistant \ No newline at end of file
diff --git a/SConstruct b/SConstruct
new file mode 100644
index 0000000..99f08b0
--- /dev/null
+++ b/SConstruct
@@ -0,0 +1,35 @@
+#! /usr/bin/env python
+
+"""
+help -> scons -h
+compile -> scons
+clean -> scons -c
+install -> scons install
+uninstall -> scons -c install
+configure -> scons configure prefix=/tmp/ita debug=full extraincludes=/usr/local/include:/tmp/include prefix=/usr/local
+
+Run from a subdirectory -> scons -u
+The variables are saved automatically after the first run (look at cache/kde.cache.py, ..)
+"""
+
+###################################################################
+# LOAD THE ENVIRONMENT AND SET UP THE TOOLS
+###################################################################
+
+## Load the builders in config
+env = Environment(tools=['default', 'generic', 'kde', 'parser'], toolpath=['./', './bksys'])
+env.KDEuse("environ")
+
+#env['DUMPCONFIG']=1
+
+###################################################################
+# SCRIPTS FOR BUILDING THE TARGETS
+###################################################################
+env.set_build_dir('src po', 'build')
+env.xmlfile('config.bks')
+
+###################################################################
+# CONVENIENCE FUNCTIONS TO EMULATE 'make dist' and 'make distclean'
+###################################################################
+env.dist('wlassistant', '0.5.7')
+
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..dc2b74e
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+0.5.7 \ No newline at end of file
diff --git a/bksys/generic.py b/bksys/generic.py
new file mode 100644
index 0000000..6ca5cfa
--- /dev/null
+++ b/bksys/generic.py
@@ -0,0 +1,644 @@
+## Thomas Nagy, 2005
+""" Run scons -h to display the associated help, or look below """
+
+import os, re, types, sys, string, shutil, stat, glob
+import SCons.Defaults
+import SCons.Tool
+import SCons.Util
+from SCons.Script.SConscript import SConsEnvironment
+from SCons.Options import Options, PathOption
+
+def getreldir(lenv):
+ cwd=os.getcwd()
+ root=SCons.Node.FS.default_fs.Dir('#').abspath
+ return cwd.replace(root,'').lstrip('/')
+
+def dist(env, appname, version=None):
+ ### To make a tarball of your masterpiece, use 'scons dist'
+ import os
+ if 'dist' in sys.argv:
+ if not version: VERSION=os.popen("cat VERSION").read().rstrip()
+ else: VERSION=version
+ FOLDER = appname+'-'+VERSION
+ TMPFOLD = ".tmp"+FOLDER
+ ARCHIVE = FOLDER+'.tar.bz2'
+
+ ## check if the temporary directory already exists
+ os.popen('rm -rf %s %s %s' % (FOLDER, TMPFOLD, ARCHIVE) )
+
+ ## create a temporary directory
+ startdir = os.getcwd()
+
+ os.popen("mkdir -p "+TMPFOLD)
+ os.popen("cp -R * "+TMPFOLD)
+ os.popen("mv "+TMPFOLD+" "+FOLDER)
+
+ ## remove scons-local if it is unpacked
+ os.popen("rm -rf "+FOLDER+"/scons "+FOLDER+"/sconsign "+FOLDER+"/scons-local-0.96.1")
+
+ ## remove our object files first
+ os.popen("find "+FOLDER+" -name \"cache\" | xargs rm -rf")
+ os.popen("find "+FOLDER+" -name \"build\" | xargs rm -rf")
+ os.popen("find "+FOLDER+" -name \"*.pyc\" | xargs rm -f")
+
+ ## CVS cleanup
+ os.popen("find "+FOLDER+" -name \"CVS\" | xargs rm -rf")
+ os.popen("find "+FOLDER+" -name \".cvsignore\" | xargs rm -rf")
+
+ ## Subversion cleanup
+ os.popen("find %s -name .svn -type d | xargs rm -rf" % FOLDER)
+
+ ## GNU Arch cleanup
+ os.popen("find "+FOLDER+" -name \"{arch}\" | xargs rm -rf")
+ os.popen("find "+FOLDER+" -name \".arch-i*\" | xargs rm -rf")
+
+ ## Create the tarball (coloured output)
+ print "\033[92m"+"Writing archive "+ARCHIVE+"\033[0m"
+ os.popen("tar cjf "+ARCHIVE+" "+FOLDER)
+
+ ## Remove the temporary directory
+ os.popen('rm -rf '+FOLDER)
+ env.Exit(0)
+
+ if 'distclean' in sys.argv:
+ ## Remove the cache directory
+ import os, shutil
+ if os.path.isdir(env['CACHEDIR']): shutil.rmtree(env['CACHEDIR'])
+ os.popen("find . -name \"*.pyc\" | xargs rm -rf")
+ env.Exit(0)
+
+colors= {
+'BOLD' :"\033[1m",
+'RED' :"\033[91m",
+'GREEN' :"\033[92m",
+'YELLOW':"\033[1m", #"\033[93m" # unreadable on white backgrounds
+'CYAN' :"\033[96m",
+'NORMAL':"\033[0m",
+}
+
+def pprint(env, col, str, label=''):
+ if env.has_key('NOCOLORS'):
+ print "%s %s" % (str, label)
+ return
+ try: mycol=colors[col]
+ except: mycol=''
+ print "%s%s%s %s" % (mycol, str, colors['NORMAL'], label)
+
+class genobj:
+ def __init__(self, val, env):
+ if not val in "program shlib kioslave staticlib".split():
+ print "unknown genobj given: "+val
+ env.Exit(1)
+
+ self.type = val
+ self.orenv = env
+ self.env = None
+ self.executed = 0
+
+ self.target=''
+ self.src=None
+
+ self.cxxflags=''
+ self.cflags=''
+ self.includes=''
+
+ self.linkflags=''
+ self.libpaths=''
+ self.libs=''
+
+ # vars used by shlibs
+ self.vnum=''
+ self.libprefix=''
+
+ # a directory where to install the targets (optional)
+ self.instdir=''
+
+ # change the working directory before reading the targets
+ self.chdir=''
+
+ # unix permissions
+ self.perms=''
+
+ # these members are private
+ self.chdir_lock=None
+ self.dirprefix='./'
+ self.old_os_dir=''
+ self.old_fs_dir=''
+ self.p_local_shlibs=[]
+ self.p_local_staticlibs=[]
+ self.p_global_shlibs=[]
+
+ self.p_localsource=None
+ self.p_localtarget=None
+
+ # work directory
+ self.workdir_lock=None
+ self.orig_fs_dir=SCons.Node.FS.default_fs.getcwd()
+ self.not_orig_fs_dir=''
+ self.not_orig_os_dir=''
+
+ if not env.has_key('USE_THE_FORCE_LUKE'): env['USE_THE_FORCE_LUKE']=[self]
+ else: env['USE_THE_FORCE_LUKE'].append(self)
+
+ def joinpath(self, val):
+ if len(self.dirprefix)<3: return val
+ dir=self.dirprefix
+ thing=self.orenv.make_list(val)
+ files=[]
+ bdir="./"
+ if self.orenv.has_key('_BUILDDIR_'): bdir=self.orenv['_BUILDDIR_']
+ for v in thing: files.append( self.orenv.join(bdir, dir, v) )
+ return files
+
+ # a list of paths, with absolute and relative ones
+ def fixpath(self, val):
+ def reldir(dir):
+ ndir = SCons.Node.FS.default_fs.Dir(dir).srcnode().abspath
+ rootdir = SCons.Node.FS.default_fs.Dir('#').abspath
+ return ndir.replace(rootdir, '').lstrip('/')
+
+ dir=self.dirprefix
+ if not len(dir)>2: dir=reldir('.')
+
+ thing=self.orenv.make_list(val)
+ ret=[]
+ bdir="./"
+ if self.orenv.has_key('_BUILDDIR_'): bdir=self.orenv['_BUILDDIR_']
+ for v in thing:
+ #if v[:2] == "./" or v[:3] == "../":
+ # ret.append( self.orenv.join('#', bdir, dir, v) )
+ #elif v[:1] == "#" or v[:1] == "/":
+ # ret.append( v )
+ #else:
+ # ret.append( self.orenv.join('#', bdir, dir, v) )
+ if v[:1] == "#" or v[:1] == "/":
+ ret.append(v)
+ else:
+ ret.append( self.orenv.join('#', bdir, dir, v) )
+
+ return ret
+
+ def lockworkdir(self):
+ if self.workdir_lock: return
+ self.workdir_lock=1
+ self.not_orig_fs_dir=SCons.Node.FS.default_fs.getcwd()
+ self.not_orig_os_dir=os.getcwd()
+ SCons.Node.FS.default_fs.chdir( self.orig_fs_dir, change_os_dir=1)
+
+ def unlockworkdir(self):
+ if not self.workdir_lock: return
+ SCons.Node.FS.default_fs.chdir( self.not_orig_fs_dir, change_os_dir=0)
+ os.chdir(self.not_orig_os_dir)
+ self.workdir_lock=None
+
+ def execute(self):
+ if self.executed: return
+
+ if self.orenv.has_key('DUMPCONFIG'):
+ self.xml()
+ self.executed=1
+ return
+
+ self.env = self.orenv.Copy()
+
+ if not self.p_localtarget: self.p_localtarget = self.joinpath(self.target)
+ if not self.p_localsource: self.p_localsource = self.joinpath(self.src)
+
+ if (not self.src or len(self.src) == 0) and not self.p_localsource:
+ self.env.pprint('RED',"no source file given to object - self.src")
+ self.env.Exit(1)
+ if not self.target:
+ self.env.pprint('RED',"no target given to object - self.target")
+ self.env.Exit(1)
+ if not self.env.has_key('nosmart_includes'): self.env.AppendUnique(CPPPATH=['./'])
+ if self.type == "kioslave": self.libprefix=''
+
+ if len(self.includes)>0: self.env.AppendUnique(CPPPATH=self.fixpath(self.includes))
+ if len(self.cxxflags)>0: self.env.AppendUnique(CXXFLAGS=self.env.make_list(self.cxxflags))
+ if len(self.cflags)>0: self.env.AppendUnique(CCFLAGS=self.env.make_list(self.cflags))
+
+ llist=self.env.make_list(self.libs)
+ lext=['.so', '.la']
+ sext='.a'.split()
+ for l in llist:
+ sal=SCons.Util.splitext(l)
+ if len(sal)>1:
+ if sal[1] in lext: self.p_local_shlibs.append(self.fixpath(sal[0]+'.so')[0])
+ elif sal[1] in sext: self.p_local_staticlibs.append(self.fixpath(sal[0]+'.a')[0])
+ else: self.p_global_shlibs.append(l)
+
+ if len(self.p_global_shlibs)>0: self.env.AppendUnique(LIBS=self.p_global_shlibs)
+ if len(self.libpaths)>0: self.env.PrependUnique(LIBPATH=self.fixpath(self.libpaths))
+ if len(self.linkflags)>0: self.env.PrependUnique(LINKFLAGS=self.env.make_list(self.linkflags))
+ if len(self.p_local_shlibs)>0:
+ self.env.link_local_shlib(self.p_local_shlibs)
+ if len(self.p_local_staticlibs)>0:
+ self.env.link_local_staticlib(self.p_local_staticlibs)
+
+ # the target to return - no more self.env modification is allowed after this part
+ ret=None
+ if self.type=='shlib' or self.type=='kioslave':
+ ret=self.env.bksys_shlib(self.p_localtarget, self.p_localsource, self.instdir,
+ self.libprefix, self.vnum)
+ elif self.type=='program':
+ ret=self.env.Program(self.p_localtarget, self.p_localsource)
+ if not self.env.has_key('NOAUTOINSTALL'):
+ ins=self.env.bksys_install(self.instdir, ret)
+ if ins and self.perms:
+ for i in ins: self.env.AddPostAction(ins, self.env.Chmod(str(i), self.perms))
+ elif self.type=='staticlib':
+ ret=self.env.StaticLibrary(self.p_localtarget, self.p_localsource)
+
+ # we link the program against a shared library made locally, add the dependency
+ if len(self.p_local_shlibs)>0:
+ if ret: self.env.Depends( ret, self.p_local_shlibs )
+ if len(self.p_local_staticlibs)>0:
+ if ret: self.env.Depends( ret, self.p_local_staticlibs )
+
+ self.executed=1
+
+## Copy function that honors symlinks
+def copy_bksys(dest, source, env):
+ if os.path.islink(source):
+ #print "symlinking "+source+" "+dest
+ if os.path.islink(dest):
+ os.unlink(dest)
+ os.symlink(os.readlink(source), dest)
+ else:
+ shutil.copy2(source, dest)
+ st=os.stat(source)
+ os.chmod(dest, stat.S_IMODE(st[stat.ST_MODE]) | stat.S_IWRITE)
+ return 0
+
+## Return a list of things
+def make_list(env, s):
+ if type(s) is types.ListType: return s
+ else:
+ try: return s.split()
+ except AttributeError: return s
+
+def join(lenv, s1, s2, s3=None, s4=None):
+ if s4 and s3: return lenv.join(s1, s2, lenv.join(s3, s4))
+ if s3 and s2: return lenv.join(s1, lenv.join(s2, s3))
+ elif not s2: return s1
+ # having s1, s2
+ #print "path1 is "+s1+" path2 is "+s2+" "+os.path.join(s1,string.lstrip(s2,'/'))
+ if not s1: s1="/"
+ return os.path.join(s1,string.lstrip(s2,'/'))
+
+def exists(env):
+ return true
+
+# record a dump of the environment
+bks_dump='<?xml version="1.0" encoding="UTF-8"?>\n<bksys version="1">\n'
+def add_dump(nenv, str):
+ global bks_dump
+ if str: bks_dump+=str
+def get_dump(nenv):
+ if not nenv.has_key('DUMPCONFIG'):
+ nenv.pprint('RED','WARNING: trying to get a dump while DUMPCONFIG is not set - this will not work')
+ global bks_dump
+ return bks_dump+"</bksys>\n"
+
+def generate(env):
+ ## Bksys requires scons 0.96
+ env.EnsureSConsVersion(0, 96)
+
+ SConsEnvironment.pprint = pprint
+ SConsEnvironment.make_list = make_list
+ SConsEnvironment.join = join
+ SConsEnvironment.dist = dist
+ SConsEnvironment.getreldir = getreldir
+ SConsEnvironment.add_dump = add_dump
+ SConsEnvironment.get_dump = get_dump
+
+ env['HELP']=0
+ if '--help' in sys.argv or '-h' in sys.argv or 'help' in sys.argv: env['HELP']=1
+ if env['HELP']:
+ p=env.pprint
+ p('BOLD','*** Instructions ***')
+ p('BOLD','--------------------')
+ p('BOLD','* scons ','to compile')
+ p('BOLD','* scons -j4 ','to compile with several instances')
+ p('BOLD','* scons install ','to compile and install')
+ p('BOLD','* scons -c install','to uninstall')
+ p('BOLD','\n*** Generic options ***')
+ p('BOLD','--------------------')
+ p('BOLD','* debug ','debug=1 (-g) or debug=full (-g3, slower) else use environment CXXFLAGS, or -O2 by default')
+ p('BOLD','* prefix ','the installation path')
+ p('BOLD','* extraincludes','a list of paths separated by ":"')
+ p('BOLD','* scons configure debug=full prefix=/usr/local extraincludes=/tmp/include:/usr/local')
+ p('BOLD','* scons install prefix=/opt/local DESTDIR=/tmp/blah\n')
+ return
+
+ ## Global cache directory
+ # Put all project files in it so a rm -rf cache will clean up the config
+ if not env.has_key('CACHEDIR'): env['CACHEDIR'] = env.join(os.getcwd(),'/cache/')
+ if not os.path.isdir(env['CACHEDIR']): os.mkdir(env['CACHEDIR'])
+
+ ## SCons cache directory
+ # This avoids recompiling the same files over and over again:
+ # very handy when working with cvs
+ if os.getuid() != 0: env.CacheDir(os.getcwd()+'/cache/objects')
+
+ # Avoid spreading .sconsign files everywhere - keep this line
+ env.SConsignFile(env['CACHEDIR']+'/scons_signatures')
+
+ def makeHashTable(args):
+ table = { }
+ for arg in args:
+ if len(arg) > 1:
+ lst=arg.split('=')
+ if len(lst) < 2: continue
+ key=lst[0]
+ value=lst[1]
+ if len(key) > 0 and len(value) >0: table[key] = value
+ return table
+
+ env['ARGS']=makeHashTable(sys.argv)
+
+ SConsEnvironment.Chmod = SCons.Action.ActionFactory(os.chmod, lambda dest, mode: 'Chmod("%s", 0%o)' % (dest, mode))
+
+ ## Special trick for installing rpms ...
+ env['DESTDIR']=''
+ if 'install' in sys.argv:
+ dd=''
+ if os.environ.has_key('DESTDIR'): dd=os.environ['DESTDIR']
+ if not dd:
+ if env['ARGS'] and env['ARGS'].has_key('DESTDIR'): dd=env['ARGS']['DESTDIR']
+ if dd:
+ env['DESTDIR']=dd
+ env.pprint('CYAN','** Enabling DESTDIR for the project ** ',env['DESTDIR'])
+
+ ## install symlinks for shared libraries properly
+ env['INSTALL'] = copy_bksys
+
+ ## Use the same extension .o for all object files
+ env['STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME'] = 1
+
+ ## no colors
+ if os.environ.has_key('NOCOLORS'): env['NOCOLORS']=1
+
+ ## load the options
+ cachefile=env['CACHEDIR']+'generic.cache.py'
+ opts = Options(cachefile)
+ opts.AddOptions(
+ ( 'GENCCFLAGS', 'C flags' ),
+ ( 'BKS_DEBUG', 'debug level: full, trace, or just something' ),
+ ( 'GENCXXFLAGS', 'additional cxx flags for the project' ),
+ ( 'GENLINKFLAGS', 'additional link flags' ),
+ ( 'PREFIX', 'prefix for installation' ),
+ ( 'EXTRAINCLUDES', 'extra include paths for the project' ),
+ ( 'ISCONFIGURED', 'is the project configured' ),
+ )
+ opts.Update(env)
+
+ # Use this to avoid an error message 'how to make target configure ?'
+ env.Alias('configure', None)
+
+ # Check if the following command line arguments have been given
+ # and set a flag in the environment to show whether or not it was
+ # given.
+ if 'install' in sys.argv: env['_INSTALL']=1
+ else: env['_INSTALL']=0
+ if 'configure' in sys.argv: env['_CONFIGURE']=1
+ else: env['_CONFIGURE']=0
+
+ # Configure the environment if needed
+ if not env['HELP'] and (env['_CONFIGURE'] or not env.has_key('ISCONFIGURED')):
+ # be paranoid, unset existing variables
+ for var in ['BKS_DEBUG', 'GENCXXFLAGS', 'GENCCFLAGS', 'GENLINKFLAGS', 'PREFIX', 'EXTRAINCLUDES', 'ISCONFIGURED', 'EXTRAINCLUDES']:
+ if env.has_key(var): env.__delitem__(var)
+
+ if env['ARGS'].get('debug', None):
+ env['BKS_DEBUG'] = env['ARGS'].get('debug', None)
+ env.pprint('CYAN','** Enabling debug for the project **')
+ else:
+ if os.environ.has_key('CXXFLAGS'):
+ # user-defined flags (gentooers will be elighted)
+ env['GENCXXFLAGS'] = SCons.Util.CLVar( os.environ['CXXFLAGS'] )
+ env.Append( GENCXXFLAGS = ['-DNDEBUG', '-DNO_DEBUG'] )
+ else:
+ env.Append(GENCXXFLAGS = ['-O2', '-DNDEBUG', '-DNO_DEBUG'])
+
+ if os.environ.has_key('CFLAGS'): env['GENCCFLAGS'] = SCons.Util.CLVar( os.environ['CFLAGS'] )
+
+ ## FreeBSD settings (contributed by will at freebsd dot org)
+ if os.uname()[0] == "FreeBSD":
+ if os.environ.has_key('PTHREAD_LIBS'):
+ env.AppendUnique( GENLINKFLAGS = SCons.Util.CLVar( os.environ['PTHREAD_LIBS'] ) )
+ else:
+ syspf = os.popen('/sbin/sysctl kern.osreldate')
+ osreldate = int(syspf.read().split()[1])
+ syspf.close()
+ if osreldate < 500016:
+ env.AppendUnique( GENLINKFLAGS = ['-pthread'])
+ env.AppendUnique( GENCXXFLAGS = ['-D_THREAD_SAFE'])
+ elif osreldate < 502102:
+ env.AppendUnique( GENLINKFLAGS = ['-lc_r'])
+ env.AppendUnique( GENCXXFLAGS = ['-D_THREAD_SAFE'])
+ else:
+ env.AppendUnique( GENLINKFLAGS = ['-pthread'])
+
+ # User-specified prefix
+ if env['ARGS'].has_key('prefix'):
+ env['PREFIX'] = os.path.abspath( env['ARGS'].get('prefix', '') )
+ env.pprint('CYAN','** installation prefix for the project set to:',env['PREFIX'])
+
+ # User-specified include paths
+ env['EXTRAINCLUDES'] = env['ARGS'].get('extraincludes', None)
+ if env['EXTRAINCLUDES']:
+ env.pprint('CYAN','** extra include paths for the project set to:',env['EXTRAINCLUDES'])
+
+ env['ISCONFIGURED']=1
+
+ # And finally save the options in the cache
+ opts.Save(cachefile, env)
+
+ def bksys_install(lenv, subdir, files, destfile=None, perms=None):
+ """ Install files on 'scons install' """
+ if not env['_INSTALL']: return
+ basedir = env['DESTDIR']
+ install_list=None
+ if not destfile: install_list = env.Install(lenv.join(basedir,subdir), lenv.make_list(files))
+ elif subdir: install_list = env.InstallAs(lenv.join(basedir,subdir,destfile), lenv.make_list(files))
+ else: install_list = env.InstallAs(lenv.join(basedir,destfile), lenv.make_list(files))
+ if perms and install_list: lenv.AddPostAction(install_list, lenv.Chmod(install_list, perms))
+ env.Alias('install', install_list)
+ return install_list
+
+ def build_la_file(target, source, env):
+ """ Writes a .la file, used by libtool """
+ dest=open(target[0].path, 'w')
+ sname=source[0].name
+ dest.write("# Generated by ltmain.sh - GNU libtool 1.5.18 - (pwn3d by bksys)\n#\n#\n")
+ if len(env['BKSYS_VNUM'])>0:
+ vnum=env['BKSYS_VNUM']
+ nums=vnum.split('.')
+ src=source[0].name
+ name = src.split('so.')[0] + 'so'
+ strn = src+" "+name+"."+str(nums[0])+" "+name
+ dest.write("dlname='%s'\n" % (name+'.'+str(nums[0])) )
+ dest.write("library_names='%s'\n" % (strn) )
+ else:
+ dest.write("dlname='%s'\n" % sname)
+ dest.write("library_names='%s %s %s'\n" % (sname, sname, sname) )
+ dest.write("old_library=''\ndependency_libs=''\ncurrent=0\n")
+ dest.write("age=0\nrevision=0\ninstalled=yes\nshouldnotlink=no\n")
+ dest.write("dlopen=''\ndlpreopen=''\n")
+ dest.write("libdir='%s'" % env['BKSYS_DESTDIR'])
+ dest.close()
+ return 0
+
+ def string_la_file(target, source, env):
+ print "building '%s' from '%s'" % (target[0].name, source[0].name)
+ la_file = env.Action(build_la_file, string_la_file, ['BKSYS_VNUM', 'BKSYS_DESTDIR'])
+ env['BUILDERS']['LaFile'] = env.Builder(action=la_file,suffix='.la',src_suffix=env['SHLIBSUFFIX'])
+
+ ## Function for building shared libraries
+ def bksys_shlib(lenv, ntarget, source, libdir, libprefix='lib', vnum='', noinst=None):
+ """ Install a shared library.
+
+ Installs a shared library, with or without a version number, and create a
+ .la file for use by libtool.
+
+ If library version numbering is to be used, the version number
+ should be passed as a period-delimited version number (e.g.
+ vnum = '1.2.3'). This causes the library to be installed
+ with its full version number, and with symlinks pointing to it.
+
+ For example, for libfoo version 1.2.3, install the file
+ libfoo.so.1.2.3, and create symlinks libfoo.so and
+ libfoo.so.1 that point to it.
+ """
+ # parameter can be a list
+ if type(ntarget) is types.ListType: target=ntarget[0]
+ else: target=ntarget
+
+ thisenv = lenv.Copy() # copying an existing environment is cheap
+ thisenv['BKSYS_DESTDIR']=libdir
+ thisenv['BKSYS_VNUM']=vnum
+ thisenv['SHLIBPREFIX']=libprefix
+
+ if len(vnum)>0:
+ thisenv['SHLIBSUFFIX']='.so.'+vnum
+ thisenv.Depends(target, thisenv.Value(vnum))
+ num=vnum.split('.')[0]
+ lst=target.split('/')
+ tname=lst[len(lst)-1]
+ libname=tname.split('.')[0]
+ thisenv.AppendUnique(LINKFLAGS = ["-Wl,--soname=%s.so.%s" % (libname, num)] )
+
+ # Fix against a scons bug - shared libs and ordinal out of range(128)
+ if type(source) is types.ListType:
+ src2=[]
+ for i in source: src2.append( str(i) )
+ source=src2
+
+ library_list = thisenv.SharedLibrary(target, source)
+ lafile_list = thisenv.LaFile(target, library_list)
+
+ ## Install the libraries automatically
+ if not thisenv.has_key('NOAUTOINSTALL') and not noinst:
+ thisenv.bksys_install(libdir, library_list)
+ thisenv.bksys_install(libdir, lafile_list)
+
+ ## Handle the versioning
+ if len(vnum)>0:
+ nums=vnum.split('.')
+ symlinkcom = ('cd $TARGET.dir && rm -f $TARGET.name && ln -s $SOURCE.name $TARGET.name')
+ tg = target+'.so.'+vnum
+ nm1 = target+'.so'
+ nm2 = target+'.so.'+nums[0]
+ thisenv.Command(nm1, tg, symlinkcom)
+ thisenv.Command(nm2, tg, symlinkcom)
+ thisenv.bksys_install(libdir, nm1)
+ thisenv.bksys_install(libdir, nm2)
+ return library_list
+
+ # Declare scons scripts to process
+ def subdirs(lenv, folderlist):
+ flist=lenv.make_list(folderlist)
+ for i in flist:
+ lenv.SConscript(lenv.join(i, 'SConscript'))
+ # take all objects - warn those who are not already executed
+ if lenv.has_key('USE_THE_FORCE_LUKE'):
+ for ke in lenv['USE_THE_FORCE_LUKE']:
+ if ke.executed: continue
+ #lenv.pprint('GREEN',"you forgot to execute object "+ke.target)
+ ke.lockworkdir()
+ ke.execute()
+ ke.unlockworkdir()
+
+ def link_local_shlib(lenv, str):
+ """ Links against a shared library made in the project """
+ lst = lenv.make_list(str)
+ for file in lst:
+ import re
+ reg=re.compile("(.*)/lib(.*).(la|so)$")
+ result=reg.match(file)
+ if not result:
+ reg = re.compile("(.*)/lib(.*).(la|so)\.(.)")
+ result=reg.match(file)
+ if not result:
+ print "Unknown la file given "+file
+ continue
+ dir = result.group(1)
+ link = result.group(2)
+ else:
+ dir = result.group(1)
+ link = result.group(2)
+
+ lenv.AppendUnique(LIBS = [link])
+ lenv.PrependUnique(LIBPATH = [dir])
+
+ def link_local_staticlib(lenv, str):
+ """ Links against a shared library made in the project """
+ lst = lenv.make_list(str)
+ for file in lst:
+ import re
+ reg = re.compile("(.*)/(lib.*.a)")
+ result = reg.match(file)
+ if not result:
+ print "Unknown archive file given "+file
+ continue
+ f=SCons.Node.FS.default_fs.File(file)
+ lenv.Append(LINKFLAGS=[f.path])
+
+ def set_build_dir(lenv, dirs, buildto):
+ lenv.SetOption('duplicate', 'soft-copy')
+ lenv['_BUILDDIR_']=buildto
+ ldirs=lenv.make_list(dirs)
+ for dir in ldirs:
+ lenv.BuildDir(buildto+os.path.sep+dir, dir)
+
+ #valid_targets = "program shlib kioslave staticlib".split()
+ SConsEnvironment.bksys_install = bksys_install
+ SConsEnvironment.bksys_shlib = bksys_shlib
+ SConsEnvironment.subdirs = subdirs
+ SConsEnvironment.link_local_shlib = link_local_shlib
+ SConsEnvironment.link_local_staticlib = link_local_staticlib
+ SConsEnvironment.genobj=genobj
+ SConsEnvironment.set_build_dir=set_build_dir
+
+ if env.has_key('GENCXXFLAGS'): env.AppendUnique( CPPFLAGS = env['GENCXXFLAGS'] )
+ if env.has_key('GENCCFLAGS'): env.AppendUnique( CCFLAGS = env['GENCCFLAGS'] )
+ if env.has_key('GENLINKFLAGS'): env.AppendUnique( LINKFLAGS = env['GENLINKFLAGS'] )
+
+ if env.has_key('BKS_DEBUG'):
+ if (env['BKS_DEBUG'] == "full"):
+ env.AppendUnique(CXXFLAGS = ['-DDEBUG', '-g3', '-Wall'])
+ elif (env['BKS_DEBUG'] == "trace"):
+ env.AppendUnique(
+ LINKFLAGS=env.Split("-lmrwlog4cxxconfiguration -lmrwautofunctiontracelog4cxx -finstrument-functions"),
+ CXXFLAGS=env.Split("-DDEBUG -Wall -finstrument-functions -g3 -O0"))
+ else:
+ env.AppendUnique(CXXFLAGS = ['-DDEBUG', '-g', '-Wall'])
+
+ if env.has_key('EXTRAINCLUDES'):
+ if env['EXTRAINCLUDES']:
+ incpaths = []
+ for dir in str(env['EXTRAINCLUDES']).split(':'): incpaths.append( dir )
+ env.Append(CPPPATH = incpaths)
+
+ env.Export('env')
diff --git a/bksys/kde.py b/bksys/kde.py
new file mode 100644
index 0000000..1055a7e
--- /dev/null
+++ b/bksys/kde.py
@@ -0,0 +1,884 @@
+# Thomas Nagy, 2005 <tnagy2^8@yahoo.fr>
+""" Run scons -h to display the associated help, or look below """
+
+import os, re, types
+from SCons.Script.SConscript import SConsEnvironment
+
+# Returns the name of the shared object (eg: libkdeui.so.4)
+# referenced by a libtool archive (like libkdeui.la)
+def getSOfromLA(lafile):
+ contents = open(lafile, 'r').read()
+ match = re.search("^dlname='([^']*)'$", contents, re.M)
+ if match: return match.group(1)
+ return None
+
+# A helper, needed .. everywhere
+def KDEuse(lenv, flags):
+ if lenv['HELP']: lenv.Exit(0)
+
+ _flags=lenv.make_list(flags)
+ if 'environ' in _flags:
+ ## The scons developers advise against using this but it is mostly innocuous :)
+ lenv.AppendUnique( ENV = os.environ )
+ if not 'lang_qt' in _flags:
+ ## Use this define if you are using the kde translation scheme (.po files)
+ lenv.Append( CPPFLAGS = '-DQT_NO_TRANSLATION' )
+ if 'rpath' in _flags:
+ ## Use this to set rpath - this may cause trouble if folders are moved (chrpath)
+ kdelibpaths=[]
+ if lenv['KDELIBPATH'] == lenv['KDELIB']: kdelibpaths = [lenv['KDELIB']]
+ else: kdelibpaths = [lenv['KDELIBPATH'], lenv['KDELIB']]
+ lenv.Append( RPATH = [lenv['QTLIBPATH'], lenv['KDEMODULE']]+kdelibpaths )
+ if 'thread' in _flags:
+ ## Uncomment the following if you need threading support
+ lenv.KDEaddflags_cxx( ['-DQT_THREAD_SUPPORT', '-D_REENTRANT'] )
+ if 'fastmoc' in _flags:
+ lenv['BKSYS_FASTMOC']=1
+ if 'dump' in _flags:
+ lenv['DUMPCONFIG']=1
+ if not 'nohelp' in _flags:
+ if lenv['_CONFIGURE'] or lenv['HELP']: lenv.Exit(0)
+ if not 'nosmart' or not lenv.has_key('nosmart_includes'):
+ lenv.AppendUnique(CPPPATH=['#/'])
+ lst=[]
+ if lenv.has_key('USE_THE_FORCE_LUKE'):
+ lst=lenv['USE_THE_FORCE_LUKE']
+ lenv.__delitem__('USE_THE_FORCE_LUKE')
+ for v in lst: v.execute()
+ else: lenv['nosmart_includes']=1
+
+ ## To use kdDebug(intvalue)<<"some trace"<<endl; you need to define -DDEBUG
+ ## it is done in admin/generic.py automatically when you do scons configure debug=1
+
+def exists(env):
+ return True
+
+def detect_kde(env):
+ """ Detect the qt and kde environment using kde-config mostly """
+ def getpath(varname):
+ if not env.has_key('ARGS'): return None
+ v=env['ARGS'].get(varname, None)
+ if v: v=os.path.abspath(v)
+ return v
+
+ def getstr(varname):
+ if env.has_key('ARGS'): return env['ARGS'].get(varname, '')
+ return ''
+
+ prefix = getpath('prefix')
+ execprefix = getpath('execprefix')
+ datadir = getpath('datadir')
+ libdir = getpath('libdir')
+
+ kdedir = getstr('kdedir')
+ kdeincludes = getpath('kdeincludes')
+ kdelibs = getpath('kdelibs')
+
+ qtdir = getstr('qtdir')
+ qtincludes = getpath('qtincludes')
+ qtlibs = getpath('qtlibs')
+ libsuffix = getstr('libsuffix')
+
+ p=env.pprint
+
+ if libdir: libdir = libdir+libsuffix
+
+ ## Detect the kde libraries
+ print "Checking for kde-config : ",
+ str="which kde-config 2>/dev/null"
+ if kdedir: str="which %s 2>/dev/null" % (kdedir+'/bin/kde-config')
+ kde_config = os.popen(str).read().strip()
+ if len(kde_config):
+ p('GREEN', 'kde-config was found as '+kde_config)
+ else:
+ if kdedir: p('RED','kde-config was NOT found in the folder given '+kdedir)
+ else: p('RED','kde-config was NOT found in your PATH')
+ print "Make sure kde is installed properly"
+ print "(missing package kdebase-devel?)"
+ env.Exit(1)
+ if kdedir: env['KDEDIR']=kdedir
+ else: env['KDEDIR'] = os.popen(kde_config+' -prefix').read().strip()
+
+ print "Checking for kde version : ",
+ kde_version = os.popen(kde_config+" --version|grep KDE").read().strip().split()[1]
+ if int(kde_version[0]) != 3 or int(kde_version[2]) < 2:
+ p('RED', kde_version)
+ p('RED',"Your kde version can be too old")
+ p('RED',"Please make sure kde is at least 3.2")
+ else:
+ p('GREEN',kde_version)
+
+ ## Detect the qt library
+ print "Checking for the qt library : ",
+ if not qtdir: qtdir = os.getenv("QTDIR")
+ if qtdir:
+ p('GREEN',"qt is in "+qtdir)
+ else:
+ try:
+ tmplibdir = os.popen(kde_config+' --expandvars --install lib').read().strip()
+ libkdeuiSO = env.join(tmplibdir, getSOfromLA(env.join(tmplibdir,'/libkdeui.la')) )
+ m = re.search('(.*)/lib/libqt.*', os.popen('ldd ' + libkdeuiSO + ' | grep libqt').read().strip().split()[2])
+ except: m=None
+ if m:
+ qtdir = m.group(1)
+ p('YELLOW',"qt was found as "+m.group(1))
+ else:
+ p('RED','qt was not found')
+ p('RED','Please set QTDIR first (/usr/lib/qt3?) or try scons -h for more options')
+ env.Exit(1)
+ env['QTDIR'] = qtdir.strip()
+
+ ## Find the necessary programs uic and moc
+ print "Checking for uic : ",
+ uic = qtdir + "/bin/uic"
+ if os.path.isfile(uic):
+ p('GREEN',"uic was found as "+uic)
+ else:
+ uic = os.popen("which uic 2>/dev/null").read().strip()
+ if len(uic):
+ p('YELLOW',"uic was found as "+uic)
+ else:
+ uic = os.popen("which uic 2>/dev/null").read().strip()
+ if len(uic):
+ p('YELLOW',"uic was found as "+uic)
+ else:
+ p('RED',"uic was not found - set QTDIR put it in your PATH ?")
+ env.Exit(1)
+ env['QT_UIC'] = uic
+
+ print "Checking for moc : ",
+ moc = qtdir + "/bin/moc"
+ if os.path.isfile(moc):
+ p('GREEN',"moc was found as "+moc)
+ else:
+ moc = os.popen("which moc 2>/dev/null").read().strip()
+ if len(moc):
+ p('YELLOW',"moc was found as "+moc)
+ elif os.path.isfile("/usr/share/qt3/bin/moc"):
+ moc = "/usr/share/qt3/bin/moc"
+ p('YELLOW',"moc was found as "+moc)
+ else:
+ p('RED',"moc was not found - set QTDIR or put it in your PATH ?")
+ env.Exit(1)
+ env['QT_MOC'] = moc
+
+ ## check for the qt and kde includes
+ print "Checking for the qt includes : ",
+ if qtincludes and os.path.isfile(qtincludes + "/qlayout.h"):
+ # The user told where to look for and it looks valid
+ p('GREEN',"ok "+qtincludes)
+ else:
+ if os.path.isfile(qtdir + "/include/qlayout.h"):
+ # Automatic detection
+ p('GREEN',"ok "+qtdir+"/include/")
+ qtincludes = qtdir + "/include/"
+ elif os.path.isfile("/usr/include/qt3/qlayout.h"):
+ # Debian probably
+ p('YELLOW','the qt headers were found in /usr/include/qt3/')
+ qtincludes = "/usr/include/qt3"
+ else:
+ p('RED',"the qt headers were not found")
+ env.Exit(1)
+
+ print "Checking for the kde includes : ",
+ kdeprefix = os.popen(kde_config+" --prefix").read().strip()
+ if not kdeincludes:
+ kdeincludes = kdeprefix+"/include/"
+ if os.path.isfile(kdeincludes + "/klineedit.h"):
+ p('GREEN',"ok "+kdeincludes)
+ else:
+ if os.path.isfile(kdeprefix+"/include/kde/klineedit.h"):
+ # Debian, Fedora probably
+ p('YELLOW',"the kde headers were found in %s/include/kde/"%kdeprefix)
+ kdeincludes = kdeprefix + "/include/kde/"
+ else:
+ p('RED',"The kde includes were NOT found")
+ env.Exit(1)
+
+ # kde-config options
+ kdec_opts = {'KDEBIN' : 'exe', 'KDEAPPS' : 'apps',
+ 'KDEDATA' : 'data', 'KDEICONS' : 'icon',
+ 'KDEMODULE' : 'module', 'KDELOCALE' : 'locale',
+ 'KDEKCFG' : 'kcfg', 'KDEDOC' : 'html',
+ 'KDEMENU' : 'apps', 'KDEXDG' : 'xdgdata-apps',
+ 'KDEMIME' : 'mime', 'KDEXDGDIR' : 'xdgdata-dirs',
+ 'KDESERV' : 'services','KDESERVTYPES' : 'servicetypes',
+ 'KDEINCLUDE': 'include' }
+
+ if prefix:
+ ## use the user-specified prefix
+ if not execprefix: execprefix=prefix
+ if not datadir: datadir=env.join(prefix,'share')
+ if not libdir: libdir=env.join(execprefix, "lib"+libsuffix)
+
+ subst_vars = lambda x: x.replace('${exec_prefix}', execprefix)\
+ .replace('${datadir}', datadir)\
+ .replace('${libdir}', libdir)\
+ .replace('${prefix}', prefix)
+ debian_fix = lambda x: x.replace('/usr/share', '${datadir}')
+ env['PREFIX'] = prefix
+ env['KDELIB'] = libdir
+ for (var, option) in kdec_opts.items():
+ dir = os.popen(kde_config+' --install ' + option).read().strip()
+ if var == 'KDEDOC': dir = debian_fix(dir)
+ env[var] = subst_vars(dir)
+
+ else:
+ env['PREFIX'] = os.popen(kde_config+' --expandvars --prefix').read().strip()
+ env['KDELIB'] = os.popen(kde_config+' --expandvars --install lib').read().strip()
+ for (var, option) in kdec_opts.items():
+ dir = os.popen(kde_config+' --expandvars --install ' + option).read().strip()
+ env[var] = dir
+
+ env['QTPLUGINS']=os.popen(kde_config+' --expandvars --install qtplugins').read().strip()
+
+ ## kde libs and includes
+ env['KDEINCLUDEPATH']=kdeincludes
+ if not kdelibs:
+ kdelibs=os.popen(kde_config+' --expandvars --install lib').read().strip()
+ env['KDELIBPATH']=kdelibs
+
+ ## qt libs and includes
+ env['QTINCLUDEPATH']=qtincludes
+ if not qtlibs:
+ qtlibs=qtdir+"/lib"+libsuffix
+ env['QTLIBPATH']=qtlibs
+
+def generate(env):
+ """"Set up the qt and kde environment and builders - the moc part is difficult to understand """
+
+ # attach this function immediately
+ SConsEnvironment.KDEuse=KDEuse
+
+ if env['HELP']:
+ p=env.pprint
+ p('BOLD','*** KDE options ***')
+ p('BOLD','--------------------')
+ p('BOLD','* prefix ','base install path, ie: /usr/local')
+ p('BOLD','* execprefix ','install path for binaries, ie: /usr/bin')
+ p('BOLD','* datadir ','install path for the data, ie: /usr/local/share')
+ p('BOLD','* libdir ','install path for the libs, ie: /usr/lib')
+
+ p('BOLD','* qtdir ','base of the kde libraries')
+ p('BOLD','* kdedir ','base of the qt libraries')
+
+ p('BOLD','* libsuffix ','suffix of libraries on amd64, ie: 64, 32')
+ p('BOLD','* kdeincludes','kde includes path (/usr/include/kde on debian, ..)')
+ p('BOLD','* qtincludes ','qt includes path (/usr/include/qt on debian, ..)')
+ p('BOLD','* kdelibs ','kde libraries path, for linking the programs')
+ p('BOLD','* qtlibs ','qt libraries path, for linking the program')
+
+ p('BOLD','* scons configure libdir=/usr/local/lib qtincludes=/usr/include/qt\n')
+ return
+
+ import SCons.Defaults
+ import SCons.Tool
+ import SCons.Util
+ import SCons.Node
+
+ def reldir(dir):
+ ndir = SCons.Node.FS.default_fs.Dir(dir).srcnode().abspath
+ rootdir = SCons.Node.FS.default_fs.Dir('#').abspath
+ return ndir.replace(rootdir, '').lstrip('/')
+
+ def relfile(file):
+ nfile = SCons.Node.FS.default_fs.File(file).srcnode().abspath
+ rootdir = SCons.Node.FS.default_fs.Dir('#').abspath
+ return nfile.replace(rootdir, '').lstrip('/')
+
+ CLVar = SCons.Util.CLVar
+ splitext = SCons.Util.splitext
+ Builder = SCons.Builder.Builder
+
+ # Detect the environment - replaces ./configure implicitely and store the options into a cache
+ from SCons.Options import Options
+ cachefile=env['CACHEDIR']+'kde.cache.py'
+ opts = Options(cachefile)
+ opts.AddOptions(
+ ('PREFIX', 'root of the program installation'),
+
+ ('QTDIR', ''),
+ ('QTLIBPATH', 'path to the qt libraries'),
+ ('QTINCLUDEPATH', 'path to the qt includes'),
+ ('QT_UIC', 'uic command'),
+ ('QT_MOC', 'moc command'),
+ ('QTPLUGINS', 'uic executable command'),
+
+ ('KDEDIR', ''),
+ ('KDELIBPATH', 'path to the installed kde libs'),
+ ('KDEINCLUDEPATH', 'path to the installed kde includes'),
+
+ ('KDEBIN', 'inst path of the kde binaries'),
+ ('KDEINCLUDE', 'inst path of the kde include files'),
+ ('KDELIB', 'inst path of the kde libraries'),
+ ('KDEMODULE', 'inst path of the parts and libs'),
+ ('KDEDATA', 'inst path of the application data'),
+ ('KDELOCALE', ''), ('KDEDOC', ''), ('KDEKCFG', ''),
+ ('KDEXDG', ''), ('KDEXDGDIR', ''), ('KDEMENU', ''),
+ ('KDEMIME', ''), ('KDEICONS', ''), ('KDESERV', ''),
+ ('KDESERVTYPES', ''), ('KDEAPPS', ''),
+ )
+ opts.Update(env)
+
+ def getInstDirForResType(lenv,restype):
+ if len(restype) == 0 or not lenv.has_key(restype):
+ lenv.pprint('RED',"unknown resource type "+restype)
+ lenv.Exit(1)
+ else: instdir = lenv[restype]
+
+ if env['ARGS'] and env['ARGS'].has_key('prefix'):
+ instdir = instdir.replace(lenv['PREFIX'], env['ARGS']['prefix'])
+ return instdir
+
+ # reconfigure when things are missing
+ if not env['HELP'] and (env['_CONFIGURE'] or not env.has_key('QTDIR') or not env.has_key('KDEDIR')):
+ detect_kde(env)
+ opts.Save(cachefile, env)
+
+ ## set default variables, one can override them in sconscript files
+ env.Append(CXXFLAGS = ['-I'+env['KDEINCLUDEPATH'], '-I'+env['QTINCLUDEPATH'] ],
+ LIBPATH = [env['KDELIBPATH'], env['QTLIBPATH'] ])
+
+ env['QT_AUTOSCAN'] = 1
+ env['QT_DEBUG'] = 0
+
+ env['MEINPROC'] = 'meinproc'
+ env['MSGFMT'] = 'msgfmt'
+
+ ## ui file processing
+ def uic_processing(target, source, env):
+ inc_kde ='#include <klocale.h>\n#include <kdialog.h>\n'
+ inc_moc ='#include "%s"\n' % target[2].name
+ comp_h ='$QT_UIC -L $QTPLUGINS -nounload -o %s %s' % (target[0].path, source[0].path)
+ comp_c ='$QT_UIC -L $QTPLUGINS -nounload -tr tr2i18n -impl %s %s' % (target[0].path, source[0].path)
+ comp_moc ='$QT_MOC -o %s %s' % (target[2].path, target[0].path)
+ if env.Execute(comp_h): return ret
+ dest = open( target[1].path, "w" )
+ dest.write(inc_kde)
+ dest.close()
+ if env.Execute( comp_c+" >> "+target[1].path ): return ret
+ dest = open( target[1].path, "a" )
+ dest.write(inc_moc)
+ dest.close()
+ ret = env.Execute( comp_moc )
+ return ret
+ def uicEmitter(target, source, env):
+ adjustixes = SCons.Util.adjustixes
+ bs = SCons.Util.splitext(str(source[0].name))[0]
+ bs = env.join(str(target[0].get_dir()),bs)
+ target.append(bs+'.cpp')
+ target.append(bs+'.moc')
+ return target, source
+ env['BUILDERS']['Uic']=Builder(action=uic_processing,emitter=uicEmitter,suffix='.h',src_suffix='.ui')
+
+ def kcfg_buildit(target, source, env):
+ comp='kconfig_compiler -d%s %s %s' % (str(source[0].get_dir()), source[1].path, source[0].path)
+ return env.Execute(comp)
+ def kcfg_stringit(target, source, env):
+ print "processing %s to get %s and %s" % (source[0].name, target[0].name, target[1].name)
+ def kcfgEmitter(target, source, env):
+ adjustixes = SCons.Util.adjustixes
+ file=str(source[0].srcnode().name)
+ bs = SCons.Util.splitext(str(source[0].name))[0]
+ bs = env.join(str(target[0].get_dir()),bs)
+ # .h file is already there
+ target.append( bs+'.cpp' )
+
+ content=source[0].srcnode().get_contents()
+
+ kcfgfilename=""
+ kcfgFileDeclRx = re.compile("[fF]ile\s*=\s*(.+)\s*")
+ match = kcfgFileDeclRx.search(content)
+ if match: kcfgfilename = match.group(1)
+
+ if not kcfgfilename:
+ env.pprint('RED','invalid kcfgc file '+source[0].srcnode().abspath)
+ env.Exit(1)
+ source.append( env.join( str(source[0].get_dir()), kcfgfilename) )
+ return target, source
+
+ env['BUILDERS']['Kcfg']=Builder(action=env.Action(kcfg_buildit, kcfg_stringit),
+ emitter=kcfgEmitter, suffix='.h', src_suffix='.kcfgc')
+
+ ## MOC processing
+ env['BUILDERS']['Moc']=Builder(action='$QT_MOC -o $TARGET $SOURCE',suffix='.moc',src_suffix='.h')
+ env['BUILDERS']['Moccpp']=Builder(action='$QT_MOC -o $TARGET $SOURCE',suffix='_moc.cpp',src_suffix='.h')
+
+ ## KIDL file
+ env['BUILDERS']['Kidl']=Builder(action= 'dcopidl $SOURCE > $TARGET || (rm -f $TARGET ; false)',
+ suffix='.kidl', src_suffix='.h')
+ ## DCOP
+ env['BUILDERS']['Dcop']=Builder(action='dcopidl2cpp --c++-suffix cpp --no-signals --no-stub $SOURCE',
+ suffix='_skel.cpp', src_suffix='.kidl')
+ ## STUB
+ env['BUILDERS']['Stub']=Builder(action= 'dcopidl2cpp --c++-suffix cpp --no-signals --no-skel $SOURCE',
+ suffix='_stub.cpp', src_suffix='.kidl')
+ ## DOCUMENTATION
+ env['BUILDERS']['Meinproc']=Builder(action='cd $TARGET.dir && $MEINPROC --check --cache $TARGET.name $SOURCE.name',
+ suffix='.cache.bz2')
+ ## TRANSLATIONS
+ env['BUILDERS']['Transfiles']=Builder(action='$MSGFMT $SOURCE -o $TARGET',suffix='.gmo',src_suffix='.po')
+
+ ## Handy helpers for building kde programs
+ ## You should not have to modify them ..
+
+ ui_ext = [".ui"]
+ kcfg_ext = ['.kcfgc']
+ header_ext = [".h", ".hxx", ".hpp", ".hh"]
+ cpp_ext = [".cpp", ".cxx", ".cc"]
+ skel_ext = [".skel", ".SKEL"]
+ stub_ext = [".stub", ".STUB"]
+
+ def KDEfiles(lenv, target, source):
+ """ Returns a list of files for scons (handles kde tricks like .skel)
+ It also makes custom checks against double includes like : ['file.ui', 'file.cpp']
+ (file.cpp is already included because of file.ui) """
+
+ # ITA
+ #print "kdefiles"
+
+ q_object_search = re.compile(r'[^A-Za-z0-9]Q_OBJECT[^A-Za-z0-9]')
+ def scan_moc(cppfile):
+ addfile=None
+
+ # try to find the header
+ orifile=cppfile.srcnode().name
+ bs=SCons.Util.splitext(orifile)[0]
+
+ h_file=''
+ dir=cppfile.dir
+ for n_h_ext in header_ext:
+ afile=dir.File(bs+n_h_ext)
+ if afile.rexists():
+ #h_ext=n_h_ext
+ h_file=afile
+ break
+ # We have the header corresponding to the cpp file
+ if h_file:
+ h_contents = h_file.get_contents()
+ if q_object_search.search(h_contents):
+ # we know now there is Q_OBJECT macro
+ reg = '\n\s*#include\s*("|<)'+str(bs)+'.moc("|>)'
+ meta_object_search = re.compile(reg)
+ #cpp_contents = open(file_cpp, 'rb').read()
+ cpp_contents=cppfile.get_contents()
+ if meta_object_search.search(cpp_contents):
+ lenv.Moc(h_file)
+ else:
+ lenv.Moccpp(h_file)
+ addfile=bs+'_moc.cpp'
+ print "WARNING: moc.cpp for "+h_file.name+" consider using #include <file.moc> instead"
+ return addfile
+
+ src=[]
+ ui_files=[]
+ kcfg_files=[]
+ other_files=[]
+ kidl=[]
+
+ source_=lenv.make_list(source)
+
+ # For each file, check wether it is a dcop file or not, and create the complete list of sources
+ for file in source_:
+
+ sfile=SCons.Node.FS.default_fs.File(str(file)) # why str(file) ? because ordinal not in range issues
+ bs = SCons.Util.splitext(file)[0]
+ ext = SCons.Util.splitext(file)[1]
+ if ext in skel_ext:
+ if not bs in kidl:
+ kidl.append(bs)
+ lenv.Dcop(bs+'.kidl')
+ src.append(bs+'_skel.cpp')
+ elif ext in stub_ext:
+ if not bs in kidl:
+ kidl.append(bs)
+ lenv.Stub(bs+'.kidl')
+ src.append(bs+'_stub.cpp')
+ elif ext == ".moch":
+ lenv.Moccpp(bs+'.h')
+ src.append(bs+'_moc.cpp')
+ elif ext in cpp_ext:
+ src.append(file)
+ if not env.has_key('NOMOCFILE'):
+ ret = scan_moc(sfile)
+ if ret: src.append( sfile.dir.File(ret) )
+ elif ext in ui_ext:
+ lenv.Uic(file)
+ src.append(bs+'.cpp')
+ elif ext in kcfg_ext:
+ name=SCons.Util.splitext(sfile.name)[0]
+ hfile=lenv.Kcfg(file)
+ cppkcfgfile=sfile.dir.File(bs+'.cpp')
+ src.append(bs+'.cpp')
+ else:
+ src.append(file)
+
+ for base in kidl: lenv.Kidl(base+'.h')
+
+ # Now check against typical newbie errors
+ for file in ui_files:
+ for ofile in other_files:
+ if ofile == file:
+ env.pprint('RED',"WARNING: You have included %s.ui and another file of the same prefix"%file)
+ print "Files generated by uic (file.h, file.cpp must not be included"
+ for file in kcfg_files:
+ for ofile in other_files:
+ if ofile == file:
+ env.pprint('RED',"WARNING: You have included %s.kcfg and another file of the same prefix"%file)
+ print "Files generated by kconfig_compiler (settings.h, settings.cpp) must not be included"
+ # ITA
+ #print "end kdefiles"
+ return src
+
+
+ """ In the future, these functions will contain the code that will dump the
+ configuration for re-use from an IDE """
+ def KDEinstall(lenv, restype, subdir, files, perms=None):
+ if env.has_key('DUMPCONFIG'):
+ ret= "<install type=\"%s\" subdir=\"%s\">\n" % (restype, subdir)
+ for i in lenv.make_list(files):
+ ret += " <file name=\"%s\"/>\n" % (relfile(i))
+ ret += "</install>\n"
+ lenv.add_dump(ret)
+ return None
+
+ if not env['_INSTALL']: return None
+ dir = getInstDirForResType(lenv, restype)
+
+ p=None
+ if not perms:
+ if restype=='KDEBIN': p=0755
+ else: p=perms
+ install_list = lenv.bksys_install(lenv.join(dir, subdir), files, perms=p)
+ return install_list
+
+ def KDEinstallas(lenv, restype, destfile, file):
+ if not env['_INSTALL']: return
+ dir = getInstDirForResType(lenv, restype)
+ install_list = lenv.InstallAs(lenv.join(dir, destfile), file)
+ env.Alias('install', install_list)
+ return install_list
+
+ def KDEprogram(lenv, target, source,
+ includes='', localshlibs='', globallibs='', globalcxxflags=''):
+ """ Makes a kde program
+ The program is installed except if one sets env['NOAUTOINSTALL'] """
+ src = KDEfiles(lenv, target, source)
+ program_list = lenv.Program(target, src)
+
+ # we link the program against a shared library done locally, add the dependency
+ if not lenv.has_key('nosmart_includes'):
+ lenv.AppendUnique(CPPPATH=['./'])
+ if len(localshlibs)>0:
+ lst=lenv.make_list(localshlibs)
+ lenv.link_local_shlib(lst)
+ lenv.Depends( program_list, lst )
+
+ if len(includes)>0: lenv.KDEaddpaths_includes(includes)
+ if len(globallibs)>0: lenv.KDEaddlibs(globallibs)
+ if len(globalcxxflags)>0: lenv.KDEaddflags_cxx(globalcxxflags)
+
+ if not lenv.has_key('NOAUTOINSTALL'):
+ KDEinstall(lenv, 'KDEBIN', '', target)
+ return program_list
+
+ def KDEshlib(lenv, target, source, kdelib=0, libprefix='lib',
+ includes='', localshlibs='', globallibs='', globalcxxflags='', vnum=''):
+ """ Makes a shared library for kde (.la file for klibloader)
+ The library is installed except if one sets env['NOAUTOINSTALL'] """
+ src = KDEfiles(lenv, target, source)
+
+ if not lenv.has_key('nosmart_includes'):
+ lenv.AppendUnique(CPPPATH=['./'])
+ # we link the program against a shared library done locally, add the dependency
+ lst=[]
+ if len(localshlibs)>0:
+ lst=lenv.make_list(localshlibs)
+ lenv.link_local_shlib(lst)
+ if len(includes)>0: lenv.KDEaddpaths_includes(includes)
+ if len(globallibs)>0: lenv.KDEaddlibs(globallibs)
+ if len(globalcxxflags)>0: lenv.KDEaddflags_cxx(globalcxxflags)
+
+ restype='KDEMODULE'
+ if kdelib==1: restype='KDELIB'
+
+ library_list = lenv.bksys_shlib(target, src, getInstDirForResType(lenv, restype), libprefix, vnum)
+ if len(lst)>0: lenv.Depends( library_list, lst )
+
+ return library_list
+
+ def KDEstaticlib(lenv, target, source):
+ """ Makes a static library for kde - in practice you should not use static libraries
+ 1. they take more memory than shared ones
+ 2. makefile.am needed it because of limitations
+ (cannot handle sources in separate folders - takes extra processing) """
+ if not lenv.has_key('nosmart_includes'): lenv.AppendUnique(CPPPATH=['./'])
+ src=KDEfiles(lenv, target, source)
+ return lenv.StaticLibrary(target, src)
+ # do not install static libraries by default
+
+ def KDEaddflags_cxx(lenv, fl):
+ """ Compilation flags for C++ programs """
+ lenv.AppendUnique(CXXFLAGS = lenv.make_list(fl))
+
+ def KDEaddflags_c(lenv, fl):
+ """ Compilation flags for C programs """
+ lenv.AppendUnique(CFLAGS = lenv.make_list(fl))
+
+ def KDEaddflags_link(lenv, fl):
+ """ Add link flags - Use this if KDEaddlibs below is not enough """
+ lenv.PrependUnique(LINKFLAGS = lenv.make_list(fl))
+
+ def KDEaddlibs(lenv, libs):
+ """ Helper function """
+ lenv.AppendUnique(LIBS = lenv.make_list(libs))
+
+ def KDEaddpaths_includes(lenv, paths):
+ """ Add new include paths """
+ lenv.AppendUnique(CPPPATH = lenv.make_list(paths))
+
+ def KDEaddpaths_libs(lenv, paths):
+ """ Add paths to libraries """
+ lenv.PrependUnique(LIBPATH = lenv.make_list(paths))
+
+ def KDElang(lenv, folder, appname):
+ """ Process translations (.po files) in a po/ dir """
+ import glob
+ dir=SCons.Node.FS.default_fs.Dir(folder).srcnode()
+ fld=dir.srcnode()
+ tmptransfiles = glob.glob(str(fld)+'/*.po')
+
+ if lenv.has_key('DUMPCONFIG'):
+ lenv.add_dump( "<podir dir=\"%s\" name=\"%s\"/>\n" % (reldir(dir), appname) )
+ return
+
+ transfiles=[]
+ if lenv.has_key('_BUILDDIR_'):
+ bdir=lenv['_BUILDDIR_']
+ for pof in lenv.make_list(tmptransfiles):
+ # ITA
+ d=relfile(pof)
+ d2=d.replace(bdir,'').lstrip('/')
+ d3=lenv.join(bdir, d2)
+ #print d2
+ #print d3
+ transfiles.append( lenv.join('#', bdir, d2) )
+ else: transfiles=tmptransfiles
+
+ languages=None
+ if lenv['ARGS'] and lenv['ARGS'].has_key('languages'):
+ languages=lenv.make_list(lenv['ARGS']['languages'])
+ mydir=SCons.Node.FS.default_fs.Dir('.')
+ for f in transfiles:
+ #fname=f.replace(mydir.abspath, '')
+ fname=f
+ file=SCons.Node.FS.default_fs.File(fname)
+ country = SCons.Util.splitext(file.name)[0]
+ if not languages or country in languages:
+ result = lenv.Transfiles(file)
+ dir=lenv.join( getInstDirForResType(lenv, 'KDELOCALE'), country)
+ lenv.bksys_install(lenv.join(dir, 'LC_MESSAGES'), result, destfile=appname+'.mo')
+
+ def KDEicon(lenv, icname='*', path='./', restype='KDEICONS', subdir=''):
+ """Contributed by: "Andrey Golovizin" <grooz()gorodok()net>
+ modified by "Martin Ellis" <m.a.ellis()ncl()ac()uk>
+
+ Installs icons with filenames such as cr22-action-frame.png into
+ KDE icon hierachy with names like icons/crystalsvg/22x22/actions/frame.png.
+
+ Global KDE icons can be installed simply using env.KDEicon('name').
+ The second parameter, path, is optional, and specifies the icons
+ location in the source, relative to the SConscript file.
+
+ To install icons that need to go under an applications directory (to
+ avoid name conflicts, for example), use e.g.
+ env.KDEicon('name', './', 'KDEDATA', 'appname/icons')"""
+
+ if lenv.has_key('DUMPCONFIG'):
+ lenv.add_dump( "<icondir>\n" )
+ lenv.add_dump( " <icondirent dir=\"%s\" subdir=\"%s\"/>\n" % (reldir(path), subdir) )
+ lenv.add_dump( "</icondir>\n" )
+ return
+
+ type_dic = { 'action':'actions', 'app':'apps', 'device':'devices',
+ 'filesys':'filesystems', 'mime':'mimetypes' }
+ dir_dic = {
+ 'los' :'locolor/16x16', 'lom' :'locolor/32x32',
+ 'him' :'hicolor/32x32', 'hil' :'hicolor/48x48',
+ 'lo16' :'locolor/16x16', 'lo22' :'locolor/22x22', 'lo32' :'locolor/32x32',
+ 'hi16' :'hicolor/16x16', 'hi22' :'hicolor/22x22', 'hi32' :'hicolor/32x32',
+ 'hi48' :'hicolor/48x48', 'hi64' :'hicolor/64x64', 'hi128':'hicolor/128x128',
+ 'hisc' :'hicolor/scalable',
+ 'cr16' :'crystalsvg/16x16', 'cr22' :'crystalsvg/22x22', 'cr32' :'crystalsvg/32x32',
+ 'cr48' :'crystalsvg/48x48', 'cr64' :'crystalsvg/64x64', 'cr128':'crystalsvg/128x128',
+ 'crsc' :'crystalsvg/scalable'
+ }
+
+ iconfiles = []
+ dir=SCons.Node.FS.default_fs.Dir(path).srcnode()
+ mydir=SCons.Node.FS.default_fs.Dir('.')
+ import glob
+ for ext in ['png', 'xpm', 'mng', 'svg', 'svgz']:
+ files = glob.glob(str(dir)+'/'+'*-*-%s.%s' % (icname, ext))
+ for file in files:
+ iconfiles.append( file.replace(mydir.abspath, '') )
+ for iconfile in iconfiles:
+ lst = iconfile.split('/')
+ filename = lst[ len(lst) - 1 ]
+ tmp = filename.split('-')
+ if len(tmp)!=3:
+ env.pprint('RED','WARNING: icon filename has unknown format: '+iconfile)
+ continue
+ [icon_dir, icon_type, icon_filename]=tmp
+ try:
+ basedir=getInstDirForResType(lenv, restype)
+ destdir = '%s/%s/%s/%s/' % (basedir, subdir, dir_dic[icon_dir], type_dic[icon_type])
+ except KeyError:
+ env.pprint('RED','WARNING: unknown icon type: '+iconfile)
+ continue
+ lenv.bksys_install(destdir, iconfile, icon_filename)
+
+ ## This function uses env imported above - WARNING ugly code, i will have to rewrite (ITA)
+ def docfolder(lenv, folder, lang, destination=""):
+ # folder is the folder to process
+ # lang is the language
+ # destination is the subdirectory in KDEDOC (appname)
+ import glob
+ docfiles=[]
+ dir=SCons.Node.FS.default_fs.Dir(folder).srcnode()
+ mydir=SCons.Node.FS.default_fs.Dir('.')
+ dirpath=mydir.srcnode().abspath
+ docg = glob.glob(str(dir)+"/???*.*") # file files that are at least 4 chars wide :)
+ for file in docg:
+ f = file.replace(dirpath, '')
+ docfiles.append(f)
+
+ if lenv.has_key('DUMPCONFIG'):
+ lenv.add_dump( "<docdir name=\"%s\">\n" % destination)
+ lenv.add_dump( " <docdirent lang=\"%s\" dir=\"%s\"/>\n" % (lang, reldir(dir)) )
+ lenv.add_dump( "</docdir>\n" )
+ return
+
+ # warn about errors
+ #if len(lang) != 2:
+ # print "error, lang must be a two-letter string, like 'en'"
+
+ # when the destination is not given, use the folder
+ if len(destination) == 0: destination=folder
+ docbook_list = []
+
+ bdir='.'
+ if lenv.has_key('_BUILDDIR_'): bdir = lenv['_BUILDDIR_']
+ for file in docfiles:
+ # do not process folders
+ #if not os.path.isfile( lenv.join('.', file) ): continue
+
+ # build a node representing the file in the build directory to force symlinking
+ nodefile=relfile( lenv.join(mydir.abspath, file) )
+ #print nodefile
+ #nodefile=relfile( lenv.join(self.dirprefix, file) )
+ nodefile=SCons.Node.FS.default_fs.File( lenv.join('#', bdir, nodefile) )
+ #print nodefile.abspath
+
+ # do not process the cache file
+ if file == 'index.cache.bz2': continue
+ # ignore invalid files (TODO??)
+ if len( SCons.Util.splitext( file ) ) <= 1: continue
+ ext = SCons.Util.splitext( file )[1]
+
+ # install picture files
+ if ext in ['.jpeg', '.jpg', '.png']: lenv.KDEinstall('KDEDOC', lenv.join(lang,destination), nodefile.abspath)
+ # docbook files are processed by meinproc
+ if ext != '.docbook': continue
+
+ docbook_list.append( nodefile )
+ lenv.KDEinstall('KDEDOC', lenv.join(lang,destination), nodefile.abspath)
+
+ # Now process the index.docbook files ..
+ if len(docbook_list) == 0: return
+
+ index=''
+ cache=''
+ for file in docbook_list:
+ if file.name=='index.docbook':
+ index=file
+ cache=file.dir.File('index.cache.bz2')
+
+ if not index:
+ print "BUG in docfolder: no index.docbook but docbook files found"
+ lenv.Exit(1)
+
+ for file in docbook_list:
+ # make the cache.bz2 file depend on all .docbook files in the same dir
+ lenv.Depends( cache, file )
+
+ lenv.Meinproc( cache, index )
+ lenv.KDEinstall( 'KDEDOC', lenv.join(lang,destination), cache )
+
+ if env['_INSTALL']:
+ dir=lenv.join(env['DESTDIR'], lenv.getInstDirForResType('KDEDOC'), lang, destination)
+ comp='mkdir -p %s && cd %s && rm -f common && ln -s ../common common' % (dir, dir)
+ lenv.Execute(comp)
+
+ #self.env.AddPostAction(lenv.join(dir, 'common'), self.env.Chmod(ins, self.perms))
+ # TODO add post action of cache (index.cache.bz2)
+
+ #valid_targets = "program shlib kioslave staticlib".split()
+ import generic
+ class kobject(generic.genobj):
+ def __init__(self, val, senv=None):
+ if senv: generic.genobj.__init__(self, val, senv)
+ else: generic.genobj.__init__(self, val, env)
+ self.iskdelib=0
+ def it_is_a_kdelib(self): self.iskdelib=1
+ def execute(self):
+ if self.executed: return
+ if self.orenv.has_key('DUMPCONFIG'):
+ self.executed=1
+ self.xml()
+ return
+ if (self.type=='shlib' or self.type=='kioslave'):
+ install_dir = 'KDEMODULE'
+ if self.iskdelib==1: install_dir = 'KDELIB'
+ self.instdir=getInstDirForResType(self.orenv, install_dir)
+ elif self.type=='program':
+ self.instdir=getInstDirForResType(self.orenv, 'KDEBIN')
+ self.perms=0755
+
+ # ITA
+ #print self.source
+ #print "hallo"
+ self.p_localsource=KDEfiles(env, self.joinpath(self.target), self.joinpath(self.source))
+ # ITA
+ #print self.p_localsource
+ generic.genobj.execute(self)
+
+ def xml(self):
+ dirprefix = reldir('.')
+ if not dirprefix: dirprefix=self.dirprefix
+ ret='<compile type="%s" dirprefix="%s" target="%s" cxxflags="%s" cflags="%s" includes="%s" linkflags="%s" libpaths="%s" libs="%s" vnum="%s" iskdelib="%s" libprefix="%s">\n' % (self.type, dirprefix, self.target, self.cxxflags, self.cflags, self.includes, self.linkflags, self.libpaths, self.libs, self.vnum, self.iskdelib, self.libprefix)
+ if self.source:
+ for i in self.orenv.make_list(self.source): ret+=' <source file="%s"/>\n' % i
+ ret+="</compile>\n"
+ self.orenv.add_dump(ret)
+
+ # Attach the functions to the environment so that SConscripts can use them
+ SConsEnvironment.KDEprogram = KDEprogram
+ SConsEnvironment.KDEshlib = KDEshlib
+ SConsEnvironment.KDEstaticlib = KDEstaticlib
+ SConsEnvironment.KDEinstall = KDEinstall
+ SConsEnvironment.KDEinstallas = KDEinstallas
+ SConsEnvironment.KDElang = KDElang
+ SConsEnvironment.KDEicon = KDEicon
+
+ SConsEnvironment.KDEaddflags_cxx = KDEaddflags_cxx
+ SConsEnvironment.KDEaddflags_c = KDEaddflags_c
+ SConsEnvironment.KDEaddflags_link = KDEaddflags_link
+ SConsEnvironment.KDEaddlibs = KDEaddlibs
+ SConsEnvironment.KDEaddpaths_includes = KDEaddpaths_includes
+ SConsEnvironment.KDEaddpaths_libs = KDEaddpaths_libs
+
+ SConsEnvironment.docfolder = docfolder
+ SConsEnvironment.getInstDirForResType = getInstDirForResType
+ SConsEnvironment.kobject = kobject
+
diff --git a/bksys/parser.py b/bksys/parser.py
new file mode 100644
index 0000000..cdde2b0
--- /dev/null
+++ b/bksys/parser.py
@@ -0,0 +1,142 @@
+#!/usr/bin/python
+
+from xml.sax import make_parser
+from xml.sax.handler import ContentHandler
+
+import SCons.Util
+
+def exists(env):
+ return True
+
+class SconsHandler(ContentHandler):
+
+ def __init__ (self, envi, builddir):
+ self.envname = ""
+ self.env = envi
+ self.builddir="" #envi['_BUILDDIR_']
+
+ #self.dump = True
+ self.dump = False
+ self.count = 0
+ self.dir = ""
+ self.autoinstall = False
+ self.appname=""
+
+ self.obj = ""
+
+ self.subdir =""
+ self.type =""
+
+ self.isgloballib=""
+ self.target=""
+
+ self._includes=""
+ self.cxxflags=""
+ self.globallibs=""
+ self.locallibs=""
+ self.linkflags=""
+
+ self.srclist=[]
+
+ def adrl(self, file):
+ if self.builddir:
+ dir=self.env.join(self.builddir,file).lstrip('/')
+ else:
+ dir=file.lstrip('/')
+ return dir
+
+ def dump_commands(self, str):
+ if self.dump:
+ print str
+
+ def startElement(self, name, attrs):
+
+ if name == 'icondirent':
+ dir = attrs.get('dir', '')
+ sbdir = attrs.get('subdir', '')
+ if dir:
+ #if self.env.has_key("DUMPCONFIG"):
+ # print "env.KDEicon('"+dir+")'"
+ self.env.KDEicon('*', self.adrl(dir), subdir=sbdir)
+ elif name == 'subdirent':
+ dir = attrs.get('dir', None)
+ if dir:
+ #if self.env.has_key("DUMPCONFIG"):
+ # print "env.SConscript('"+dir+"/SConscript')"
+ self.env.SConscript(self.env.join(self.adrl(dir),"SConscript"))
+ elif name == 'docdir':
+ self.appname = self.adrl( attrs.get('name', None) )
+ elif name == 'docdirent':
+ dir = attrs.get('dir', None)
+ lang = attrs.get('lang', None)
+ if dir and lang:
+ #if self.env.has_key("DUMPCONFIG"):
+ # print "env.docfolder('"+dir+"', '"+lang+"', '"+self.appname+"')"
+ self.env.docfolder(self.adrl(dir), lang, self.appname)
+ elif name == 'podir':
+ dir = attrs.get('dir', None)
+ appname = attrs.get('name', None)
+ if dir and appname:
+ if self.env.has_key('_BUILDDIR_'): dir=self.env.join(self.env['_BUILDDIR_'], dir)
+ self.env.KDElang(dir, appname)
+ elif name == 'install':
+ self.type = attrs.get('type', None)
+ self.subdir = attrs.get('subdir', None)
+
+ elif name == 'file':
+ name = attrs.get('name', None)
+ if self.type:
+ #if self.env.has_key("DUMPCONFIG"):
+ # print "env.KDEinstall('"+self.type+"', '"+self.subdir+"', '"+name+"')"
+ self.env.KDEinstall(self.type, self.subdir, name)
+
+ elif name == 'compile':
+
+ type = attrs.get('type', None)
+ if not type: self.env.Exit(1)
+ self.obj = self.env.kobject(type)
+
+ self.obj.target = str(attrs.get('target', ''))
+ self.obj.source = []
+
+ self.obj.includes = str(attrs.get('includes', ''))
+ self.obj.cflags = str(attrs.get('cflags', ''))
+ self.obj.cxxflags = str(attrs.get('cxxflags', ''))
+
+ self.obj.libs = str(attrs.get('libs', ''))
+ self.obj.linkflags = str(attrs.get('linkflags', ''))
+ self.obj.libpath = str(attrs.get('libpath', ''))
+
+ self.obj.vnum = str(attrs.get('vnum', ''))
+ self.obj.iskdelib = str(attrs.get('iskdelib', 0))
+ self.obj.libprefix = str(attrs.get('libprefix', ''))
+
+ self.obj.chdir = self.adrl(str(attrs.get('chdir', '')))
+ self.obj.dirprefix = self.adrl(str(attrs.get('dirprefix', './')))
+ if not self.obj.dirprefix: self.obj.dirprefix='./' # avoid silly errors
+
+ elif name == 'source':
+ file = attrs.get('file', None)
+ condition = attrs.get('condition', "");
+ lst=condition.split(':')
+ for c in lst:
+ if self.env.has_key(c):
+ self.obj.source.append( file )
+ break
+ if file and not condition: self.obj.source.append( file )
+
+ def endElement(self, name):
+ if name == 'compile':
+ self.obj.execute()
+
+def generate(env):
+
+ def xmlfile(env, file, builddir=''):
+ parser = make_parser()
+ curHandler = SconsHandler(env, builddir)
+ parser.setContentHandler(curHandler)
+ parser.parse(open(file))
+
+ from SCons.Script.SConscript import SConsEnvironment
+ SConsEnvironment.xmlfile = xmlfile
+
diff --git a/bksys/scons-mini.tar.bz2 b/bksys/scons-mini.tar.bz2
new file mode 100644
index 0000000..fae5c28
--- /dev/null
+++ b/bksys/scons-mini.tar.bz2
Binary files differ
diff --git a/config.bks b/config.bks
new file mode 100644
index 0000000..8669f89
--- /dev/null
+++ b/config.bks
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bksys version="2">
+<compile type="program" dirprefix="src"
+ target="wlassistant"
+ libs="kdeui qt-mt iw">
+<source file="main.cpp"/>
+<source file="netlistviewitem.cpp"/>
+<source file="ui_NetParamsEdit.ui"/>
+<source file="ui_NetParamsWizard.ui"/>
+<source file="ui_main.ui"/>
+<source file="ui_netparamsedit.cpp"/>
+<source file="ui_netparamswizard.cpp"/>
+<source file="waconfig.cpp"/>
+<source file="watools.cpp"/>
+<source file="wlassistant.cpp"/>
+</compile>
+
+<icondir>
+ <icondirent dir="icons"/>
+</icondir>
+
+<podir dir="po" name="wlassistant"/>
+
+<install type="KDEMENU" subdir="Utilities/">
+ <file name="src/wlassistant.desktop"/>
+</install>
+
+</bksys>
diff --git a/configure b/configure
new file mode 100755
index 0000000..f0189ac
--- /dev/null
+++ b/configure
@@ -0,0 +1,87 @@
+#!/bin/sh
+# Fancy colors used to beautify the output a bit.
+#
+NORMAL="\033[0m"
+BOLD="\033[1m"
+RED="\033[91m"
+YELLOW="\033[93m"
+GREEN="\033[92m"
+
+# Checks for Python interpreter. Honours $PYTHON if set. Stores path to
+# interpreter in $PYTHON.
+#
+checkPython()
+{
+ if [ -z $PYTHON ]; then
+ PYTHON=`which python 2> /dev/null`
+ fi
+ echo -n "Checking for Python : "
+ if [ ! -x "$PYTHON" ]; then
+ echo -e $GREEN"not found!"$NORMAL
+ echo "Please make sure that the Python interpreter is available in your PATH"
+ echo "or invoke configure using the PYTHON flag, e.g."
+ echo "$ PYTHON=/usr/local/bin/python configure"
+ exit 1
+ fi
+ echo -e $GREEN"$PYTHON"$NORMAL
+}
+
+# Checks for SCons. Honours $SCONS if set. Stores path to 'scons' in $SCONS.
+# Requires that $PYTHON is set.
+#
+checkSCons()
+{
+ echo -n "Checking for SCons : "
+ if [ -z $SCONS ]; then
+ SCONS=`which scons 2> /dev/null`
+ fi
+ if [ ! -x "$SCONS" ]; then
+ echo -e $BOLD"not found, will use mini distribution."$NORMAL
+ tar xjf bksys/scons-mini.tar.bz2
+ SCONS="./scons"
+ else
+ echo -e $GREEN"$SCONS"$NORMAL
+ fi
+ SCONS="$SCONS"
+}
+
+# Generates a Makefile. Requires that $SCONS is set.
+#
+generateMakefile()
+{
+ cat > Makefile << EOF
+all:
+ @$SCONS
+
+# it is also possible to use
+# @$SCONS -j4
+
+install:
+ @$SCONS install
+
+clean:
+ @$SCONS -c
+
+uninstall:
+ @$SCONS -c install
+
+dist:
+ @$SCONS dist
+
+distclean:
+ rm -rf cache/
+
+cleanup:
+ -find . -name '*~' | \
+ xargs rm
+ -find . -name '*.ui' | \
+ xargs perl -pi -e 's#version="3.3"#version="3.2"#; s#^\ *<#<#'
+
+EOF
+}
+
+checkPython
+checkSCons
+generateMakefile
+
+$SCONS configure $@
diff --git a/description-pak b/description-pak
new file mode 100644
index 0000000..d1b3245
--- /dev/null
+++ b/description-pak
@@ -0,0 +1,2 @@
+Wireless Assistant (wlassistant) is a small KDE application
+allowing you to easily connect to wireless networks.
diff --git a/doc/AUTHORS b/doc/AUTHORS
new file mode 100644
index 0000000..7352546
--- /dev/null
+++ b/doc/AUTHORS
@@ -0,0 +1,25 @@
+Pawel Nawrocki <pnawrocki@interia.pl>
+
+Special thanks go to people that contributed in various ways, listed chornologically:
+
+elitecodex and his friend
+Michael Long
+Marc Onrust
+Florian Obradovic
+Stephan Binner
+Marcel Hilzinger
+Christian Bird
+Remco Treffkorn
+Gerwin Krist
+Ed Cates
+Andrey Kislyuk
+Daniel Nascimento
+Olivier Butler
+Sheldon Lee-Wen
+Adonay Sanz Alsina
+Achim Bohnet
+Peter Zhang
+Wintceas Godois
+James Ots
+
+...and everyone that helped by reporting bugs and giving ideas, as well as packagers. \ No newline at end of file
diff --git a/doc/COPYING b/doc/COPYING
new file mode 100644
index 0000000..c13faf0
--- /dev/null
+++ b/doc/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/doc/NEWS b/doc/NEWS
new file mode 100644
index 0000000..c0298cb
--- /dev/null
+++ b/doc/NEWS
@@ -0,0 +1,97 @@
+*** RELEASE 0.5.7:
+* NEW: WPA-PSK support ( WPA/WPA2, please test and report in case of problems! )
+* NEW/FIX: Rewritten, completely new connection state detection (please comment!)
+* NEW: Optional grouping of APs with the same ESSID
+* FIX: UI refinements
+* FIX: hide encryption keys in console output and edit dialogs
+* FIX: Connection using dhclient fails
+* FIX: don't check for connection while wizard is running
+* FIX: Many internal changes
+* FIX: remove default gateway upon disconnection if not managed by DHCP client
+* FIX: updated Polish translation (with help from riklaunim)
+
+*** RELEASE 0.5.6:
+* NEW: Added an option to wait before getting scan results - fixes a problem when some networks were not visible after initial scan.
+* NEW: Added option to automatically connect to best network at startup.
+* NEW: Added customizable per-network commands before/after connection/disconnection.
+* NEW: Added Arabic translation (by Mohammed Gamal)
+* NEW: Added Norwegian Bokm� translation (by Alexander Nicolaysen S?rnes)
+* NEW: Added Swedish translation (by Daniel Nylander)
+* FIX: Updated Spanish translation (by Enrique Mat�s S�chez)
+* FIX: Revised and completed Portugese (Brazil) translation (by BRUNO GON�LVES)
+* FIX: Removed the '-q' option from dhclient execution (problem reported by marshallbanana)
+* FIX: Made automatic reconnection option more visible (modified patch by Henry Kay)
+* FIX: Fix bug 1447119 - ignore hostap's wifi0 interface (reported and patched by Andreas Nolda)
+* FIX: Wait a little bit before checking if connection was successful (a working connection was sometimes not detected)
+* FIX: Fixed detection of a running DHCP client (patch by James Ots)
+* FIX: Fixed gateway detection for SUSE10 (patch by James Ots)
+* FIX: Added .info files path for SUSE10
+* FIX: Skip channel setting if not supported (fixes bug 1349228)
+
+*** RELEASE 0.5.5:
+* NEW: Migrated to bksys
+* NEW: Show system tray icon by default
+* NEW: Added 'ASCII' checkbox next to WEP key fields
+* NEW: Version number in window title
+* NEW: Added Chinese (Simplified and Traditional) translations (by Peter Zhang)
+* NEW: Added Catalan translation (by Adonay Sanz Alsina)
+* NEW: Added French translation (by Olivier Butler)
+* FIX: Always try to kill stale dhcp client before connecting (fixes bug #1305952)
+* FIX: Quality level indication (fixes bug #1323274)
+* FIX: 'unknown escape sequence' warning (thanks to Achim Bohnet)
+* FIX: Updated Portugese (Brazilian) translation (changes by Wintceas Godois)
+* FIX: Pass ESSID as the last argument (fixes bug #1366531)
+* FIX: Automatically detect paths to .pid and .info/.leases files (fixes bug #1323263, thanks to contributors on forum)
+* FIX: Possible division by zero problem (fixes bug #1276067)
+
+*** RELEASE: 0.5.4a:
+NEW: Added Spanish translation (by mariodebian)
+FIX: Don't check for active connection if no scan results returned.
+FIX: 'No Scan Results b/c Interface Not Ready' problem most likely fixed. Feedback please!
+MAYBE FIX: Fixed crash after displaying scan results (on startup). FEEDBACK PLS!
+
+*** RELEASE 0.5.4:
+* NEW: Introduced helper class WATools (beginnings of migration from parsing iwXXXX output to direct iwlib calls). This should fix ALL device detection problems, reduce wlassistant CPU usage (connection quality monitoring) and more.
+* NEW: Reworked connection status monitoring & indication: Normal icon next to ESSID: internet reachable. Grayed-out icon: only gateway reachable. This makes wlassistant perfectly usable with networks in cafes and ones that require loging in via a webpage a.s.o.
+* NEW: Portugese (Brazil) translation (by Daniel Nascimento)
+* NEW: Polish translation
+* NEW: Added README file with usage hints.
+* UI refinements and naming changes.
+* Reworked config handling
+* Changed host to ping to www.ibiblio.org (google sometimes took too long to answer and ping timed out)
+* Many many internal changes and stability improvements, loads of bugfixes.
+* Some things I don't remember...
+
+
+*** RELEASE 0.5.3:
+* NEW: New options GUI.
+* NEW: Customizable DHCP client timeout.
+* NEW: GUI to re-enable disabled messages.
+* NEW: While running external executables, after 1.5sec 'Quit' button changes to 'Stop' button that terminates current process.
+* NEW: Make mouse behaviour (Single- or Double-Click) consistent with KDE global settings.
+* NEW: Double clicking on an item connects/disconnects (when mouse settings require this behaviour).
+* NEW: 'Connect' button caption changes to 'Disconnect' when connected item is selected.
+* NEW: Last used interface is saved in config file and reused next time the app is run.
+* NEW: Added ToolTips and 'What's This' help to all elements.
+* NEW: Added formatting to message boxes.
+* FIX: Reduced CPU usage while running external executables. Thanks to Remco Treffkorn.
+* FIX: If encryption is "off" - disable it, enable if anything else. This fixes encryption detection for some drivers.
+* FIX: Changed 'Close' to 'Quit'.
+* FIX: Change 'Settings' to 'Options' where appropriate.
+* FIX: Changed connected item's context menu (part II) so that default action is listed first.
+* REM: Removed 'Reconnect' context menu action. (sometimes froze the app for unknown reasons).
+* Code clean-up and other fixes, many internal changes (see ChangeLog file).
+
+*** RELEASE 0.5.2f:
+* FIX: Fixed sorting by channel number (e.g. 11 is now after 10, not after 1).
+* NEW: #ifdef to check for KDE 3.4 - this should make wlassistant compile on KDE 3.3. (FEEDBACK PLEASE!)
+* FIX: Fixed recognition of '<hidden>' ESSID.
+
+*** RELEASE 0.5.2e:
+* FIX: Try to kill stale DHCP client instance (if any) when connection fails.
+* FIX: Bring interface up before setting network parameters (esp. wep key) - this fixes problems with some cards when connecting to encrypted networks using a DHCP client.
+* FIX: Fixed network encryption and frequency (if no channel info available) detection.
+* FIX: Changed connected item's context menu so that default action is listed first.
+* FIX: Automatically disconnect from current network when connecting to a different one.
+* FIX: Added semicolons to DNS labels in the 'Edit Settings' dialog.
+*** Thanks for reporting bugs go to Remco Treffkorn and Gerwin Kirst. *** \ No newline at end of file
diff --git a/doc/README b/doc/README
new file mode 100644
index 0000000..44a9d9e
--- /dev/null
+++ b/doc/README
@@ -0,0 +1,9 @@
+USAGE TIPS
+==========
+
+==> The highlited entry representing network that you are connected to has an icon left of the ESSID. If this icon is grayed out, it means that you are successfully connected to the AP, but the internet is not reachable. In this case, the problem is most likely on the AP side. If the icon is in full-colour, it means that both AP and Internet are accessible.
+
+==> Increasing the DHCP Timeout option might help if you have trouble connecting to some networks. However, before you do increase this value, double-check that all other settings (esp. WEP) are set correctly.
+
+==> If it takes a long time to detect an existing connection, you are using a DHCP client and message "...from 'route'" appears in the console, you might want to edit wlassistantrc and make sure that DHCP PID Path and DHCP Info Path for your DHCP client are set correctly.
+If you delete these values from the config file, they will be reverted to defaults next time you run Wireless Assistant.
diff --git a/doc/TODO b/doc/TODO
new file mode 100644
index 0000000..5841b15
--- /dev/null
+++ b/doc/TODO
@@ -0,0 +1,364 @@
+*** 0.3.5 TODO:
++Generic parsing function
++WEP key config input validator
++WEP Keys config
++WEP Selection dialog
++Key setting (iwconfig)
++Add "key off" arguments when connecting to unencrypted netw.
++RadioButtons OPEN / RESTRICTED
++getVal -> if no endstr specified, parse till QString::length()
++getVal -> if no startstr specified, parse from the beginning
++set/improve TAB order for ui files
+
+
+*** 0.3.6 TODO:
++sensible column widths
++encrypted? icon in netList
++graphical link quality
++find a nice icon for link quality
++add statusbar info if ad-hoc and/or encrypted skipped.
++automatically use WEP key if name matches ESSID (bool autoKey)
++default mode ui (defaultMode)
+
+
+*** 0.3.7 TODO:
++fix sort order when scanned
++fix wrong device detection if more than 1 present (maybe regexp (^[a-zA-Z]{3,4}\\d$)
++fix: disable 'detect' & 'configure...' button when connecting
++change mode to Managed before scanning
++change quality calculation method.
++add channel column & config (thanks to Michael Long)
+
+
+*** 0.3.8 TODO:
++make all columns resizable
++'name-essid matching case-sensitive' option
++show frequency if channel not available. (no other adjustments needed)
++reimplement NetListViewItem::width(...)
++proper column width setting taking scrollbars into account
++remove "Auto mode" - causes only problems.
++honor single click (option)
++quit upon successful connection (option)
+*** HEY! Now you can connect with just ONE click! ***
++while getting quality, first try to find "Quality:" and calculate if not found, estimate if no noise level reported.
++move WEP stuff in netConnect() to a separate function (getWepKey())
++support for .pid files
++manual (not DHCP) config possibility
++option to run custom command upon connection
++connectionOk() function
++icon
+
+*** 0.3.8a (BUGFIX RELEASE) TODO:
++quality detection: support "Quality=" and "Noise level=" (maybe additional 'int offset' parameter?)
++masterToManaged flag to be on for orinoco_cs driver -> set as default for all cards.
++fix handling of ESSIDs with space
++proper error-handling in runCommand(...)
++install waconfig.kcfg to $KDE/share/config.kcfg/ (sf)
++fix path detection (skip /mnt etc)
++code cleanup: error messages to be called from within runCommand(...)
+
+*** 0.3.9 TODO:
++dhclient support
++terminate process button
+
+
+
+*** 0.5.0 TODO:
++hide device combo if only one found
++rewrite device detection (2.6 kernel only)
++path detection on startup. No more manual configuration.
++path detection upon WACommands initialization ( 'init()' function )
++.desktop file: 'Exec=sudo wlassistant'
++remove Ad-Hoc support
++remove Ad-Hoc code
++remove GUI for options:
++ scan upon startup
++ skip ad-hoc
++ skip encrypted
++net params read/write to config framework
++paint "<hidden>" in italics.
++first time connection wizard
++wizard: don't ask if WEP is needed, get it from NetParams (which gets it from selected item in the list view)
++debugging code! (stdout) (std::cout << "ERROR MSG")
++code cleanup: forward declarations ('class') in headers
++support for <hidden> ESSIDs (modify wizard dialog, additional page)
++rewrite runCommand(...) function
++manual DNS setup ( 'setDNS()' function )
++new, detailed description on KDE-Apps.org
+
+*** 0.5.1 TODO:
++add 'wasHiddenEssid' and 'wasWep' booleans as part of NetParams for change monitoring.
++NetParams change monitoring & actions.
++move to i18n(..) strings
++refine ui (as suggested by Stephan Binner)
++dialog: edit connection
++error handling: connecting failed? Ask if the user wishes to review network parameters.
++"Settings Updated." status bar message.
++fix newly hidden essid handling
++try to kill both dhcpcd AND dhclient, regardless of current DHCP client, in case e.g. dhclient is running but wlassistant defaults to dhcpcd when it's available
++Check if radio on and ask if should be turned on if necessary (before scanning).
++Get channel from list, not config.
++column widths still are wrong sometimes.
++change scan results parsing to use QRegExp, adapt to wireless-tools-27 (e.g. always get channel #, etc)
++function to get ESSID of network connected to
++write essid of network connected to in bold letters (new setConnected() function of NetListViewItem, private bool mConnected)
++change connectedNetwork when interface changes.
++dynamic quality updating for connected network.
++revise/rewrite paintCell function, reduce flicker.
++'disconnect' button/option in the context menu (when appropriate)
++option to reconnect to currently connected network.
++cvs repository
+
+*** 0.5.1a TODO:
++fix: don't set network as connected if link quality=0.
++fix column width calculation (last time hopefully. Was using wrong font metrics for connectedItem)
++bring back the 'AP' column.
++fix: tab order in "Edit settings..." dialog.
++remove wlassistant.rc file, update Makefile.am accordingly.
++fix action taken when clicking on connectedItem when its network is not configured.
++create 'itemAction()' function to run config/connect/disconnect/reconnect/etc after single click depending on item's status.
+
+*** 0.5.2 TODO:
++icon marking connected network.
++fix crash on startup/scan.
++reduce flicker when populating netList.
++report 1/2 STAR *only if* link quality is 1+
++workaround to fix problems with some drivers wrongly reporting that interface is connected when it is not.
++connection status monitoring + actions.
++review netReconnect and netDisconnect functions.
++function to check if radio is physically turned off (with a switch on a laptop) if no scan results.
++fix overusing of cache
++'Do not ask again' checkboxes. (Conn lost, reconnect?, Conn failed, review settings?,...)
+
+*** 0.5.2a-c:
++when detecting active connection: ping prints some errors on stdout, not stderr. :| Try to catch them.
++only check for active connection if there was none before scan.
+
+*** 0.5.2d TODO:
++wait 1sec(1.5?) after killing dhcp client to make sure it quits.
++don't ifdown immediately after connection check fails.
++revert default action of connected item to disconnect.
+
+*** 0.5.2e TODO:
++BUG REPORTED: dhclient doesn't get killed when connection fails.
++other fixes
+
+*** 0.5.3 TODO:
++'Connect' button caption change when currentItem is selected.
++Connect the 'connect' button to itemAction().
++get mouse behaviour from KGlobalSettings::singleClick()
++make change of KGlobalSettings::singleClick() immediately apply in wlassistant.
++remove "Honor KDE single click" UI.
++connect signals/slots in wlassistant.cpp, not in the .ui files.
++remove "Honor KDE single click" from kcfg.
++remove 'netReconnect()' function, replacing with 'netConnect()' does the job.
++rework the config gui - replace netList&statusBar with config options (use WidgetStack, 'Settings' toggle-button).
++ gui for 'Quit upon successful connection'
++ gui for "Enable All Messages" option (KMessageBox::enableAllMessages()) ToolTip/WhatsThis: "Enable all messages which have been turned off with the 'Don't Show Again' feature."
++drop 'kconfigdialog.h' dependancy.
++remvoe showCfgDlg()
++reimplement 'close()' to save settings on quit.
++add timeout to dhclient & dhcpcd (not command line args), GUI
++when process running: change 'Close' button to 'Stop'. Pressing it should kill any running process.
++save last used interface in config.
++Formatting in message boxes.
++change button 'close' to 'stop' only if process runs longer than ca 1.5sec.
++change 'Settings' to 'Options' (application options).
++add 'What's This'help & tooltips.
++improve keyboard navigation (accels, tabs etc)
+
+*** 0.5.4 TODO:
++create WATools
++create int WATools::quality(iface)
++create char* WATools::devices() [preferred]
++function to get gateway address from 'route'
++make wlassistant usable with cafes (login pages):
++ if ping_gateway ok: isConnected=true, isInternet=false.
++ show grayed out connectedIcon.
++ add 'isInternet' NetListViewItem property - set to 'true' when google reached.
++ quietly ping in the bg - if internet reached -> isInternet=true -> redraw change '?' to '->', change
++rewrite function to get gateway address to parse DHCP client files, so 'route' output is the last resort. (fast VS very slow).
++detect if connected AFTER scanning and showing network list. Otherwise it takes too long before something shows up.
++add paths to DHCP files with lease info to WAConfig, so user can modify them by hand-editing config file when necessary.
++create WATools::ap, WATools::ifname, WATools::setIfname, WATools::txpower
++review 'timerConnectionCheck' occurences. Make it work regardless of connectedItem presence (to detect if connected from an outside app)
++change QTimer::singleShot(...,..., SLOT(checkConnectionStatus()) ) to an timer object so it can be stopped at scan/disconnect -> this fixes 'wlassistant crashes when pressing 'scan' a lot' bug.
++set config groups
++create README with usage hints
++change 'restricted' to 'shared key'
++change 'open' to 'open system'
++change 'connect from selected network' to 'connect to connected network'
++add Portugese Brazilian translation (by Daniel Nascimento)
++add Polish description to .desktop file (Comment[pl])
+
+*** 0.5.4a TODO:
++remove setIfname and ifname from WATools, get it from argument of each function.
++don't check for active connection when no scan results.
++change linux/socket.h to sys/socket.h in watools.cpp
++fix 'no scan results' problem
++make WATools::txpower return -1 if radio is disabled.
++add spanish translation by mariodebian
+
+*** 0.5.5 TODO:
++add 'ASCII' checkbox for WEP key field. (prepends "s:")
++change "Checking radio..." and "ok"/not ok to "Radio OK" or "Radio not ok".
++apply patch for config.in.in (by Sheldon Lee-Wen)
++version in title
++?review WATools and fix crash reason.
++add QStringList dependancy to WATools, update functions to utilize it.
++get we_version from iw_something_kernel_we function, cache it. (watools)
++migrate to bksys/scons
++detect paths to .pid and .info files. It's too hard to figure it out by the users. Fixes "can't switch network" bug.
++no console output if radio ok.
++add missing i18n (wlassistant.cpp, line 382
++make kernel socket number static. open when needed, reuse later. Create WATools::cleanup.
++normalize quality returned by scan results.
+
+
+*** 0.5.6 TODO:
++skip channel setting if not supported
++wait a bit before connection state checking
++per-network option to run user-specified commands after/before (dis)connecting.
++option to auto connect on startup
+
+*** 0.5.7 TODO:
++hide WEP key in stdout and edit dialogs
++AP grouping
++horiz. center 'secured' icon
++fix bug: connected item NOT highlighted, when AP is "any"
++experimental WPA-PSK support:
++ get WPA settings from scanning
++ WPA support in connection wizard and edit dialog
++ WPA config file generator
++ wpa_supplicant status monitoring using wpa_cli
++ WPA driver detection
++ Show error when trying to connect to WPA-protected net and wpa_supplicant is not available.
++change "Group APs with same ESSID" label
++remove "...supported by iwconfig..." label (WEP key, wizard)
++fix dhclient association not being recognized -> ping to verify connection ONLY with manual settings.
++fix regression from 0.5.5: dhclient fails to connect
++don't check for connection while wizard is running.
++implement WATools::setUp/isUp using ioctl, no more ifconfig calls and output parsing
++implement WATools::doRequest/doWirelessRequest to minimize code duplication
++don't resolve names when getting gateway from route (faster)
++fix crash when "Active connection found." for AP=any
++remove all "ifup" action instances
++define and use global WA_CONNECTION_CHECK_INTERVAL
++define and use WA_TX_THRESHOLD in WATools
++remove gateway detection code
++fix "Group Access Points..." label capitalization
++adapt NetListViewItem to new connection status checking
++fix: background check not disabled when connecting on startup.
++remove redundant actions in netparams.h
++fix flags operators
++show channel of best AP if they're grouped
++run wpa_supplicant detached. Monitor using wpa_cli
++don't check status when reconnection dialog is open
++remove wlassistantwpa file on disconnection
++detect running DHCP client when connection detected on startup ( get NetParams.dhcp from setParamsFromConfig? )
++run setParamsFromItem before auto connecting (to properly set encryption settings)
++update Polish translation (help from riklaunim)
++remove default gateway upon disconnection if not managed by DHCP client (add "route_del" action)
++new connection detection. Incremental, in WATools, no more pings. Removed isConnected in wlasssistant.*
++remove cluttering borders in user interface & more
++review possible iwlist scan outputs for WPA/WPA2-PSK
++review/fix bugs on sf formus
++TEST TEST TEST
+
+*** 0.5.8 TODO:
+-Drop dependancy on ifconfig and route
+- replace "ifconfig_manual" with new WATools functions.
+- replace 'route' calls with ioctls SIOCADDRT and SIOCDELRT
+-review netConnect function.
+-fix keyboard navigation (enter should connect, not quit!)
+-UI polish
+-checkbox "Connect now!" in the last page of wizard
+-meaningful messages about possible wpa_supplicant errors
+-check for iwlib in configure script
+-if connection lost and user wants to reconnect: disconnect and then scan before connecting to check if network is still available.
+-real system tray support
+-change "Quit upon successful connection" checkbox to "Minimize to system tray on successful connection"
+
+*** 0.5.9 TODO:
+-integrade kvpnc via dcop ( profiles(), setProfile(), doConnect(), doDisconnect() )
+-fix all outstanding bugs
+-update as many translations as possible
+-make WPA-PSK support rock-stable
+-code cleanup
+-update/create WhatsThis and tooltips
+
+*** 0.6.0 TODO:
+-DCOP interface
+-passive popups
+
+0.6.9 TODO:
+-preliminary support for wlan-ng
+
+*** 0.7.0 TODO:
+-wlan-ng support
+
+
+
+*** I'm really bored TODO:
+-About dialog
+-Help
+
+
+***************************************************************************************
+*** IDEAS ***
+***************************************************************************************
+
+*** GENERAL ***
+
++ Do not show interface combo if only one interface found
++- detect paths
++ - pidof, ifconfig, iwconfig, iwlist, dhcpcd/dhclient...
+
++ no UI for path selection
++ wizard with net params config (auto/manual, DNS etc, ESSID if needed) for unknown APs. Returns config string (AP::ESSID::NetScore::<parameters>).
++ NetParams structure
++ save settings to AP (but also store ESSID)
++ if more that one AP with same ESSID - allow settings for all APs.
+
++ on scanning:
++ if more that one AP with same ESSID - show a single entry
+
+- on connecting:
++ if AP & ESSID match - connect.
++ if match, but ENCRYPTION setting changed - disable enc/ask to enable.
+- if AP matches, ESSID does not - ask if settings for AP should be used, change ESSID in config
+- if only ESSID matches - ask.
++ if none match - ask.(show 1st connection wizard)
+
+- tray icon menu:
+- <some statistics>
+- -----------------------
+- disconnect (if connected)
+- reconnect (if connected)
+- connect (use preferred)
+- -----------------------
+- connect to -> ...
+- -----------------------
+- quit
+
+- connection monitoring:
++ ping every 10/15/20s (?). if connection down:
+- reconnect (if AP still found)
+- connect to different AP same ESSID (if present)
+- connect to known network with highest NetScore
+- popup main win to select new network if any present, but none known
+- popup error message if no network found. disconnect.
+
++ RMB on network entry:
++ connect
++ disconnect
++ reconnect
++ edit settings... (if network known)
++ forget settings...
+
+
+*********************************************************
+*** ALWAYS CHANGE VERSION REQUIREMENTS IN UI FILES!!! ***
+*** ALWAYS CHANGE VERSION IN PACKAGE INFORMATION!!! ***
+*** ALWAYS CHECK 'REMOVE ME' code!!! ***
+********************************************************* \ No newline at end of file
diff --git a/icons/hi16-app-wlassistant.png b/icons/hi16-app-wlassistant.png
new file mode 100644
index 0000000..850e631
--- /dev/null
+++ b/icons/hi16-app-wlassistant.png
Binary files differ
diff --git a/icons/hi32-app-wlassistant.png b/icons/hi32-app-wlassistant.png
new file mode 100644
index 0000000..8b63c5a
--- /dev/null
+++ b/icons/hi32-app-wlassistant.png
Binary files differ
diff --git a/po/ar.po b/po/ar.po
new file mode 100644
index 0000000..488d5f0
--- /dev/null
+++ b/po/ar.po
@@ -0,0 +1,969 @@
+# translation of ar.po to Arabic
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Mohammed Gamal <m.gamal005@gmail.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: ar\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-04-02 02:31+0200\n"
+"PO-Revision-Date: 2006-07-10 17:40+0300\n"
+"Last-Translator: Mohammed Gamal <m.gamal005@gmail.com>\n"
+"Language-Team: Arabic\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:103
+msgid "Initializing..."
+msgstr "جاري التحميل..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:110
+msgid ""
+"Kernel 2.6 or later not present.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"الإصدار 2.6 من النواة غير موجود.\n"
+"مساعد الشبكات اللاسلكية لن يغلق."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:156
+msgid ""
+"No usable wireless devices found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"لم يتم العثور على أي أجهزة لاسلكية.\n"
+"سيقوم مساعد الشبكات اللاسلكية بالخروج الآن."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:179
+msgid ""
+"<qt><p>You might have insufficient permissions for Wireless Assistant to "
+"function properly.</p><p>Did you run it using '<tt>sudo</tt>'?</p></qt>"
+msgstr ""
+"<qt><p>ربما لا تكون لديك التصاريح الكافية لكي يعمل مساعد الشبكات اللاسلكية "
+"كي يعملبالشكل الصحيح.</p><p>هل قمت بتشغيله باستخدام '<tt>sudo</tt>'؟</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:200
+msgid ""
+"Executable(s) '%1' could not be found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"لم يتم العثور على الملفات التنفيذية '%1'.\n"
+"سيقوم مساعد الشبكات اللاسلكية بالخروج الآن."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid ""
+"Connection to '%1' has been lost!\n"
+"Would you like to reconnect?"
+msgstr "تم فقد الإتصال '%1'!<br> هل تريد اعادة الاتصال؟"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid "Connection Lost"
+msgstr "تم فقد الاتصال"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:252
+msgid ""
+"<qt><p>Settings for network '<b>%1</b>' are about to be deleted.</p><p>Would "
+"you like to continue?</p></qt>"
+msgstr ""
+"<qt><p>أنت على وشك حذف اعدادت الشبكة '<b>%1</b>'.</p><p>هل تريد المتابعة؟</"
+"p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:257
+msgid "Settings deleted."
+msgstr "تم حذف الإعدادات"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:285
+msgid ""
+"<qt><p>File '<i>%1</i>' could not be opened for writing.</p><p>Nameserver(s) "
+"and/or domain are not set.</p></qt>"
+msgstr ""
+"<qt><p>تعذر فتح الملف '<i>%1</i>' للكتابة.</p><p>لم يتم تعيين خوادم الأسماء "
+"و/أو النظاق.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:317
+msgid "Bringing interface %1 up..."
+msgstr "جاري تشغيل الواجهة %1..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:321
+msgid "Waiting before scanning..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:328
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:334
+msgid "Scanning..."
+msgstr "جاري البحث..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:343
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:807
+msgid "Done."
+msgstr "انتهى."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:348
+msgid "No networks found."
+msgstr "لم يتم العثور على أي شبكة."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:351
+#, fuzzy
+msgid ""
+"Radio of your wireless card seems to be turned off using an external switch "
+"on your computer.\n"
+"You need turn it on to be able to use wireless networks."
+msgstr ""
+"الراديو الخاص بالبطاقة اللاسلكية لديك قد تم اطفاؤه باستخدام الزر الخارجي في "
+"الكمبيوتر الخاص بك.\n"
+"يجب عليك تشغيله كي تتمكن من استخدام الشبكات اللاسلكية."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:459
+msgid "Freq (Hz)"
+msgstr "التردد (هيرتز)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:473
+msgid ""
+"Radio of your wireless card is off.\n"
+"Would you like to turn it on?"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:559
+#, fuzzy
+msgid "Auto connection failed."
+msgstr "معالج الإتصال الأول"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:570
+msgid ""
+"<qt><p><b>Can not connect to network '%1'.<b></p><p>The network you are "
+"trying to connect to requires WPA authentication. The necessary executables "
+"<i>wpa_supplicant</i> and <i>wpa_cli</i> could not be found. Install "
+"<i>wpa_supplicant</i> and restart Wireless Assistant to connect.</p></qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:579
+msgid "%1 - First Connection Wizard"
+msgstr "%1 - معالج الإتصال الأول"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:616
+msgid "Network settings updated."
+msgstr "تم تحدبث اعدادات الشبكة."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:644
+#, fuzzy
+msgid "Running pre-connection command..."
+msgstr "فشل الإتصال."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:650
+msgid "Connecting to '%1'..."
+msgstr "جاري الإتصال بـ '%1'..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:669
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:685
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:718
+#, fuzzy
+msgid "Connection failed."
+msgstr "تم فقد الاتصال"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:701
+#, fuzzy
+msgid "Running post-connection command..."
+msgstr "معالج الإتصال الأول"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:708
+msgid "Testing connection..."
+msgstr "جاري اختبار الإتصال..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:714
+msgid "Successfully connected to '%1'."
+msgstr "تم الإتصال بـ'%1' بنجاح."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid ""
+"Connection failed.\n"
+"Would you like to review settings for this network?"
+msgstr ""
+"فشال الاتصال.\n"
+"هل تريد مراجعة الإعدادت لهذه الشبكة؟"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid "Review Settings?"
+msgstr "هل تريد مراجعة الإعدادات؟"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:761
+msgid ""
+"<qt><p>You are about to disconnect from '<b>%1</b>'.</p><p>Would you like to "
+"continue?<p></qt>"
+msgstr ""
+"<qt><p>أنت على وشك قطع الاتصال بـ '<b>%1</b>'.</p><p>هل تريد المتابعة؟<p></"
+"qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:766
+#, fuzzy
+msgid "Running pre-disconnection command..."
+msgstr "فشل الإتصال."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:772
+msgid "Disconnecting..."
+msgstr "جاري قطع الإتصال..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:778
+msgid "Waiting for DHCP client to shut down..."
+msgstr "جاري انتظار اغلاق عميل DHCP..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:801
+#, fuzzy
+msgid "Running post-disconnection command..."
+msgstr "معالج الإتصال الأول"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:810
+msgid "Cancelled."
+msgstr "ملغى."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:906
+msgid "&Disconnect"
+msgstr "ا&قطع الإتصال"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:908
+msgid "Disconnect from the selected network"
+msgstr "قطع الاتصال عن الشبكة المختارة."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:911
+msgid "&Connect"
+msgstr "ا&تصل"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:913 rc.cpp:39
+#, no-c-format
+msgid "Connect to the selected network"
+msgstr "اتصال بالشبكة المختارة"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:960
+msgid "&Stop"
+msgstr "أق&ف"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:964
+msgid ""
+"Terminate current process\n"
+"(%1)"
+msgstr ""
+"انهاء العملية الحالية\n"
+"(%1)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:979 rc.cpp:26
+#, no-c-format
+msgid "Quit the application"
+msgstr "خروج من البرنامج"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1038
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1047
+msgid "Disconnect..."
+msgstr "اقطع الاتصال..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1041
+#, fuzzy
+msgid "Connect"
+msgstr "اتصل"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1043
+msgid "Forget Settings..."
+msgstr "تجاهل الإعدادات..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1044
+msgid "Edit Settings..."
+msgstr "تحرير الإعدادات..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1050
+msgid "Configure and Connect..."
+msgstr "اعدّ و اتصل..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1063
+#, fuzzy
+msgid "%1 Settings"
+msgstr "اعدادات %1"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "محمد جمال"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "m.gamal005@gmail.com"
+
+#: /home/pn/Development/wlassistant/src/main.cpp:30
+#: /home/pn/Development/wlassistant/src/main.cpp:42 rc.cpp:3
+#, no-c-format
+msgid "Wireless Assistant"
+msgstr "مساعد الشبكة اللاسلكية"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:76
+msgid ""
+"<qt><p>The network changed its security settings.</p><p>Please go to "
+"<i>Security</i> tab of the following dialog and configure WEP settings.</p></"
+"qt>"
+msgstr ""
+"<qt><p>لقد تم تغيير اعدادات الأمن لهذه الشبكة.</p><p>فضلا اذهب الى "
+"باب<i>الأمن</i> في صندوق الحوار الخالي و قم بتهيئة اعدادات WEP.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:78
+msgid ""
+"<qt><p>Your WEP Key is not set properly.</p><p>Please go to <i>Security</i> "
+"tab of the following dialog and enter the required key.</p></qt>"
+msgstr ""
+"<qt><p>لم يتم تعيين مفتاخ WEP الخاص بك بالشكل المناسب.</p><p>فضلا اذهب الى "
+"باب <i>الأمن</i> في صندوق الحوار هذا و أدخل المفتاح المطلوب.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:82
+msgid ""
+"<qt><p>The network has stopped broadcasting its ESSID since the last time "
+"you were connected.</p><p>Would you like to use '<b>%1</b>' as an ESSID for "
+"this network?</p><p><i>NOTE: If you answer No, a dialog will appear where "
+"you will be able to specify a different ESSID.</i></p></qt>"
+msgstr ""
+"<qt><p>لقد أوقفت الشبكة بث الـESSID الخاص بها منذ آخر مرة اتصلت بها.</"
+"p><p>هل تريد استخدام '<b>%1</b>'كـESSID لهذه الشبكة ؟</p><p><i>ملحوظة: اذا "
+"أجبت بلا, سيظهر مربع حوار يسمح لك باختيار ESSID مختلف .</i></p></qt>"
+
+#: rc.cpp:9
+#, no-c-format
+msgid "Alt+O"
+msgstr ""
+
+#: rc.cpp:12
+#, no-c-format
+msgid "Toggle network list/options"
+msgstr "اظهار و أخفاء قائمة/خيارات تاشبكة"
+
+#: rc.cpp:15
+#, no-c-format
+msgid ""
+"<p><b>Options Button</b></p>\n"
+"<p>Pressing this toggle button will show the available application options.</"
+"p>\n"
+"<p><i>HINT: Press this button again to return to the network list.</i></p>"
+msgstr ""
+"<p><b>زر الخيارات</b></p>\n"
+"<p>نقر هذا الزر سيظهر الخيارات المتوفرة بالبرنامج.</p>\n"
+"<p><i>تلميح: نقر هذا الزر مرة أخرى يعود الى قائمة الشبكات.</i></p>"
+
+#: rc.cpp:23
+#, no-c-format
+msgid "Alt+Q"
+msgstr ""
+
+#: rc.cpp:29
+#, no-c-format
+msgid ""
+"<p><b>Quit Button</b></p>\n"
+"<p>Pressing this button will quit the application.</p>"
+msgstr ""
+"<p><b>زر الخروج</b></p>\n"
+"<p>نقر هذا الزر سينهي البرنامج.</p>"
+
+#: rc.cpp:33
+#, fuzzy, no-c-format
+msgid "Co&nnect"
+msgstr "اتصل"
+
+#: rc.cpp:36 rc.cpp:181
+#, no-c-format
+msgid "Alt+N"
+msgstr ""
+
+#: rc.cpp:42
+#, no-c-format
+msgid ""
+"<p><b>Connect/Disconnect Button</b></p>\n"
+"<p>Pressing this button will connect to/disconnect from the network "
+"currently selected in the network list.</p>"
+msgstr ""
+"<p><b>زر الإتصال/قطع الاتصال</b></p>\n"
+"<p>نقر هذا الزر سيؤدي الى الإتصال/قطع الاتصال بالشبكة المختارة حاليا من "
+"قائمة الشبكات.</p>"
+
+#: rc.cpp:46
+#, no-c-format
+msgid "Refresh"
+msgstr "اعد التحميل"
+
+#: rc.cpp:50
+#, no-c-format
+msgid "Refresh network list"
+msgstr "اعد تحميل قائمة الشبكات"
+
+#: rc.cpp:53
+#, no-c-format
+msgid ""
+"<p><b>Scan Button</b></p>\n"
+"<p>Pressing this button will scan for wireless networks and refresh the "
+"network list.</p>"
+msgstr ""
+"<p><b>زر البحث</b></p>\n"
+"<p>نقر هذا الزر سيقوم بالبحث عن الشبكات اللاسلكية و سيعيد تحميل قائمة "
+"الشبكات.</p>"
+
+#: rc.cpp:57
+#, no-c-format
+msgid "Device:"
+msgstr "الجهاز:"
+
+#: rc.cpp:60
+#, no-c-format
+msgid "Pick a network device to use"
+msgstr "اختر جهاز الشبكة الذي سيتم استخدامه"
+
+#: rc.cpp:63
+#, no-c-format
+msgid ""
+"<p><b>Device Selection</b></p>\n"
+"<p>This combo box allows you to select which wireless card to use.</p>\n"
+"<p><i>NOTE: Selecting a different card will refresh the network list.</i></p>"
+msgstr ""
+"<p><b>اختيار الجهاز</b></p>\n"
+"<p>هذه القائمة تسمح لك باختيار البطاقة اللاسلكية التي تريد استخدامها..</p>\n"
+"<p><i>ملحوظة: اختيار بطاقة مختلفة سيؤدي الى اعادة تحميل قائمة الشبكات.</i></"
+"p>"
+
+#: rc.cpp:68 rc.cpp:199 rc.cpp:325
+#, no-c-format
+msgid "ESSID"
+msgstr "ESSID"
+
+#: rc.cpp:71
+#, no-c-format
+msgid "Channel"
+msgstr "القناة"
+
+#: rc.cpp:74
+#, no-c-format
+msgid "Link Quality"
+msgstr "جودة الوصلة"
+
+#: rc.cpp:77
+#, no-c-format
+msgid "WEP/WPA"
+msgstr ""
+
+#: rc.cpp:80
+#, no-c-format
+msgid "AP"
+msgstr "نقطة الاتصال"
+
+#: rc.cpp:83
+#, no-c-format
+msgid ""
+"<p><b>Network List</b></p>\n"
+"<p>This list shows all the wireless networks that have been found.</p>\n"
+"<p><i>HINT: Click the Refresh button to update this list.</i></p>"
+msgstr ""
+"<p><b>قائمة الشبكات</b></p>\n"
+"<p>هذه القائمة تظهر جميع الشبكات اللاسلكية التي وجدخا البرنامج.</p>\n"
+"<p><i>تلنيح: نقر زر التحديث سيعيد تحميل هذه القائمة.</i></p>"
+
+#: rc.cpp:88
+#, no-c-format
+msgid "Ready"
+msgstr ""
+
+#: rc.cpp:91
+#, no-c-format
+msgid ""
+"<p><b>Status Bar</b></p>\n"
+"<p>Messages describing current process are shown in this area.</p>"
+msgstr ""
+"<p><b>شريط الحالة</b></p>\n"
+"<p>الرسائل التي تصف العملية الحالية ستظهر في هذا المكان.</p>"
+
+#: rc.cpp:95
+#, no-c-format
+msgid "Automatically connect on startup"
+msgstr ""
+
+#: rc.cpp:99
+#, no-c-format
+msgid ""
+"<p><b>AutomaticallyConnect on Startup</b></p>\n"
+"<p>Checking this box will make the application try to connect to the best "
+"available network. Only networks that have been previously configured will "
+"be taken into account.</p>"
+msgstr ""
+
+#: rc.cpp:103
+#, no-c-format
+msgid "Automaticall&y reconnect if connection is lost"
+msgstr ""
+
+#: rc.cpp:106
+#, no-c-format
+msgid "Alt+Y"
+msgstr ""
+
+#: rc.cpp:109
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Automatically Reconnect if Connection is Lost</b></p>\n"
+"<p>Checking this box will make the application try to reconnect after the "
+"connection is lost.</p>"
+msgstr ""
+"<p><b>الخروج عند النجاح في الاتصال</b></p>\n"
+"<p>التأشير على هذا الصندوق سيغلق البرنامج بعد النجاح في إنشاء اتصال بشبكة "
+"لاسلكية.</p>"
+
+#: rc.cpp:113
+#, no-c-format
+msgid "Quit upon successful connection"
+msgstr "اخرج عند النجاح في الاتصال"
+
+#: rc.cpp:117
+#, no-c-format
+msgid ""
+"<p><b>Quit Upon Successful Connection</b></p>\n"
+"<p>Checking this box will make the application close after successfully "
+"establishing a connection to a wireless network.</p>"
+msgstr ""
+"<p><b>الخروج عند النجاح في الاتصال</b></p>\n"
+"<p>التأشير على هذا الصندوق سيغلق البرنامج بعد النجاح في إنشاء اتصال بشبكة "
+"لاسلكية.</p>"
+
+#: rc.cpp:121
+#, no-c-format
+msgid "&Group access points with the same ESSID"
+msgstr ""
+
+#: rc.cpp:124
+#, no-c-format
+msgid "Alt+G"
+msgstr ""
+
+#: rc.cpp:127
+#, no-c-format
+msgid ""
+"<p><b>Group Access Points with the Same ESSID</b></p>\n"
+"<p>Checking this box will make all access points with the same ESSID appear "
+"as one item in the network list.</p>"
+msgstr ""
+
+#: rc.cpp:131
+#, no-c-format
+msgid "Delay before scanning:"
+msgstr ""
+
+#: rc.cpp:134 rc.cpp:145 rc.cpp:167
+#, no-c-format
+msgid "Specify how long to wait for an IP"
+msgstr "يحدد الحد الأقضى لانتظار الحصول على عنوان IP"
+
+#: rc.cpp:137 rc.cpp:148 rc.cpp:170
+#, no-c-format
+msgid ""
+"<p><b>DHCP Client Timeout</b></p>\n"
+"<p>This option specifies the amount of time after which the application "
+"should stop waiting for an IP address and assume that the connection has "
+"failed.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have problems connecting "
+"to some networks.</i></p>"
+msgstr ""
+"<p><b>الوقت الأقصى لعميل DHCP</b></p>\n"
+"<p>هذا الخيار يحدد مقدار الوقت الذي يجب في أن يتوقف البرنامج عن انتظار "
+"الحصول على عنوان IP و أن يعتبر أنه فشل في انشاءاتصال.</p>\n"
+"<p><i>تلميح: زيادة هذا الرقم قد تساعدك اذا كانت لديك مشاكل في الاتصالببعض "
+"الشبكات.</i></p>"
+
+#: rc.cpp:142
+#, no-c-format
+msgid "DHCP client timeout:"
+msgstr "الوقت الأقصى لعميل DHCP:"
+
+#: rc.cpp:153 rc.cpp:164 rc.cpp:412 rc.cpp:441 rc.cpp:470 rc.cpp:499
+#, no-c-format
+msgid "s"
+msgstr "s"
+
+#: rc.cpp:156
+#, fuzzy, no-c-format
+msgid "Specify how long to wait before scanning"
+msgstr "يحدد الحد الأقضى لانتظار الحصول على عنوان IP"
+
+#: rc.cpp:159
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Delay Before Scanning</b></p>\n"
+"<p>This option specifies the amount of time to wait between bringing the "
+"interface up and performing a scan.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have to refresh the list "
+"manually to see all the available networks.</i></p>"
+msgstr ""
+"<p><b>الوقت الأقصى لعميل DHCP</b></p>\n"
+"<p>هذا الخيار يحدد مقدار الوقت الذي يجب في أن يتوقف البرنامج عن انتظار "
+"الحصول على عنوان IP و أن يعتبر أنه فشل في انشاءاتصال.</p>\n"
+"<p><i>تلميح: زيادة هذا الرقم قد تساعدك اذا كانت لديك مشاكل في الاتصالببعض "
+"الشبكات.</i></p>"
+
+#: rc.cpp:175
+#, no-c-format
+msgid ""
+"<i>Press the button below to enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</i>"
+msgstr ""
+"<i>انقر هذا الزر لتمكين جميع الرسائل التي تم تعطيلها عند اختيار عدم اظهارها "
+"مرة أخرى.</i>"
+
+#: rc.cpp:178
+#, fuzzy, no-c-format
+msgid "E&nable All Messages"
+msgstr "تمكين جميع الرسائل"
+
+#: rc.cpp:184
+#, no-c-format
+msgid ""
+"<p><b>Enable All Messages</b></p>\n"
+"<p>Pressing this button will enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</p>"
+msgstr ""
+"<p><b>تمكين جميع الرسائل</b></p>\n"
+"<p>نقر هذا الزر سيمكن جميع الرسائل التي تم تعطيلها عند اختيار عدم اظهارها "
+"مرة أخرى.</p>"
+
+#: rc.cpp:188
+#, no-c-format
+msgid "First Connection Wizard"
+msgstr "معالج الإتصال الأول"
+
+#: rc.cpp:191
+#, no-c-format
+msgid "Welcome to First Connection Wizard"
+msgstr "أهلا بك في معالج الإتصال الأول"
+
+#: rc.cpp:194
+#, no-c-format
+msgid ""
+"<b><p>This is the first time you are trying to connect to the selected "
+"network.</p></b>\n"
+"<p>You will be asked a few questions necessary to configure this connection."
+"</p>\n"
+"<p><i>Press Next to continue.</i></p>"
+msgstr ""
+"<b><p>هذه ي المرة الأولى التي تحاول فيها الاتصال بالشبكةالمختارة.</p></b>\n"
+"<p>سيتم سؤالك بعض الأسئلة الضرورية لإعداد هذا الاتصال.</p>\n"
+"<p><i>انقر التالي للمتابعة.</i></p>"
+
+#: rc.cpp:202
+#, no-c-format
+msgid ""
+"<p><b>You are trying to connect to a network that does not broadcast its "
+"ESSID.</b></p>\n"
+"<p>Please specify ESSID that you would like to use when connecting to this "
+"access point.</p>"
+msgstr ""
+"<p><b>You are trying to connect to a network that does not broadcast its "
+"ESSID.</b></p>\n"
+"<p>Please specify ESSID that you would like to use when connecting to this "
+"access point.</p>"
+
+#: rc.cpp:206 rc.cpp:328
+#, no-c-format
+msgid "ESSID:"
+msgstr "ESSID:"
+
+#: rc.cpp:209
+#, no-c-format
+msgid "Interface Configuration"
+msgstr "اعدادات الواجهة"
+
+#: rc.cpp:213 rc.cpp:334
+#, no-c-format
+msgid "Automatic (DHCP)"
+msgstr "أوتوماتيكي (DHCP)"
+
+#: rc.cpp:217
+#, no-c-format
+msgid "Manual"
+msgstr "يدوي"
+
+#: rc.cpp:221
+#, no-c-format
+msgid ""
+"<p><b>Your IP and other parameters need to be configured to connect to any "
+"network.</b></p>\n"
+"<p>Which configuration option would you like to use when connecting to this "
+"network?</p>"
+msgstr ""
+"<p><b>يجب أن تتم تهيئة عنوان IP الخاص بك اضافة الى خيارات أخرى للاتصال "
+"بأيشبكة.</b></p>\n"
+"<p>أي خيار تريد استخدامه عند الاتصال بهذه الشبكة؟</p>"
+
+#: rc.cpp:225
+#, no-c-format
+msgid "Interface Parameters"
+msgstr "معاملات الواجهة"
+
+#: rc.cpp:228 rc.cpp:355
+#, no-c-format
+msgid "Secondary DNS:"
+msgstr "DNS الثانوي:"
+
+#: rc.cpp:231 rc.cpp:343
+#, no-c-format
+msgid "IP:"
+msgstr "عنوان IP:"
+
+#: rc.cpp:234 rc.cpp:340
+#, no-c-format
+msgid "Netmask:"
+msgstr "قناع الشبكة (netmask):"
+
+#: rc.cpp:237 rc.cpp:358
+#, no-c-format
+msgid "Primary DNS:"
+msgstr "DNS الأساسي:"
+
+#: rc.cpp:240 rc.cpp:349
+#, no-c-format
+msgid "Gateway:"
+msgstr "البوابة:"
+
+#: rc.cpp:243 rc.cpp:352
+#, no-c-format
+msgid "Domain:"
+msgstr "النطاق:"
+
+#: rc.cpp:246 rc.cpp:346
+#, no-c-format
+msgid "Broadcast:"
+msgstr "عنوان البث Broadcast:"
+
+#: rc.cpp:249
+#, no-c-format
+msgid ""
+"<p><b>Please specify interface parameters to be used to connect to this "
+"network.</b></p>\n"
+"<p>You may leave some fields blank.</p>"
+msgstr ""
+"<p><b>فضلا اختر خيارات الواجهة التي تريد استخدامها للاتصال بهذه الشبكة.</b></"
+"p>\n"
+"<p>يمكنك ترك بعض الحقول فارغة.</p>"
+
+#: rc.cpp:253
+#, no-c-format
+msgid "WEP Configuration"
+msgstr "اعدادات WEP"
+
+#: rc.cpp:256
+#, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WEP authentication.</"
+"b></p>\n"
+"<p>Which WEP mode would you like to use?</p>"
+msgstr ""
+"<p><b>الشبكة التي تحاول الاتصال بها تحتاج الى مصادقة WEP.</b></p>\n"
+"<p>ما هو وضع WEP الذي تريد استخدامه؟</p>"
+
+#: rc.cpp:261
+#, fuzzy, no-c-format
+msgid "Open S&ystem"
+msgstr "نظام مفتوح"
+
+#: rc.cpp:264
+#, no-c-format
+msgid "Shared Key"
+msgstr "مفتاح مشترك"
+
+#: rc.cpp:267 rc.cpp:288
+#, fuzzy, no-c-format
+msgid "<p><b>Please provide a key to be used with this network.</b></p>"
+msgstr ""
+"<p><b>فضلا أدخل المفتاخ الذي سيستخدم مع هذه الشبكة.</b></p>\n"
+"يمكن استخدام أي نسق مدعوم من iwconfig."
+
+#: rc.cpp:270
+#, no-c-format
+msgid "WEP key:"
+msgstr "مفتاح WEP:"
+
+#: rc.cpp:273 rc.cpp:285 rc.cpp:370 rc.cpp:391
+#, no-c-format
+msgid "ASCII"
+msgstr ""
+
+#: rc.cpp:276
+#, fuzzy, no-c-format
+msgid "WPA Configuration"
+msgstr "اعدادات WEP"
+
+#: rc.cpp:279
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WPA authentication.</"
+"b></p>"
+msgstr ""
+"<p><b>الشبكة التي تحاول الاتصال بها تحتاج الى مصادقة WEP.</b></p>\n"
+"<p>ما هو وضع WEP الذي تريد استخدامه؟</p>"
+
+#: rc.cpp:282
+#, fuzzy, no-c-format
+msgid "WPA Key:"
+msgstr "مفتاح WEP"
+
+#: rc.cpp:291 rc.cpp:376
+#, no-c-format
+msgid "<b>?<br>?<br>?<br>?</b>"
+msgstr ""
+
+#: rc.cpp:294 rc.cpp:373
+#, no-c-format
+msgid ""
+"WPA Version:<br>Group Cipher:<br>Pairwise Cipher:<br>Authentication Suite:"
+msgstr ""
+
+#: rc.cpp:297
+#, no-c-format
+msgid "Done!"
+msgstr "انتهى!"
+
+#: rc.cpp:300
+#, no-c-format
+msgid ""
+"<p><b>Congratulations!</b></p>\n"
+"<p>You have successfully finished configuring this connection.</p>\n"
+"<p><b>Press Finish to connect!</b></p>"
+msgstr ""
+"<p><b>تهانينا!</b></p>\n"
+"<p>لقد قمت بإعداد هذا الاتصال بنجاح.</p>\n"
+"<p><b>اضغط زر الإنهاء للاتصال!</b></p>"
+
+#: rc.cpp:311
+#, no-c-format
+msgid "F1"
+msgstr "F1"
+
+#: rc.cpp:322
+#, no-c-format
+msgid "I&nterface"
+msgstr "ال&واجهة"
+
+#: rc.cpp:337
+#, fuzzy, no-c-format
+msgid "&Manual"
+msgstr "يدوي"
+
+#: rc.cpp:361
+#, no-c-format
+msgid "Securit&y"
+msgstr "الأ&من"
+
+#: rc.cpp:364
+#, fuzzy, no-c-format
+msgid "WPA Settings"
+msgstr "اعدادات %1"
+
+#: rc.cpp:367 rc.cpp:388
+#, no-c-format
+msgid "Key:"
+msgstr "المفتاح:"
+
+#: rc.cpp:379
+#, fuzzy, no-c-format
+msgid "WEP Settings"
+msgstr "اعدادات %1"
+
+#: rc.cpp:382
+#, fuzzy, no-c-format
+msgid "Open Syste&m"
+msgstr "نظام مفتوح"
+
+#: rc.cpp:385
+#, no-c-format
+msgid "Alt+M"
+msgstr ""
+
+#: rc.cpp:394
+#, fuzzy, no-c-format
+msgid "Shared &Key"
+msgstr "مفتاح مشترك"
+
+#: rc.cpp:397
+#, no-c-format
+msgid "Alt+K"
+msgstr ""
+
+#: rc.cpp:400
+#, no-c-format
+msgid "Advanced"
+msgstr ""
+
+#: rc.cpp:403
+#, no-c-format
+msgid ""
+"<b>Security Warning:</b> the commands specified below will be ran with the "
+"same privileges as Wireless Assistant has."
+msgstr ""
+
+#: rc.cpp:406
+#, fuzzy, no-c-format
+msgid "Pre-Connection Command"
+msgstr "فشل الإتصال."
+
+#: rc.cpp:409 rc.cpp:438 rc.cpp:467 rc.cpp:496
+#, no-c-format
+msgid "Timeout:"
+msgstr ""
+
+#: rc.cpp:415 rc.cpp:444 rc.cpp:473 rc.cpp:502
+#, no-c-format
+msgid "Amount of time after which the process will be killed."
+msgstr ""
+
+#: rc.cpp:418 rc.cpp:447 rc.cpp:476 rc.cpp:505
+#, no-c-format
+msgid ""
+"<p><b>Timeout</b></p>\n"
+"<p>This option specifies how long should Wireless Assistant wait for the "
+"process to finish, before it will be killed.</p>"
+msgstr ""
+
+#: rc.cpp:422 rc.cpp:451 rc.cpp:480 rc.cpp:509
+#, no-c-format
+msgid "Run detached"
+msgstr ""
+
+#: rc.cpp:425 rc.cpp:454 rc.cpp:483 rc.cpp:512
+#, no-c-format
+msgid "Don't wait for the process to finish."
+msgstr ""
+
+#: rc.cpp:428 rc.cpp:457 rc.cpp:486 rc.cpp:515
+#, no-c-format
+msgid ""
+"<p><b>Run Detached</b></p>\n"
+"<p>If this checkbox is selected Wireless Assistant will not wait for the "
+"process to finish.</p>"
+msgstr ""
+
+#: rc.cpp:432 rc.cpp:461 rc.cpp:490 rc.cpp:519
+#, fuzzy, no-c-format
+msgid "Command:"
+msgstr "النطاق:"
+
+#: rc.cpp:435
+#, fuzzy, no-c-format
+msgid "Post-Connection Command"
+msgstr "معالج الإتصال الأول"
+
+#: rc.cpp:464
+#, no-c-format
+msgid "Pre-Disconnection Command"
+msgstr ""
+
+#: rc.cpp:493
+#, no-c-format
+msgid "Post-Disconnection Command"
+msgstr ""
+
+#~ msgid "WEP Mode"
+#~ msgstr "وضع WEP"
+
+#~ msgid "WEP?"
+#~ msgstr "WEP?"
+
+#~ msgid "Application Options"
+#~ msgstr "خيارات البرنامج"
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..f549756
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,997 @@
+# translation of ca.po to
+# translation of ca.po to
+# translation of es.po to
+# translation of es.po to
+# translation of wlassistant to Brazilian Portuguese
+# This file is distributed under the same license as the wlassistant package.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# ClawLinux, 2005.
+# ClawLinux, 2005.
+# ClawLinux, 2005.
+# ClawLinux, 2005.
+# Daniel Nascimento <danieln@syst.com.br>, 2005.
+# ClawLinux, 2005.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ca\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-04-02 02:31+0200\n"
+"PO-Revision-Date: 2005-10-06 22:40+0200\n"
+"Last-Translator: ClawLinux\n"
+"Language-Team: <ca@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9.1\n"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:103
+msgid "Initializing..."
+msgstr "Engegant..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:110
+msgid ""
+"Kernel 2.6 or later not present.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Kernel 2.6 o superior no trobat.\n"
+"L'assistent de xarxes inalàmbriques es tancarà ara."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:156
+msgid ""
+"No usable wireless devices found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"No s'ha trobat cap dispositiu inalàmbric.\n"
+"L'assistent de xarxes inalàmbriques es tancarà ara."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:179
+msgid ""
+"<qt><p>You might have insufficient permissions for Wireless Assistant to "
+"function properly.</p><p>Did you run it using '<tt>sudo</tt>'?</p></qt>"
+msgstr ""
+"<qt><p>Ha de tenir suficient permís per executar l'Assistent de Xarxes "
+"Inalàmbriques satisfactoriament.</p><p>L'ha executat amb '<tt>sudo</tt>'?</"
+"p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:200
+msgid ""
+"Executable(s) '%1' could not be found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Programa(s) '%1' no troba(s).\n"
+"L'assistent de xarxes inalàmbriques es tancarà ara."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid ""
+"Connection to '%1' has been lost!\n"
+"Would you like to reconnect?"
+msgstr ""
+"La connexió a '%1' s'ha perdut!\n"
+"Vol tornar a connectar?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid "Connection Lost"
+msgstr "Connexió Perduda"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:252
+msgid ""
+"<qt><p>Settings for network '<b>%1</b>' are about to be deleted.</p><p>Would "
+"you like to continue?</p></qt>"
+msgstr ""
+"<qt><p>Les configuracions de xarxa '<b>%1</b>' seran esborrades.</p><p>Vol "
+"continuar?</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:257
+msgid "Settings deleted."
+msgstr "Configuracions esborrades."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:285
+msgid ""
+"<qt><p>File '<i>%1</i>' could not be opened for writing.</p><p>Nameserver(s) "
+"and/or domain are not set.</p></qt>"
+msgstr ""
+"<qt><p>Arxiu '<i>%1</i>' no pot ser obert per la escriptura.</p><p>Servidor "
+"de nom(s) i/o domini no pot ser configurat.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:317
+msgid "Bringing interface %1 up..."
+msgstr "Activant interfície %1..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:321
+msgid "Waiting before scanning..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:328
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:334
+msgid "Scanning..."
+msgstr "Cercant..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:343
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:807
+msgid "Done."
+msgstr "Fet."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:348
+msgid "No networks found."
+msgstr "No s'ha trobat xarxes."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:351
+#, fuzzy
+msgid ""
+"Radio of your wireless card seems to be turned off using an external switch "
+"on your computer.\n"
+"You need turn it on to be able to use wireless networks."
+msgstr ""
+"La senyal de la teva targeta inalàmbrica ha sigut desactivada amb un "
+"interruptor del seu equip.\n"
+"Es necessari que activi l'interrumptor per utilitzar les xarxes "
+"inalàmbriques."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:459
+msgid "Freq (Hz)"
+msgstr "Freq (Hz)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:473
+msgid ""
+"Radio of your wireless card is off.\n"
+"Would you like to turn it on?"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:559
+#, fuzzy
+msgid "Auto connection failed."
+msgstr "Assistent de Primera Connexió"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:570
+msgid ""
+"<qt><p><b>Can not connect to network '%1'.<b></p><p>The network you are "
+"trying to connect to requires WPA authentication. The necessary executables "
+"<i>wpa_supplicant</i> and <i>wpa_cli</i> could not be found. Install "
+"<i>wpa_supplicant</i> and restart Wireless Assistant to connect.</p></qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:579
+msgid "%1 - First Connection Wizard"
+msgstr "%1 - Assistent de primera connexió"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:616
+msgid "Network settings updated."
+msgstr "Configuracións de xarxa actualitzades."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:644
+#, fuzzy
+msgid "Running pre-connection command..."
+msgstr "Connexió fallida."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:650
+msgid "Connecting to '%1'..."
+msgstr "Connectant a '%1'..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:669
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:685
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:718
+#, fuzzy
+msgid "Connection failed."
+msgstr "Connexió Perduda"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:701
+#, fuzzy
+msgid "Running post-connection command..."
+msgstr "Assistent de Primera Connexió"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:708
+msgid "Testing connection..."
+msgstr "Comprobant connexió..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:714
+msgid "Successfully connected to '%1'."
+msgstr "Connectat satisfactoriament a '%1'."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid ""
+"Connection failed.\n"
+"Would you like to review settings for this network?"
+msgstr ""
+"La connexió ha fallit.\n"
+"Vol revisar la configuració d'aquesta xarxa?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid "Review Settings?"
+msgstr "Revisar configuracions?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:761
+msgid ""
+"<qt><p>You are about to disconnect from '<b>%1</b>'.</p><p>Would you like to "
+"continue?<p></qt>"
+msgstr ""
+"<qt><p>Està a punt de desconnectar-se de '<b>%1</b>'.</p><p>Vol continuar?"
+"<p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:766
+#, fuzzy
+msgid "Running pre-disconnection command..."
+msgstr "Connexió fallida."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:772
+msgid "Disconnecting..."
+msgstr "Desconnectant..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:778
+msgid "Waiting for DHCP client to shut down..."
+msgstr "Esperant a que el client DHCP finalitzi..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:801
+#, fuzzy
+msgid "Running post-disconnection command..."
+msgstr "Assistent de Primera Connexió"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:810
+msgid "Cancelled."
+msgstr "Cancel·lat."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:906
+msgid "&Disconnect"
+msgstr "&Desconnectar"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:908
+msgid "Disconnect from the selected network"
+msgstr "Desconnectar de la xarxa sel·lecionada"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:911
+msgid "&Connect"
+msgstr "&Connectar"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:913 rc.cpp:39
+#, no-c-format
+msgid "Connect to the selected network"
+msgstr "Connectar a la xarxa sel·leccionada"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:960
+msgid "&Stop"
+msgstr "&Parar"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:964
+msgid ""
+"Terminate current process\n"
+"(%1)"
+msgstr ""
+"Finalitzar el procés actual\n"
+"(%1)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:979 rc.cpp:26
+#, no-c-format
+msgid "Quit the application"
+msgstr "Sortir de l'aplicació"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1038
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1047
+msgid "Disconnect..."
+msgstr "Desconnectar..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1041
+#, fuzzy
+msgid "Connect"
+msgstr "Connectar"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1043
+msgid "Forget Settings..."
+msgstr "Oblidar Configuracions..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1044
+msgid "Edit Settings..."
+msgstr "Editar Configuracions..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1050
+msgid "Configure and Connect..."
+msgstr "Configurar y Connectar..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1063
+#, fuzzy
+msgid "%1 Settings"
+msgstr "%1 Configuracions"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Adonay Sanz Alsina"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "adonay@k-demar.org"
+
+#: /home/pn/Development/wlassistant/src/main.cpp:30
+#: /home/pn/Development/wlassistant/src/main.cpp:42 rc.cpp:3
+#, no-c-format
+msgid "Wireless Assistant"
+msgstr "Asistent de xarxes inalàmbriques"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:76
+msgid ""
+"<qt><p>The network changed its security settings.</p><p>Please go to "
+"<i>Security</i> tab of the following dialog and configure WEP settings.</p></"
+"qt>"
+msgstr ""
+"<qt><p>La xarxa ha canviat la seva configuració de seguretat.</p><p>Si us "
+"plau ves a la pestanya<i>Seguretat</i> del següent diàleg i configura els "
+"paràmetres WEP.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:78
+msgid ""
+"<qt><p>Your WEP Key is not set properly.</p><p>Please go to <i>Security</i> "
+"tab of the following dialog and enter the required key.</p></qt>"
+msgstr ""
+"<qt><p>La seva clau WEP no està configurada correctament.</p><p>Si us plau "
+"ves a la pestanya <i>Seguretat</i> i introdueixi la clau necessària.</p></"
+"qt> "
+
+#: /home/pn/Development/wlassistant/src/netparams.h:82
+msgid ""
+"<qt><p>The network has stopped broadcasting its ESSID since the last time "
+"you were connected.</p><p>Would you like to use '<b>%1</b>' as an ESSID for "
+"this network?</p><p><i>NOTE: If you answer No, a dialog will appear where "
+"you will be able to specify a different ESSID.</i></p></qt>"
+msgstr ""
+"<qt><p>La red ha parat el d'enviar el seu ESSID des de l'última vegada que "
+"s'ha connectat.</p><p>Vol utilitzar '<b>$1</b> com ESSID d'aquesta xarxa?</"
+"p><p><i>NOTA: Si respon NO, un quadre de dialeg apareixerà on podrà indicar "
+"un ESSID diferent..</i></p></qt>"
+
+#: rc.cpp:9
+#, no-c-format
+msgid "Alt+O"
+msgstr ""
+
+#: rc.cpp:12
+#, no-c-format
+msgid "Toggle network list/options"
+msgstr "Alternar llista de xarxes/opciones"
+
+#: rc.cpp:15
+#, no-c-format
+msgid ""
+"<p><b>Options Button</b></p>\n"
+"<p>Pressing this toggle button will show the available application options.</"
+"p>\n"
+"<p><i>HINT: Press this button again to return to the network list.</i></p>"
+msgstr ""
+"<p><b>Opcions</b></p>\n"
+"<p>Prement aquest botó de dos posicions, podrà visualitzar les opcions del "
+"programa.</p>\n"
+"<p><i>NOTA: Prement novament el botó, tornarà a la llista de xarxes.</i></p>"
+
+#: rc.cpp:23
+#, no-c-format
+msgid "Alt+Q"
+msgstr ""
+
+#: rc.cpp:29
+#, no-c-format
+msgid ""
+"<p><b>Quit Button</b></p>\n"
+"<p>Pressing this button will quit the application.</p>"
+msgstr ""
+"<p><b>Sortir</b></p>\n"
+"<p>Prement aquest botó l'aplicació es tancarà.</p>"
+
+#: rc.cpp:33
+#, fuzzy, no-c-format
+msgid "Co&nnect"
+msgstr "Connectar"
+
+#: rc.cpp:36 rc.cpp:181
+#, no-c-format
+msgid "Alt+N"
+msgstr ""
+
+#: rc.cpp:42
+#, no-c-format
+msgid ""
+"<p><b>Connect/Disconnect Button</b></p>\n"
+"<p>Pressing this button will connect to/disconnect from the network "
+"currently selected in the network list.</p>"
+msgstr ""
+"<p><b>Connectar/Desconnectar</b></p>\n"
+"<p>Prement aquest botó es Connecta/Desconnecta de la xarxa sel·leccionada en "
+"la llista de xarxes inalàmbriques trobadesred.</p>"
+
+#: rc.cpp:46
+#, no-c-format
+msgid "Refresh"
+msgstr "Actualizar"
+
+#: rc.cpp:50
+#, no-c-format
+msgid "Refresh network list"
+msgstr "Actualizar llista de xarxes"
+
+#: rc.cpp:53
+#, no-c-format
+msgid ""
+"<p><b>Scan Button</b></p>\n"
+"<p>Pressing this button will scan for wireless networks and refresh the "
+"network list.</p>"
+msgstr ""
+"<p><b>Botó d'Actualizar</b></p>\n"
+"<p>Prement aquest botó es buscaran les xarxes inalàmbriques disponibles i "
+"s'actualitzarà la llista de xarxes.</p>"
+
+#: rc.cpp:57
+#, no-c-format
+msgid "Device:"
+msgstr "Dispositiu:"
+
+#: rc.cpp:60
+#, no-c-format
+msgid "Pick a network device to use"
+msgstr "Sel·leccionar un dispositiu de xarxa"
+
+#: rc.cpp:63
+#, no-c-format
+msgid ""
+"<p><b>Device Selection</b></p>\n"
+"<p>This combo box allows you to select which wireless card to use.</p>\n"
+"<p><i>NOTE: Selecting a different card will refresh the network list.</i></p>"
+msgstr ""
+"<p><b>Sel·lecciño de dispositiu</b></p>\n"
+"<p>Aquest menú desplegable permet sel·leccionar el dispositiu inalàmbric a "
+"utilitzar.</p>\n"
+"<p><i>NOTA: Si sel·lecciona un dispositiu diferent la llista de xarxes "
+"s'actualizarà.</i></p>"
+
+#: rc.cpp:68 rc.cpp:199 rc.cpp:325
+#, no-c-format
+msgid "ESSID"
+msgstr "ESSID"
+
+#: rc.cpp:71
+#, no-c-format
+msgid "Channel"
+msgstr "Canal"
+
+#: rc.cpp:74
+#, no-c-format
+msgid "Link Quality"
+msgstr "Calitat de la senyal"
+
+#: rc.cpp:77
+#, no-c-format
+msgid "WEP/WPA"
+msgstr ""
+
+#: rc.cpp:80
+#, no-c-format
+msgid "AP"
+msgstr "AP"
+
+#: rc.cpp:83
+#, no-c-format
+msgid ""
+"<p><b>Network List</b></p>\n"
+"<p>This list shows all the wireless networks that have been found.</p>\n"
+"<p><i>HINT: Click the Refresh button to update this list.</i></p>"
+msgstr ""
+"<p><b>Llista de xarxes</b></p>\n"
+"<p>Aquesta llista mostra les xarxes inalàmbriques que s'ha trobat.</p>\n"
+"<p><i>NOTA: Premi en el botó per actualizar aquesta llista.</i></p>"
+
+#: rc.cpp:88
+#, no-c-format
+msgid "Ready"
+msgstr ""
+
+#: rc.cpp:91
+#, no-c-format
+msgid ""
+"<p><b>Status Bar</b></p>\n"
+"<p>Messages describing current process are shown in this area.</p>"
+msgstr ""
+"<p><b>Barra d'Estatat</b></p>\n"
+"<p>Els missatges que expliquen el procés actual seran mostrats en aquesta "
+"part.</p>"
+
+#: rc.cpp:95
+#, no-c-format
+msgid "Automatically connect on startup"
+msgstr ""
+
+#: rc.cpp:99
+#, no-c-format
+msgid ""
+"<p><b>AutomaticallyConnect on Startup</b></p>\n"
+"<p>Checking this box will make the application try to connect to the best "
+"available network. Only networks that have been previously configured will "
+"be taken into account.</p>"
+msgstr ""
+
+#: rc.cpp:103
+#, no-c-format
+msgid "Automaticall&y reconnect if connection is lost"
+msgstr ""
+
+#: rc.cpp:106
+#, no-c-format
+msgid "Alt+Y"
+msgstr ""
+
+#: rc.cpp:109
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Automatically Reconnect if Connection is Lost</b></p>\n"
+"<p>Checking this box will make the application try to reconnect after the "
+"connection is lost.</p>"
+msgstr ""
+"<p><b>Sortir un cop connectat correctament.</b></p>\n"
+"<p>Activant aquesta opció el programa es tancarà si la connexió a la xarxa "
+"inalàmbrica s'ha establert correctament.</p>"
+
+#: rc.cpp:113
+#, no-c-format
+msgid "Quit upon successful connection"
+msgstr "Sortir un cop connectat correctament"
+
+#: rc.cpp:117
+#, no-c-format
+msgid ""
+"<p><b>Quit Upon Successful Connection</b></p>\n"
+"<p>Checking this box will make the application close after successfully "
+"establishing a connection to a wireless network.</p>"
+msgstr ""
+"<p><b>Sortir un cop connectat correctament.</b></p>\n"
+"<p>Activant aquesta opció el programa es tancarà si la connexió a la xarxa "
+"inalàmbrica s'ha establert correctament.</p>"
+
+#: rc.cpp:121
+#, no-c-format
+msgid "&Group access points with the same ESSID"
+msgstr ""
+
+#: rc.cpp:124
+#, no-c-format
+msgid "Alt+G"
+msgstr ""
+
+#: rc.cpp:127
+#, no-c-format
+msgid ""
+"<p><b>Group Access Points with the Same ESSID</b></p>\n"
+"<p>Checking this box will make all access points with the same ESSID appear "
+"as one item in the network list.</p>"
+msgstr ""
+
+#: rc.cpp:131
+#, no-c-format
+msgid "Delay before scanning:"
+msgstr ""
+
+#: rc.cpp:134 rc.cpp:145 rc.cpp:167
+#, no-c-format
+msgid "Specify how long to wait for an IP"
+msgstr "Especifiqui el temps d'espera per obtenir la adreça IP"
+
+#: rc.cpp:137 rc.cpp:148 rc.cpp:170
+#, no-c-format
+msgid ""
+"<p><b>DHCP Client Timeout</b></p>\n"
+"<p>This option specifies the amount of time after which the application "
+"should stop waiting for an IP address and assume that the connection has "
+"failed.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have problems connecting "
+"to some networks.</i></p>"
+msgstr ""
+"<p><b>Temps d'espera del client HCP</b></p>\n"
+"<p>Aquesta opció especifica l'interval de temps que aquest programa ha "
+"d'esperar per parar de buscar una direcció IP i assumirà que la connexió ha "
+"fallat.</p>\n"
+"<p><i>NOTA: Augmentant aquest número pot ajudar a connectar-se a reds amb "
+"problemes de temps d'espera.</i></p>"
+
+#: rc.cpp:142
+#, no-c-format
+msgid "DHCP client timeout:"
+msgstr "Temps d'espera del client DHCP:"
+
+#: rc.cpp:153 rc.cpp:164 rc.cpp:412 rc.cpp:441 rc.cpp:470 rc.cpp:499
+#, no-c-format
+msgid "s"
+msgstr "s"
+
+#: rc.cpp:156
+#, fuzzy, no-c-format
+msgid "Specify how long to wait before scanning"
+msgstr "Especifiqui el temps d'espera per obtenir la adreça IP"
+
+#: rc.cpp:159
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Delay Before Scanning</b></p>\n"
+"<p>This option specifies the amount of time to wait between bringing the "
+"interface up and performing a scan.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have to refresh the list "
+"manually to see all the available networks.</i></p>"
+msgstr ""
+"<p><b>Temps d'espera del client HCP</b></p>\n"
+"<p>Aquesta opció especifica l'interval de temps que aquest programa ha "
+"d'esperar per parar de buscar una direcció IP i assumirà que la connexió ha "
+"fallat.</p>\n"
+"<p><i>NOTA: Augmentant aquest número pot ajudar a connectar-se a reds amb "
+"problemes de temps d'espera.</i></p>"
+
+#: rc.cpp:175
+#, no-c-format
+msgid ""
+"<i>Press the button below to enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</i>"
+msgstr ""
+"<i>Prement aquest botó tots els missatges del programa que s'hagin "
+"deshabilitat amb la opció 'No mostrar de nou' seran mostrats.</i>"
+
+#: rc.cpp:178
+#, fuzzy, no-c-format
+msgid "E&nable All Messages"
+msgstr "Habilitar tots els missatges"
+
+#: rc.cpp:184
+#, no-c-format
+msgid ""
+"<p><b>Enable All Messages</b></p>\n"
+"<p>Pressing this button will enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</p>"
+msgstr ""
+"<p><b>Habilitar tots els missatges</b></p>\n"
+"<p>Prement aquest botó tots els missatges del programa que s'hagin "
+"deshabilitat amb la opció 'No mostrar de nou' seran mostrats.</p>"
+
+#: rc.cpp:188
+#, no-c-format
+msgid "First Connection Wizard"
+msgstr "Assistent de Primera Connexió"
+
+#: rc.cpp:191
+#, no-c-format
+msgid "Welcome to First Connection Wizard"
+msgstr "Benvingut a l'Assistent de Primera Connexió"
+
+#: rc.cpp:194
+#, no-c-format
+msgid ""
+"<b><p>This is the first time you are trying to connect to the selected "
+"network.</p></b>\n"
+"<p>You will be asked a few questions necessary to configure this connection."
+"</p>\n"
+"<p><i>Press Next to continue.</i></p>"
+msgstr ""
+"<b><p>Aquesta és la primera vegada que s'intenta connectar a la xarxa "
+"sel·leccionada.</p></b>\n"
+"<p>Se't faran unes quantes preguntes, amb la finalitat de poder configurar "
+"aquesta connexió.</p>\n"
+"<p><i>Premi Següent per continuar.</i></p>"
+
+#: rc.cpp:202
+#, no-c-format
+msgid ""
+"<p><b>You are trying to connect to a network that does not broadcast its "
+"ESSID.</b></p>\n"
+"<p>Please specify ESSID that you would like to use when connecting to this "
+"access point.</p>"
+msgstr ""
+"<p><b>S'està intentant connectar a una red llur Broadcast no té ESSID.</b></"
+"p>\n"
+"<p>Si us plau, indica el ESSID que vol tenir quant es connecti a aquest punt "
+"d'accés.</p>"
+
+#: rc.cpp:206 rc.cpp:328
+#, no-c-format
+msgid "ESSID:"
+msgstr "ESSID:"
+
+#: rc.cpp:209
+#, no-c-format
+msgid "Interface Configuration"
+msgstr "Configuració d'Interfície"
+
+#: rc.cpp:213 rc.cpp:334
+#, no-c-format
+msgid "Automatic (DHCP)"
+msgstr "Automàtic (DHCP)"
+
+#: rc.cpp:217
+#, no-c-format
+msgid "Manual"
+msgstr "Manual"
+
+#: rc.cpp:221
+#, no-c-format
+msgid ""
+"<p><b>Your IP and other parameters need to be configured to connect to any "
+"network.</b></p>\n"
+"<p>Which configuration option would you like to use when connecting to this "
+"network?</p>"
+msgstr ""
+"<p><b>La seva IP i altres paràmetres necessiten ser configurats per "
+"connectarse a qualsevol xarxa.</b></p>\n"
+"<p>Quina opció de configuració desitja usar per connectar-se a aquesta xarxa?"
+"</p>"
+
+#: rc.cpp:225
+#, no-c-format
+msgid "Interface Parameters"
+msgstr "Paràmetres de l'interfície"
+
+#: rc.cpp:228 rc.cpp:355
+#, no-c-format
+msgid "Secondary DNS:"
+msgstr "DNS secundària:"
+
+#: rc.cpp:231 rc.cpp:343
+#, no-c-format
+msgid "IP:"
+msgstr "IP:"
+
+#: rc.cpp:234 rc.cpp:340
+#, no-c-format
+msgid "Netmask:"
+msgstr "Màscara de xarxa:"
+
+#: rc.cpp:237 rc.cpp:358
+#, no-c-format
+msgid "Primary DNS:"
+msgstr "DNS primària:"
+
+#: rc.cpp:240 rc.cpp:349
+#, no-c-format
+msgid "Gateway:"
+msgstr "Porta d'enllaç:"
+
+#: rc.cpp:243 rc.cpp:352
+#, no-c-format
+msgid "Domain:"
+msgstr "Domini:"
+
+#: rc.cpp:246 rc.cpp:346
+#, no-c-format
+msgid "Broadcast:"
+msgstr "Broadcast:"
+
+#: rc.cpp:249
+#, no-c-format
+msgid ""
+"<p><b>Please specify interface parameters to be used to connect to this "
+"network.</b></p>\n"
+"<p>You may leave some fields blank.</p>"
+msgstr ""
+"<p><b>Si us plau, indiqui els paràmetres de l'interfície que seran usats per "
+"aquesta xarxa.</b></p>\n"
+"<p>Pot deixar algún camp en blanc.</p>"
+
+#: rc.cpp:253
+#, no-c-format
+msgid "WEP Configuration"
+msgstr "Configuració WEP"
+
+#: rc.cpp:256
+#, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WEP authentication.</"
+"b></p>\n"
+"<p>Which WEP mode would you like to use?</p>"
+msgstr ""
+"<p><b>La xarxa a la que s'intenta connectar necessita autenticació WEP.</b></"
+"p>\n"
+"<p>Quin mode WEP desitja utilitzar?</p>"
+
+#: rc.cpp:261
+#, fuzzy, no-c-format
+msgid "Open S&ystem"
+msgstr "Red Oberta"
+
+#: rc.cpp:264
+#, no-c-format
+msgid "Shared Key"
+msgstr "Clau compartida"
+
+#: rc.cpp:267 rc.cpp:288
+#, fuzzy, no-c-format
+msgid "<p><b>Please provide a key to be used with this network.</b></p>"
+msgstr ""
+"<p><b>Si us plau, indiqui la clau que serà utilitzada per aquesta xarxa.</"
+"b></p>\n"
+"Qualsevol format suportat per \"iwconfig\" pot ser utilitzat."
+
+#: rc.cpp:270
+#, no-c-format
+msgid "WEP key:"
+msgstr "Clau WEP:"
+
+#: rc.cpp:273 rc.cpp:285 rc.cpp:370 rc.cpp:391
+#, no-c-format
+msgid "ASCII"
+msgstr ""
+
+#: rc.cpp:276
+#, fuzzy, no-c-format
+msgid "WPA Configuration"
+msgstr "Configuració WEP"
+
+#: rc.cpp:279
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WPA authentication.</"
+"b></p>"
+msgstr ""
+"<p><b>La xarxa a la que s'intenta connectar necessita autenticació WEP.</b></"
+"p>\n"
+"<p>Quin mode WEP desitja utilitzar?</p>"
+
+#: rc.cpp:282
+#, fuzzy, no-c-format
+msgid "WPA Key:"
+msgstr "Clau WEP"
+
+#: rc.cpp:291 rc.cpp:376
+#, no-c-format
+msgid "<b>?<br>?<br>?<br>?</b>"
+msgstr ""
+
+#: rc.cpp:294 rc.cpp:373
+#, no-c-format
+msgid ""
+"WPA Version:<br>Group Cipher:<br>Pairwise Cipher:<br>Authentication Suite:"
+msgstr ""
+
+#: rc.cpp:297
+#, no-c-format
+msgid "Done!"
+msgstr "Fet!"
+
+#: rc.cpp:300
+#, no-c-format
+msgid ""
+"<p><b>Congratulations!</b></p>\n"
+"<p>You have successfully finished configuring this connection.</p>\n"
+"<p><b>Press Finish to connect!</b></p>"
+msgstr ""
+"<p><b>Felicitats!</b></p>\n"
+"<p>Ha configurat correctament aquesta connexió.</p>\n"
+"<p><b>Prem Finalitzar per connectar!</b></p>"
+
+#: rc.cpp:311
+#, no-c-format
+msgid "F1"
+msgstr "F1"
+
+#: rc.cpp:322
+#, no-c-format
+msgid "I&nterface"
+msgstr "I&nterfície"
+
+#: rc.cpp:337
+#, fuzzy, no-c-format
+msgid "&Manual"
+msgstr "Manual"
+
+#: rc.cpp:361
+#, no-c-format
+msgid "Securit&y"
+msgstr "Se&guretat"
+
+#: rc.cpp:364
+#, fuzzy, no-c-format
+msgid "WPA Settings"
+msgstr "%1 Configuracions"
+
+#: rc.cpp:367 rc.cpp:388
+#, no-c-format
+msgid "Key:"
+msgstr "Clau:"
+
+#: rc.cpp:379
+#, fuzzy, no-c-format
+msgid "WEP Settings"
+msgstr "%1 Configuracions"
+
+#: rc.cpp:382
+#, fuzzy, no-c-format
+msgid "Open Syste&m"
+msgstr "Red Oberta"
+
+#: rc.cpp:385
+#, no-c-format
+msgid "Alt+M"
+msgstr ""
+
+#: rc.cpp:394
+#, fuzzy, no-c-format
+msgid "Shared &Key"
+msgstr "Clau compartida"
+
+#: rc.cpp:397
+#, no-c-format
+msgid "Alt+K"
+msgstr ""
+
+#: rc.cpp:400
+#, no-c-format
+msgid "Advanced"
+msgstr ""
+
+#: rc.cpp:403
+#, no-c-format
+msgid ""
+"<b>Security Warning:</b> the commands specified below will be ran with the "
+"same privileges as Wireless Assistant has."
+msgstr ""
+
+#: rc.cpp:406
+#, fuzzy, no-c-format
+msgid "Pre-Connection Command"
+msgstr "Connexió fallida."
+
+#: rc.cpp:409 rc.cpp:438 rc.cpp:467 rc.cpp:496
+#, no-c-format
+msgid "Timeout:"
+msgstr ""
+
+#: rc.cpp:415 rc.cpp:444 rc.cpp:473 rc.cpp:502
+#, no-c-format
+msgid "Amount of time after which the process will be killed."
+msgstr ""
+
+#: rc.cpp:418 rc.cpp:447 rc.cpp:476 rc.cpp:505
+#, no-c-format
+msgid ""
+"<p><b>Timeout</b></p>\n"
+"<p>This option specifies how long should Wireless Assistant wait for the "
+"process to finish, before it will be killed.</p>"
+msgstr ""
+
+#: rc.cpp:422 rc.cpp:451 rc.cpp:480 rc.cpp:509
+#, no-c-format
+msgid "Run detached"
+msgstr ""
+
+#: rc.cpp:425 rc.cpp:454 rc.cpp:483 rc.cpp:512
+#, no-c-format
+msgid "Don't wait for the process to finish."
+msgstr ""
+
+#: rc.cpp:428 rc.cpp:457 rc.cpp:486 rc.cpp:515
+#, no-c-format
+msgid ""
+"<p><b>Run Detached</b></p>\n"
+"<p>If this checkbox is selected Wireless Assistant will not wait for the "
+"process to finish.</p>"
+msgstr ""
+
+#: rc.cpp:432 rc.cpp:461 rc.cpp:490 rc.cpp:519
+#, fuzzy, no-c-format
+msgid "Command:"
+msgstr "Domini:"
+
+#: rc.cpp:435
+#, fuzzy, no-c-format
+msgid "Post-Connection Command"
+msgstr "Assistent de Primera Connexió"
+
+#: rc.cpp:464
+#, no-c-format
+msgid "Pre-Disconnection Command"
+msgstr ""
+
+#: rc.cpp:493
+#, no-c-format
+msgid "Post-Disconnection Command"
+msgstr ""
+
+#~ msgid "WEP Mode"
+#~ msgstr "Mode WEP"
+
+#~ msgid "WEP?"
+#~ msgstr "WEP?"
+
+#~ msgid "Application Options"
+#~ msgstr "Opcions"
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..33c36f9
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,983 @@
+# Translation of es.po to Spanish
+# This file is distributed under the same license as the wlassistant package.
+# Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+#
+#
+# Daniel Nascimento <danieln@syst.com.br>, 2005.
+# Enrique Matias Sanchez (aka Quique) <cronopios@gmail.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: es\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-04-02 02:31+0200\n"
+"PO-Revision-Date: 2006-08-17 20:54+0200\n"
+"Last-Translator: Enrique Matias Sanchez (aka Quique) <cronopios@gmail.com>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:103
+msgid "Initializing..."
+msgstr "Inicializando..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:110
+msgid ""
+"Kernel 2.6 or later not present.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Núcleo 2.6 o superior no encontrado.\n"
+"El Asistente de redes inalámbricas se cerrará ahora."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:156
+msgid ""
+"No usable wireless devices found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"No se han encontrado dispositivos inalámbricos.\n"
+"El Asistente de redes inalámbricas se cerrará ahora."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:179
+msgid ""
+"<qt><p>You might have insufficient permissions for Wireless Assistant to "
+"function properly.</p><p>Did you run it using '<tt>sudo</tt>'?</p></qt>"
+msgstr ""
+"<qt><p>Puede que no tenga suficientes permisos para que el Asistente de "
+"redes inalámbricas funcione correctamente.</p><p>¿Ejecutó esta aplicación "
+"usando «<tt>sudo</tt>»?</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:200
+msgid ""
+"Executable(s) '%1' could not be found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"No se ha encontrado el/los ejecutable(s) «%1».\n"
+"El Asistente de redes inalámbricas se cerrará ahora."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid ""
+"Connection to '%1' has been lost!\n"
+"Would you like to reconnect?"
+msgstr ""
+"¡Se ha perdido la conexión a «%1»!\n"
+"¿Quiere volver a conectar?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid "Connection Lost"
+msgstr "Conexión perdida"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:252
+msgid ""
+"<qt><p>Settings for network '<b>%1</b>' are about to be deleted.</p><p>Would "
+"you like to continue?</p></qt>"
+msgstr ""
+"<qt><p>Se van a borrar las configuraciones de la red «<b>%1</b>».</"
+"p><p>¿Quiere continuar?</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:257
+msgid "Settings deleted."
+msgstr "Configuraciones borradas."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:285
+msgid ""
+"<qt><p>File '<i>%1</i>' could not be opened for writing.</p><p>Nameserver(s) "
+"and/or domain are not set.</p></qt>"
+msgstr ""
+"<qt><p>No se puede escribir en el fichero «<i>%1</i>».</p><p>No se ha "
+"configurado el servidor de nombres y/o el dominio.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:317
+msgid "Bringing interface %1 up..."
+msgstr "Activando la interfaz %1..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:321
+msgid "Waiting before scanning..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:328
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:334
+msgid "Scanning..."
+msgstr "Explorando..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:343
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:807
+msgid "Done."
+msgstr "Hecho."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:348
+msgid "No networks found."
+msgstr "No se ha encontrado ninguna red."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:351
+#, fuzzy
+msgid ""
+"Radio of your wireless card seems to be turned off using an external switch "
+"on your computer.\n"
+"You need turn it on to be able to use wireless networks."
+msgstr ""
+"La señal de la tarjeta inalámbrica está desactivada por un interruptor "
+"externo de su computadora.\n"
+"Necesita activarla para poder usar redes inalámbricas."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:459
+msgid "Freq (Hz)"
+msgstr "Frec (Hz)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:473
+msgid ""
+"Radio of your wireless card is off.\n"
+"Would you like to turn it on?"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:559
+#, fuzzy
+msgid "Auto connection failed."
+msgstr "Asistente de primera conexión"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:570
+msgid ""
+"<qt><p><b>Can not connect to network '%1'.<b></p><p>The network you are "
+"trying to connect to requires WPA authentication. The necessary executables "
+"<i>wpa_supplicant</i> and <i>wpa_cli</i> could not be found. Install "
+"<i>wpa_supplicant</i> and restart Wireless Assistant to connect.</p></qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:579
+msgid "%1 - First Connection Wizard"
+msgstr "%1 - Asistente de primera conexión"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:616
+msgid "Network settings updated."
+msgstr "Se han actualizado las configuraciones de red."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:644
+#, fuzzy
+msgid "Running pre-connection command..."
+msgstr "Conexión fallida."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:650
+msgid "Connecting to '%1'..."
+msgstr "Conectando a «%1»..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:669
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:685
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:718
+#, fuzzy
+msgid "Connection failed."
+msgstr "Conexión perdida"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:701
+#, fuzzy
+msgid "Running post-connection command..."
+msgstr "Asistente de primera conexión"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:708
+msgid "Testing connection..."
+msgstr "Comprobando la conexión..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:714
+msgid "Successfully connected to '%1'."
+msgstr "Conectado correctamente a «%1»."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid ""
+"Connection failed.\n"
+"Would you like to review settings for this network?"
+msgstr ""
+"La conexión ha fallado.\n"
+"¿Quiere revisar la configuración de esta red?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid "Review Settings?"
+msgstr "¿Revisar las configuraciones?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:761
+msgid ""
+"<qt><p>You are about to disconnect from '<b>%1</b>'.</p><p>Would you like to "
+"continue?<p></qt>"
+msgstr ""
+"<qt><p>Está a punto de desconectarse de ' «<b>%1</b>».</p><p>¿Desea "
+"continuar?<p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:766
+#, fuzzy
+msgid "Running pre-disconnection command..."
+msgstr "Conexión fallida."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:772
+msgid "Disconnecting..."
+msgstr "Desconectando..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:778
+msgid "Waiting for DHCP client to shut down..."
+msgstr "Esperando finalización del cliente DHCP..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:801
+#, fuzzy
+msgid "Running post-disconnection command..."
+msgstr "Asistente de primera conexión"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:810
+msgid "Cancelled."
+msgstr "Cancelada."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:906
+msgid "&Disconnect"
+msgstr "&Desconectar"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:908
+msgid "Disconnect from the selected network"
+msgstr "Desconectar de la red selecionada"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:911
+msgid "&Connect"
+msgstr "&Conectar"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:913 rc.cpp:39
+#, no-c-format
+msgid "Connect to the selected network"
+msgstr "Conectar a la red seleccionada"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:960
+msgid "&Stop"
+msgstr "&Parar"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:964
+msgid ""
+"Terminate current process\n"
+"(%1)"
+msgstr ""
+"Terminar el proceso actual\n"
+"(%1)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:979 rc.cpp:26
+#, no-c-format
+msgid "Quit the application"
+msgstr "Salir de la aplicación"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1038
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1047
+msgid "Disconnect..."
+msgstr "Desconectar..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1041
+#, fuzzy
+msgid "Connect"
+msgstr "Conectar"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1043
+msgid "Forget Settings..."
+msgstr "Olvidar las opciones..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1044
+msgid "Edit Settings..."
+msgstr "Editar las opciones..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1050
+msgid "Configure and Connect..."
+msgstr "Configurar y conectar..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1063
+#, fuzzy
+msgid "%1 Settings"
+msgstr "Opciones de %1"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Mario Izquierdo (mariodebian),Enrique Matías Sánchez (Quique)"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "mariodebian@gmail.com,cronopios@gmail.com"
+
+#: /home/pn/Development/wlassistant/src/main.cpp:30
+#: /home/pn/Development/wlassistant/src/main.cpp:42 rc.cpp:3
+#, no-c-format
+msgid "Wireless Assistant"
+msgstr "Asistente de redes inalámbricas"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:76
+msgid ""
+"<qt><p>The network changed its security settings.</p><p>Please go to "
+"<i>Security</i> tab of the following dialog and configure WEP settings.</p></"
+"qt>"
+msgstr ""
+"<qt><p>La red ha cambiado sus opciones de seguridad.</p><p>Por favor, vaya a "
+"la solapa <i>Seguridad</i> del siguiente diálogo y configure los parámetros "
+"WEP.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:78
+msgid ""
+"<qt><p>Your WEP Key is not set properly.</p><p>Please go to <i>Security</i> "
+"tab of the following dialog and enter the required key.</p></qt>"
+msgstr ""
+"<qt><p>Su clave WEP no está configurada correctamente.</p><p>Por favor, vaya "
+"a la solapa <i>Seguridad</i> e introduzca la clave necesaria.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:82
+msgid ""
+"<qt><p>The network has stopped broadcasting its ESSID since the last time "
+"you were connected.</p><p>Would you like to use '<b>%1</b>' as an ESSID for "
+"this network?</p><p><i>NOTE: If you answer No, a dialog will appear where "
+"you will be able to specify a different ESSID.</i></p></qt>"
+msgstr ""
+"<qt><p>La red ha dejado de difundir su ESSID desde la última vez que se "
+"conectó.</p><p>¿Quiere usar «<b>$1</b>» como ESSID de esta red'?</"
+"p><p><i>NOTA: Si contesta NO, aparecerá un cuadro de diálogo donde podrá "
+"indicar otro ESSID.</i></p></qt>"
+
+#: rc.cpp:9
+#, no-c-format
+msgid "Alt+O"
+msgstr ""
+
+#: rc.cpp:12
+#, no-c-format
+msgid "Toggle network list/options"
+msgstr "Conmutar lista de redes/opciones"
+
+#: rc.cpp:15
+#, no-c-format
+msgid ""
+"<p><b>Options Button</b></p>\n"
+"<p>Pressing this toggle button will show the available application options.</"
+"p>\n"
+"<p><i>HINT: Press this button again to return to the network list.</i></p>"
+msgstr ""
+"<p><b>Opciones</b></p>\n"
+"<p>Presionando este botón de dos posiciones podrá ver las opciones "
+"disponibles del programa.</p>\n"
+"<p><i>NOTA: Presionando nuevamente el botón regresará a la lista de redes.</"
+"i></p>"
+
+#: rc.cpp:23
+#, no-c-format
+msgid "Alt+Q"
+msgstr ""
+
+#: rc.cpp:29
+#, no-c-format
+msgid ""
+"<p><b>Quit Button</b></p>\n"
+"<p>Pressing this button will quit the application.</p>"
+msgstr ""
+"<p><b>Salir</b></p>\n"
+"<p>Al pulsar este botón se cerrará la aplicación.</p>"
+
+#: rc.cpp:33
+#, fuzzy, no-c-format
+msgid "Co&nnect"
+msgstr "Conectar"
+
+#: rc.cpp:36 rc.cpp:181
+#, no-c-format
+msgid "Alt+N"
+msgstr ""
+
+#: rc.cpp:42
+#, no-c-format
+msgid ""
+"<p><b>Connect/Disconnect Button</b></p>\n"
+"<p>Pressing this button will connect to/disconnect from the network "
+"currently selected in the network list.</p>"
+msgstr ""
+"<p><b>Conectar/Desconectar</b></p>\n"
+"<p>Presionando este botón se conecta/desconecta de la red seleccionada en la "
+"lista de redes.</p>"
+
+#: rc.cpp:46
+#, no-c-format
+msgid "Refresh"
+msgstr "Actualizar"
+
+#: rc.cpp:50
+#, no-c-format
+msgid "Refresh network list"
+msgstr "Actualizar la lista de redes"
+
+#: rc.cpp:53
+#, no-c-format
+msgid ""
+"<p><b>Scan Button</b></p>\n"
+"<p>Pressing this button will scan for wireless networks and refresh the "
+"network list.</p>"
+msgstr ""
+"<p><b>Explorar</b></p>\n"
+"<p>Al pulsar este botón se buscarán redes inalámbricas y se actualizará la "
+"lista de redes.</p>"
+
+#: rc.cpp:57
+#, no-c-format
+msgid "Device:"
+msgstr "Dispositivo:"
+
+#: rc.cpp:60
+#, no-c-format
+msgid "Pick a network device to use"
+msgstr "Seleccionar un dispositivo de red"
+
+#: rc.cpp:63
+#, no-c-format
+msgid ""
+"<p><b>Device Selection</b></p>\n"
+"<p>This combo box allows you to select which wireless card to use.</p>\n"
+"<p><i>NOTE: Selecting a different card will refresh the network list.</i></p>"
+msgstr ""
+"<p><b>Selección de dispositivo</b></p>\n"
+"<p>Este menú desplegable le permite seleccionar qué tarjeta inalámbricausar."
+"</p>\n"
+"<p><i>NOTA: Si selecciona una tarjeta diferente la lista de redes se "
+"actualizará.</i></p>"
+
+#: rc.cpp:68 rc.cpp:199 rc.cpp:325
+#, no-c-format
+msgid "ESSID"
+msgstr "ESSID"
+
+#: rc.cpp:71
+#, no-c-format
+msgid "Channel"
+msgstr "Canal"
+
+#: rc.cpp:74
+#, no-c-format
+msgid "Link Quality"
+msgstr "Calidad del enlace"
+
+#: rc.cpp:77
+#, no-c-format
+msgid "WEP/WPA"
+msgstr ""
+
+#: rc.cpp:80
+#, no-c-format
+msgid "AP"
+msgstr "AP"
+
+#: rc.cpp:83
+#, no-c-format
+msgid ""
+"<p><b>Network List</b></p>\n"
+"<p>This list shows all the wireless networks that have been found.</p>\n"
+"<p><i>HINT: Click the Refresh button to update this list.</i></p>"
+msgstr ""
+"<p><b>Lista de redes</b></p>\n"
+"<p>Esta lista muestra las redes inalámbricas que se han encontrado.</p>\n"
+"<p><i>NOTA: Pulse el botón «Actualizar» para actualizar esta lista.</i></p>"
+
+#: rc.cpp:88
+#, no-c-format
+msgid "Ready"
+msgstr ""
+
+#: rc.cpp:91
+#, no-c-format
+msgid ""
+"<p><b>Status Bar</b></p>\n"
+"<p>Messages describing current process are shown in this area.</p>"
+msgstr ""
+"<p><b>Barra de estado</b></p>\n"
+"<p>En este área se muestran los mensajes que explican el proceso actual.</p>"
+
+#: rc.cpp:95
+#, no-c-format
+msgid "Automatically connect on startup"
+msgstr ""
+
+#: rc.cpp:99
+#, no-c-format
+msgid ""
+"<p><b>AutomaticallyConnect on Startup</b></p>\n"
+"<p>Checking this box will make the application try to connect to the best "
+"available network. Only networks that have been previously configured will "
+"be taken into account.</p>"
+msgstr ""
+
+#: rc.cpp:103
+#, no-c-format
+msgid "Automaticall&y reconnect if connection is lost"
+msgstr ""
+
+#: rc.cpp:106
+#, no-c-format
+msgid "Alt+Y"
+msgstr ""
+
+#: rc.cpp:109
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Automatically Reconnect if Connection is Lost</b></p>\n"
+"<p>Checking this box will make the application try to reconnect after the "
+"connection is lost.</p>"
+msgstr ""
+"<p><b>Salir una vez conectado correctamente.</b></p>\n"
+"<p>Si se marca esta casilla, la aplicación se cerrará tras establecer con "
+"éxito una conexión a una red inalámbrica.</p>"
+
+#: rc.cpp:113
+#, no-c-format
+msgid "Quit upon successful connection"
+msgstr "Salir una vez conectado correctamente"
+
+#: rc.cpp:117
+#, no-c-format
+msgid ""
+"<p><b>Quit Upon Successful Connection</b></p>\n"
+"<p>Checking this box will make the application close after successfully "
+"establishing a connection to a wireless network.</p>"
+msgstr ""
+"<p><b>Salir una vez conectado correctamente.</b></p>\n"
+"<p>Si se marca esta casilla, la aplicación se cerrará tras establecer con "
+"éxito una conexión a una red inalámbrica.</p>"
+
+#: rc.cpp:121
+#, no-c-format
+msgid "&Group access points with the same ESSID"
+msgstr ""
+
+#: rc.cpp:124
+#, no-c-format
+msgid "Alt+G"
+msgstr ""
+
+#: rc.cpp:127
+#, no-c-format
+msgid ""
+"<p><b>Group Access Points with the Same ESSID</b></p>\n"
+"<p>Checking this box will make all access points with the same ESSID appear "
+"as one item in the network list.</p>"
+msgstr ""
+
+#: rc.cpp:131
+#, no-c-format
+msgid "Delay before scanning:"
+msgstr ""
+
+#: rc.cpp:134 rc.cpp:145 rc.cpp:167
+#, no-c-format
+msgid "Specify how long to wait for an IP"
+msgstr "Indique cuanto tiempo esperar para obtener una IP"
+
+#: rc.cpp:137 rc.cpp:148 rc.cpp:170
+#, no-c-format
+msgid ""
+"<p><b>DHCP Client Timeout</b></p>\n"
+"<p>This option specifies the amount of time after which the application "
+"should stop waiting for an IP address and assume that the connection has "
+"failed.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have problems connecting "
+"to some networks.</i></p>"
+msgstr ""
+"<p><b>Tiempo de espera del cliente DHCP</b></p>\n"
+"<p>Esta opción indica la cantidad de tiempo tras la que la aplicación dejará "
+"de esperar una dirección IP y supondrá que la conexión ha fallado.</p>\n"
+"<p><i>NOTA: Aumentar este número puede ayudar si tiene problemas para "
+"conectarse a algunas redes.</i></p>"
+
+#: rc.cpp:142
+#, no-c-format
+msgid "DHCP client timeout:"
+msgstr "Tiempo de espera del cliente DHCP:"
+
+#: rc.cpp:153 rc.cpp:164 rc.cpp:412 rc.cpp:441 rc.cpp:470 rc.cpp:499
+#, no-c-format
+msgid "s"
+msgstr "s"
+
+#: rc.cpp:156
+#, fuzzy, no-c-format
+msgid "Specify how long to wait before scanning"
+msgstr "Indique cuanto tiempo esperar para obtener una IP"
+
+#: rc.cpp:159
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Delay Before Scanning</b></p>\n"
+"<p>This option specifies the amount of time to wait between bringing the "
+"interface up and performing a scan.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have to refresh the list "
+"manually to see all the available networks.</i></p>"
+msgstr ""
+"<p><b>Tiempo de espera del cliente DHCP</b></p>\n"
+"<p>Esta opción indica la cantidad de tiempo tras la que la aplicación dejará "
+"de esperar una dirección IP y supondrá que la conexión ha fallado.</p>\n"
+"<p><i>NOTA: Aumentar este número puede ayudar si tiene problemas para "
+"conectarse a algunas redes.</i></p>"
+
+#: rc.cpp:175
+#, no-c-format
+msgid ""
+"<i>Press the button below to enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</i>"
+msgstr ""
+"<i>Pulse el botón inferior para habilitar todos los mensajes que han sido "
+"desactivados con la opción «No mostrar de nuevo».</i>"
+
+#: rc.cpp:178
+#, fuzzy, no-c-format
+msgid "E&nable All Messages"
+msgstr "Habilitar todos los mensajes"
+
+#: rc.cpp:184
+#, no-c-format
+msgid ""
+"<p><b>Enable All Messages</b></p>\n"
+"<p>Pressing this button will enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</p>"
+msgstr ""
+"<p><b>Habilitar todos los mensajes</b></p>\n"
+"<p>Al pulsar este botón se habilitarán todos los mensajes que han sido "
+"desactivados con la opción «No mostrar de nuevo».</p>"
+
+#: rc.cpp:188
+#, no-c-format
+msgid "First Connection Wizard"
+msgstr "Asistente de primera conexión"
+
+#: rc.cpp:191
+#, no-c-format
+msgid "Welcome to First Connection Wizard"
+msgstr "Bienvenido al Asistente de primera conexión"
+
+#: rc.cpp:194
+#, no-c-format
+msgid ""
+"<b><p>This is the first time you are trying to connect to the selected "
+"network.</p></b>\n"
+"<p>You will be asked a few questions necessary to configure this connection."
+"</p>\n"
+"<p><i>Press Next to continue.</i></p>"
+msgstr ""
+"<b><p>Ésta es la primera vez que se intenta conectar a la red seleccionada.</"
+"p></b>\n"
+"<p>Se le harán unas cuantas preguntas con el fin de configurar esta conexión."
+"</p>\n"
+"<p><i>Pulse «Siguiente» para continuar.</i></p>"
+
+#: rc.cpp:202
+#, no-c-format
+msgid ""
+"<p><b>You are trying to connect to a network that does not broadcast its "
+"ESSID.</b></p>\n"
+"<p>Please specify ESSID that you would like to use when connecting to this "
+"access point.</p>"
+msgstr ""
+"<p><b>Se está intentando conectar a una red que no difunde su ESSID.</b></"
+"p>\n"
+"<p>Por favor, indique el ESSID que quiere usar al conectarse a este punto de "
+"accesso.</p>"
+
+#: rc.cpp:206 rc.cpp:328
+#, no-c-format
+msgid "ESSID:"
+msgstr "ESSID:"
+
+#: rc.cpp:209
+#, no-c-format
+msgid "Interface Configuration"
+msgstr "Configuración de la interfaz"
+
+#: rc.cpp:213 rc.cpp:334
+#, no-c-format
+msgid "Automatic (DHCP)"
+msgstr "Automático (DHCP)"
+
+#: rc.cpp:217
+#, no-c-format
+msgid "Manual"
+msgstr "Manual"
+
+#: rc.cpp:221
+#, no-c-format
+msgid ""
+"<p><b>Your IP and other parameters need to be configured to connect to any "
+"network.</b></p>\n"
+"<p>Which configuration option would you like to use when connecting to this "
+"network?</p>"
+msgstr ""
+"<p><b>Su IP y otros parámetros necesitan ser configurados para conectarse a "
+"cualquier red.</b></p>\n"
+"<p>¿Que opción de configuración desea usar para conectarse a esta red?</p>"
+
+#: rc.cpp:225
+#, no-c-format
+msgid "Interface Parameters"
+msgstr "Parámetros de la interfaz"
+
+#: rc.cpp:228 rc.cpp:355
+#, no-c-format
+msgid "Secondary DNS:"
+msgstr "DNS secundario:"
+
+#: rc.cpp:231 rc.cpp:343
+#, no-c-format
+msgid "IP:"
+msgstr "IP:"
+
+#: rc.cpp:234 rc.cpp:340
+#, no-c-format
+msgid "Netmask:"
+msgstr "Máscara de red:"
+
+#: rc.cpp:237 rc.cpp:358
+#, no-c-format
+msgid "Primary DNS:"
+msgstr "DNS primario:"
+
+#: rc.cpp:240 rc.cpp:349
+#, no-c-format
+msgid "Gateway:"
+msgstr "Puerta de enlace:"
+
+#: rc.cpp:243 rc.cpp:352
+#, no-c-format
+msgid "Domain:"
+msgstr "Dominio:"
+
+#: rc.cpp:246 rc.cpp:346
+#, no-c-format
+msgid "Broadcast:"
+msgstr "Difusión:"
+
+#: rc.cpp:249
+#, no-c-format
+msgid ""
+"<p><b>Please specify interface parameters to be used to connect to this "
+"network.</b></p>\n"
+"<p>You may leave some fields blank.</p>"
+msgstr ""
+"<p><b>Por favor, indique los parámetros de la interfaz que se usarán para "
+"conectarse a esta red.</b></p>\n"
+"<p>Puede dejar algún campo en blanco.</p>"
+
+#: rc.cpp:253
+#, no-c-format
+msgid "WEP Configuration"
+msgstr "Configuración WEP"
+
+#: rc.cpp:256
+#, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WEP authentication.</"
+"b></p>\n"
+"<p>Which WEP mode would you like to use?</p>"
+msgstr ""
+"<p><b>La red a la que intenta conectarse requiere autenticación WEP.</b></"
+"p>\n"
+"<p>¿Qué modo WEP desea usar?</p>"
+
+#: rc.cpp:261
+#, fuzzy, no-c-format
+msgid "Open S&ystem"
+msgstr "Red abierta"
+
+#: rc.cpp:264
+#, no-c-format
+msgid "Shared Key"
+msgstr "Clave compartida"
+
+#: rc.cpp:267 rc.cpp:288
+#, fuzzy, no-c-format
+msgid "<p><b>Please provide a key to be used with this network.</b></p>"
+msgstr ""
+"<p><b>Por favor, indique la clave que se usará para esta red.</b></p>\n"
+"Se puede usar cualquier formato admitido por iwconfig."
+
+#: rc.cpp:270
+#, no-c-format
+msgid "WEP key:"
+msgstr "Clave WEP:"
+
+#: rc.cpp:273 rc.cpp:285 rc.cpp:370 rc.cpp:391
+#, no-c-format
+msgid "ASCII"
+msgstr ""
+
+#: rc.cpp:276
+#, fuzzy, no-c-format
+msgid "WPA Configuration"
+msgstr "Configuración WEP"
+
+#: rc.cpp:279
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WPA authentication.</"
+"b></p>"
+msgstr ""
+"<p><b>La red a la que intenta conectarse requiere autenticación WEP.</b></"
+"p>\n"
+"<p>¿Qué modo WEP desea usar?</p>"
+
+#: rc.cpp:282
+#, fuzzy, no-c-format
+msgid "WPA Key:"
+msgstr "Clave WEP"
+
+#: rc.cpp:291 rc.cpp:376
+#, no-c-format
+msgid "<b>?<br>?<br>?<br>?</b>"
+msgstr ""
+
+#: rc.cpp:294 rc.cpp:373
+#, no-c-format
+msgid ""
+"WPA Version:<br>Group Cipher:<br>Pairwise Cipher:<br>Authentication Suite:"
+msgstr ""
+
+#: rc.cpp:297
+#, no-c-format
+msgid "Done!"
+msgstr "¡Hecho!"
+
+#: rc.cpp:300
+#, no-c-format
+msgid ""
+"<p><b>Congratulations!</b></p>\n"
+"<p>You have successfully finished configuring this connection.</p>\n"
+"<p><b>Press Finish to connect!</b></p>"
+msgstr ""
+"<p><b>¡Felicidades!</b></p>\n"
+"<p>Ha configurado correctamente esta conexión.</p>\n"
+"<p><b>¡Presione «Finalizar» para conectar!</b></p>"
+
+#: rc.cpp:311
+#, no-c-format
+msgid "F1"
+msgstr "F1"
+
+#: rc.cpp:322
+#, no-c-format
+msgid "I&nterface"
+msgstr "I&nterfaz"
+
+#: rc.cpp:337
+#, fuzzy, no-c-format
+msgid "&Manual"
+msgstr "Manual"
+
+#: rc.cpp:361
+#, no-c-format
+msgid "Securit&y"
+msgstr "&Seguridad"
+
+#: rc.cpp:364
+#, fuzzy, no-c-format
+msgid "WPA Settings"
+msgstr "Opciones de %1"
+
+#: rc.cpp:367 rc.cpp:388
+#, no-c-format
+msgid "Key:"
+msgstr "Clave:"
+
+#: rc.cpp:379
+#, fuzzy, no-c-format
+msgid "WEP Settings"
+msgstr "Opciones de %1"
+
+#: rc.cpp:382
+#, fuzzy, no-c-format
+msgid "Open Syste&m"
+msgstr "Red abierta"
+
+#: rc.cpp:385
+#, no-c-format
+msgid "Alt+M"
+msgstr ""
+
+#: rc.cpp:394
+#, fuzzy, no-c-format
+msgid "Shared &Key"
+msgstr "Clave compartida"
+
+#: rc.cpp:397
+#, no-c-format
+msgid "Alt+K"
+msgstr ""
+
+#: rc.cpp:400
+#, no-c-format
+msgid "Advanced"
+msgstr ""
+
+#: rc.cpp:403
+#, no-c-format
+msgid ""
+"<b>Security Warning:</b> the commands specified below will be ran with the "
+"same privileges as Wireless Assistant has."
+msgstr ""
+
+#: rc.cpp:406
+#, fuzzy, no-c-format
+msgid "Pre-Connection Command"
+msgstr "Conexión fallida."
+
+#: rc.cpp:409 rc.cpp:438 rc.cpp:467 rc.cpp:496
+#, no-c-format
+msgid "Timeout:"
+msgstr ""
+
+#: rc.cpp:415 rc.cpp:444 rc.cpp:473 rc.cpp:502
+#, no-c-format
+msgid "Amount of time after which the process will be killed."
+msgstr ""
+
+#: rc.cpp:418 rc.cpp:447 rc.cpp:476 rc.cpp:505
+#, no-c-format
+msgid ""
+"<p><b>Timeout</b></p>\n"
+"<p>This option specifies how long should Wireless Assistant wait for the "
+"process to finish, before it will be killed.</p>"
+msgstr ""
+
+#: rc.cpp:422 rc.cpp:451 rc.cpp:480 rc.cpp:509
+#, no-c-format
+msgid "Run detached"
+msgstr ""
+
+#: rc.cpp:425 rc.cpp:454 rc.cpp:483 rc.cpp:512
+#, no-c-format
+msgid "Don't wait for the process to finish."
+msgstr ""
+
+#: rc.cpp:428 rc.cpp:457 rc.cpp:486 rc.cpp:515
+#, no-c-format
+msgid ""
+"<p><b>Run Detached</b></p>\n"
+"<p>If this checkbox is selected Wireless Assistant will not wait for the "
+"process to finish.</p>"
+msgstr ""
+
+#: rc.cpp:432 rc.cpp:461 rc.cpp:490 rc.cpp:519
+#, fuzzy, no-c-format
+msgid "Command:"
+msgstr "Dominio:"
+
+#: rc.cpp:435
+#, fuzzy, no-c-format
+msgid "Post-Connection Command"
+msgstr "Asistente de primera conexión"
+
+#: rc.cpp:464
+#, no-c-format
+msgid "Pre-Disconnection Command"
+msgstr ""
+
+#: rc.cpp:493
+#, no-c-format
+msgid "Post-Disconnection Command"
+msgstr ""
+
+#~ msgid "WEP Mode"
+#~ msgstr "Modo WEP"
+
+#~ msgid "WEP?"
+#~ msgstr "¿WEP?"
+
+#~ msgid "Application Options"
+#~ msgstr "Opciones de la aplicación"
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..d484a6c
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,987 @@
+# translation of fr.po to
+# translation of fr.po to
+# translation of wlassistant to French
+# This file is distributed under the same license as the wlassistant package.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# Daniel Nascimento <danieln@syst.com.br>, 2005.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: fr\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-04-02 02:31+0200\n"
+"PO-Revision-Date: 2005-09-05 11:55+0200\n"
+"Last-Translator: \n"
+"Language-Team: <fr@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9.1\n"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:103
+msgid "Initializing..."
+msgstr "Initialisation..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:110
+msgid ""
+"Kernel 2.6 or later not present.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Kernel 2.6 ou supérieur non présent.\n"
+"Assistant Wifi va maintenant quitter."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:156
+msgid ""
+"No usable wireless devices found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Aucun adaptateur réseau sans-fil trouvé.\n"
+"Assistant Wifi va maintenant quitter."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:179
+msgid ""
+"<qt><p>You might have insufficient permissions for Wireless Assistant to "
+"function properly.</p><p>Did you run it using '<tt>sudo</tt>'?</p></qt>"
+msgstr ""
+"<qt><p>Vous n'avez peut-être pas les droits nécessaires pour que Assistant "
+"Wifi fonctionne correctement.</p><p>L'avez vous exécuté en utilisant "
+"'<tt>sudo</tt>' ?</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:200
+msgid ""
+"Executable(s) '%1' could not be found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Programme(s) '%1' non trouvé(s).\n"
+"Assistant Wifi va maintenant quitter."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid ""
+"Connection to '%1' has been lost!\n"
+"Would you like to reconnect?"
+msgstr ""
+"Connexion à '%1' a été perdu !\n"
+"Voulez vous vous reconnecter ?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid "Connection Lost"
+msgstr "Connexion perdue"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:252
+msgid ""
+"<qt><p>Settings for network '<b>%1</b>' are about to be deleted.</p><p>Would "
+"you like to continue?</p></qt>"
+msgstr ""
+"<qt><p>les réglages du réseau '<b>%1</b>' vont être effacés.</p><p> Voulez "
+"vous continuez ?</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:257
+msgid "Settings deleted."
+msgstr "Réglages effacées."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:285
+msgid ""
+"<qt><p>File '<i>%1</i>' could not be opened for writing.</p><p>Nameserver(s) "
+"and/or domain are not set.</p></qt>"
+msgstr ""
+"<qt><p>Le fichier '<i>%1</i>' n'a pu être ouvert en écriture.</p><p>Nom du/"
+"des serveur(s) et/ou de domaine non configurés.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:317
+msgid "Bringing interface %1 up..."
+msgstr "Activation de l'interface %1 ..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:321
+msgid "Waiting before scanning..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:328
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:334
+msgid "Scanning..."
+msgstr "Recherche..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:343
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:807
+msgid "Done."
+msgstr "Fait."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:348
+msgid "No networks found."
+msgstr "Aucun réseau."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:351
+#, fuzzy
+msgid ""
+"Radio of your wireless card seems to be turned off using an external switch "
+"on your computer.\n"
+"You need turn it on to be able to use wireless networks."
+msgstr ""
+"La radio de la carte réseau est éteinte par le commutateur de votre "
+"ordinateur.\n"
+"Vous devez l'activer pour pouvoir utiliser les réseaux sans-fils."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:459
+msgid "Freq (Hz)"
+msgstr "Freq (Hz)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:473
+msgid ""
+"Radio of your wireless card is off.\n"
+"Would you like to turn it on?"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:559
+#, fuzzy
+msgid "Auto connection failed."
+msgstr "Assistant de Première Connexion"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:570
+msgid ""
+"<qt><p><b>Can not connect to network '%1'.<b></p><p>The network you are "
+"trying to connect to requires WPA authentication. The necessary executables "
+"<i>wpa_supplicant</i> and <i>wpa_cli</i> could not be found. Install "
+"<i>wpa_supplicant</i> and restart Wireless Assistant to connect.</p></qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:579
+msgid "%1 - First Connection Wizard"
+msgstr "%1 - Assistant de première connexion"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:616
+msgid "Network settings updated."
+msgstr "Configuration du réseau mis à jour."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:644
+#, fuzzy
+msgid "Running pre-connection command..."
+msgstr "Echec de connexion."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:650
+msgid "Connecting to '%1'..."
+msgstr "Connexion à '%1'..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:669
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:685
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:718
+#, fuzzy
+msgid "Connection failed."
+msgstr "Connexion perdue"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:701
+#, fuzzy
+msgid "Running post-connection command..."
+msgstr "Assistant de Première Connexion"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:708
+msgid "Testing connection..."
+msgstr "Test de la connexion..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:714
+msgid "Successfully connected to '%1'."
+msgstr "Connecté avec succès à '%1'."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid ""
+"Connection failed.\n"
+"Would you like to review settings for this network?"
+msgstr ""
+"Echec de connexion.\n"
+"Voulez vous modifer les configurations de ce réseau ?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid "Review Settings?"
+msgstr "Modifier les configurations ?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:761
+msgid ""
+"<qt><p>You are about to disconnect from '<b>%1</b>'.</p><p>Would you like to "
+"continue?<p></qt>"
+msgstr ""
+"<qt><p>Vous allez vous déconnecter de '<b>%1</b>'.</p><p>Voulez vous "
+"continuer ?<p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:766
+#, fuzzy
+msgid "Running pre-disconnection command..."
+msgstr "Echec de connexion."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:772
+msgid "Disconnecting..."
+msgstr "Déconnection..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:778
+msgid "Waiting for DHCP client to shut down..."
+msgstr "En attente de l'arrêt du client DHCP..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:801
+#, fuzzy
+msgid "Running post-disconnection command..."
+msgstr "Assistant de Première Connexion"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:810
+msgid "Cancelled."
+msgstr "Annuler."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:906
+msgid "&Disconnect"
+msgstr "&Déconnecter"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:908
+msgid "Disconnect from the selected network"
+msgstr "Déconnecter le réseau sélectionné"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:911
+msgid "&Connect"
+msgstr "Se &Connecter"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:913 rc.cpp:39
+#, no-c-format
+msgid "Connect to the selected network"
+msgstr "Connexion au réseau sélectionné"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:960
+msgid "&Stop"
+msgstr "&Stop"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:964
+msgid ""
+"Terminate current process\n"
+"(%1)"
+msgstr ""
+"Terminer le processus en cours\n"
+"(%1)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:979 rc.cpp:26
+#, no-c-format
+msgid "Quit the application"
+msgstr "Quitter l'application"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1038
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1047
+msgid "Disconnect..."
+msgstr "Déconnecter..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1041
+#, fuzzy
+msgid "Connect"
+msgstr "Connecter"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1043
+msgid "Forget Settings..."
+msgstr "Effacer les réglages..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1044
+msgid "Edit Settings..."
+msgstr "Editer les réglages..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1050
+msgid "Configure and Connect..."
+msgstr "Configurer et connecter..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1063
+#, fuzzy
+msgid "%1 Settings"
+msgstr "Réglages de %1"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Olivier Butler"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "olivier2.butler@laposte.net"
+
+#: /home/pn/Development/wlassistant/src/main.cpp:30
+#: /home/pn/Development/wlassistant/src/main.cpp:42 rc.cpp:3
+#, no-c-format
+msgid "Wireless Assistant"
+msgstr "Assistant WiFi"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:76
+msgid ""
+"<qt><p>The network changed its security settings.</p><p>Please go to "
+"<i>Security</i> tab of the following dialog and configure WEP settings.</p></"
+"qt>"
+msgstr ""
+"<qt><p>Le réseau a changé ses réglages de sécurité.</p><p>Cliquez sur "
+"l'onglet <i>Sécurité</i> de la fenêtre suivante et configurer les réglages "
+"WEP.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:78
+msgid ""
+"<qt><p>Your WEP Key is not set properly.</p><p>Please go to <i>Security</i> "
+"tab of the following dialog and enter the required key.</p></qt>"
+msgstr ""
+"<qt><p>Votre clé WEP n'est pas configurée correctement.</p><p>Cliquez sur "
+"l'onglet <i>Sécurité</i> de la fenêtre suivante et tapez la clé demandée.</"
+"p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:82
+msgid ""
+"<qt><p>The network has stopped broadcasting its ESSID since the last time "
+"you were connected.</p><p>Would you like to use '<b>%1</b>' as an ESSID for "
+"this network?</p><p><i>NOTE: If you answer No, a dialog will appear where "
+"you will be able to specify a different ESSID.</i></p></qt>"
+msgstr ""
+"<qt><p>Le réseau ne diffuse plus son ESSID depuis votre dernière connexion.</"
+"p><p> Voulez vous utiliser '<b>%1</b>' comme ESSID pour ce réseau ?</"
+"p><p><i>NOTE: Si vous répondez Non, une boîte de dialogue apparaîtra où vous "
+"pourrez spécifier un autre ESSID.</i></p></qt>"
+
+#: rc.cpp:9
+#, no-c-format
+msgid "Alt+O"
+msgstr ""
+
+#: rc.cpp:12
+#, no-c-format
+msgid "Toggle network list/options"
+msgstr "Basculer la liste/options réseau"
+
+#: rc.cpp:15
+#, no-c-format
+msgid ""
+"<p><b>Options Button</b></p>\n"
+"<p>Pressing this toggle button will show the available application options.</"
+"p>\n"
+"<p><i>HINT: Press this button again to return to the network list.</i></p>"
+msgstr ""
+"<p><b>Options</b></p>\n"
+"<p>Ce bouton permet d'afficher les options de l'application.</p>\n"
+"<p><i>ASTUCE: Une nouvelle pression permet de revenir à la liste des réseaux."
+"</i></p>"
+
+#: rc.cpp:23
+#, no-c-format
+msgid "Alt+Q"
+msgstr ""
+
+#: rc.cpp:29
+#, no-c-format
+msgid ""
+"<p><b>Quit Button</b></p>\n"
+"<p>Pressing this button will quit the application.</p>"
+msgstr ""
+"<p><b>Quitter</b></p>\n"
+"<p>Ce bouton permet de quitter l'application.</p>"
+
+#: rc.cpp:33
+#, fuzzy, no-c-format
+msgid "Co&nnect"
+msgstr "Connecter"
+
+#: rc.cpp:36 rc.cpp:181
+#, no-c-format
+msgid "Alt+N"
+msgstr ""
+
+#: rc.cpp:42
+#, no-c-format
+msgid ""
+"<p><b>Connect/Disconnect Button</b></p>\n"
+"<p>Pressing this button will connect to/disconnect from the network "
+"currently selected in the network list.</p>"
+msgstr ""
+"<p><b>Connection/Déconnection</b></p>\n"
+"<p>Ce bouton permet de se connecter/déconnecter du réseau sélectionné dans "
+"la liste.</p>"
+
+#: rc.cpp:46
+#, no-c-format
+msgid "Refresh"
+msgstr "Actualiser"
+
+#: rc.cpp:50
+#, no-c-format
+msgid "Refresh network list"
+msgstr "Actualiser la liste des réseaux"
+
+#: rc.cpp:53
+#, no-c-format
+msgid ""
+"<p><b>Scan Button</b></p>\n"
+"<p>Pressing this button will scan for wireless networks and refresh the "
+"network list.</p>"
+msgstr ""
+"<p><b>Bouton Actualiser</b></p>\n"
+"<p>Ce bouton permet de scanner le réseau sans-fil et de rafraîchir la liste "
+"des réseaux.</p>"
+
+#: rc.cpp:57
+#, no-c-format
+msgid "Device:"
+msgstr "Périphérique:"
+
+#: rc.cpp:60
+#, no-c-format
+msgid "Pick a network device to use"
+msgstr "Sélectionner le périphérique à utiliser"
+
+#: rc.cpp:63
+#, no-c-format
+msgid ""
+"<p><b>Device Selection</b></p>\n"
+"<p>This combo box allows you to select which wireless card to use.</p>\n"
+"<p><i>NOTE: Selecting a different card will refresh the network list.</i></p>"
+msgstr ""
+"<p><b>Sélection des périphériques</b></p>\n"
+"<p>Cette liste vous permet de sélectionner quelle carte réseau sans-fil vous "
+"voulez utiliser.</p>\n"
+"<p><i>NOTE: Choisir une carte différente provoque le rafraichissement de la "
+"liste des réseaux.</i></p>"
+
+#: rc.cpp:68 rc.cpp:199 rc.cpp:325
+#, no-c-format
+msgid "ESSID"
+msgstr "ESSID"
+
+#: rc.cpp:71
+#, no-c-format
+msgid "Channel"
+msgstr "Canal"
+
+#: rc.cpp:74
+#, no-c-format
+msgid "Link Quality"
+msgstr "Qualité du lien"
+
+#: rc.cpp:77
+#, no-c-format
+msgid "WEP/WPA"
+msgstr ""
+
+#: rc.cpp:80
+#, no-c-format
+msgid "AP"
+msgstr "Point d'accès"
+
+#: rc.cpp:83
+#, no-c-format
+msgid ""
+"<p><b>Network List</b></p>\n"
+"<p>This list shows all the wireless networks that have been found.</p>\n"
+"<p><i>HINT: Click the Refresh button to update this list.</i></p>"
+msgstr ""
+"<p><b>Liste des réseaux</b></p>\n"
+"<p>Cette liste affiche tous les réseaux qui ont été trouvés.</p>\n"
+"<p><i>NOTE: Cliquez sur le bouton Actualiser pour mettre à jour la liste.</"
+"i></p>"
+
+#: rc.cpp:88
+#, no-c-format
+msgid "Ready"
+msgstr ""
+
+#: rc.cpp:91
+#, no-c-format
+msgid ""
+"<p><b>Status Bar</b></p>\n"
+"<p>Messages describing current process are shown in this area.</p>"
+msgstr ""
+"<p><b>Barre d'état</b></p>\n"
+"<p>Les messages décrivant les processus en cours sont affichés dans cette "
+"zone.</p>"
+
+#: rc.cpp:95
+#, no-c-format
+msgid "Automatically connect on startup"
+msgstr ""
+
+#: rc.cpp:99
+#, no-c-format
+msgid ""
+"<p><b>AutomaticallyConnect on Startup</b></p>\n"
+"<p>Checking this box will make the application try to connect to the best "
+"available network. Only networks that have been previously configured will "
+"be taken into account.</p>"
+msgstr ""
+
+#: rc.cpp:103
+#, no-c-format
+msgid "Automaticall&y reconnect if connection is lost"
+msgstr ""
+
+#: rc.cpp:106
+#, no-c-format
+msgid "Alt+Y"
+msgstr ""
+
+#: rc.cpp:109
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Automatically Reconnect if Connection is Lost</b></p>\n"
+"<p>Checking this box will make the application try to reconnect after the "
+"connection is lost.</p>"
+msgstr ""
+"<p><b>Quitter après une connexion réussie.</b></p>\n"
+"<p>Cochez cette case pour permettre à l'application de quitter après une "
+"connexion réussie au réseau sans-fil. </p>"
+
+#: rc.cpp:113
+#, no-c-format
+msgid "Quit upon successful connection"
+msgstr "Quitter après une connexion réussie"
+
+#: rc.cpp:117
+#, no-c-format
+msgid ""
+"<p><b>Quit Upon Successful Connection</b></p>\n"
+"<p>Checking this box will make the application close after successfully "
+"establishing a connection to a wireless network.</p>"
+msgstr ""
+"<p><b>Quitter après une connexion réussie.</b></p>\n"
+"<p>Cochez cette case pour permettre à l'application de quitter après une "
+"connexion réussie au réseau sans-fil. </p>"
+
+#: rc.cpp:121
+#, no-c-format
+msgid "&Group access points with the same ESSID"
+msgstr ""
+
+#: rc.cpp:124
+#, no-c-format
+msgid "Alt+G"
+msgstr ""
+
+#: rc.cpp:127
+#, no-c-format
+msgid ""
+"<p><b>Group Access Points with the Same ESSID</b></p>\n"
+"<p>Checking this box will make all access points with the same ESSID appear "
+"as one item in the network list.</p>"
+msgstr ""
+
+#: rc.cpp:131
+#, no-c-format
+msgid "Delay before scanning:"
+msgstr ""
+
+#: rc.cpp:134 rc.cpp:145 rc.cpp:167
+#, no-c-format
+msgid "Specify how long to wait for an IP"
+msgstr "Spécifier le durée d'attente pour obtenir l'adresse IP"
+
+#: rc.cpp:137 rc.cpp:148 rc.cpp:170
+#, no-c-format
+msgid ""
+"<p><b>DHCP Client Timeout</b></p>\n"
+"<p>This option specifies the amount of time after which the application "
+"should stop waiting for an IP address and assume that the connection has "
+"failed.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have problems connecting "
+"to some networks.</i></p>"
+msgstr ""
+"<p><b>Timeout du client DHCP</b></p>\n"
+"<p>Cette option spécifie la durée après laquelle l'application doit arrêter "
+"d'attendre une adresse IP et de déclarer une connexion en échec.</p>\n"
+"<p><i>ASTUCE: Augmenter cette valeur peuvent aider si vous avez des "
+"difficultés à vous connecter à certains réseaux.</i></p>"
+
+#: rc.cpp:142
+#, no-c-format
+msgid "DHCP client timeout:"
+msgstr "Timeout du client DHCP:"
+
+#: rc.cpp:153 rc.cpp:164 rc.cpp:412 rc.cpp:441 rc.cpp:470 rc.cpp:499
+#, no-c-format
+msgid "s"
+msgstr "s"
+
+#: rc.cpp:156
+#, fuzzy, no-c-format
+msgid "Specify how long to wait before scanning"
+msgstr "Spécifier le durée d'attente pour obtenir l'adresse IP"
+
+#: rc.cpp:159
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Delay Before Scanning</b></p>\n"
+"<p>This option specifies the amount of time to wait between bringing the "
+"interface up and performing a scan.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have to refresh the list "
+"manually to see all the available networks.</i></p>"
+msgstr ""
+"<p><b>Timeout du client DHCP</b></p>\n"
+"<p>Cette option spécifie la durée après laquelle l'application doit arrêter "
+"d'attendre une adresse IP et de déclarer une connexion en échec.</p>\n"
+"<p><i>ASTUCE: Augmenter cette valeur peuvent aider si vous avez des "
+"difficultés à vous connecter à certains réseaux.</i></p>"
+
+#: rc.cpp:175
+#, no-c-format
+msgid ""
+"<i>Press the button below to enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</i>"
+msgstr ""
+"<i>Ce bouton permet d'activer tous les messages qui ont été déactivés par la "
+"fonction 'Ne plus afficher'..</i>"
+
+#: rc.cpp:178
+#, fuzzy, no-c-format
+msgid "E&nable All Messages"
+msgstr "Activer tous les messages"
+
+#: rc.cpp:184
+#, no-c-format
+msgid ""
+"<p><b>Enable All Messages</b></p>\n"
+"<p>Pressing this button will enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</p>"
+msgstr ""
+"<p><b>Activer tous les messages</b></p>\n"
+"<p>Ce bouton permet d'activer tous les messages qui ont été déactivés par la "
+"fonction 'Ne plus afficher'.</p>"
+
+#: rc.cpp:188
+#, no-c-format
+msgid "First Connection Wizard"
+msgstr "Assistant de Première Connexion"
+
+#: rc.cpp:191
+#, no-c-format
+msgid "Welcome to First Connection Wizard"
+msgstr "Bienvenue à l'assistant de Première Connexion"
+
+#: rc.cpp:194
+#, no-c-format
+msgid ""
+"<b><p>This is the first time you are trying to connect to the selected "
+"network.</p></b>\n"
+"<p>You will be asked a few questions necessary to configure this connection."
+"</p>\n"
+"<p><i>Press Next to continue.</i></p>"
+msgstr ""
+"<b><p>C'est la première fois que vous essayez de vous connecter au réseau "
+"sélectionné.</p></b>\n"
+"<p>Plusieurs questions vous seront posés pour configurer cette connexion.</"
+"p>\n"
+"<p><i>Pressez sur Suivant pour continuer.</i></p>"
+
+#: rc.cpp:202
+#, no-c-format
+msgid ""
+"<p><b>You are trying to connect to a network that does not broadcast its "
+"ESSID.</b></p>\n"
+"<p>Please specify ESSID that you would like to use when connecting to this "
+"access point.</p>"
+msgstr ""
+"<p><b>Vous tentez de vous connecter à un réseau qui ne diffuse pas son ESSID."
+"</b></p>\n"
+"<p>SVP veuillez préciser le ESSID que vous voulez utiliser pour vous "
+"connecter à ce point d'accès.</p>"
+
+#: rc.cpp:206 rc.cpp:328
+#, no-c-format
+msgid "ESSID:"
+msgstr "ESSID:"
+
+#: rc.cpp:209
+#, no-c-format
+msgid "Interface Configuration"
+msgstr "Configuration de l'interface"
+
+#: rc.cpp:213 rc.cpp:334
+#, no-c-format
+msgid "Automatic (DHCP)"
+msgstr "Automatique (DHCP)"
+
+#: rc.cpp:217
+#, no-c-format
+msgid "Manual"
+msgstr "Manuel"
+
+#: rc.cpp:221
+#, no-c-format
+msgid ""
+"<p><b>Your IP and other parameters need to be configured to connect to any "
+"network.</b></p>\n"
+"<p>Which configuration option would you like to use when connecting to this "
+"network?</p>"
+msgstr ""
+"<p><b>IP et les autres paramètres doivent être configurés pour vous "
+"connecter à tout réseau.</b></p>\n"
+"<p>Quelles options de configuration voulez vous utiliser pour vous connecter "
+"à ce réseau ?</p>"
+
+#: rc.cpp:225
+#, no-c-format
+msgid "Interface Parameters"
+msgstr "Paramètres de l'interface"
+
+#: rc.cpp:228 rc.cpp:355
+#, no-c-format
+msgid "Secondary DNS:"
+msgstr "DNS secondaire:"
+
+#: rc.cpp:231 rc.cpp:343
+#, no-c-format
+msgid "IP:"
+msgstr "IP:"
+
+#: rc.cpp:234 rc.cpp:340
+#, no-c-format
+msgid "Netmask:"
+msgstr "Masque réseau:"
+
+#: rc.cpp:237 rc.cpp:358
+#, no-c-format
+msgid "Primary DNS:"
+msgstr "DNS primaire:"
+
+#: rc.cpp:240 rc.cpp:349
+#, no-c-format
+msgid "Gateway:"
+msgstr "Passerelle:"
+
+#: rc.cpp:243 rc.cpp:352
+#, no-c-format
+msgid "Domain:"
+msgstr "Domaine:"
+
+#: rc.cpp:246 rc.cpp:346
+#, no-c-format
+msgid "Broadcast:"
+msgstr "Broadcast:"
+
+#: rc.cpp:249
+#, no-c-format
+msgid ""
+"<p><b>Please specify interface parameters to be used to connect to this "
+"network.</b></p>\n"
+"<p>You may leave some fields blank.</p>"
+msgstr ""
+"<p><b>SVP, vérifiez les paramètres de l'interface utilisée pour se connecter "
+"à ce réseau.</b></p>\n"
+"<p>Certains champs peuvent être laisser incomplet.</p>"
+
+#: rc.cpp:253
+#, no-c-format
+msgid "WEP Configuration"
+msgstr "Configuration WEP"
+
+#: rc.cpp:256
+#, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WEP authentication.</"
+"b></p>\n"
+"<p>Which WEP mode would you like to use?</p>"
+msgstr ""
+"<p><b>Le réseau auquel vous voulez vous connecter demande une "
+"authentification WEP.</b></p>\n"
+"<p>Quel mode WEP voulez vous utiliser ?</p>"
+
+#: rc.cpp:261
+#, fuzzy, no-c-format
+msgid "Open S&ystem"
+msgstr "Système Ouvert"
+
+#: rc.cpp:264
+#, no-c-format
+msgid "Shared Key"
+msgstr "Clé partagée"
+
+#: rc.cpp:267 rc.cpp:288
+#, fuzzy, no-c-format
+msgid "<p><b>Please provide a key to be used with this network.</b></p>"
+msgstr ""
+"<p><b>SVP, indiquez une clé pour utiliser ce réseau.</b></p>\n"
+"Les formats supportés par \"iwconfig\" peuvent être utilisés."
+
+#: rc.cpp:270
+#, no-c-format
+msgid "WEP key:"
+msgstr "Clé WEP:"
+
+#: rc.cpp:273 rc.cpp:285 rc.cpp:370 rc.cpp:391
+#, no-c-format
+msgid "ASCII"
+msgstr ""
+
+#: rc.cpp:276
+#, fuzzy, no-c-format
+msgid "WPA Configuration"
+msgstr "Configuration WEP"
+
+#: rc.cpp:279
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WPA authentication.</"
+"b></p>"
+msgstr ""
+"<p><b>Le réseau auquel vous voulez vous connecter demande une "
+"authentification WEP.</b></p>\n"
+"<p>Quel mode WEP voulez vous utiliser ?</p>"
+
+#: rc.cpp:282
+#, fuzzy, no-c-format
+msgid "WPA Key:"
+msgstr "Clé WEP"
+
+#: rc.cpp:291 rc.cpp:376
+#, no-c-format
+msgid "<b>?<br>?<br>?<br>?</b>"
+msgstr ""
+
+#: rc.cpp:294 rc.cpp:373
+#, no-c-format
+msgid ""
+"WPA Version:<br>Group Cipher:<br>Pairwise Cipher:<br>Authentication Suite:"
+msgstr ""
+
+#: rc.cpp:297
+#, no-c-format
+msgid "Done!"
+msgstr "Fait !"
+
+#: rc.cpp:300
+#, no-c-format
+msgid ""
+"<p><b>Congratulations!</b></p>\n"
+"<p>You have successfully finished configuring this connection.</p>\n"
+"<p><b>Press Finish to connect!</b></p>"
+msgstr ""
+"<p><b>Félicitation !</b></p>\n"
+"<p>Vous avez configuré avec succès votre connexion.</p>\n"
+"<p><b>Pressez sur Terminé pour vous connecter !</b></p>"
+
+#: rc.cpp:311
+#, no-c-format
+msgid "F1"
+msgstr "F1"
+
+#: rc.cpp:322
+#, no-c-format
+msgid "I&nterface"
+msgstr "I&nterface"
+
+#: rc.cpp:337
+#, fuzzy, no-c-format
+msgid "&Manual"
+msgstr "Manuel"
+
+#: rc.cpp:361
+#, no-c-format
+msgid "Securit&y"
+msgstr "Sé&curité"
+
+#: rc.cpp:364
+#, fuzzy, no-c-format
+msgid "WPA Settings"
+msgstr "Réglages de %1"
+
+#: rc.cpp:367 rc.cpp:388
+#, no-c-format
+msgid "Key:"
+msgstr "Clé:"
+
+#: rc.cpp:379
+#, fuzzy, no-c-format
+msgid "WEP Settings"
+msgstr "Réglages de %1"
+
+#: rc.cpp:382
+#, fuzzy, no-c-format
+msgid "Open Syste&m"
+msgstr "Système Ouvert"
+
+#: rc.cpp:385
+#, no-c-format
+msgid "Alt+M"
+msgstr ""
+
+#: rc.cpp:394
+#, fuzzy, no-c-format
+msgid "Shared &Key"
+msgstr "Clé partagée"
+
+#: rc.cpp:397
+#, no-c-format
+msgid "Alt+K"
+msgstr ""
+
+#: rc.cpp:400
+#, no-c-format
+msgid "Advanced"
+msgstr ""
+
+#: rc.cpp:403
+#, no-c-format
+msgid ""
+"<b>Security Warning:</b> the commands specified below will be ran with the "
+"same privileges as Wireless Assistant has."
+msgstr ""
+
+#: rc.cpp:406
+#, fuzzy, no-c-format
+msgid "Pre-Connection Command"
+msgstr "Echec de connexion."
+
+#: rc.cpp:409 rc.cpp:438 rc.cpp:467 rc.cpp:496
+#, no-c-format
+msgid "Timeout:"
+msgstr ""
+
+#: rc.cpp:415 rc.cpp:444 rc.cpp:473 rc.cpp:502
+#, no-c-format
+msgid "Amount of time after which the process will be killed."
+msgstr ""
+
+#: rc.cpp:418 rc.cpp:447 rc.cpp:476 rc.cpp:505
+#, no-c-format
+msgid ""
+"<p><b>Timeout</b></p>\n"
+"<p>This option specifies how long should Wireless Assistant wait for the "
+"process to finish, before it will be killed.</p>"
+msgstr ""
+
+#: rc.cpp:422 rc.cpp:451 rc.cpp:480 rc.cpp:509
+#, no-c-format
+msgid "Run detached"
+msgstr ""
+
+#: rc.cpp:425 rc.cpp:454 rc.cpp:483 rc.cpp:512
+#, no-c-format
+msgid "Don't wait for the process to finish."
+msgstr ""
+
+#: rc.cpp:428 rc.cpp:457 rc.cpp:486 rc.cpp:515
+#, no-c-format
+msgid ""
+"<p><b>Run Detached</b></p>\n"
+"<p>If this checkbox is selected Wireless Assistant will not wait for the "
+"process to finish.</p>"
+msgstr ""
+
+#: rc.cpp:432 rc.cpp:461 rc.cpp:490 rc.cpp:519
+#, fuzzy, no-c-format
+msgid "Command:"
+msgstr "Domaine:"
+
+#: rc.cpp:435
+#, fuzzy, no-c-format
+msgid "Post-Connection Command"
+msgstr "Assistant de Première Connexion"
+
+#: rc.cpp:464
+#, no-c-format
+msgid "Pre-Disconnection Command"
+msgstr ""
+
+#: rc.cpp:493
+#, no-c-format
+msgid "Post-Disconnection Command"
+msgstr ""
+
+#~ msgid "WEP Mode"
+#~ msgstr "Mode WEP"
+
+#~ msgid "WEP?"
+#~ msgstr "WEP ?"
+
+#~ msgid "Application Options"
+#~ msgstr "Options de l'application"
diff --git a/po/nb.po b/po/nb.po
new file mode 100644
index 0000000..eba38fd
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,973 @@
+# translation of nb.po to
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Alexander Nicolaysen Sørnes <alex@thehandofagony.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: nb\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-04-02 02:31+0200\n"
+"PO-Revision-Date: 2006-10-01 16:10+0200\n"
+"Last-Translator: Alexander Nicolaysen Sørnes <alex@thehandofagony.com>\n"
+"Language-Team: <nb@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:103
+msgid "Initializing..."
+msgstr "Laster inn . . ."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:110
+msgid ""
+"Kernel 2.6 or later not present.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Kjene 2.6 eller nyere er ikke tilstede.\n"
+"Wireless Assistant avsluttes."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:156
+msgid ""
+"No usable wireless devices found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Ingen brukbare trådløse enhet ble funnet.\n"
+"Wireless Assistant avsluttes."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:179
+msgid ""
+"<qt><p>You might have insufficient permissions for Wireless Assistant to "
+"function properly.</p><p>Did you run it using '<tt>sudo</tt>'?</p></qt>"
+msgstr ""
+"<qt><p>Det er mulig du ikke har tilstrekkelige tillatelser for at Wireless "
+"Assistant kan fungere ordentlig.</p><p>Kjørte du det med «<tt>sudo</tt>»?</"
+"p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:200
+msgid ""
+"Executable(s) '%1' could not be found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Fant ikke programfilen(e) «%s».\n"
+"Wireless Assistant avsluttes."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid ""
+"Connection to '%1' has been lost!\n"
+"Would you like to reconnect?"
+msgstr ""
+"Forbindelsen til «%1» er tapt\n"
+"Vil du koble til på nytt?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid "Connection Lost"
+msgstr "Mistet forbindelsen"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:252
+msgid ""
+"<qt><p>Settings for network '<b>%1</b>' are about to be deleted.</p><p>Would "
+"you like to continue?</p></qt>"
+msgstr ""
+"<qt><p>Innstillinger for nettverket «<b>%1/<b>» er i ferd med å bli slettet."
+"</p><p>VIl du fortsette?</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:257
+msgid "Settings deleted."
+msgstr "Innstillinger slettet."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:285
+msgid ""
+"<qt><p>File '<i>%1</i>' could not be opened for writing.</p><p>Nameserver(s) "
+"and/or domain are not set.</p></qt>"
+msgstr ""
+"<qt><p>Klarte ikke åpne filen «<i><%1</i>» for skriving.</p><p>Navnetjener"
+"(e) og/eller domene er ikke angitt.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:317
+msgid "Bringing interface %1 up..."
+msgstr "Bringer kort %1 opp . . ."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:321
+msgid "Waiting before scanning..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:328
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:334
+msgid "Scanning..."
+msgstr "Søker . . ."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:343
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:807
+msgid "Done."
+msgstr "Ferdig."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:348
+msgid "No networks found."
+msgstr "Ingen nettverk funnet."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:351
+#, fuzzy
+msgid ""
+"Radio of your wireless card seems to be turned off using an external switch "
+"on your computer.\n"
+"You need turn it on to be able to use wireless networks."
+msgstr ""
+"Radioen på det trådløse kortet ditt er slått av ved hjelp av en ekstern "
+"bryter på maskinen.\n"
+"Du må slå den på for å bruke trådløse nettverk."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:459
+msgid "Freq (Hz)"
+msgstr "Frek. (Hz)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:473
+msgid ""
+"Radio of your wireless card is off.\n"
+"Would you like to turn it on?"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:559
+#, fuzzy
+msgid "Auto connection failed."
+msgstr "Veiviser for første tilkobling"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:570
+msgid ""
+"<qt><p><b>Can not connect to network '%1'.<b></p><p>The network you are "
+"trying to connect to requires WPA authentication. The necessary executables "
+"<i>wpa_supplicant</i> and <i>wpa_cli</i> could not be found. Install "
+"<i>wpa_supplicant</i> and restart Wireless Assistant to connect.</p></qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:579
+msgid "%1 - First Connection Wizard"
+msgstr "%1 - Veiviser for første tilkobling"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:616
+msgid "Network settings updated."
+msgstr "Nettverksinnstillinger oppdatert."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:644
+#, fuzzy
+msgid "Running pre-connection command..."
+msgstr "Tilkobling feilet."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:650
+msgid "Connecting to '%1'..."
+msgstr "Kobler til «%1» . . ."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:669
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:685
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:718
+#, fuzzy
+msgid "Connection failed."
+msgstr "Mistet forbindelsen"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:701
+#, fuzzy
+msgid "Running post-connection command..."
+msgstr "Veiviser for første tilkobling"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:708
+msgid "Testing connection..."
+msgstr "Tester forbindelse . . ."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:714
+msgid "Successfully connected to '%1'."
+msgstr "Koblet til «%1»."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid ""
+"Connection failed.\n"
+"Would you like to review settings for this network?"
+msgstr ""
+"Tilkobling feilet.\n"
+"Vil du se på innstillingene for nettverket?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid "Review Settings?"
+msgstr "Se på innstillingene?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:761
+msgid ""
+"<qt><p>You are about to disconnect from '<b>%1</b>'.</p><p>Would you like to "
+"continue?<p></qt>"
+msgstr ""
+"<qt><p>Du er i ferd med å koble fra «<b>%1</b>».</p><p>Vil du fortsette?</"
+"p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:766
+#, fuzzy
+msgid "Running pre-disconnection command..."
+msgstr "Tilkobling feilet."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:772
+msgid "Disconnecting..."
+msgstr "Kobler fra . . ."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:778
+msgid "Waiting for DHCP client to shut down..."
+msgstr "Venter på at DHCP-klienten skal slås av . . ."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:801
+#, fuzzy
+msgid "Running post-disconnection command..."
+msgstr "Veiviser for første tilkobling"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:810
+msgid "Cancelled."
+msgstr "Avbrutt."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:906
+msgid "&Disconnect"
+msgstr "Koble &fra"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:908
+msgid "Disconnect from the selected network"
+msgstr "Koble fra det valgte nettverket"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:911
+msgid "&Connect"
+msgstr "K&oble til"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:913 rc.cpp:39
+#, no-c-format
+msgid "Connect to the selected network"
+msgstr "Koble til valgte nettverk"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:960
+msgid "&Stop"
+msgstr "&Stopp"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:964
+msgid ""
+"Terminate current process\n"
+"(%1)"
+msgstr ""
+"Avbrytt gjeldende prosess\n"
+"(%1)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:979 rc.cpp:26
+#, no-c-format
+msgid "Quit the application"
+msgstr "Avslutt programmet"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1038
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1047
+msgid "Disconnect..."
+msgstr "Koble fra . . ."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1041
+#, fuzzy
+msgid "Connect"
+msgstr "Koble til"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1043
+msgid "Forget Settings..."
+msgstr "Glem innstillinger . . ."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1044
+msgid "Edit Settings..."
+msgstr "Rediger innstillinger . . ."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1050
+msgid "Configure and Connect..."
+msgstr "Sett opp og koble til . . ."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1063
+#, fuzzy
+msgid "%1 Settings"
+msgstr "%1 Innstillinger"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Alexander N. Sørnes"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "alex@thehandofagony.com"
+
+#: /home/pn/Development/wlassistant/src/main.cpp:30
+#: /home/pn/Development/wlassistant/src/main.cpp:42 rc.cpp:3
+#, no-c-format
+msgid "Wireless Assistant"
+msgstr "Wireless Assistant"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:76
+msgid ""
+"<qt><p>The network changed its security settings.</p><p>Please go to "
+"<i>Security</i> tab of the following dialog and configure WEP settings.</p></"
+"qt>"
+msgstr ""
+"<qt><p>Nettverket endret sikkerhetsinnstillinger.</p><p>Gå til <i>Sikkerhet</"
+"i>-fanen i neste vindu og sett opp WEP.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:78
+msgid ""
+"<qt><p>Your WEP Key is not set properly.</p><p>Please go to <i>Security</i> "
+"tab of the following dialog and enter the required key.</p></qt>"
+msgstr ""
+"<qt><p>WEP-nøkkelen din er ikke angitt ordentlig.</p><p>Gå til <i>Sikkerhet</"
+"i>-fanen i det neste vinduet og skriv inn den påkrevde nøkkelen.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:82
+msgid ""
+"<qt><p>The network has stopped broadcasting its ESSID since the last time "
+"you were connected.</p><p>Would you like to use '<b>%1</b>' as an ESSID for "
+"this network?</p><p><i>NOTE: If you answer No, a dialog will appear where "
+"you will be able to specify a different ESSID.</i></p></qt>"
+msgstr ""
+"<qt><p>Nettverket har sluttet å kringkaste en ESSID siden sist du koblet til."
+"</p><p>Vil du bruke «<b>%1</b>» som en ESSID for dette nettverket?</"
+"p><p><i>MERK: Hvis du svarer nei kan du oppgi en annen ESSID.</i></p></qt>"
+
+#: rc.cpp:9
+#, no-c-format
+msgid "Alt+O"
+msgstr ""
+
+#: rc.cpp:12
+#, no-c-format
+msgid "Toggle network list/options"
+msgstr "Bytt mellom nettverksliste/innstillinger"
+
+#: rc.cpp:15
+#, no-c-format
+msgid ""
+"<p><b>Options Button</b></p>\n"
+"<p>Pressing this toggle button will show the available application options.</"
+"p>\n"
+"<p><i>HINT: Press this button again to return to the network list.</i></p>"
+msgstr ""
+"<p><b>Innstillinger</b></p>\n"
+"<p>Denne knappen viser tilgjengelige innstillinger i programmet.</p>\n"
+"<p><i>HINET: Trykk på denne knappen igjen for å gå tilbake til "
+"nettverkslisten.</i></p>"
+
+#: rc.cpp:23
+#, no-c-format
+msgid "Alt+Q"
+msgstr ""
+
+#: rc.cpp:29
+#, no-c-format
+msgid ""
+"<p><b>Quit Button</b></p>\n"
+"<p>Pressing this button will quit the application.</p>"
+msgstr ""
+"<p><b>Avslutt-knappen</b></p>\n"
+"<p>Denne knappen avslutter programmet.</p>"
+
+#: rc.cpp:33
+#, fuzzy, no-c-format
+msgid "Co&nnect"
+msgstr "Koble til"
+
+#: rc.cpp:36 rc.cpp:181
+#, no-c-format
+msgid "Alt+N"
+msgstr ""
+
+#: rc.cpp:42
+#, no-c-format
+msgid ""
+"<p><b>Connect/Disconnect Button</b></p>\n"
+"<p>Pressing this button will connect to/disconnect from the network "
+"currently selected in the network list.</p>"
+msgstr ""
+"<p><b>Koble til/fra</b></p>\n"
+"<p>Denne knappen kobler til/fra nettverket som er valgt.</p>"
+
+#: rc.cpp:46
+#, no-c-format
+msgid "Refresh"
+msgstr "Oppdater"
+
+#: rc.cpp:50
+#, no-c-format
+msgid "Refresh network list"
+msgstr "Oppdater nettverksliste"
+
+#: rc.cpp:53
+#, no-c-format
+msgid ""
+"<p><b>Scan Button</b></p>\n"
+"<p>Pressing this button will scan for wireless networks and refresh the "
+"network list.</p>"
+msgstr ""
+"<p><b>Søkeknapp</b></p>\n"
+"<p>Denne knappen søker etter trådløse nettverk og oppdaterer nettverkslisten."
+"</p>"
+
+#: rc.cpp:57
+#, no-c-format
+msgid "Device:"
+msgstr "Enhet:"
+
+#: rc.cpp:60
+#, no-c-format
+msgid "Pick a network device to use"
+msgstr "Velg et nettverksenhet du vil bruke"
+
+#: rc.cpp:63
+#, no-c-format
+msgid ""
+"<p><b>Device Selection</b></p>\n"
+"<p>This combo box allows you to select which wireless card to use.</p>\n"
+"<p><i>NOTE: Selecting a different card will refresh the network list.</i></p>"
+msgstr ""
+"<p><b>Enhetsvalg</b></p>\n"
+"<p>Denne boksen lar deg velge hvilket nettverkskort som brukes.</p>\n"
+"<p><i>MERK: NettverksIsten oppdateres hvis du velger at annet kort.</i></p>"
+
+#: rc.cpp:68 rc.cpp:199 rc.cpp:325
+#, no-c-format
+msgid "ESSID"
+msgstr "ESSID"
+
+#: rc.cpp:71
+#, no-c-format
+msgid "Channel"
+msgstr "Kanal"
+
+#: rc.cpp:74
+#, no-c-format
+msgid "Link Quality"
+msgstr "Kvalitet"
+
+#: rc.cpp:77
+#, no-c-format
+msgid "WEP/WPA"
+msgstr ""
+
+#: rc.cpp:80
+#, no-c-format
+msgid "AP"
+msgstr "TP"
+
+#: rc.cpp:83
+#, no-c-format
+msgid ""
+"<p><b>Network List</b></p>\n"
+"<p>This list shows all the wireless networks that have been found.</p>\n"
+"<p><i>HINT: Click the Refresh button to update this list.</i></p>"
+msgstr ""
+"<p><b>Nettverksliste</b></p>\n"
+"<p>Denne listen viser alle de trådløse nettverkene som er funnet.</p>\n"
+"<p><i>HINT: Trykk på oppdater-knappen for å oppdatere listen.</i></p>"
+
+#: rc.cpp:88
+#, no-c-format
+msgid "Ready"
+msgstr ""
+
+#: rc.cpp:91
+#, no-c-format
+msgid ""
+"<p><b>Status Bar</b></p>\n"
+"<p>Messages describing current process are shown in this area.</p>"
+msgstr ""
+"<p><b>Statuslinje</b></p>\n"
+"<p>Meldinger fra den gjelgende prosessen vises i dette området.</p>"
+
+#: rc.cpp:95
+#, no-c-format
+msgid "Automatically connect on startup"
+msgstr ""
+
+#: rc.cpp:99
+#, no-c-format
+msgid ""
+"<p><b>AutomaticallyConnect on Startup</b></p>\n"
+"<p>Checking this box will make the application try to connect to the best "
+"available network. Only networks that have been previously configured will "
+"be taken into account.</p>"
+msgstr ""
+
+#: rc.cpp:103
+#, no-c-format
+msgid "Automaticall&y reconnect if connection is lost"
+msgstr ""
+
+#: rc.cpp:106
+#, no-c-format
+msgid "Alt+Y"
+msgstr ""
+
+#: rc.cpp:109
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Automatically Reconnect if Connection is Lost</b></p>\n"
+"<p>Checking this box will make the application try to reconnect after the "
+"connection is lost.</p>"
+msgstr ""
+"<p><b>Avslutt etter vellykket tilkobling</b></p>\n"
+"<p>Dette gjør at programmet avsluttes etter at en forbindelse er opprettet.</"
+"p>"
+
+#: rc.cpp:113
+#, no-c-format
+msgid "Quit upon successful connection"
+msgstr "Avslutt etter vellykket tilkobling"
+
+#: rc.cpp:117
+#, no-c-format
+msgid ""
+"<p><b>Quit Upon Successful Connection</b></p>\n"
+"<p>Checking this box will make the application close after successfully "
+"establishing a connection to a wireless network.</p>"
+msgstr ""
+"<p><b>Avslutt etter vellykket tilkobling</b></p>\n"
+"<p>Dette gjør at programmet avsluttes etter at en forbindelse er opprettet.</"
+"p>"
+
+#: rc.cpp:121
+#, no-c-format
+msgid "&Group access points with the same ESSID"
+msgstr ""
+
+#: rc.cpp:124
+#, no-c-format
+msgid "Alt+G"
+msgstr ""
+
+#: rc.cpp:127
+#, no-c-format
+msgid ""
+"<p><b>Group Access Points with the Same ESSID</b></p>\n"
+"<p>Checking this box will make all access points with the same ESSID appear "
+"as one item in the network list.</p>"
+msgstr ""
+
+#: rc.cpp:131
+#, no-c-format
+msgid "Delay before scanning:"
+msgstr ""
+
+#: rc.cpp:134 rc.cpp:145 rc.cpp:167
+#, no-c-format
+msgid "Specify how long to wait for an IP"
+msgstr "Hvor lenge det ventes på en IP"
+
+#: rc.cpp:137 rc.cpp:148 rc.cpp:170
+#, no-c-format
+msgid ""
+"<p><b>DHCP Client Timeout</b></p>\n"
+"<p>This option specifies the amount of time after which the application "
+"should stop waiting for an IP address and assume that the connection has "
+"failed.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have problems connecting "
+"to some networks.</i></p>"
+msgstr ""
+"<p><b>Tidsavbrudd for DHCP-klient</b></p>\n"
+"<p>Denne innstillinger bestemmer hvor lenge programmet skal vente på en IP-"
+"adresse og anta at tilkoblingen feilet.</p>\n"
+"<p><i>HINT: Det kan hjelpe å øke denne grensen hvis du har problemer med å "
+"koble til noen nettverk.</i></p>"
+
+#: rc.cpp:142
+#, no-c-format
+msgid "DHCP client timeout:"
+msgstr "Tidsavbrudd for DHCP-klient:"
+
+#: rc.cpp:153 rc.cpp:164 rc.cpp:412 rc.cpp:441 rc.cpp:470 rc.cpp:499
+#, no-c-format
+msgid "s"
+msgstr "s"
+
+#: rc.cpp:156
+#, fuzzy, no-c-format
+msgid "Specify how long to wait before scanning"
+msgstr "Hvor lenge det ventes på en IP"
+
+#: rc.cpp:159
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Delay Before Scanning</b></p>\n"
+"<p>This option specifies the amount of time to wait between bringing the "
+"interface up and performing a scan.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have to refresh the list "
+"manually to see all the available networks.</i></p>"
+msgstr ""
+"<p><b>Tidsavbrudd for DHCP-klient</b></p>\n"
+"<p>Denne innstillinger bestemmer hvor lenge programmet skal vente på en IP-"
+"adresse og anta at tilkoblingen feilet.</p>\n"
+"<p><i>HINT: Det kan hjelpe å øke denne grensen hvis du har problemer med å "
+"koble til noen nettverk.</i></p>"
+
+#: rc.cpp:175
+#, no-c-format
+msgid ""
+"<i>Press the button below to enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</i>"
+msgstr ""
+"<i>Trykk på knappen under for å slå på alle meldinger som er slått av med "
+"«Ikke vis igjen»-funksjonen.</i>"
+
+#: rc.cpp:178
+#, fuzzy, no-c-format
+msgid "E&nable All Messages"
+msgstr "Slå på alle meldinger"
+
+#: rc.cpp:184
+#, no-c-format
+msgid ""
+"<p><b>Enable All Messages</b></p>\n"
+"<p>Pressing this button will enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</p>"
+msgstr ""
+"<p><b>Slå på alle meldinger</b></p>\n"
+"<p>Denne knappen slår på alle meldinger som er slått av med «Ikke vis igjen»-"
+"funksjonen.</p>"
+
+#: rc.cpp:188
+#, no-c-format
+msgid "First Connection Wizard"
+msgstr "Veiviser for første tilkobling"
+
+#: rc.cpp:191
+#, no-c-format
+msgid "Welcome to First Connection Wizard"
+msgstr "Velkommen til veiviseren for første tilkobling"
+
+#: rc.cpp:194
+#, no-c-format
+msgid ""
+"<b><p>This is the first time you are trying to connect to the selected "
+"network.</p></b>\n"
+"<p>You will be asked a few questions necessary to configure this connection."
+"</p>\n"
+"<p><i>Press Next to continue.</i></p>"
+msgstr ""
+"<b><p>Dette er første gangen du prøver å koble til det valgte nettverket.</"
+"p></b>\n"
+"<p>Du blir spurt om noen ting som er nødvendig for å sette opp forbindelsen. "
+"</p>\n"
+"<p><i>Trykk «Neste» for å fortsette.</i></p>"
+
+#: rc.cpp:202
+#, no-c-format
+msgid ""
+"<p><b>You are trying to connect to a network that does not broadcast its "
+"ESSID.</b></p>\n"
+"<p>Please specify ESSID that you would like to use when connecting to this "
+"access point.</p>"
+msgstr ""
+"<p><b>Du prøver å koble til et nettverk som ikke kringkaster en ESSID.</b></"
+"p>\n"
+"<p>Oppgi en ESSID som du vil bruke når du kobler til tilgangspunktet.</p>"
+
+#: rc.cpp:206 rc.cpp:328
+#, no-c-format
+msgid "ESSID:"
+msgstr "ESSID:"
+
+#: rc.cpp:209
+#, no-c-format
+msgid "Interface Configuration"
+msgstr "Oppsett av kort"
+
+#: rc.cpp:213 rc.cpp:334
+#, no-c-format
+msgid "Automatic (DHCP)"
+msgstr "Automatisk (DHCP)"
+
+#: rc.cpp:217
+#, no-c-format
+msgid "Manual"
+msgstr "Manuelt"
+
+#: rc.cpp:221
+#, no-c-format
+msgid ""
+"<p><b>Your IP and other parameters need to be configured to connect to any "
+"network.</b></p>\n"
+"<p>Which configuration option would you like to use when connecting to this "
+"network?</p>"
+msgstr ""
+"<p><b>Din IP-adresse og andre ting må stilles inn før du kan koble til et "
+"nettverk.</b></p>\n"
+"<p>Hvilket oppsettsalternativ vil du bruke når du kobler til dette "
+"nettverket?</p>"
+
+#: rc.cpp:225
+#, no-c-format
+msgid "Interface Parameters"
+msgstr "Kortinnstillinger"
+
+#: rc.cpp:228 rc.cpp:355
+#, no-c-format
+msgid "Secondary DNS:"
+msgstr "Sekundær DNS:"
+
+#: rc.cpp:231 rc.cpp:343
+#, no-c-format
+msgid "IP:"
+msgstr "IP:"
+
+#: rc.cpp:234 rc.cpp:340
+#, no-c-format
+msgid "Netmask:"
+msgstr "Nettmaske:"
+
+#: rc.cpp:237 rc.cpp:358
+#, no-c-format
+msgid "Primary DNS:"
+msgstr "Primær DNS:"
+
+#: rc.cpp:240 rc.cpp:349
+#, no-c-format
+msgid "Gateway:"
+msgstr "Portvei:"
+
+#: rc.cpp:243 rc.cpp:352
+#, no-c-format
+msgid "Domain:"
+msgstr "Domene:"
+
+#: rc.cpp:246 rc.cpp:346
+#, no-c-format
+msgid "Broadcast:"
+msgstr "Kringkasting:"
+
+#: rc.cpp:249
+#, no-c-format
+msgid ""
+"<p><b>Please specify interface parameters to be used to connect to this "
+"network.</b></p>\n"
+"<p>You may leave some fields blank.</p>"
+msgstr ""
+"<p><b>Oppgi kortinnstillinger som skal brukes når du kobler til dette "
+"nettverket.</b></p>\n"
+"<p>Du trenger ikke fylle ut alt.</p>"
+
+#: rc.cpp:253
+#, no-c-format
+msgid "WEP Configuration"
+msgstr "WEP-oppsett"
+
+#: rc.cpp:256
+#, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WEP authentication.</"
+"b></p>\n"
+"<p>Which WEP mode would you like to use?</p>"
+msgstr ""
+"<p><b>Nettverket du prøver å koble til krever WEP-autentisering.</b></p>\n"
+"<p>Hvilken WEP-modus vil du bruke?</p>"
+
+#: rc.cpp:261
+#, fuzzy, no-c-format
+msgid "Open S&ystem"
+msgstr "Åpent system"
+
+#: rc.cpp:264
+#, no-c-format
+msgid "Shared Key"
+msgstr "Delt nøkkel"
+
+#: rc.cpp:267 rc.cpp:288
+#, fuzzy, no-c-format
+msgid "<p><b>Please provide a key to be used with this network.</b></p>"
+msgstr ""
+"<p><b>Oppgi en nøkkel for bruk med nettverket.</b></p>\n"
+"Du kan bruke ethvert format som støttes av «iwconfig»."
+
+#: rc.cpp:270
+#, no-c-format
+msgid "WEP key:"
+msgstr "WEP-nøkkel:"
+
+#: rc.cpp:273 rc.cpp:285 rc.cpp:370 rc.cpp:391
+#, no-c-format
+msgid "ASCII"
+msgstr ""
+
+#: rc.cpp:276
+#, fuzzy, no-c-format
+msgid "WPA Configuration"
+msgstr "WEP-oppsett"
+
+#: rc.cpp:279
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WPA authentication.</"
+"b></p>"
+msgstr ""
+"<p><b>Nettverket du prøver å koble til krever WEP-autentisering.</b></p>\n"
+"<p>Hvilken WEP-modus vil du bruke?</p>"
+
+#: rc.cpp:282
+#, fuzzy, no-c-format
+msgid "WPA Key:"
+msgstr "WEP-nøkkel"
+
+#: rc.cpp:291 rc.cpp:376
+#, no-c-format
+msgid "<b>?<br>?<br>?<br>?</b>"
+msgstr ""
+
+#: rc.cpp:294 rc.cpp:373
+#, no-c-format
+msgid ""
+"WPA Version:<br>Group Cipher:<br>Pairwise Cipher:<br>Authentication Suite:"
+msgstr ""
+
+#: rc.cpp:297
+#, no-c-format
+msgid "Done!"
+msgstr "Ferdig"
+
+#: rc.cpp:300
+#, no-c-format
+msgid ""
+"<p><b>Congratulations!</b></p>\n"
+"<p>You have successfully finished configuring this connection.</p>\n"
+"<p><b>Press Finish to connect!</b></p>"
+msgstr ""
+"<p><b>Gratulerer!</b></p>\n"
+"<p>Du er endelig ferdig med å sette opp denne forbindelsen</p>\n"
+"<p><b>Trykk «Fullfør» for å koble til.</b></p>"
+
+#: rc.cpp:311
+#, no-c-format
+msgid "F1"
+msgstr "F1"
+
+#: rc.cpp:322
+#, no-c-format
+msgid "I&nterface"
+msgstr "&Kort"
+
+#: rc.cpp:337
+#, fuzzy, no-c-format
+msgid "&Manual"
+msgstr "Manuelt"
+
+#: rc.cpp:361
+#, no-c-format
+msgid "Securit&y"
+msgstr "Sikkerhe&t"
+
+#: rc.cpp:364
+#, fuzzy, no-c-format
+msgid "WPA Settings"
+msgstr "%1 Innstillinger"
+
+#: rc.cpp:367 rc.cpp:388
+#, no-c-format
+msgid "Key:"
+msgstr "Nøkkel:"
+
+#: rc.cpp:379
+#, fuzzy, no-c-format
+msgid "WEP Settings"
+msgstr "%1 Innstillinger"
+
+#: rc.cpp:382
+#, fuzzy, no-c-format
+msgid "Open Syste&m"
+msgstr "Åpent system"
+
+#: rc.cpp:385
+#, no-c-format
+msgid "Alt+M"
+msgstr ""
+
+#: rc.cpp:394
+#, fuzzy, no-c-format
+msgid "Shared &Key"
+msgstr "Delt nøkkel"
+
+#: rc.cpp:397
+#, no-c-format
+msgid "Alt+K"
+msgstr ""
+
+#: rc.cpp:400
+#, no-c-format
+msgid "Advanced"
+msgstr ""
+
+#: rc.cpp:403
+#, no-c-format
+msgid ""
+"<b>Security Warning:</b> the commands specified below will be ran with the "
+"same privileges as Wireless Assistant has."
+msgstr ""
+
+#: rc.cpp:406
+#, fuzzy, no-c-format
+msgid "Pre-Connection Command"
+msgstr "Tilkobling feilet."
+
+#: rc.cpp:409 rc.cpp:438 rc.cpp:467 rc.cpp:496
+#, no-c-format
+msgid "Timeout:"
+msgstr ""
+
+#: rc.cpp:415 rc.cpp:444 rc.cpp:473 rc.cpp:502
+#, no-c-format
+msgid "Amount of time after which the process will be killed."
+msgstr ""
+
+#: rc.cpp:418 rc.cpp:447 rc.cpp:476 rc.cpp:505
+#, no-c-format
+msgid ""
+"<p><b>Timeout</b></p>\n"
+"<p>This option specifies how long should Wireless Assistant wait for the "
+"process to finish, before it will be killed.</p>"
+msgstr ""
+
+#: rc.cpp:422 rc.cpp:451 rc.cpp:480 rc.cpp:509
+#, no-c-format
+msgid "Run detached"
+msgstr ""
+
+#: rc.cpp:425 rc.cpp:454 rc.cpp:483 rc.cpp:512
+#, no-c-format
+msgid "Don't wait for the process to finish."
+msgstr ""
+
+#: rc.cpp:428 rc.cpp:457 rc.cpp:486 rc.cpp:515
+#, no-c-format
+msgid ""
+"<p><b>Run Detached</b></p>\n"
+"<p>If this checkbox is selected Wireless Assistant will not wait for the "
+"process to finish.</p>"
+msgstr ""
+
+#: rc.cpp:432 rc.cpp:461 rc.cpp:490 rc.cpp:519
+#, fuzzy, no-c-format
+msgid "Command:"
+msgstr "Domene:"
+
+#: rc.cpp:435
+#, fuzzy, no-c-format
+msgid "Post-Connection Command"
+msgstr "Veiviser for første tilkobling"
+
+#: rc.cpp:464
+#, no-c-format
+msgid "Pre-Disconnection Command"
+msgstr ""
+
+#: rc.cpp:493
+#, no-c-format
+msgid "Post-Disconnection Command"
+msgstr ""
+
+#~ msgid "WEP Mode"
+#~ msgstr "WEP-modus"
+
+#~ msgid "WEP?"
+#~ msgstr "WEP?"
+
+#~ msgid "Application Options"
+#~ msgstr "Programinnstillinger"
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..dec8518
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,980 @@
+# translation of pl.po to Polish
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+#
+# Pawel Nawrocki <pnawrocki@gmail.com>, 2005.
+# Paweł Nawrocki <pnawrocki@gmail.com>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: pl\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-04-02 02:31+0200\n"
+"PO-Revision-Date: 2007-04-02 20:39+0200\n"
+"Last-Translator: Paweł Nawrocki <pnawrocki@gmail.com>\n"
+"Language-Team: Polish <en@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:103
+msgid "Initializing..."
+msgstr "Wstępne konfigurowanie..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:110
+msgid ""
+"Kernel 2.6 or later not present.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Nie wykryto jądra 2.6 lub nowszego\n"
+"Program Wireless Assistant zakończy działanie."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:156
+msgid ""
+"No usable wireless devices found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Nie znaleziono żadnych dostępnych kart sieciowych.\n"
+"Program Wireless Assistant zakończy działanie."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:179
+msgid ""
+"<qt><p>You might have insufficient permissions for Wireless Assistant to "
+"function properly.</p><p>Did you run it using '<tt>sudo</tt>'?</p></qt>"
+msgstr ""
+"<qt><p>Program Wireless Assistant może nie mieć wystarczających uprawnień do "
+"poprawnego funkcjonowania.</p><p>Czy program został uruchomiony z użyciem "
+"komendy '<tt>sudo</tt>'?</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:200
+msgid ""
+"Executable(s) '%1' could not be found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Nie znaleziono programu(ów) '%1'.\n"
+"Program Wireless Assistant zakończy działanie."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid ""
+"Connection to '%1' has been lost!\n"
+"Would you like to reconnect?"
+msgstr ""
+"Połączenie z '%1' zostało przerwane!\n"
+"Czy chcesz połączyć ponownie?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid "Connection Lost"
+msgstr "Połączenie przerwane"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:252
+msgid ""
+"<qt><p>Settings for network '<b>%1</b>' are about to be deleted.</p><p>Would "
+"you like to continue?</p></qt>"
+msgstr ""
+"<qt><p>Ustawienia dla sieci '<b>%1</b>' za chwilę zostaną usunięte.</"
+"p><p>Czy chcesz kontynuować?</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:257
+msgid "Settings deleted."
+msgstr "Ustawienia zostały usunięte."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:285
+msgid ""
+"<qt><p>File '<i>%1</i>' could not be opened for writing.</p><p>Nameserver(s) "
+"and/or domain are not set.</p></qt>"
+msgstr ""
+"<qt><p>Otwiarcie pliku '<i>%1</i>' z możliwością zapisu nie powiodło się.</"
+"p><p>Serwer(y) DNS i/lub domena nie mogły zostać skonfigurowane.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:317
+msgid "Bringing interface %1 up..."
+msgstr "Włączanie urządzenia sieciowego %1..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:321
+msgid "Waiting before scanning..."
+msgstr "Czekanie przed skanowaniem..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:328
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:334
+msgid "Scanning..."
+msgstr "Skanowanie..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:343
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:807
+msgid "Done."
+msgstr "Gotowe."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:348
+msgid "No networks found."
+msgstr "Nie znaleziono żadnej sieci."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:351
+msgid ""
+"Radio of your wireless card seems to be turned off using an external switch "
+"on your computer.\n"
+"You need turn it on to be able to use wireless networks."
+msgstr ""
+"Radio Twojej karty sieciowej zostało wyłączone za pomocą zewnętrznego "
+"przełącznika na komputerze.\n"
+"Włącz je aby umożliwić korzystanie z sieci bezprzewodowych."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:459
+msgid "Freq (Hz)"
+msgstr "Częstotliwość (Hz)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:473
+msgid ""
+"Radio of your wireless card is off.\n"
+"Would you like to turn it on?"
+msgstr "Radio Twojej karty sieciowej jest wyłączone.<br>Czy chcesz je włączyć?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:559
+msgid "Auto connection failed."
+msgstr "Automatyczne połączenie nie powiodło się."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:570
+msgid ""
+"<qt><p><b>Can not connect to network '%1'.<b></p><p>The network you are "
+"trying to connect to requires WPA authentication. The necessary executables "
+"<i>wpa_supplicant</i> and <i>wpa_cli</i> could not be found. Install "
+"<i>wpa_supplicant</i> and restart Wireless Assistant to connect.</p></qt>"
+msgstr ""
+"<qt><p><b>Nie można połączyć się z siecią '%1'.<b></p><p>Sieć, z którą "
+"chcesz się połączyć, wymaga autoryzacji metodą WPA. Niezbędne programy "
+"<i>wpa_supplicant</i> oraz <i>wpa_cli</i> nie zostały odnalezione. "
+"Zainstaluj <i>wpa_supplicant</i> i uruchom ponownie program Wireless "
+"Assistant by nawiązać to połączenie.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:579
+msgid "%1 - First Connection Wizard"
+msgstr "%1 - Asystent Pierwszego Połączenia"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:616
+msgid "Network settings updated."
+msgstr "Ustawienia zaktualizowane."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:644
+msgid "Running pre-connection command..."
+msgstr "Wykonywanie polecenia przed połączeniem..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:650
+msgid "Connecting to '%1'..."
+msgstr "Nawiązywanie połączenia z '%1'..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:669
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:685
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:718
+msgid "Connection failed."
+msgstr "Połączenie nie powiodło się."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:701
+msgid "Running post-connection command..."
+msgstr "Wykonywanie polecenia po połączeniu..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:708
+msgid "Testing connection..."
+msgstr "Testowanie połączenia..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:714
+msgid "Successfully connected to '%1'."
+msgstr "Połączono z '%1'."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid ""
+"Connection failed.\n"
+"Would you like to review settings for this network?"
+msgstr ""
+"Połączenie nie powiodło się.\n"
+"Czy chcesz sprawdzić ustawienia dla tej sieci?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid "Review Settings?"
+msgstr "Sprawdzić Ustawienia?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:761
+msgid ""
+"<qt><p>You are about to disconnect from '<b>%1</b>'.</p><p>Would you like to "
+"continue?<p></qt>"
+msgstr ""
+"<qt><p>Połączenie z '<b>%1</b>' za chwilę zostanie zakończone.</p><p>Czy "
+"chcesz kontynuować?<p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:766
+msgid "Running pre-disconnection command..."
+msgstr "Wykonywanie polecenia przed rozłączeniem..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:772
+msgid "Disconnecting..."
+msgstr "Rozłączanie..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:778
+msgid "Waiting for DHCP client to shut down..."
+msgstr "Czekanie na zakończenie działania klienta DHCP..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:801
+msgid "Running post-disconnection command..."
+msgstr "Wykonywanie polecenia po rozłączeniu..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:810
+msgid "Cancelled."
+msgstr "Anulowano."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:906
+msgid "&Disconnect"
+msgstr "Rozłącz"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:908
+msgid "Disconnect from the selected network"
+msgstr "Zakończ połączenie z wybraną siecią"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:911
+msgid "&Connect"
+msgstr "Połącz"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:913 rc.cpp:39
+#, no-c-format
+msgid "Connect to the selected network"
+msgstr "Połącz z wybraną siecią"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:960
+msgid "&Stop"
+msgstr "Stop"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:964
+msgid ""
+"Terminate current process\n"
+"(%1)"
+msgstr ""
+"Przerwij wykonywany proces\n"
+"(%1)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:979 rc.cpp:26
+#, no-c-format
+msgid "Quit the application"
+msgstr "Zakończ program"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1038
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1047
+msgid "Disconnect..."
+msgstr "Rozłącz..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1041
+msgid "Connect"
+msgstr "Połącz"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1043
+msgid "Forget Settings..."
+msgstr "Usuń Ustawienia..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1044
+msgid "Edit Settings..."
+msgstr "Zmień Ustawienia..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1050
+msgid "Configure and Connect..."
+msgstr "Konfiguruj i Połącz..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1063
+msgid "%1 Settings"
+msgstr "Ustawienia %1"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Paweł Nawrocki"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "pnawrocki@interia.pl"
+
+#: /home/pn/Development/wlassistant/src/main.cpp:30
+#: /home/pn/Development/wlassistant/src/main.cpp:42 rc.cpp:3
+#, no-c-format
+msgid "Wireless Assistant"
+msgstr "Wireless Assistant"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:76
+msgid ""
+"<qt><p>The network changed its security settings.</p><p>Please go to "
+"<i>Security</i> tab of the following dialog and configure WEP settings.</p></"
+"qt>"
+msgstr ""
+"<qt><p>Ustawienia zabezpieczeń tej sieci zostały zmienione.</p><p>Przejdź do "
+"zakładki <i>Bezpieczeństwo</i> w oknie, które zaraz się pojawi i ustaw "
+"właściwości WEP.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:78
+msgid ""
+"<qt><p>Your WEP Key is not set properly.</p><p>Please go to <i>Security</i> "
+"tab of the following dialog and enter the required key.</p></qt>"
+msgstr ""
+"<qt><p>Klucz WEP nie został prawidłowo ustawiony.</p><p>Przejdź do zakładki "
+"<i>Bezpieczeństwo</i> i wpisz wymagany klucz.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:82
+msgid ""
+"<qt><p>The network has stopped broadcasting its ESSID since the last time "
+"you were connected.</p><p>Would you like to use '<b>%1</b>' as an ESSID for "
+"this network?</p><p><i>NOTE: If you answer No, a dialog will appear where "
+"you will be able to specify a different ESSID.</i></p></qt>"
+msgstr ""
+"<qt><p>ESSID sieci, do której chcesz się podłączyć, przestał być jawny.</"
+"p><p>Czy chcesz użyć '<b>%1</b>' jako ESSID dla tej sieci?</"
+"p><p><i>INDORMACJA: Jeśli odpowiesz nie, pojawi się okno, w którym będzie "
+"można wpisać inne ESSID.</i></p></qt>"
+
+#: rc.cpp:9
+#, no-c-format
+msgid "Alt+O"
+msgstr ""
+
+#: rc.cpp:12
+#, no-c-format
+msgid "Toggle network list/options"
+msgstr "Przełącz między listą sieci a opcjami"
+
+#: rc.cpp:15
+#, no-c-format
+msgid ""
+"<p><b>Options Button</b></p>\n"
+"<p>Pressing this toggle button will show the available application options.</"
+"p>\n"
+"<p><i>HINT: Press this button again to return to the network list.</i></p>"
+msgstr ""
+"<p><b>Opcje</b></p>\n"
+"<p>Naciśnięcie tego przycisku pokaże dostępne opcje programu.</p>\n"
+"<p><i>WSKAZÓWKA: Naciśnij ten przycisk ponownie by powrócić do listy sieci.</"
+"i></p>"
+
+#: rc.cpp:23
+#, no-c-format
+msgid "Alt+Q"
+msgstr ""
+
+#: rc.cpp:29
+#, no-c-format
+msgid ""
+"<p><b>Quit Button</b></p>\n"
+"<p>Pressing this button will quit the application.</p>"
+msgstr ""
+"<p><b>Zakończ</b></p>\n"
+"<p>Wciśnięcia tego przycisku zakończy działanie programu.</p>"
+
+#: rc.cpp:33
+#, no-c-format
+msgid "Co&nnect"
+msgstr "Połącz"
+
+#: rc.cpp:36 rc.cpp:181
+#, no-c-format
+msgid "Alt+N"
+msgstr ""
+
+#: rc.cpp:42
+#, no-c-format
+msgid ""
+"<p><b>Connect/Disconnect Button</b></p>\n"
+"<p>Pressing this button will connect to/disconnect from the network "
+"currently selected in the network list.</p>"
+msgstr ""
+"<p><b>Połącz/Rozłącz</b></p>\n"
+"<p>Naciśnięcie tego przycisku spowoduje połączenie z lub odłączenie od "
+"wybranej sieci.</p>"
+
+#: rc.cpp:46
+#, no-c-format
+msgid "Refresh"
+msgstr "Odśwież"
+
+#: rc.cpp:50
+#, no-c-format
+msgid "Refresh network list"
+msgstr "Odśwież listę sieci"
+
+#: rc.cpp:53
+#, no-c-format
+msgid ""
+"<p><b>Scan Button</b></p>\n"
+"<p>Pressing this button will scan for wireless networks and refresh the "
+"network list.</p>"
+msgstr ""
+"<p><b>Odśwież</b></p>\n"
+"<p>Naciśnięcie tego przycisku spowoduje wyszukanie dostępnych sieci "
+"bezprzewodowych i odświeżenie listy sieci.</p>"
+
+#: rc.cpp:57
+#, no-c-format
+msgid "Device:"
+msgstr "Karta sieciowa:"
+
+#: rc.cpp:60
+#, no-c-format
+msgid "Pick a network device to use"
+msgstr "Wybierz kartę sieciową"
+
+#: rc.cpp:63
+#, no-c-format
+msgid ""
+"<p><b>Device Selection</b></p>\n"
+"<p>This combo box allows you to select which wireless card to use.</p>\n"
+"<p><i>NOTE: Selecting a different card will refresh the network list.</i></p>"
+msgstr ""
+"<p><b>Wybór Kary Sieciowej</b></p>\n"
+"<p>To pole pozwala na wybranie aktywnej karty sieciowej.</p>\n"
+"<p><i>INFORMACJA: Zmiana aktywnej karty spowoduje odświeżenie listy "
+"dostępnych sieci.</i></p>"
+
+#: rc.cpp:68 rc.cpp:199 rc.cpp:325
+#, no-c-format
+msgid "ESSID"
+msgstr "ESSID"
+
+#: rc.cpp:71
+#, no-c-format
+msgid "Channel"
+msgstr "Kanał"
+
+#: rc.cpp:74
+#, no-c-format
+msgid "Link Quality"
+msgstr "Jakość Połączenia"
+
+#: rc.cpp:77
+#, no-c-format
+msgid "WEP/WPA"
+msgstr "WEP/WPA"
+
+#: rc.cpp:80
+#, no-c-format
+msgid "AP"
+msgstr "AP"
+
+#: rc.cpp:83
+#, no-c-format
+msgid ""
+"<p><b>Network List</b></p>\n"
+"<p>This list shows all the wireless networks that have been found.</p>\n"
+"<p><i>HINT: Click the Refresh button to update this list.</i></p>"
+msgstr ""
+"<p><b>Lista Sieci</b></p>\n"
+"<p>Lista ta pokazuje wszystkie znalezione sieci bezprzewodowe.</p>\n"
+"<p><i>WSKAZÓWKA: Naciśnij przycisk Odśwież w celu zaktualizowania listy.</"
+"i></p>"
+
+#: rc.cpp:88
+#, no-c-format
+msgid "Ready"
+msgstr ""
+
+#: rc.cpp:91
+#, no-c-format
+msgid ""
+"<p><b>Status Bar</b></p>\n"
+"<p>Messages describing current process are shown in this area.</p>"
+msgstr ""
+"<p><b>Pasek Statusu</b></p>\n"
+"<p>W tym obszarze pokazywane są wiadomości o wykonywanych przez program "
+"działaniach.</p>"
+
+#: rc.cpp:95
+#, no-c-format
+msgid "Automatically connect on startup"
+msgstr "Połącz automatycznie przy uruchomieniu programu"
+
+#: rc.cpp:99
+#, no-c-format
+msgid ""
+"<p><b>AutomaticallyConnect on Startup</b></p>\n"
+"<p>Checking this box will make the application try to connect to the best "
+"available network. Only networks that have been previously configured will "
+"be taken into account.</p>"
+msgstr ""
+"<p><b>Połącz Automatycznie przy Uruchomieniu Programu</b></p>\n"
+"<p>Zaznaczenie tej opcji spowoduje próbę połączenia z najlepszą dostępną "
+"siecią przy uruchomieniu programu. Jedynie skonfigurowane wcześniej sieci są "
+"brane pod uwagę.</p>"
+
+#: rc.cpp:103
+#, no-c-format
+msgid "Automaticall&y reconnect if connection is lost"
+msgstr "Automatycznie wznów połączenie w razie jego zerwania"
+
+#: rc.cpp:106
+#, no-c-format
+msgid "Alt+Y"
+msgstr ""
+
+#: rc.cpp:109
+#, no-c-format
+msgid ""
+"<p><b>Automatically Reconnect if Connection is Lost</b></p>\n"
+"<p>Checking this box will make the application try to reconnect after the "
+"connection is lost.</p>"
+msgstr ""
+"<p><b>Automatycznie Wznów Połączenie w Razie Jego Przerwania</b></p>\n"
+"<p>Zaznaczenie tego pola spowoduje, że Wireless Assistant spróbuje połączyć "
+"się ponownie do sieci, z którą połączenie zostało zerwane.</p>"
+
+#: rc.cpp:113
+#, no-c-format
+msgid "Quit upon successful connection"
+msgstr "Zakończ program po uzyskaniu połączenia"
+
+#: rc.cpp:117
+#, no-c-format
+msgid ""
+"<p><b>Quit Upon Successful Connection</b></p>\n"
+"<p>Checking this box will make the application close after successfully "
+"establishing a connection to a wireless network.</p>"
+msgstr ""
+"<p><b>Zakończ Program po Uzyskaniu Połączenia</b></p>\n"
+"<p>Zaznaczenie tego pola spowoduje zakończenie działania programu po "
+"uzyskaniu połączenia z siecią bezprzewodową.</p>"
+
+#: rc.cpp:121
+#, no-c-format
+msgid "&Group access points with the same ESSID"
+msgstr "Grupuj punkty dostępowe o takim samym ESSID"
+
+#: rc.cpp:124
+#, no-c-format
+msgid "Alt+G"
+msgstr ""
+
+#: rc.cpp:127
+#, no-c-format
+msgid ""
+"<p><b>Group Access Points with the Same ESSID</b></p>\n"
+"<p>Checking this box will make all access points with the same ESSID appear "
+"as one item in the network list.</p>"
+msgstr ""
+"<p><b>Grupuj Punkty Dostępowe o Takim Samym ESSID</b></p>\n"
+"<p>Zaznaczenie tej opcji spowoduje pokazanie wszystkich sieci o takim samym ESSID jako jednego elementu na liście sieci.</p>"
+
+#: rc.cpp:131
+#, no-c-format
+msgid "Delay before scanning:"
+msgstr "Opóźnienie przed skanowaniem:"
+
+#: rc.cpp:134 rc.cpp:145 rc.cpp:167
+#, no-c-format
+msgid "Specify how long to wait for an IP"
+msgstr "Określ jak długo czekać na uzyskanie adresu IP"
+
+#: rc.cpp:137 rc.cpp:148 rc.cpp:170
+#, no-c-format
+msgid ""
+"<p><b>DHCP Client Timeout</b></p>\n"
+"<p>This option specifies the amount of time after which the application "
+"should stop waiting for an IP address and assume that the connection has "
+"failed.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have problems connecting "
+"to some networks.</i></p>"
+msgstr ""
+"<p><b>Limit czasu klienta DHCP</b></p>\n"
+"<p>Opcja ta pozwala na określenie czasu, po którym program przestanie czekać "
+"na przydzielenie adresu IP i uzna, że połączenie nie powiodło się.</p>\n"
+"<p><i>WSKAZÓWKA: Zwiększenie tej wartości może pomóc połączyć się z "
+"niektórymi sieciami.</i></p>"
+
+#: rc.cpp:142
+#, no-c-format
+msgid "DHCP client timeout:"
+msgstr "Limit czasu klienta DHCP:"
+
+#: rc.cpp:153 rc.cpp:164 rc.cpp:412 rc.cpp:441 rc.cpp:470 rc.cpp:499
+#, no-c-format
+msgid "s"
+msgstr "s"
+
+#: rc.cpp:156
+#, no-c-format
+msgid "Specify how long to wait before scanning"
+msgstr "Określ jak długo czekać przed skanowaniem"
+
+#: rc.cpp:159
+#, no-c-format
+msgid ""
+"<p><b>Delay Before Scanning</b></p>\n"
+"<p>This option specifies the amount of time to wait between bringing the "
+"interface up and performing a scan.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have to refresh the list "
+"manually to see all the available networks.</i></p>"
+msgstr ""
+"<p><b>Opóźnienie przed Skanowaniem</b></p>\n"
+"<p>Opcja ta pozwala na określenie czasu pomiędzy aktywacją karty sieciowej, "
+"a wykonaniem skanowania.</p>\n"
+"<p><i>WSKAZÓWKA: Zwiększenie tej wartości może pomóc w przypadku, gdy w celu "
+"zobaczenia wszystkich dostępnych sieci, konieczne jest ręczne odświeżenie "
+"listy.</i></p>"
+
+#: rc.cpp:175
+#, no-c-format
+msgid ""
+"<i>Press the button below to enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</i>"
+msgstr ""
+"<i>Naciśnij poniższy przycisk aby włączyć wszystkie wiadomości wyłączone za "
+"pomocą funkcji 'Nie pytaj ponownie'.</i>"
+
+#: rc.cpp:178
+#, no-c-format
+msgid "E&nable All Messages"
+msgstr "Włącz wszystkie wiadomości"
+
+#: rc.cpp:184
+#, no-c-format
+msgid ""
+"<p><b>Enable All Messages</b></p>\n"
+"<p>Pressing this button will enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</p>"
+msgstr ""
+"<p><b>Włącz wszystkie wiadomości</b></p>\n"
+"<p>Naciśnięcia poniższego przycisku spowoduje włączenie wszystkich "
+"wiadomości wyłączonych za pomocą funkcji 'Nie pytaj ponownie'.</p>"
+
+#: rc.cpp:188
+#, no-c-format
+msgid "First Connection Wizard"
+msgstr "Asystent Pierwszego Połączenia"
+
+#: rc.cpp:191
+#, no-c-format
+msgid "Welcome to First Connection Wizard"
+msgstr "Witaj w Asystencie Pierwszego Połączenia"
+
+#: rc.cpp:194
+#, no-c-format
+msgid ""
+"<b><p>This is the first time you are trying to connect to the selected "
+"network.</p></b>\n"
+"<p>You will be asked a few questions necessary to configure this connection."
+"</p>\n"
+"<p><i>Press Next to continue.</i></p>"
+msgstr ""
+"<b><p>Próbujesz połączyć się z wybraną siecią po raz pierwszy.</p></b>\n"
+"<p>Asystent zada Ci parę pytań niezbędnych do skonfigurowania tego "
+"połączenia.</p>\n"
+"<p><i>Naciśnij Dalej aby kontynuować.</i></p>"
+
+#: rc.cpp:202
+#, no-c-format
+msgid ""
+"<p><b>You are trying to connect to a network that does not broadcast its "
+"ESSID.</b></p>\n"
+"<p>Please specify ESSID that you would like to use when connecting to this "
+"access point.</p>"
+msgstr ""
+"<p><b>Próbujesz połączyć się z siecią z ukrytym ESSID.</b></p>\n"
+"<p>Wpisz ESSID, którego chcesz używać łącząc się z tym punktem dostępowym.</"
+"p>"
+
+#: rc.cpp:206 rc.cpp:328
+#, no-c-format
+msgid "ESSID:"
+msgstr "ESSID:"
+
+#: rc.cpp:209
+#, no-c-format
+msgid "Interface Configuration"
+msgstr "Konfiguracja Sieci"
+
+#: rc.cpp:213 rc.cpp:334
+#, no-c-format
+msgid "Automatic (DHCP)"
+msgstr "Automatyczna (DHCP)"
+
+#: rc.cpp:217
+#, no-c-format
+msgid "Manual"
+msgstr "Ręczna"
+
+#: rc.cpp:221
+#, no-c-format
+msgid ""
+"<p><b>Your IP and other parameters need to be configured to connect to any "
+"network.</b></p>\n"
+"<p>Which configuration option would you like to use when connecting to this "
+"network?</p>"
+msgstr ""
+"<p><b>Aby połączyć się z siecią, Twój adres IP oraz inne parametry muszą "
+"zostać ustawione.</b></p>\n"
+"<p>Jaka metoda konfiguracji ma być używana dla połączenia z tą siecią?</p>"
+
+#: rc.cpp:225
+#, no-c-format
+msgid "Interface Parameters"
+msgstr "Parametry Sieci"
+
+#: rc.cpp:228 rc.cpp:355
+#, no-c-format
+msgid "Secondary DNS:"
+msgstr "Dodatkowy DNS:"
+
+#: rc.cpp:231 rc.cpp:343
+#, no-c-format
+msgid "IP:"
+msgstr "Adres IP:"
+
+#: rc.cpp:234 rc.cpp:340
+#, no-c-format
+msgid "Netmask:"
+msgstr "Maska sieci:"
+
+#: rc.cpp:237 rc.cpp:358
+#, no-c-format
+msgid "Primary DNS:"
+msgstr "DNS:"
+
+#: rc.cpp:240 rc.cpp:349
+#, no-c-format
+msgid "Gateway:"
+msgstr "Brama sieci:"
+
+#: rc.cpp:243 rc.cpp:352
+#, no-c-format
+msgid "Domain:"
+msgstr "Domena:"
+
+#: rc.cpp:246 rc.cpp:346
+#, no-c-format
+msgid "Broadcast:"
+msgstr "Transmitowany IP:"
+
+#: rc.cpp:249
+#, no-c-format
+msgid ""
+"<p><b>Please specify interface parameters to be used to connect to this "
+"network.</b></p>\n"
+"<p>You may leave some fields blank.</p>"
+msgstr ""
+"<p><b>Wpisz parametry dla połączenia z tą siecią.</b></p>\n"
+"<p>Niektóre pola mogą zostać puste.</p>"
+
+#: rc.cpp:253
+#, no-c-format
+msgid "WEP Configuration"
+msgstr "Konfiguracja WEP"
+
+#: rc.cpp:256
+#, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WEP authentication.</"
+"b></p>\n"
+"<p>Which WEP mode would you like to use?</p>"
+msgstr ""
+"<p><b>Sieć, z którą chcesz się połączyć, wymaga uwierzytelnienia metodą WEP."
+"</b></p>\n"
+"<p>Jakiego trybu WEP chcesz używać dla tego połączenia?</p>"
+
+#: rc.cpp:261
+#, no-c-format
+msgid "Open S&ystem"
+msgstr "System Otwarty"
+
+#: rc.cpp:264
+#, no-c-format
+msgid "Shared Key"
+msgstr "Klucz publiczny"
+
+#: rc.cpp:267 rc.cpp:288
+#, no-c-format
+msgid "<p><b>Please provide a key to be used with this network.</b></p>"
+msgstr "<p><b>Wpisz klucz, którego chcesz używać łącząc się z tą siecią.</b></p>"
+
+#: rc.cpp:270
+#, no-c-format
+msgid "WEP key:"
+msgstr "Klucz WEP:"
+
+#: rc.cpp:273 rc.cpp:285 rc.cpp:370 rc.cpp:391
+#, no-c-format
+msgid "ASCII"
+msgstr "ASCII"
+
+#: rc.cpp:276
+#, no-c-format
+msgid "WPA Configuration"
+msgstr "Konfiguracja WPA"
+
+#: rc.cpp:279
+#, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WPA authentication.</"
+"b></p>"
+msgstr ""
+"<p><b>Sieć, z którą chcesz się połączyć, wymaga uwierzytelnienia metodą WPA."
+"</b></p>"
+
+#: rc.cpp:282
+#, no-c-format
+msgid "WPA Key:"
+msgstr "Klucz WPA:"
+
+#: rc.cpp:291 rc.cpp:376
+#, no-c-format
+msgid "<b>?<br>?<br>?<br>?</b>"
+msgstr ""
+
+#: rc.cpp:294 rc.cpp:373
+#, no-c-format
+msgid "WPA Version:<br>Group Cipher:<br>Pairwise Cipher:<br>Authentication Suite:"
+msgstr ""
+"Wersja WPA:<br>Szyfrowanie grupowe:<br>Szyfrowanie pojedyncze:<br>Metoda "
+"uwierzytelniania:"
+
+#: rc.cpp:297
+#, no-c-format
+msgid "Done!"
+msgstr "Gotowe!"
+
+#: rc.cpp:300
+#, no-c-format
+msgid ""
+"<p><b>Congratulations!</b></p>\n"
+"<p>You have successfully finished configuring this connection.</p>\n"
+"<p><b>Press Finish to connect!</b></p>"
+msgstr ""
+"<p><b>Gratulacje!</b></p>\n"
+"<p>Pomyślnie zakończono konfigurowanie tego połączenia.</p>\n"
+"<p><b>Naciśnij Zakończ by nawiązać połączenie!</b></p>"
+
+#: rc.cpp:311
+#, no-c-format
+msgid "F1"
+msgstr ""
+
+#: rc.cpp:322
+#, no-c-format
+msgid "I&nterface"
+msgstr "Interfejs"
+
+#: rc.cpp:337
+#, no-c-format
+msgid "&Manual"
+msgstr "Ręczna"
+
+#: rc.cpp:361
+#, no-c-format
+msgid "Securit&y"
+msgstr "Bezpieczeństwo"
+
+#: rc.cpp:364
+#, no-c-format
+msgid "WPA Settings"
+msgstr "Ustawienia WPA"
+
+#: rc.cpp:367 rc.cpp:388
+#, no-c-format
+msgid "Key:"
+msgstr "Klucz:"
+
+#: rc.cpp:379
+#, no-c-format
+msgid "WEP Settings"
+msgstr "Ustawienia WEP"
+
+#: rc.cpp:382
+#, no-c-format
+msgid "Open Syste&m"
+msgstr "System Otwarty"
+
+#: rc.cpp:385
+#, no-c-format
+msgid "Alt+M"
+msgstr ""
+
+#: rc.cpp:394
+#, no-c-format
+msgid "Shared &Key"
+msgstr "Klucz Publiczny"
+
+#: rc.cpp:397
+#, no-c-format
+msgid "Alt+K"
+msgstr ""
+
+#: rc.cpp:400
+#, no-c-format
+msgid "Advanced"
+msgstr "Zaawansowane"
+
+#: rc.cpp:403
+#, no-c-format
+msgid ""
+"<b>Security Warning:</b> the commands specified below will be ran with the "
+"same privileges as Wireless Assistant has."
+msgstr ""
+"<b>Ostrzeżenie o zabezpieczeniach:</b> poniższe komendy zostaną uruchomione "
+"z takimi samymi uprawnieniami, jakie ma Wireless Assistant."
+
+#: rc.cpp:406
+#, no-c-format
+msgid "Pre-Connection Command"
+msgstr "Polecenie przed połączeniem"
+
+#: rc.cpp:409 rc.cpp:438 rc.cpp:467 rc.cpp:496
+#, no-c-format
+msgid "Timeout:"
+msgstr "Limit czasu:"
+
+#: rc.cpp:415 rc.cpp:444 rc.cpp:473 rc.cpp:502
+#, no-c-format
+msgid "Amount of time after which the process will be killed."
+msgstr "Ilość czasu, po której upływie proces zostanie przerwany."
+
+#: rc.cpp:418 rc.cpp:447 rc.cpp:476 rc.cpp:505
+#, no-c-format
+msgid ""
+"<p><b>Timeout</b></p>\n"
+"<p>This option specifies how long should Wireless Assistant wait for the "
+"process to finish, before it will be killed.</p>"
+msgstr ""
+"<p><b>Limit czasu</b></p>\n"
+"<p>Opcja ta określa, jak długo Wireless Assistant powinien czekać na "
+"zakończenie procesu, zanim zostanie on przerwany.</p>"
+
+#: rc.cpp:422 rc.cpp:451 rc.cpp:480 rc.cpp:509
+#, no-c-format
+msgid "Run detached"
+msgstr "Uruchom w oddzielnym procesie"
+
+#: rc.cpp:425 rc.cpp:454 rc.cpp:483 rc.cpp:512
+#, no-c-format
+msgid "Don't wait for the process to finish."
+msgstr "Nie czekaj na zakończenie procesu"
+
+#: rc.cpp:428 rc.cpp:457 rc.cpp:486 rc.cpp:515
+#, no-c-format
+msgid ""
+"<p><b>Run Detached</b></p>\n"
+"<p>If this checkbox is selected Wireless Assistant will not wait for the "
+"process to finish.</p>"
+msgstr ""
+"<p><b>Uruchom w Oddzielnym Procesie</b></p>\n"
+"<p>Jeśli opcja ta jest zaznaczona, Wireless Assistant nie będzie czekał na "
+"zakończenie procesu.</p>"
+
+#: rc.cpp:432 rc.cpp:461 rc.cpp:490 rc.cpp:519
+#, no-c-format
+msgid "Command:"
+msgstr "Polecenie:"
+
+#: rc.cpp:435
+#, no-c-format
+msgid "Post-Connection Command"
+msgstr "Polecenie po połączeniu"
+
+#: rc.cpp:464
+#, no-c-format
+msgid "Pre-Disconnection Command"
+msgstr "Polecenie przed rozłączeniem"
+
+#: rc.cpp:493
+#, no-c-format
+msgid "Post-Disconnection Command"
+msgstr "Polecenie po rozłączeniu"
+
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..208a945
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,976 @@
+# translation of pt_BR.po to Polish
+# This file is distributed under the same license as the wlassistant package.
+# Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+#
+# Pawel Nawrocki <pnawrocki@gmail.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: pt_BR\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-04-02 02:31+0200\n"
+"PO-Revision-Date: 2006-02-15 04:33-0000\n"
+"Last-Translator: Bruno Gonçalves Araujo <bigbusca@hotmail.com>\n"
+"Language-Team: Polish\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.1\n"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:103
+msgid "Initializing..."
+msgstr "Iniciando..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:110
+msgid ""
+"Kernel 2.6 or later not present.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Kernel 2.6 ou mais novo não encontrado.\n"
+"O Assistente de rede sem fio irá finalizar."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:156
+msgid ""
+"No usable wireless devices found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Nenhum dispositivo de rede sem fio encontrado.\n"
+"O Assistente de rede sem fio irá finalizar."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:179
+msgid ""
+"<qt><p>You might have insufficient permissions for Wireless Assistant to "
+"function properly.</p><p>Did you run it using '<tt>sudo</tt>'?</p></qt>"
+msgstr ""
+"<qt><p>Você deve ter permissões insuficientes para fazer o Assistente de "
+"rede sem fio funcionar corretamente.</p><p>Você o rodou usando'<tt>sudo</"
+"tt>'?</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:200
+msgid ""
+"Executable(s) '%1' could not be found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Executável(eis) '%1' não encontrado(s).\n"
+"O Assistente de rede sem fio irá finalizar."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid ""
+"Connection to '%1' has been lost!\n"
+"Would you like to reconnect?"
+msgstr ""
+"Conexão a '%1' foi perdida!\n"
+"Você deseja reconectar?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid "Connection Lost"
+msgstr "Conexão perdida"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:252
+msgid ""
+"<qt><p>Settings for network '<b>%1</b>' are about to be deleted.</p><p>Would "
+"you like to continue?</p></qt>"
+msgstr ""
+"<qt><p>Configurações da rede '<b>%1</b>' serão deletadas.</p><p>Você deseja "
+"continuar?</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:257
+msgid "Settings deleted."
+msgstr "Configurações apagadas."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:285
+msgid ""
+"<qt><p>File '<i>%1</i>' could not be opened for writing.</p><p>Nameserver(s) "
+"and/or domain are not set.</p></qt>"
+msgstr ""
+"<qt><p>Arquivo '<i>%1</i>' não pôde ser aberto para escrita.</p><p>O Nome do "
+"servidor e/ou domínio não foram colocados. </p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:317
+msgid "Bringing interface %1 up..."
+msgstr "Subindo interface %1..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:321
+msgid "Waiting before scanning..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:328
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:334
+msgid "Scanning..."
+msgstr "Procurando..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:343
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:807
+msgid "Done."
+msgstr "Feito."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:348
+msgid "No networks found."
+msgstr "Nenhuma rede encontrada."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:351
+#, fuzzy
+msgid ""
+"Radio of your wireless card seems to be turned off using an external switch "
+"on your computer.\n"
+"You need turn it on to be able to use wireless networks."
+msgstr ""
+"O sinal de sua rede sem fio foi desabilitada usando um switch externo em seu "
+"computador.\n"
+"Você precisa habilitá-lo para poder usar as redes sem fio."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:459
+msgid "Freq (Hz)"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:473
+msgid ""
+"Radio of your wireless card is off.\n"
+"Would you like to turn it on?"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:559
+#, fuzzy
+msgid "Auto connection failed."
+msgstr "Assistente da primeira conexão"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:570
+msgid ""
+"<qt><p><b>Can not connect to network '%1'.<b></p><p>The network you are "
+"trying to connect to requires WPA authentication. The necessary executables "
+"<i>wpa_supplicant</i> and <i>wpa_cli</i> could not be found. Install "
+"<i>wpa_supplicant</i> and restart Wireless Assistant to connect.</p></qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:579
+msgid "%1 - First Connection Wizard"
+msgstr "%1 - Assistente da primeira conexão"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:616
+msgid "Network settings updated."
+msgstr "Configurações de rede atualizadas."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:644
+#, fuzzy
+msgid "Running pre-connection command..."
+msgstr "Conexão falhou."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:650
+msgid "Connecting to '%1'..."
+msgstr "Conectando à '%1'..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:669
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:685
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:718
+#, fuzzy
+msgid "Connection failed."
+msgstr "Conexão perdida"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:701
+#, fuzzy
+msgid "Running post-connection command..."
+msgstr "Assistente da primeira conexão"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:708
+msgid "Testing connection..."
+msgstr "Testando conexão..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:714
+msgid "Successfully connected to '%1'."
+msgstr "Conectado à '%1'."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid ""
+"Connection failed.\n"
+"Would you like to review settings for this network?"
+msgstr ""
+"Conexão falhou.\n"
+"Você gostaria de revisar as configurações para esta rede?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid "Review Settings?"
+msgstr "Revisar configurações?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:761
+msgid ""
+"<qt><p>You are about to disconnect from '<b>%1</b>'.</p><p>Would you like to "
+"continue?<p></qt>"
+msgstr ""
+"<qt><p>Você está prestes a se desconectar de '<b>%1</b>'.</p><p>Você "
+"gostaria de continuar?<p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:766
+#, fuzzy
+msgid "Running pre-disconnection command..."
+msgstr "Conexão falhou."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:772
+msgid "Disconnecting..."
+msgstr "Desconectando..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:778
+msgid "Waiting for DHCP client to shut down..."
+msgstr "Esperando o término do cliente DHCP..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:801
+#, fuzzy
+msgid "Running post-disconnection command..."
+msgstr "Assistente da primeira conexão"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:810
+msgid "Cancelled."
+msgstr "Cancelada."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:906
+msgid "&Disconnect"
+msgstr "&Desconectar"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:908
+msgid "Disconnect from the selected network"
+msgstr "Desconectar da rede selecionada"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:911
+msgid "&Connect"
+msgstr "&Conectar"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:913 rc.cpp:39
+#, no-c-format
+msgid "Connect to the selected network"
+msgstr "Conecta à rede selecionada"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:960
+msgid "&Stop"
+msgstr "&Parar"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:964
+msgid ""
+"Terminate current process\n"
+"(%1)"
+msgstr ""
+"Terminar o processo corrente\n"
+"(%1)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:979 rc.cpp:26
+#, no-c-format
+msgid "Quit the application"
+msgstr "Sair da aplicação"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1038
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1047
+msgid "Disconnect..."
+msgstr "Desconectar..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1041
+#, fuzzy
+msgid "Connect"
+msgstr "Conectar"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1043
+msgid "Forget Settings..."
+msgstr "Ignorar Configurações..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1044
+msgid "Edit Settings..."
+msgstr "Editar Configurações..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1050
+msgid "Configure and Connect..."
+msgstr "Configurar e Conectar..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1063
+#, fuzzy
+msgid "%1 Settings"
+msgstr "%1 Configurações"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/main.cpp:30
+#: /home/pn/Development/wlassistant/src/main.cpp:42 rc.cpp:3
+#, no-c-format
+msgid "Wireless Assistant"
+msgstr "Assistente sem fio"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:76
+msgid ""
+"<qt><p>The network changed its security settings.</p><p>Please go to "
+"<i>Security</i> tab of the following dialog and configure WEP settings.</p></"
+"qt>"
+msgstr ""
+"<qt><p>Essa é uma rede segura.</p><p>Favor ir em <i>Segurança</i> e inserir "
+"uma chave WEP.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:78
+msgid ""
+"<qt><p>Your WEP Key is not set properly.</p><p>Please go to <i>Security</i> "
+"tab of the following dialog and enter the required key.</p></qt>"
+msgstr ""
+"<qt><p>Sua chave WEP não foi inserida corretamente.</p><p>Favor ir em "
+"<i>Segurança</i> e inserir a chave requerida.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:82
+msgid ""
+"<qt><p>The network has stopped broadcasting its ESSID since the last time "
+"you were connected.</p><p>Would you like to use '<b>%1</b>' as an ESSID for "
+"this network?</p><p><i>NOTE: If you answer No, a dialog will appear where "
+"you will be able to specify a different ESSID.</i></p></qt>"
+msgstr ""
+"<qt><p>A conexão está parada.</p><p>Deseja reconectar utilizando o ESSID '<b>"
+"%1</b>' para essa conexão?</p><p><i>NOTA: Caso clique em não será aberta uma "
+"janela para especificar um novo ESSID.</i></p></qt>"
+
+#: rc.cpp:9
+#, no-c-format
+msgid "Alt+O"
+msgstr ""
+
+#: rc.cpp:12
+#, no-c-format
+msgid "Toggle network list/options"
+msgstr "Alternar rede lista/opções"
+
+#: rc.cpp:15
+#, no-c-format
+msgid ""
+"<p><b>Options Button</b></p>\n"
+"<p>Pressing this toggle button will show the available application options.</"
+"p>\n"
+"<p><i>HINT: Press this button again to return to the network list.</i></p>"
+msgstr ""
+"<p><b>Opções</b></p>\n"
+"<p>Este botão irá mostrar as opções de aplicações disponíveis.</p>\n"
+"<p><i>DICA: Apertar este botão novamente para retornar para a lista de rede."
+"</i></p>"
+
+#: rc.cpp:23
+#, no-c-format
+msgid "Alt+Q"
+msgstr ""
+
+#: rc.cpp:29
+#, no-c-format
+msgid ""
+"<p><b>Quit Button</b></p>\n"
+"<p>Pressing this button will quit the application.</p>"
+msgstr ""
+"<p><b>Sair</b></p>\n"
+"<p>Apertando este botão sairá do aplicativo.</p>"
+
+#: rc.cpp:33
+#, fuzzy, no-c-format
+msgid "Co&nnect"
+msgstr "Conectar"
+
+#: rc.cpp:36 rc.cpp:181
+#, no-c-format
+msgid "Alt+N"
+msgstr ""
+
+#: rc.cpp:42
+#, no-c-format
+msgid ""
+"<p><b>Connect/Disconnect Button</b></p>\n"
+"<p>Pressing this button will connect to/disconnect from the network "
+"currently selected in the network list.</p>"
+msgstr ""
+"<p><b>Conectar/Desconectar</b></p>\n"
+"<p>Conecta/Desconecta da rede selecionada na lista da rede.</p>"
+
+#: rc.cpp:46
+#, no-c-format
+msgid "Refresh"
+msgstr "Atualizar"
+
+#: rc.cpp:50
+#, no-c-format
+msgid "Refresh network list"
+msgstr "Atualizar lista de redes"
+
+#: rc.cpp:53
+#, no-c-format
+msgid ""
+"<p><b>Scan Button</b></p>\n"
+"<p>Pressing this button will scan for wireless networks and refresh the "
+"network list.</p>"
+msgstr ""
+"<p><b>Procurar</b></p>\n"
+"<p>Tenta encontrar redes sem fio e atualiza as informações na lista de "
+"redes</p>"
+
+#: rc.cpp:57
+#, no-c-format
+msgid "Device:"
+msgstr "Dispositivo:"
+
+#: rc.cpp:60
+#, no-c-format
+msgid "Pick a network device to use"
+msgstr "Escolha um dispositivo de rede"
+
+#: rc.cpp:63
+#, no-c-format
+msgid ""
+"<p><b>Device Selection</b></p>\n"
+"<p>This combo box allows you to select which wireless card to use.</p>\n"
+"<p><i>NOTE: Selecting a different card will refresh the network list.</i></p>"
+msgstr ""
+"<p><b>Seleção de Dispositivo</b></p>\n"
+"<p>Esta opção te permite selecionar qual placa de rede sem fio selecionar.</"
+"p>\n"
+"<p><i>OBS: Selecionando uma placa de rede sem fio diferente irá atualizar a "
+"lista de rede.</i></p>"
+
+#: rc.cpp:68 rc.cpp:199 rc.cpp:325
+#, no-c-format
+msgid "ESSID"
+msgstr ""
+
+#: rc.cpp:71
+#, no-c-format
+msgid "Channel"
+msgstr "Canal"
+
+#: rc.cpp:74
+#, no-c-format
+msgid "Link Quality"
+msgstr "Qualidade da conexão"
+
+#: rc.cpp:77
+#, no-c-format
+msgid "WEP/WPA"
+msgstr ""
+
+#: rc.cpp:80
+#, no-c-format
+msgid "AP"
+msgstr ""
+
+#: rc.cpp:83
+#, no-c-format
+msgid ""
+"<p><b>Network List</b></p>\n"
+"<p>This list shows all the wireless networks that have been found.</p>\n"
+"<p><i>HINT: Click the Refresh button to update this list.</i></p>"
+msgstr ""
+"<p><b>Lista de rede</b></p>\n"
+"<p>Esta lista mostra todas as placas de rede sem fio que foram encontradas.</"
+"p>\n"
+"<p><i>DICA: Clique no botão Procurar para atualizar esta lista.</i></p>"
+
+#: rc.cpp:88
+#, no-c-format
+msgid "Ready"
+msgstr ""
+
+#: rc.cpp:91
+#, no-c-format
+msgid ""
+"<p><b>Status Bar</b></p>\n"
+"<p>Messages describing current process are shown in this area.</p>"
+msgstr ""
+"<p><b>Barra de Status</b></p>\n"
+"<p>Mensagens descrevendo o processo corrente são mostrados nesta área</p>"
+
+#: rc.cpp:95
+#, no-c-format
+msgid "Automatically connect on startup"
+msgstr ""
+
+#: rc.cpp:99
+#, no-c-format
+msgid ""
+"<p><b>AutomaticallyConnect on Startup</b></p>\n"
+"<p>Checking this box will make the application try to connect to the best "
+"available network. Only networks that have been previously configured will "
+"be taken into account.</p>"
+msgstr ""
+
+#: rc.cpp:103
+#, no-c-format
+msgid "Automaticall&y reconnect if connection is lost"
+msgstr ""
+
+#: rc.cpp:106
+#, no-c-format
+msgid "Alt+Y"
+msgstr ""
+
+#: rc.cpp:109
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Automatically Reconnect if Connection is Lost</b></p>\n"
+"<p>Checking this box will make the application try to reconnect after the "
+"connection is lost.</p>"
+msgstr ""
+"<p><b>Saída da conexão com sucesso.</b></p>\n"
+"<p>Checando esta janela irá fechar a aplicação após estabelecer uma conexão "
+"bem sucedida em uma rede sem fio. </p>"
+
+#: rc.cpp:113
+#, no-c-format
+msgid "Quit upon successful connection"
+msgstr "Saída da conexão com sucesso."
+
+#: rc.cpp:117
+#, no-c-format
+msgid ""
+"<p><b>Quit Upon Successful Connection</b></p>\n"
+"<p>Checking this box will make the application close after successfully "
+"establishing a connection to a wireless network.</p>"
+msgstr ""
+"<p><b>Saída da conexão com sucesso.</b></p>\n"
+"<p>Checando esta janela irá fechar a aplicação após estabelecer uma conexão "
+"bem sucedida em uma rede sem fio. </p>"
+
+#: rc.cpp:121
+#, no-c-format
+msgid "&Group access points with the same ESSID"
+msgstr ""
+
+#: rc.cpp:124
+#, no-c-format
+msgid "Alt+G"
+msgstr ""
+
+#: rc.cpp:127
+#, no-c-format
+msgid ""
+"<p><b>Group Access Points with the Same ESSID</b></p>\n"
+"<p>Checking this box will make all access points with the same ESSID appear "
+"as one item in the network list.</p>"
+msgstr ""
+
+#: rc.cpp:131
+#, no-c-format
+msgid "Delay before scanning:"
+msgstr ""
+
+#: rc.cpp:134 rc.cpp:145 rc.cpp:167
+#, no-c-format
+msgid "Specify how long to wait for an IP"
+msgstr "Especifique quanto tempo esperar por um IP"
+
+#: rc.cpp:137 rc.cpp:148 rc.cpp:170
+#, no-c-format
+msgid ""
+"<p><b>DHCP Client Timeout</b></p>\n"
+"<p>This option specifies the amount of time after which the application "
+"should stop waiting for an IP address and assume that the connection has "
+"failed.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have problems connecting "
+"to some networks.</i></p>"
+msgstr ""
+"<p><b>Tempo de espera do cliente DHCP</b></p>\n"
+"<p>Esta opção especifica quanto tempo a aplicação deveria parar ao esperar "
+"por um endereço de IP e informar que a conexão falhou.</p>\n"
+"<p><i>DICA: Aumentando este numero pode ajudar se você tiver problemas ao "
+"conectar em algumas redes.</i></p>"
+
+#: rc.cpp:142
+#, no-c-format
+msgid "DHCP client timeout:"
+msgstr "Tempo de espera do cliente DHCP:"
+
+#: rc.cpp:153 rc.cpp:164 rc.cpp:412 rc.cpp:441 rc.cpp:470 rc.cpp:499
+#, no-c-format
+msgid "s"
+msgstr ""
+
+#: rc.cpp:156
+#, fuzzy, no-c-format
+msgid "Specify how long to wait before scanning"
+msgstr "Especifique quanto tempo esperar por um IP"
+
+#: rc.cpp:159
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Delay Before Scanning</b></p>\n"
+"<p>This option specifies the amount of time to wait between bringing the "
+"interface up and performing a scan.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have to refresh the list "
+"manually to see all the available networks.</i></p>"
+msgstr ""
+"<p><b>Tempo de espera do cliente DHCP</b></p>\n"
+"<p>Esta opção especifica quanto tempo a aplicação deveria parar ao esperar "
+"por um endereço de IP e informar que a conexão falhou.</p>\n"
+"<p><i>DICA: Aumentando este numero pode ajudar se você tiver problemas ao "
+"conectar em algumas redes.</i></p>"
+
+#: rc.cpp:175
+#, no-c-format
+msgid ""
+"<i>Press the button below to enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</i>"
+msgstr ""
+"<i>Aperte este botão abaixo para habilitar todas as mensagens que foram "
+"desligadas com a opção 'Não mostre novamente'</i>"
+
+#: rc.cpp:178
+#, fuzzy, no-c-format
+msgid "E&nable All Messages"
+msgstr "Habilitar todas as mensagens"
+
+#: rc.cpp:184
+#, no-c-format
+msgid ""
+"<p><b>Enable All Messages</b></p>\n"
+"<p>Pressing this button will enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</p>"
+msgstr ""
+"<p><b>Habilitar todas as mensagens</b></p>\n"
+"<p>Apertando este botão irá habilitar todas as mensagens que foram "
+"desligadas com a opção 'Não mostre novamente'</p>"
+
+#: rc.cpp:188
+#, no-c-format
+msgid "First Connection Wizard"
+msgstr "Assistente da primeira conexão"
+
+#: rc.cpp:191
+#, no-c-format
+msgid "Welcome to First Connection Wizard"
+msgstr "Bem Vindo ao Assitente da Primeira Conexão"
+
+#: rc.cpp:194
+#, no-c-format
+msgid ""
+"<b><p>This is the first time you are trying to connect to the selected "
+"network.</p></b>\n"
+"<p>You will be asked a few questions necessary to configure this connection."
+"</p>\n"
+"<p><i>Press Next to continue.</i></p>"
+msgstr ""
+"<b><p>Esta é a primeira vez que você está tentando conectar na rede "
+"selecionada.</p></b>\n"
+"<p>Serão feitas algumas perguntas necessárias para configurar esta conexão.</"
+"p>\n"
+"<p><i>Aperte Próximo para continuar.</i></p>"
+
+#: rc.cpp:202
+#, no-c-format
+msgid ""
+"<p><b>You are trying to connect to a network that does not broadcast its "
+"ESSID.</b></p>\n"
+"<p>Please specify ESSID that you would like to use when connecting to this "
+"access point.</p>"
+msgstr ""
+"<p><b>Você está tentando conectar a uma rede que não faz broadcast da sua "
+"identificação ESSID.</b></p>\n"
+"<p>Por Favor especifique o ESSID que você gostaria de usar ao conectar a "
+"este ponto de acesso.</p>"
+
+#: rc.cpp:206 rc.cpp:328
+#, no-c-format
+msgid "ESSID:"
+msgstr ""
+
+#: rc.cpp:209
+#, no-c-format
+msgid "Interface Configuration"
+msgstr "Configuração da Interface"
+
+#: rc.cpp:213 rc.cpp:334
+#, no-c-format
+msgid "Automatic (DHCP)"
+msgstr "Automático (DHCP)"
+
+#: rc.cpp:217
+#, no-c-format
+msgid "Manual"
+msgstr "Manual"
+
+#: rc.cpp:221
+#, no-c-format
+msgid ""
+"<p><b>Your IP and other parameters need to be configured to connect to any "
+"network.</b></p>\n"
+"<p>Which configuration option would you like to use when connecting to this "
+"network?</p>"
+msgstr ""
+"<p><b>Seu IP e outros parâmetros precisam ser configurados para conectar a "
+"uma rede.</b></p>\n"
+"<p>Qual opção de configuração você gostaria de usar ao conectar a esta rede?"
+"</p>"
+
+#: rc.cpp:225
+#, no-c-format
+msgid "Interface Parameters"
+msgstr "Parâmetros da interface"
+
+#: rc.cpp:228 rc.cpp:355
+#, no-c-format
+msgid "Secondary DNS:"
+msgstr "DNS secundário:"
+
+#: rc.cpp:231 rc.cpp:343
+#, no-c-format
+msgid "IP:"
+msgstr "IP:"
+
+#: rc.cpp:234 rc.cpp:340
+#, no-c-format
+msgid "Netmask:"
+msgstr "Máscara de rede:"
+
+#: rc.cpp:237 rc.cpp:358
+#, no-c-format
+msgid "Primary DNS:"
+msgstr "DNS primário:"
+
+#: rc.cpp:240 rc.cpp:349
+#, no-c-format
+msgid "Gateway:"
+msgstr "Gateway:"
+
+#: rc.cpp:243 rc.cpp:352
+#, no-c-format
+msgid "Domain:"
+msgstr "Domínio:"
+
+#: rc.cpp:246 rc.cpp:346
+#, no-c-format
+msgid "Broadcast:"
+msgstr "Broadcast:"
+
+#: rc.cpp:249
+#, no-c-format
+msgid ""
+"<p><b>Please specify interface parameters to be used to connect to this "
+"network.</b></p>\n"
+"<p>You may leave some fields blank.</p>"
+msgstr ""
+"<p><b>Por Favor especifique os parâmetros de interface a ser usada para "
+"conectar a esta rede.</b></p>\n"
+"<p>Você poderá deixar alguns campos em branco.</p>"
+
+#: rc.cpp:253
+#, no-c-format
+msgid "WEP Configuration"
+msgstr "Configuração WEP"
+
+#: rc.cpp:256
+#, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WEP authentication.</"
+"b></p>\n"
+"<p>Which WEP mode would you like to use?</p>"
+msgstr ""
+"<p><b>A rede a qual você está tentando conectar requer uma autenticação WEP."
+"</b></p>\n"
+"<p>Qual modo WEP você gostaria de usar?</p>"
+
+#: rc.cpp:261
+#, no-c-format
+msgid "Open S&ystem"
+msgstr ""
+
+#: rc.cpp:264
+#, no-c-format
+msgid "Shared Key"
+msgstr ""
+
+#: rc.cpp:267 rc.cpp:288
+#, fuzzy, no-c-format
+msgid "<p><b>Please provide a key to be used with this network.</b></p>"
+msgstr ""
+"<p><b>Por Favor informe uma chave a ser usada para esta rede.</b></p>\n"
+"Qualquer formato suportado pelo iwconfig pode ser usado."
+
+#: rc.cpp:270
+#, no-c-format
+msgid "WEP key:"
+msgstr "Chave WEP:"
+
+#: rc.cpp:273 rc.cpp:285 rc.cpp:370 rc.cpp:391
+#, no-c-format
+msgid "ASCII"
+msgstr ""
+
+#: rc.cpp:276
+#, fuzzy, no-c-format
+msgid "WPA Configuration"
+msgstr "Configuração WEP"
+
+#: rc.cpp:279
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WPA authentication.</"
+"b></p>"
+msgstr ""
+"<p><b>A rede a qual você está tentando conectar requer uma autenticação WEP."
+"</b></p>\n"
+"<p>Qual modo WEP você gostaria de usar?</p>"
+
+#: rc.cpp:282
+#, fuzzy, no-c-format
+msgid "WPA Key:"
+msgstr "Chave WEP"
+
+#: rc.cpp:291 rc.cpp:376
+#, no-c-format
+msgid "<b>?<br>?<br>?<br>?</b>"
+msgstr ""
+
+#: rc.cpp:294 rc.cpp:373
+#, no-c-format
+msgid ""
+"WPA Version:<br>Group Cipher:<br>Pairwise Cipher:<br>Authentication Suite:"
+msgstr ""
+
+#: rc.cpp:297
+#, no-c-format
+msgid "Done!"
+msgstr "Feito!"
+
+#: rc.cpp:300
+#, no-c-format
+msgid ""
+"<p><b>Congratulations!</b></p>\n"
+"<p>You have successfully finished configuring this connection.</p>\n"
+"<p><b>Press Finish to connect!</b></p>"
+msgstr ""
+"<p><b>Parabéns!</b></p>\n"
+"<p>Você acabou de configurar esta conexão com sucesso.</p>\n"
+"<p><b>Aperte Fim para conectar!</b></p>"
+
+#: rc.cpp:311
+#, no-c-format
+msgid "F1"
+msgstr ""
+
+#: rc.cpp:322
+#, no-c-format
+msgid "I&nterface"
+msgstr ""
+
+#: rc.cpp:337
+#, fuzzy, no-c-format
+msgid "&Manual"
+msgstr "Manual"
+
+#: rc.cpp:361
+#, no-c-format
+msgid "Securit&y"
+msgstr "Se&gurança"
+
+#: rc.cpp:364
+#, fuzzy, no-c-format
+msgid "WPA Settings"
+msgstr "%1 Configurações"
+
+#: rc.cpp:367 rc.cpp:388
+#, no-c-format
+msgid "Key:"
+msgstr "Chave:"
+
+#: rc.cpp:379
+#, fuzzy, no-c-format
+msgid "WEP Settings"
+msgstr "%1 Configurações"
+
+#: rc.cpp:382
+#, no-c-format
+msgid "Open Syste&m"
+msgstr ""
+
+#: rc.cpp:385
+#, no-c-format
+msgid "Alt+M"
+msgstr ""
+
+#: rc.cpp:394
+#, no-c-format
+msgid "Shared &Key"
+msgstr ""
+
+#: rc.cpp:397
+#, no-c-format
+msgid "Alt+K"
+msgstr ""
+
+#: rc.cpp:400
+#, no-c-format
+msgid "Advanced"
+msgstr ""
+
+#: rc.cpp:403
+#, no-c-format
+msgid ""
+"<b>Security Warning:</b> the commands specified below will be ran with the "
+"same privileges as Wireless Assistant has."
+msgstr ""
+
+#: rc.cpp:406
+#, fuzzy, no-c-format
+msgid "Pre-Connection Command"
+msgstr "Conexão falhou."
+
+#: rc.cpp:409 rc.cpp:438 rc.cpp:467 rc.cpp:496
+#, no-c-format
+msgid "Timeout:"
+msgstr ""
+
+#: rc.cpp:415 rc.cpp:444 rc.cpp:473 rc.cpp:502
+#, no-c-format
+msgid "Amount of time after which the process will be killed."
+msgstr ""
+
+#: rc.cpp:418 rc.cpp:447 rc.cpp:476 rc.cpp:505
+#, no-c-format
+msgid ""
+"<p><b>Timeout</b></p>\n"
+"<p>This option specifies how long should Wireless Assistant wait for the "
+"process to finish, before it will be killed.</p>"
+msgstr ""
+
+#: rc.cpp:422 rc.cpp:451 rc.cpp:480 rc.cpp:509
+#, no-c-format
+msgid "Run detached"
+msgstr ""
+
+#: rc.cpp:425 rc.cpp:454 rc.cpp:483 rc.cpp:512
+#, no-c-format
+msgid "Don't wait for the process to finish."
+msgstr ""
+
+#: rc.cpp:428 rc.cpp:457 rc.cpp:486 rc.cpp:515
+#, no-c-format
+msgid ""
+"<p><b>Run Detached</b></p>\n"
+"<p>If this checkbox is selected Wireless Assistant will not wait for the "
+"process to finish.</p>"
+msgstr ""
+
+#: rc.cpp:432 rc.cpp:461 rc.cpp:490 rc.cpp:519
+#, fuzzy, no-c-format
+msgid "Command:"
+msgstr "Domínio:"
+
+#: rc.cpp:435
+#, fuzzy, no-c-format
+msgid "Post-Connection Command"
+msgstr "Assistente da primeira conexão"
+
+#: rc.cpp:464
+#, no-c-format
+msgid "Pre-Disconnection Command"
+msgstr ""
+
+#: rc.cpp:493
+#, no-c-format
+msgid "Post-Disconnection Command"
+msgstr ""
+
+#~ msgid "WEP Mode"
+#~ msgstr "Modo WEP"
+
+#~ msgid "Application Options"
+#~ msgstr "Opções"
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..52da9f5
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,978 @@
+# Swedish translation of wlassistant.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the wlassistant package.
+# Daniel Nylander <po@danielnylander.se>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: wlassistant 0.5.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-04-02 02:31+0200\n"
+"PO-Revision-Date: 2006-09-09 18:06+0100\n"
+"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:103
+msgid "Initializing..."
+msgstr "Initierar..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:110
+msgid ""
+"Kernel 2.6 or later not present.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"2.6-kärna eller senare används inte.\n"
+"Assistent för trådlösa nätverk kommer nu att avslutas."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:156
+msgid ""
+"No usable wireless devices found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Inga användbara trådlösa enheter hittades.\n"
+"Assistant för trådlösa nätverk kommer nu att avslutas."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:179
+msgid ""
+"<qt><p>You might have insufficient permissions for Wireless Assistant to "
+"function properly.</p><p>Did you run it using '<tt>sudo</tt>'?</p></qt>"
+msgstr ""
+"<qt><p>Du kanske inte har tillräckliga rättigheter för att Assistent för "
+"trådlösa nätverk ska fungera korrekt.</p><p>Startade du det med \"<tt>sudo</"
+"tt>\"?</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:200
+msgid ""
+"Executable(s) '%1' could not be found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Körbara filen \"%1\" kunde inte hittas.\n"
+"Assistent för trådlösa nätverk kommer nu att avslutas."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid ""
+"Connection to '%1' has been lost!\n"
+"Would you like to reconnect?"
+msgstr ""
+"Anslutningen till \"%1\" har förlorats!\n"
+"Vill du återansluta?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid "Connection Lost"
+msgstr "Anslutningen förlorades"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:252
+msgid ""
+"<qt><p>Settings for network '<b>%1</b>' are about to be deleted.</p><p>Would "
+"you like to continue?</p></qt>"
+msgstr ""
+"<qt><p>Inställningar för nätverket \"<b>%1</b>\" är på väg att tas bort.</"
+"p><p>Vill du fortsätta?</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:257
+msgid "Settings deleted."
+msgstr "Inställningar borttagna."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:285
+msgid ""
+"<qt><p>File '<i>%1</i>' could not be opened for writing.</p><p>Nameserver(s) "
+"and/or domain are not set.</p></qt>"
+msgstr ""
+"<qt><p>Filen \"<i>%1</i>\" kunde inte öppnas för skrivning.</"
+"p><p>Namnservrar och/eller domän har inte ställts in.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:317
+msgid "Bringing interface %1 up..."
+msgstr "Tar upp gränssnittet %1..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:321
+msgid "Waiting before scanning..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:328
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:334
+msgid "Scanning..."
+msgstr "Söker av..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:343
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:807
+msgid "Done."
+msgstr "Klar."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:348
+msgid "No networks found."
+msgstr "Inga nätverk hittades."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:351
+#, fuzzy
+msgid ""
+"Radio of your wireless card seems to be turned off using an external switch "
+"on your computer.\n"
+"You need turn it on to be able to use wireless networks."
+msgstr ""
+"Radio för ditt trådlösa kort är avstängt med en extern knapp på din dator.\n"
+"Du behöver slå på den för att kunna använda trådlösa nätverk."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:459
+msgid "Freq (Hz)"
+msgstr "Frekvens (Hz)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:473
+msgid ""
+"Radio of your wireless card is off.\n"
+"Would you like to turn it on?"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:559
+#, fuzzy
+msgid "Auto connection failed."
+msgstr "Guide för din första anslutning"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:570
+msgid ""
+"<qt><p><b>Can not connect to network '%1'.<b></p><p>The network you are "
+"trying to connect to requires WPA authentication. The necessary executables "
+"<i>wpa_supplicant</i> and <i>wpa_cli</i> could not be found. Install "
+"<i>wpa_supplicant</i> and restart Wireless Assistant to connect.</p></qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:579
+msgid "%1 - First Connection Wizard"
+msgstr "%1 - Guide för första anslutningen"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:616
+msgid "Network settings updated."
+msgstr "Nätverksinställningarna uppdaterade."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:644
+#, fuzzy
+msgid "Running pre-connection command..."
+msgstr "Anslutning misslyckades."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:650
+msgid "Connecting to '%1'..."
+msgstr "Ansluter till \"%1\"..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:669
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:685
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:718
+#, fuzzy
+msgid "Connection failed."
+msgstr "Anslutningen förlorades"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:701
+#, fuzzy
+msgid "Running post-connection command..."
+msgstr "Guide för din första anslutning"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:708
+msgid "Testing connection..."
+msgstr "Testar anslutning..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:714
+msgid "Successfully connected to '%1'."
+msgstr "Anslutning till \"%1\" lyckades."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid ""
+"Connection failed.\n"
+"Would you like to review settings for this network?"
+msgstr ""
+"Anslutningen misslyckades.\n"
+"Vill du granska inställningarna för detta nätverk?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid "Review Settings?"
+msgstr "Granska inställningarna?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:761
+msgid ""
+"<qt><p>You are about to disconnect from '<b>%1</b>'.</p><p>Would you like to "
+"continue?<p></qt>"
+msgstr ""
+"<qt><p>Du är på väg att koppla ner från \"<b>%1</b>\".</p><p>Vill du "
+"fortsätta?<p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:766
+#, fuzzy
+msgid "Running pre-disconnection command..."
+msgstr "Anslutning misslyckades."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:772
+msgid "Disconnecting..."
+msgstr "Kopplar ner..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:778
+msgid "Waiting for DHCP client to shut down..."
+msgstr "Väntar på att DHCP-klienten ska avslutas..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:801
+#, fuzzy
+msgid "Running post-disconnection command..."
+msgstr "Guide för din första anslutning"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:810
+msgid "Cancelled."
+msgstr "Avbruten."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:906
+msgid "&Disconnect"
+msgstr "&Koppla ner"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:908
+msgid "Disconnect from the selected network"
+msgstr "Koppla ner från markerat nätverk"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:911
+msgid "&Connect"
+msgstr "&Anslut"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:913 rc.cpp:39
+#, no-c-format
+msgid "Connect to the selected network"
+msgstr "Anslut till markerat nätverk"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:960
+msgid "&Stop"
+msgstr "&Stopp"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:964
+msgid ""
+"Terminate current process\n"
+"(%1)"
+msgstr ""
+"Avsluta aktuell process\n"
+"(%1)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:979 rc.cpp:26
+#, no-c-format
+msgid "Quit the application"
+msgstr "Avsluta programmet"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1038
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1047
+msgid "Disconnect..."
+msgstr "Koppla ner..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1041
+#, fuzzy
+msgid "Connect"
+msgstr "Anslut"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1043
+msgid "Forget Settings..."
+msgstr "Glöm inställningar..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1044
+msgid "Edit Settings..."
+msgstr "Redigera inställningar..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1050
+msgid "Configure and Connect..."
+msgstr "Konfigurera och anslut..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1063
+#, fuzzy
+msgid "%1 Settings"
+msgstr "Inställningar för %1"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Daniel Nylander"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "po@danielnylander.se"
+
+#: /home/pn/Development/wlassistant/src/main.cpp:30
+#: /home/pn/Development/wlassistant/src/main.cpp:42 rc.cpp:3
+#, no-c-format
+msgid "Wireless Assistant"
+msgstr "Assistent för trådlösa nätverk"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:76
+msgid ""
+"<qt><p>The network changed its security settings.</p><p>Please go to "
+"<i>Security</i> tab of the following dialog and configure WEP settings.</p></"
+"qt>"
+msgstr ""
+"<qt><p>Nätverket har ändrats sin säkerhetsinställningar.</p><p>Gå till "
+"fliken <i>Säkerhet</i> i nästkommande dialogruta och konfigurera WEP-"
+"inställningarna.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:78
+msgid ""
+"<qt><p>Your WEP Key is not set properly.</p><p>Please go to <i>Security</i> "
+"tab of the following dialog and enter the required key.</p></qt>"
+msgstr ""
+"<qt><p>Din WEP-nyckel är inte korrekt inställd.</p><p>Gå till fliken "
+"<i>Säkerhet</i> i följande dialog och ange den nödvändiga nyckeln.</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:82
+msgid ""
+"<qt><p>The network has stopped broadcasting its ESSID since the last time "
+"you were connected.</p><p>Would you like to use '<b>%1</b>' as an ESSID for "
+"this network?</p><p><i>NOTE: If you answer No, a dialog will appear where "
+"you will be able to specify a different ESSID.</i></p></qt>"
+msgstr ""
+"<qt><p>Nätverket har slutat att annonsera sitt ESSID sedan senaste gången du "
+"anslöt till det.</p><p>Vill du använda \"<b>%1</b>\" som ett ESSID för detta "
+"nätverk?</p><p><i>NOTERA: Om du svarar Nej kommer en dialogruta att visas "
+"där du kan ange ett annat ESSID.</i></p></qt>"
+
+#: rc.cpp:9
+#, no-c-format
+msgid "Alt+O"
+msgstr ""
+
+#: rc.cpp:12
+#, no-c-format
+msgid "Toggle network list/options"
+msgstr "Växla nätverkslista/alternativ"
+
+#: rc.cpp:15
+#, no-c-format
+msgid ""
+"<p><b>Options Button</b></p>\n"
+"<p>Pressing this toggle button will show the available application options.</"
+"p>\n"
+"<p><i>HINT: Press this button again to return to the network list.</i></p>"
+msgstr ""
+"<p><b>Alternativknapp</b></p>\n"
+"<p>Tryck på denna knapp för att växla visning av tillgängliga "
+"programalternativ.</p>\n"
+"<p><i>TIPS: Tryck denna knapp igen för att återgå till nätverkslistan.</i></"
+"p>"
+
+#: rc.cpp:23
+#, no-c-format
+msgid "Alt+Q"
+msgstr ""
+
+#: rc.cpp:29
+#, no-c-format
+msgid ""
+"<p><b>Quit Button</b></p>\n"
+"<p>Pressing this button will quit the application.</p>"
+msgstr ""
+"<p><b>Avslutningsknapp</b></p>\n"
+"<p>Tryck på denna knapp för att avsluta programmet.</p>"
+
+#: rc.cpp:33
+#, fuzzy, no-c-format
+msgid "Co&nnect"
+msgstr "Anslut"
+
+#: rc.cpp:36 rc.cpp:181
+#, no-c-format
+msgid "Alt+N"
+msgstr ""
+
+#: rc.cpp:42
+#, no-c-format
+msgid ""
+"<p><b>Connect/Disconnect Button</b></p>\n"
+"<p>Pressing this button will connect to/disconnect from the network "
+"currently selected in the network list.</p>"
+msgstr ""
+"<p><b>Anslut/Koppla ner-knappen</b></p>\n"
+"<p>Tryck på denna knapp för att ansluta till/koppla ner från nätverket som "
+"för närvarande markerats i nätverkslistan.</p>"
+
+#: rc.cpp:46
+#, no-c-format
+msgid "Refresh"
+msgstr "Uppdatera"
+
+#: rc.cpp:50
+#, no-c-format
+msgid "Refresh network list"
+msgstr "Uppdatera nätverkslistan"
+
+#: rc.cpp:53
+#, no-c-format
+msgid ""
+"<p><b>Scan Button</b></p>\n"
+"<p>Pressing this button will scan for wireless networks and refresh the "
+"network list.</p>"
+msgstr ""
+"<p><b>Sökknapp</b></p>\n"
+"<p>Tryck på denna knapp för att söka efter trådlösa nätverk och uppdatera "
+"nätverkslistan.</p>"
+
+#: rc.cpp:57
+#, no-c-format
+msgid "Device:"
+msgstr "Enhet:"
+
+#: rc.cpp:60
+#, no-c-format
+msgid "Pick a network device to use"
+msgstr "Välj en nätverksenhet att använda"
+
+#: rc.cpp:63
+#, no-c-format
+msgid ""
+"<p><b>Device Selection</b></p>\n"
+"<p>This combo box allows you to select which wireless card to use.</p>\n"
+"<p><i>NOTE: Selecting a different card will refresh the network list.</i></p>"
+msgstr ""
+"<p><b>Enhetsväljare</b></p>\n"
+"<p>Denna kombinationsruta låter dig välja vilket trådlöst kort som ska "
+"användas.</p>\n"
+"<p><i>NOTERA: Om du väljer ett annat kort innebär det att nätverkslistan "
+"uppdateras.</i></p>"
+
+#: rc.cpp:68 rc.cpp:199 rc.cpp:325
+#, no-c-format
+msgid "ESSID"
+msgstr "ESSID"
+
+#: rc.cpp:71
+#, no-c-format
+msgid "Channel"
+msgstr "Kanal"
+
+#: rc.cpp:74
+#, no-c-format
+msgid "Link Quality"
+msgstr "Länkkvalitet"
+
+#: rc.cpp:77
+#, no-c-format
+msgid "WEP/WPA"
+msgstr ""
+
+#: rc.cpp:80
+#, no-c-format
+msgid "AP"
+msgstr "AP"
+
+#: rc.cpp:83
+#, no-c-format
+msgid ""
+"<p><b>Network List</b></p>\n"
+"<p>This list shows all the wireless networks that have been found.</p>\n"
+"<p><i>HINT: Click the Refresh button to update this list.</i></p>"
+msgstr ""
+"<p><b>Nätverkslista</b></p>\n"
+"<p>Denna lista visar alla trådlösa nätverk som har hittats.</p>\n"
+"<p><i>TIPS: Klicka på knappen Uppdatera för att uppdatera listan.</i></p>"
+
+#: rc.cpp:88
+#, no-c-format
+msgid "Ready"
+msgstr ""
+
+#: rc.cpp:91
+#, no-c-format
+msgid ""
+"<p><b>Status Bar</b></p>\n"
+"<p>Messages describing current process are shown in this area.</p>"
+msgstr ""
+"<p><b>Statusrad</b></p>\n"
+"<p>Meddelanden som beskriver aktuell process visas i detta område.</p>"
+
+#: rc.cpp:95
+#, no-c-format
+msgid "Automatically connect on startup"
+msgstr ""
+
+#: rc.cpp:99
+#, no-c-format
+msgid ""
+"<p><b>AutomaticallyConnect on Startup</b></p>\n"
+"<p>Checking this box will make the application try to connect to the best "
+"available network. Only networks that have been previously configured will "
+"be taken into account.</p>"
+msgstr ""
+
+#: rc.cpp:103
+#, no-c-format
+msgid "Automaticall&y reconnect if connection is lost"
+msgstr ""
+
+#: rc.cpp:106
+#, no-c-format
+msgid "Alt+Y"
+msgstr ""
+
+#: rc.cpp:109
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Automatically Reconnect if Connection is Lost</b></p>\n"
+"<p>Checking this box will make the application try to reconnect after the "
+"connection is lost.</p>"
+msgstr ""
+"<p><b>Avsluta vid lyckad anslutning</b></p>\n"
+"<p>Kryssa i denna ruta för att programmet ska stängas efter lyckad "
+"etablering av anslutning till ett trådlöst nätverk.</p>"
+
+#: rc.cpp:113
+#, no-c-format
+msgid "Quit upon successful connection"
+msgstr "Avsluta vid lyckad anslutning"
+
+#: rc.cpp:117
+#, no-c-format
+msgid ""
+"<p><b>Quit Upon Successful Connection</b></p>\n"
+"<p>Checking this box will make the application close after successfully "
+"establishing a connection to a wireless network.</p>"
+msgstr ""
+"<p><b>Avsluta vid lyckad anslutning</b></p>\n"
+"<p>Kryssa i denna ruta för att programmet ska stängas efter lyckad "
+"etablering av anslutning till ett trådlöst nätverk.</p>"
+
+#: rc.cpp:121
+#, no-c-format
+msgid "&Group access points with the same ESSID"
+msgstr ""
+
+#: rc.cpp:124
+#, no-c-format
+msgid "Alt+G"
+msgstr ""
+
+#: rc.cpp:127
+#, no-c-format
+msgid ""
+"<p><b>Group Access Points with the Same ESSID</b></p>\n"
+"<p>Checking this box will make all access points with the same ESSID appear "
+"as one item in the network list.</p>"
+msgstr ""
+
+#: rc.cpp:131
+#, no-c-format
+msgid "Delay before scanning:"
+msgstr ""
+
+#: rc.cpp:134 rc.cpp:145 rc.cpp:167
+#, no-c-format
+msgid "Specify how long to wait for an IP"
+msgstr "Ange hur lång väntetiden på en IP-adress skall vara"
+
+#: rc.cpp:137 rc.cpp:148 rc.cpp:170
+#, no-c-format
+msgid ""
+"<p><b>DHCP Client Timeout</b></p>\n"
+"<p>This option specifies the amount of time after which the application "
+"should stop waiting for an IP address and assume that the connection has "
+"failed.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have problems connecting "
+"to some networks.</i></p>"
+msgstr ""
+"<p><b>Tidsgräns för DHCP-klient överstigen</b></p>\n"
+"<p>Detta alternativ anger den tidsgräns efter vilken programmet ska sluta "
+"vänta på en IP-adress och anta att anslutningen har misslyckats.</p>\n"
+"<p><i>TIPS: Öka denna gräns kan hjälpa dig om du har problem med att ansluta "
+"till vissa nätverk.</i></p>"
+
+#: rc.cpp:142
+#, no-c-format
+msgid "DHCP client timeout:"
+msgstr "Tidsgräns för DHCP-klient:"
+
+#: rc.cpp:153 rc.cpp:164 rc.cpp:412 rc.cpp:441 rc.cpp:470 rc.cpp:499
+#, no-c-format
+msgid "s"
+msgstr "s"
+
+#: rc.cpp:156
+#, fuzzy, no-c-format
+msgid "Specify how long to wait before scanning"
+msgstr "Ange hur lång väntetiden på en IP-adress skall vara"
+
+#: rc.cpp:159
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Delay Before Scanning</b></p>\n"
+"<p>This option specifies the amount of time to wait between bringing the "
+"interface up and performing a scan.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have to refresh the list "
+"manually to see all the available networks.</i></p>"
+msgstr ""
+"<p><b>Tidsgräns för DHCP-klient överstigen</b></p>\n"
+"<p>Detta alternativ anger den tidsgräns efter vilken programmet ska sluta "
+"vänta på en IP-adress och anta att anslutningen har misslyckats.</p>\n"
+"<p><i>TIPS: Öka denna gräns kan hjälpa dig om du har problem med att ansluta "
+"till vissa nätverk.</i></p>"
+
+#: rc.cpp:175
+#, no-c-format
+msgid ""
+"<i>Press the button below to enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</i>"
+msgstr ""
+"<i>Tryck på knappen nedan för att aktivera alla meddelanden som har stängts "
+"av med funktionen \"Visa inte igen\".</i>"
+
+#: rc.cpp:178
+#, fuzzy, no-c-format
+msgid "E&nable All Messages"
+msgstr "Aktivera alla meddelanden"
+
+#: rc.cpp:184
+#, no-c-format
+msgid ""
+"<p><b>Enable All Messages</b></p>\n"
+"<p>Pressing this button will enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</p>"
+msgstr ""
+"<p><b>Aktivera alla meddelanden</b></p>\n"
+"<p>Tryck på denna knapp för att aktivera alla meddelanden som har stängts av "
+"med funktionen \"Visa inte igen\".</p>"
+
+#: rc.cpp:188
+#, no-c-format
+msgid "First Connection Wizard"
+msgstr "Guide för din första anslutning"
+
+#: rc.cpp:191
+#, no-c-format
+msgid "Welcome to First Connection Wizard"
+msgstr "Välkommen till Guiden för din första anslutning"
+
+#: rc.cpp:194
+#, no-c-format
+msgid ""
+"<b><p>This is the first time you are trying to connect to the selected "
+"network.</p></b>\n"
+"<p>You will be asked a few questions necessary to configure this connection."
+"</p>\n"
+"<p><i>Press Next to continue.</i></p>"
+msgstr ""
+"<b><p>Detta är första gången som du försöker ansluta till det valda "
+"nätverket.</p></b>\n"
+"<p>Du kommer att bli frågad ett antal frågor som är nödvändiga för att "
+"konfigurera denna anslutning.</p>\n"
+"<p><i>Tryck Nästa för att fortsätta.</i></p>"
+
+#: rc.cpp:202
+#, no-c-format
+msgid ""
+"<p><b>You are trying to connect to a network that does not broadcast its "
+"ESSID.</b></p>\n"
+"<p>Please specify ESSID that you would like to use when connecting to this "
+"access point.</p>"
+msgstr ""
+"<p><b>Du försöker ansluta till ett nätverk som inte annonserar sitt ESSID.</"
+"b></p>\n"
+"<p>Ange det ESSID som du vill använda vid anslutning till denna åtkomstpunkt."
+"</p>"
+
+#: rc.cpp:206 rc.cpp:328
+#, no-c-format
+msgid "ESSID:"
+msgstr "ESSID:"
+
+#: rc.cpp:209
+#, no-c-format
+msgid "Interface Configuration"
+msgstr "Gränssnittskonfiguration"
+
+#: rc.cpp:213 rc.cpp:334
+#, no-c-format
+msgid "Automatic (DHCP)"
+msgstr "Automatisk (DHCP)"
+
+#: rc.cpp:217
+#, no-c-format
+msgid "Manual"
+msgstr "Manuell"
+
+#: rc.cpp:221
+#, no-c-format
+msgid ""
+"<p><b>Your IP and other parameters need to be configured to connect to any "
+"network.</b></p>\n"
+"<p>Which configuration option would you like to use when connecting to this "
+"network?</p>"
+msgstr ""
+"<p><b>Din IP-adress och andra parametrar behöver konfigureras för att "
+"ansluta till ett nätverk.</b></p>\n"
+"<p>Vilket konfigurationsalternativ vill du använda när du ansluter till "
+"detta nätverk?</p>"
+
+#: rc.cpp:225
+#, no-c-format
+msgid "Interface Parameters"
+msgstr "Gränssnittsparametrar"
+
+#: rc.cpp:228 rc.cpp:355
+#, no-c-format
+msgid "Secondary DNS:"
+msgstr "Sekundär DNS:"
+
+#: rc.cpp:231 rc.cpp:343
+#, no-c-format
+msgid "IP:"
+msgstr "IP:"
+
+#: rc.cpp:234 rc.cpp:340
+#, no-c-format
+msgid "Netmask:"
+msgstr "Nätmask:"
+
+#: rc.cpp:237 rc.cpp:358
+#, no-c-format
+msgid "Primary DNS:"
+msgstr "Primär DNS:"
+
+#: rc.cpp:240 rc.cpp:349
+#, no-c-format
+msgid "Gateway:"
+msgstr "Gateway:"
+
+#: rc.cpp:243 rc.cpp:352
+#, no-c-format
+msgid "Domain:"
+msgstr "Domän:"
+
+#: rc.cpp:246 rc.cpp:346
+#, no-c-format
+msgid "Broadcast:"
+msgstr "Broadcast:"
+
+#: rc.cpp:249
+#, no-c-format
+msgid ""
+"<p><b>Please specify interface parameters to be used to connect to this "
+"network.</b></p>\n"
+"<p>You may leave some fields blank.</p>"
+msgstr ""
+"<p><b>Ange parametrar för gränssnittet som ska användas för att ansluta till "
+"detta nätverk.</b></p>\n"
+"<p>Du kan lämna vissa fält tomma.</p>"
+
+#: rc.cpp:253
+#, no-c-format
+msgid "WEP Configuration"
+msgstr "Konfiguration av WEP"
+
+#: rc.cpp:256
+#, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WEP authentication.</"
+"b></p>\n"
+"<p>Which WEP mode would you like to use?</p>"
+msgstr ""
+"<p><b>Nätverket du försöker ansluta till kräver WEP-autentisering.</b></p>\n"
+"<p>Vilket WEP-läge vill du använda?</p>"
+
+#: rc.cpp:261
+#, fuzzy, no-c-format
+msgid "Open S&ystem"
+msgstr "Öppet system"
+
+#: rc.cpp:264
+#, no-c-format
+msgid "Shared Key"
+msgstr "Delad nyckel"
+
+#: rc.cpp:267 rc.cpp:288
+#, fuzzy, no-c-format
+msgid "<p><b>Please provide a key to be used with this network.</b></p>"
+msgstr ""
+"<p><b>Tillhandahåll en nyckel som ska användas för detta nätverk.</b></p>\n"
+"Alla format som stöds av iwconfig kan användas."
+
+#: rc.cpp:270
+#, no-c-format
+msgid "WEP key:"
+msgstr "WEP-nyckel:"
+
+#: rc.cpp:273 rc.cpp:285 rc.cpp:370 rc.cpp:391
+#, no-c-format
+msgid "ASCII"
+msgstr ""
+
+#: rc.cpp:276
+#, fuzzy, no-c-format
+msgid "WPA Configuration"
+msgstr "Konfiguration av WEP"
+
+#: rc.cpp:279
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WPA authentication.</"
+"b></p>"
+msgstr ""
+"<p><b>Nätverket du försöker ansluta till kräver WEP-autentisering.</b></p>\n"
+"<p>Vilket WEP-läge vill du använda?</p>"
+
+#: rc.cpp:282
+#, fuzzy, no-c-format
+msgid "WPA Key:"
+msgstr "WEP-nyckel"
+
+#: rc.cpp:291 rc.cpp:376
+#, no-c-format
+msgid "<b>?<br>?<br>?<br>?</b>"
+msgstr ""
+
+#: rc.cpp:294 rc.cpp:373
+#, no-c-format
+msgid ""
+"WPA Version:<br>Group Cipher:<br>Pairwise Cipher:<br>Authentication Suite:"
+msgstr ""
+
+#: rc.cpp:297
+#, no-c-format
+msgid "Done!"
+msgstr "Klar!"
+
+#: rc.cpp:300
+#, no-c-format
+msgid ""
+"<p><b>Congratulations!</b></p>\n"
+"<p>You have successfully finished configuring this connection.</p>\n"
+"<p><b>Press Finish to connect!</b></p>"
+msgstr ""
+"<p><b>Gratulerar!</b></p>\n"
+"<p>Du har nu färdigställt konfigurationen för denna anslutning.</p>\n"
+"<p><b>Tryck Färdig för att ansluta!</b></p>"
+
+#: rc.cpp:311
+#, no-c-format
+msgid "F1"
+msgstr "F1"
+
+#: rc.cpp:322
+#, no-c-format
+msgid "I&nterface"
+msgstr "Grä&nssnitt"
+
+#: rc.cpp:337
+#, no-c-format
+msgid "&Manual"
+msgstr "Manuell"
+
+#: rc.cpp:361
+#, no-c-format
+msgid "Securit&y"
+msgstr "Säker&het"
+
+#: rc.cpp:364
+#, fuzzy, no-c-format
+msgid "WPA Settings"
+msgstr "Inställningar för %1"
+
+#: rc.cpp:367 rc.cpp:388
+#, no-c-format
+msgid "Key:"
+msgstr "Nyckel:"
+
+#: rc.cpp:379
+#, fuzzy, no-c-format
+msgid "WEP Settings"
+msgstr "Inställningar för %1"
+
+#: rc.cpp:382
+#, fuzzy, no-c-format
+msgid "Open Syste&m"
+msgstr "Öppet system"
+
+#: rc.cpp:385
+#, no-c-format
+msgid "Alt+M"
+msgstr ""
+
+#: rc.cpp:394
+#, fuzzy, no-c-format
+msgid "Shared &Key"
+msgstr "Delad nyckel"
+
+#: rc.cpp:397
+#, no-c-format
+msgid "Alt+K"
+msgstr ""
+
+#: rc.cpp:400
+#, no-c-format
+msgid "Advanced"
+msgstr ""
+
+#: rc.cpp:403
+#, no-c-format
+msgid ""
+"<b>Security Warning:</b> the commands specified below will be ran with the "
+"same privileges as Wireless Assistant has."
+msgstr ""
+
+#: rc.cpp:406
+#, fuzzy, no-c-format
+msgid "Pre-Connection Command"
+msgstr "Anslutning misslyckades."
+
+#: rc.cpp:409 rc.cpp:438 rc.cpp:467 rc.cpp:496
+#, no-c-format
+msgid "Timeout:"
+msgstr ""
+
+#: rc.cpp:415 rc.cpp:444 rc.cpp:473 rc.cpp:502
+#, no-c-format
+msgid "Amount of time after which the process will be killed."
+msgstr ""
+
+#: rc.cpp:418 rc.cpp:447 rc.cpp:476 rc.cpp:505
+#, no-c-format
+msgid ""
+"<p><b>Timeout</b></p>\n"
+"<p>This option specifies how long should Wireless Assistant wait for the "
+"process to finish, before it will be killed.</p>"
+msgstr ""
+
+#: rc.cpp:422 rc.cpp:451 rc.cpp:480 rc.cpp:509
+#, no-c-format
+msgid "Run detached"
+msgstr ""
+
+#: rc.cpp:425 rc.cpp:454 rc.cpp:483 rc.cpp:512
+#, no-c-format
+msgid "Don't wait for the process to finish."
+msgstr ""
+
+#: rc.cpp:428 rc.cpp:457 rc.cpp:486 rc.cpp:515
+#, no-c-format
+msgid ""
+"<p><b>Run Detached</b></p>\n"
+"<p>If this checkbox is selected Wireless Assistant will not wait for the "
+"process to finish.</p>"
+msgstr ""
+
+#: rc.cpp:432 rc.cpp:461 rc.cpp:490 rc.cpp:519
+#, fuzzy, no-c-format
+msgid "Command:"
+msgstr "Domän:"
+
+#: rc.cpp:435
+#, fuzzy, no-c-format
+msgid "Post-Connection Command"
+msgstr "Guide för din första anslutning"
+
+#: rc.cpp:464
+#, no-c-format
+msgid "Pre-Disconnection Command"
+msgstr ""
+
+#: rc.cpp:493
+#, no-c-format
+msgid "Post-Disconnection Command"
+msgstr ""
+
+#~ msgid "WEP Mode"
+#~ msgstr "WEP-läge"
+
+#~ msgid "WEP?"
+#~ msgstr "WEP?"
+
+#~ msgid "Application Options"
+#~ msgstr "Programalternativ"
diff --git a/po/wlassistant.pot b/po/wlassistant.pot
new file mode 100644
index 0000000..b2f2479
--- /dev/null
+++ b/po/wlassistant.pot
@@ -0,0 +1,860 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-04-02 02:31+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:103
+msgid "Initializing..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:110
+msgid ""
+"Kernel 2.6 or later not present.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:156
+msgid ""
+"No usable wireless devices found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:179
+msgid ""
+"<qt><p>You might have insufficient permissions for Wireless Assistant to "
+"function properly.</p><p>Did you run it using '<tt>sudo</tt>'?</p></qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:200
+msgid ""
+"Executable(s) '%1' could not be found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid ""
+"Connection to '%1' has been lost!\n"
+"Would you like to reconnect?"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid "Connection Lost"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:252
+msgid ""
+"<qt><p>Settings for network '<b>%1</b>' are about to be deleted.</p><p>Would "
+"you like to continue?</p></qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:257
+msgid "Settings deleted."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:285
+msgid ""
+"<qt><p>File '<i>%1</i>' could not be opened for writing.</p><p>Nameserver(s) "
+"and/or domain are not set.</p></qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:317
+msgid "Bringing interface %1 up..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:321
+msgid "Waiting before scanning..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:328
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:334
+msgid "Scanning..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:343
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:807
+msgid "Done."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:348
+msgid "No networks found."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:351
+msgid ""
+"Radio of your wireless card seems to be turned off using an external switch "
+"on your computer.\n"
+"You need turn it on to be able to use wireless networks."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:459
+msgid "Freq (Hz)"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:473
+msgid ""
+"Radio of your wireless card is off.\n"
+"Would you like to turn it on?"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:559
+msgid "Auto connection failed."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:570
+msgid ""
+"<qt><p><b>Can not connect to network '%1'.<b></p><p>The network you are "
+"trying to connect to requires WPA authentication. The necessary executables "
+"<i>wpa_supplicant</i> and <i>wpa_cli</i> could not be found. Install "
+"<i>wpa_supplicant</i> and restart Wireless Assistant to connect.</p></qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:579
+msgid "%1 - First Connection Wizard"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:616
+msgid "Network settings updated."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:644
+msgid "Running pre-connection command..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:650
+msgid "Connecting to '%1'..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:669
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:685
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:718
+msgid "Connection failed."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:701
+msgid "Running post-connection command..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:708
+msgid "Testing connection..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:714
+msgid "Successfully connected to '%1'."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid ""
+"Connection failed.\n"
+"Would you like to review settings for this network?"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid "Review Settings?"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:761
+msgid ""
+"<qt><p>You are about to disconnect from '<b>%1</b>'.</p><p>Would you like to "
+"continue?<p></qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:766
+msgid "Running pre-disconnection command..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:772
+msgid "Disconnecting..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:778
+msgid "Waiting for DHCP client to shut down..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:801
+msgid "Running post-disconnection command..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:810
+msgid "Cancelled."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:906
+msgid "&Disconnect"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:908
+msgid "Disconnect from the selected network"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:911
+msgid "&Connect"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:913 rc.cpp:39
+#, no-c-format
+msgid "Connect to the selected network"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:960
+msgid "&Stop"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:964
+msgid ""
+"Terminate current process\n"
+"(%1)"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:979 rc.cpp:26
+#, no-c-format
+msgid "Quit the application"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1038
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1047
+msgid "Disconnect..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1041
+msgid "Connect"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1043
+msgid "Forget Settings..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1044
+msgid "Edit Settings..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1050
+msgid "Configure and Connect..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1063
+msgid "%1 Settings"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/main.cpp:30
+#: /home/pn/Development/wlassistant/src/main.cpp:42 rc.cpp:3
+#, no-c-format
+msgid "Wireless Assistant"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/netparams.h:76
+msgid ""
+"<qt><p>The network changed its security settings.</p><p>Please go to "
+"<i>Security</i> tab of the following dialog and configure WEP settings.</p></"
+"qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/netparams.h:78
+msgid ""
+"<qt><p>Your WEP Key is not set properly.</p><p>Please go to <i>Security</i> "
+"tab of the following dialog and enter the required key.</p></qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/netparams.h:82
+msgid ""
+"<qt><p>The network has stopped broadcasting its ESSID since the last time "
+"you were connected.</p><p>Would you like to use '<b>%1</b>' as an ESSID for "
+"this network?</p><p><i>NOTE: If you answer No, a dialog will appear where "
+"you will be able to specify a different ESSID.</i></p></qt>"
+msgstr ""
+
+#: rc.cpp:9
+#, no-c-format
+msgid "Alt+O"
+msgstr ""
+
+#: rc.cpp:12
+#, no-c-format
+msgid "Toggle network list/options"
+msgstr ""
+
+#: rc.cpp:15
+#, no-c-format
+msgid ""
+"<p><b>Options Button</b></p>\n"
+"<p>Pressing this toggle button will show the available application options.</"
+"p>\n"
+"<p><i>HINT: Press this button again to return to the network list.</i></p>"
+msgstr ""
+
+#: rc.cpp:23
+#, no-c-format
+msgid "Alt+Q"
+msgstr ""
+
+#: rc.cpp:29
+#, no-c-format
+msgid ""
+"<p><b>Quit Button</b></p>\n"
+"<p>Pressing this button will quit the application.</p>"
+msgstr ""
+
+#: rc.cpp:33
+#, no-c-format
+msgid "Co&nnect"
+msgstr ""
+
+#: rc.cpp:36 rc.cpp:181
+#, no-c-format
+msgid "Alt+N"
+msgstr ""
+
+#: rc.cpp:42
+#, no-c-format
+msgid ""
+"<p><b>Connect/Disconnect Button</b></p>\n"
+"<p>Pressing this button will connect to/disconnect from the network "
+"currently selected in the network list.</p>"
+msgstr ""
+
+#: rc.cpp:46
+#, no-c-format
+msgid "Refresh"
+msgstr ""
+
+#: rc.cpp:50
+#, no-c-format
+msgid "Refresh network list"
+msgstr ""
+
+#: rc.cpp:53
+#, no-c-format
+msgid ""
+"<p><b>Scan Button</b></p>\n"
+"<p>Pressing this button will scan for wireless networks and refresh the "
+"network list.</p>"
+msgstr ""
+
+#: rc.cpp:57
+#, no-c-format
+msgid "Device:"
+msgstr ""
+
+#: rc.cpp:60
+#, no-c-format
+msgid "Pick a network device to use"
+msgstr ""
+
+#: rc.cpp:63
+#, no-c-format
+msgid ""
+"<p><b>Device Selection</b></p>\n"
+"<p>This combo box allows you to select which wireless card to use.</p>\n"
+"<p><i>NOTE: Selecting a different card will refresh the network list.</i></p>"
+msgstr ""
+
+#: rc.cpp:68 rc.cpp:199 rc.cpp:325
+#, no-c-format
+msgid "ESSID"
+msgstr ""
+
+#: rc.cpp:71
+#, no-c-format
+msgid "Channel"
+msgstr ""
+
+#: rc.cpp:74
+#, no-c-format
+msgid "Link Quality"
+msgstr ""
+
+#: rc.cpp:77
+#, no-c-format
+msgid "WEP/WPA"
+msgstr ""
+
+#: rc.cpp:80
+#, no-c-format
+msgid "AP"
+msgstr ""
+
+#: rc.cpp:83
+#, no-c-format
+msgid ""
+"<p><b>Network List</b></p>\n"
+"<p>This list shows all the wireless networks that have been found.</p>\n"
+"<p><i>HINT: Click the Refresh button to update this list.</i></p>"
+msgstr ""
+
+#: rc.cpp:88
+#, no-c-format
+msgid "Ready"
+msgstr ""
+
+#: rc.cpp:91
+#, no-c-format
+msgid ""
+"<p><b>Status Bar</b></p>\n"
+"<p>Messages describing current process are shown in this area.</p>"
+msgstr ""
+
+#: rc.cpp:95
+#, no-c-format
+msgid "Automatically connect on startup"
+msgstr ""
+
+#: rc.cpp:99
+#, no-c-format
+msgid ""
+"<p><b>AutomaticallyConnect on Startup</b></p>\n"
+"<p>Checking this box will make the application try to connect to the best "
+"available network. Only networks that have been previously configured will "
+"be taken into account.</p>"
+msgstr ""
+
+#: rc.cpp:103
+#, no-c-format
+msgid "Automaticall&y reconnect if connection is lost"
+msgstr ""
+
+#: rc.cpp:106
+#, no-c-format
+msgid "Alt+Y"
+msgstr ""
+
+#: rc.cpp:109
+#, no-c-format
+msgid ""
+"<p><b>Automatically Reconnect if Connection is Lost</b></p>\n"
+"<p>Checking this box will make the application try to reconnect after the "
+"connection is lost.</p>"
+msgstr ""
+
+#: rc.cpp:113
+#, no-c-format
+msgid "Quit upon successful connection"
+msgstr ""
+
+#: rc.cpp:117
+#, no-c-format
+msgid ""
+"<p><b>Quit Upon Successful Connection</b></p>\n"
+"<p>Checking this box will make the application close after successfully "
+"establishing a connection to a wireless network.</p>"
+msgstr ""
+
+#: rc.cpp:121
+#, no-c-format
+msgid "&Group access points with the same ESSID"
+msgstr ""
+
+#: rc.cpp:124
+#, no-c-format
+msgid "Alt+G"
+msgstr ""
+
+#: rc.cpp:127
+#, no-c-format
+msgid ""
+"<p><b>Group Access Points with the Same ESSID</b></p>\n"
+"<p>Checking this box will make all access points with the same ESSID appear "
+"as one item in the network list.</p>"
+msgstr ""
+
+#: rc.cpp:131
+#, no-c-format
+msgid "Delay before scanning:"
+msgstr ""
+
+#: rc.cpp:134 rc.cpp:145 rc.cpp:167
+#, no-c-format
+msgid "Specify how long to wait for an IP"
+msgstr ""
+
+#: rc.cpp:137 rc.cpp:148 rc.cpp:170
+#, no-c-format
+msgid ""
+"<p><b>DHCP Client Timeout</b></p>\n"
+"<p>This option specifies the amount of time after which the application "
+"should stop waiting for an IP address and assume that the connection has "
+"failed.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have problems connecting "
+"to some networks.</i></p>"
+msgstr ""
+
+#: rc.cpp:142
+#, no-c-format
+msgid "DHCP client timeout:"
+msgstr ""
+
+#: rc.cpp:153 rc.cpp:164 rc.cpp:412 rc.cpp:441 rc.cpp:470 rc.cpp:499
+#, no-c-format
+msgid "s"
+msgstr ""
+
+#: rc.cpp:156
+#, no-c-format
+msgid "Specify how long to wait before scanning"
+msgstr ""
+
+#: rc.cpp:159
+#, no-c-format
+msgid ""
+"<p><b>Delay Before Scanning</b></p>\n"
+"<p>This option specifies the amount of time to wait between bringing the "
+"interface up and performing a scan.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have to refresh the list "
+"manually to see all the available networks.</i></p>"
+msgstr ""
+
+#: rc.cpp:175
+#, no-c-format
+msgid ""
+"<i>Press the button below to enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</i>"
+msgstr ""
+
+#: rc.cpp:178
+#, no-c-format
+msgid "E&nable All Messages"
+msgstr ""
+
+#: rc.cpp:184
+#, no-c-format
+msgid ""
+"<p><b>Enable All Messages</b></p>\n"
+"<p>Pressing this button will enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</p>"
+msgstr ""
+
+#: rc.cpp:188
+#, no-c-format
+msgid "First Connection Wizard"
+msgstr ""
+
+#: rc.cpp:191
+#, no-c-format
+msgid "Welcome to First Connection Wizard"
+msgstr ""
+
+#: rc.cpp:194
+#, no-c-format
+msgid ""
+"<b><p>This is the first time you are trying to connect to the selected "
+"network.</p></b>\n"
+"<p>You will be asked a few questions necessary to configure this connection."
+"</p>\n"
+"<p><i>Press Next to continue.</i></p>"
+msgstr ""
+
+#: rc.cpp:202
+#, no-c-format
+msgid ""
+"<p><b>You are trying to connect to a network that does not broadcast its "
+"ESSID.</b></p>\n"
+"<p>Please specify ESSID that you would like to use when connecting to this "
+"access point.</p>"
+msgstr ""
+
+#: rc.cpp:206 rc.cpp:328
+#, no-c-format
+msgid "ESSID:"
+msgstr ""
+
+#: rc.cpp:209
+#, no-c-format
+msgid "Interface Configuration"
+msgstr ""
+
+#: rc.cpp:213 rc.cpp:334
+#, no-c-format
+msgid "Automatic (DHCP)"
+msgstr ""
+
+#: rc.cpp:217
+#, no-c-format
+msgid "Manual"
+msgstr ""
+
+#: rc.cpp:221
+#, no-c-format
+msgid ""
+"<p><b>Your IP and other parameters need to be configured to connect to any "
+"network.</b></p>\n"
+"<p>Which configuration option would you like to use when connecting to this "
+"network?</p>"
+msgstr ""
+
+#: rc.cpp:225
+#, no-c-format
+msgid "Interface Parameters"
+msgstr ""
+
+#: rc.cpp:228 rc.cpp:355
+#, no-c-format
+msgid "Secondary DNS:"
+msgstr ""
+
+#: rc.cpp:231 rc.cpp:343
+#, no-c-format
+msgid "IP:"
+msgstr ""
+
+#: rc.cpp:234 rc.cpp:340
+#, no-c-format
+msgid "Netmask:"
+msgstr ""
+
+#: rc.cpp:237 rc.cpp:358
+#, no-c-format
+msgid "Primary DNS:"
+msgstr ""
+
+#: rc.cpp:240 rc.cpp:349
+#, no-c-format
+msgid "Gateway:"
+msgstr ""
+
+#: rc.cpp:243 rc.cpp:352
+#, no-c-format
+msgid "Domain:"
+msgstr ""
+
+#: rc.cpp:246 rc.cpp:346
+#, no-c-format
+msgid "Broadcast:"
+msgstr ""
+
+#: rc.cpp:249
+#, no-c-format
+msgid ""
+"<p><b>Please specify interface parameters to be used to connect to this "
+"network.</b></p>\n"
+"<p>You may leave some fields blank.</p>"
+msgstr ""
+
+#: rc.cpp:253
+#, no-c-format
+msgid "WEP Configuration"
+msgstr ""
+
+#: rc.cpp:256
+#, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WEP authentication.</"
+"b></p>\n"
+"<p>Which WEP mode would you like to use?</p>"
+msgstr ""
+
+#: rc.cpp:261
+#, no-c-format
+msgid "Open S&ystem"
+msgstr ""
+
+#: rc.cpp:264
+#, no-c-format
+msgid "Shared Key"
+msgstr ""
+
+#: rc.cpp:267 rc.cpp:288
+#, no-c-format
+msgid "<p><b>Please provide a key to be used with this network.</b></p>"
+msgstr ""
+
+#: rc.cpp:270
+#, no-c-format
+msgid "WEP key:"
+msgstr ""
+
+#: rc.cpp:273 rc.cpp:285 rc.cpp:370 rc.cpp:391
+#, no-c-format
+msgid "ASCII"
+msgstr ""
+
+#: rc.cpp:276
+#, no-c-format
+msgid "WPA Configuration"
+msgstr ""
+
+#: rc.cpp:279
+#, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WPA authentication.</"
+"b></p>"
+msgstr ""
+
+#: rc.cpp:282
+#, no-c-format
+msgid "WPA Key:"
+msgstr ""
+
+#: rc.cpp:291 rc.cpp:376
+#, no-c-format
+msgid "<b>?<br>?<br>?<br>?</b>"
+msgstr ""
+
+#: rc.cpp:294 rc.cpp:373
+#, no-c-format
+msgid ""
+"WPA Version:<br>Group Cipher:<br>Pairwise Cipher:<br>Authentication Suite:"
+msgstr ""
+
+#: rc.cpp:297
+#, no-c-format
+msgid "Done!"
+msgstr ""
+
+#: rc.cpp:300
+#, no-c-format
+msgid ""
+"<p><b>Congratulations!</b></p>\n"
+"<p>You have successfully finished configuring this connection.</p>\n"
+"<p><b>Press Finish to connect!</b></p>"
+msgstr ""
+
+#: rc.cpp:311
+#, no-c-format
+msgid "F1"
+msgstr ""
+
+#: rc.cpp:322
+#, no-c-format
+msgid "I&nterface"
+msgstr ""
+
+#: rc.cpp:337
+#, no-c-format
+msgid "&Manual"
+msgstr ""
+
+#: rc.cpp:361
+#, no-c-format
+msgid "Securit&y"
+msgstr ""
+
+#: rc.cpp:364
+#, no-c-format
+msgid "WPA Settings"
+msgstr ""
+
+#: rc.cpp:367 rc.cpp:388
+#, no-c-format
+msgid "Key:"
+msgstr ""
+
+#: rc.cpp:379
+#, no-c-format
+msgid "WEP Settings"
+msgstr ""
+
+#: rc.cpp:382
+#, no-c-format
+msgid "Open Syste&m"
+msgstr ""
+
+#: rc.cpp:385
+#, no-c-format
+msgid "Alt+M"
+msgstr ""
+
+#: rc.cpp:394
+#, no-c-format
+msgid "Shared &Key"
+msgstr ""
+
+#: rc.cpp:397
+#, no-c-format
+msgid "Alt+K"
+msgstr ""
+
+#: rc.cpp:400
+#, no-c-format
+msgid "Advanced"
+msgstr ""
+
+#: rc.cpp:403
+#, no-c-format
+msgid ""
+"<b>Security Warning:</b> the commands specified below will be ran with the "
+"same privileges as Wireless Assistant has."
+msgstr ""
+
+#: rc.cpp:406
+#, no-c-format
+msgid "Pre-Connection Command"
+msgstr ""
+
+#: rc.cpp:409 rc.cpp:438 rc.cpp:467 rc.cpp:496
+#, no-c-format
+msgid "Timeout:"
+msgstr ""
+
+#: rc.cpp:415 rc.cpp:444 rc.cpp:473 rc.cpp:502
+#, no-c-format
+msgid "Amount of time after which the process will be killed."
+msgstr ""
+
+#: rc.cpp:418 rc.cpp:447 rc.cpp:476 rc.cpp:505
+#, no-c-format
+msgid ""
+"<p><b>Timeout</b></p>\n"
+"<p>This option specifies how long should Wireless Assistant wait for the "
+"process to finish, before it will be killed.</p>"
+msgstr ""
+
+#: rc.cpp:422 rc.cpp:451 rc.cpp:480 rc.cpp:509
+#, no-c-format
+msgid "Run detached"
+msgstr ""
+
+#: rc.cpp:425 rc.cpp:454 rc.cpp:483 rc.cpp:512
+#, no-c-format
+msgid "Don't wait for the process to finish."
+msgstr ""
+
+#: rc.cpp:428 rc.cpp:457 rc.cpp:486 rc.cpp:515
+#, no-c-format
+msgid ""
+"<p><b>Run Detached</b></p>\n"
+"<p>If this checkbox is selected Wireless Assistant will not wait for the "
+"process to finish.</p>"
+msgstr ""
+
+#: rc.cpp:432 rc.cpp:461 rc.cpp:490 rc.cpp:519
+#, no-c-format
+msgid "Command:"
+msgstr ""
+
+#: rc.cpp:435
+#, no-c-format
+msgid "Post-Connection Command"
+msgstr ""
+
+#: rc.cpp:464
+#, no-c-format
+msgid "Pre-Disconnection Command"
+msgstr ""
+
+#: rc.cpp:493
+#, no-c-format
+msgid "Post-Disconnection Command"
+msgstr ""
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..13caf4b
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,960 @@
+# translation of zh_CN.po to
+# translation of wlassistant to Simplified Chinese
+# This file is distributed under the same license as the wlassistant package.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# Zhang fu ping <justin-brain@hotmail.com>, 2005.
+# Zhang fu ping <justin-brain@hotmail.com>, 2005.
+# justin <root@justin.linpus>, 2005.
+# justin <justin-brain@linpus.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: zh_CN\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-04-02 02:31+0200\n"
+"PO-Revision-Date: 2005-12-15 16:09+0800\n"
+"Last-Translator: justin <justin-brain@linpus.com>\n"
+"Language-Team: <zh@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.10\n"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:103
+msgid "Initializing..."
+msgstr "正在初始化..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:110
+msgid ""
+"Kernel 2.6 or later not present.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Kernel2.6或更高版本不存在!\n"
+"无线网络助手将立即退出。"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:156
+msgid ""
+"No usable wireless devices found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"未发现任何无线设备\n"
+"无线网络助手将立即退出。"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:179
+msgid ""
+"<qt><p>You might have insufficient permissions for Wireless Assistant to "
+"function properly.</p><p>Did you run it using '<tt>sudo</tt>'?</p></qt>"
+msgstr ""
+"<qt><p>您的权限不够,可能无法正常运行无线网络助手的所有功能。</p><p>您是否运"
+"行了\"<tt>sudo</tt>\"命令</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:200
+msgid ""
+"Executable(s) '%1' could not be found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"未发现任何可执行的 '%1'.\n"
+"无线网络助手将立即退出。"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid ""
+"Connection to '%1' has been lost!\n"
+"Would you like to reconnect?"
+msgstr ""
+" '%1' 的连接已断开!\n"
+"您想要重新连接吗?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid "Connection Lost"
+msgstr "连接已断开"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:252
+msgid ""
+"<qt><p>Settings for network '<b>%1</b>' are about to be deleted.</p><p>Would "
+"you like to continue?</p></qt>"
+msgstr "<qt><p> '<b>%1</b>' 网络设置将被删除,</p><p>您想要继续吗?</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:257
+msgid "Settings deleted."
+msgstr "设置已删除!"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:285
+msgid ""
+"<qt><p>File '<i>%1</i>' could not be opened for writing.</p><p>Nameserver(s) "
+"and/or domain are not set.</p></qt>"
+msgstr ""
+"<qt><p>文件 '<i>%1</i>' 无法写入</p><p>名字/域名服务器设置失败。</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:317
+msgid "Bringing interface %1 up..."
+msgstr "唤醒接口 %1..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:321
+msgid "Waiting before scanning..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:328
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:334
+msgid "Scanning..."
+msgstr "扫描..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:343
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:807
+msgid "Done."
+msgstr "完成。"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:348
+msgid "No networks found."
+msgstr "未找到任何网络。"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:351
+#, fuzzy
+msgid ""
+"Radio of your wireless card seems to be turned off using an external switch "
+"on your computer.\n"
+"You need turn it on to be able to use wireless networks."
+msgstr ""
+"无线网卡已被计算机上的外部程序关闭。\n"
+"要使用无线网络您必须先唤醒该网卡。"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:459
+msgid "Freq (Hz)"
+msgstr "频率 (赫兹)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:473
+msgid ""
+"Radio of your wireless card is off.\n"
+"Would you like to turn it on?"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:559
+#, fuzzy
+msgid "Auto connection failed."
+msgstr "首次连接向导"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:570
+msgid ""
+"<qt><p><b>Can not connect to network '%1'.<b></p><p>The network you are "
+"trying to connect to requires WPA authentication. The necessary executables "
+"<i>wpa_supplicant</i> and <i>wpa_cli</i> could not be found. Install "
+"<i>wpa_supplicant</i> and restart Wireless Assistant to connect.</p></qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:579
+msgid "%1 - First Connection Wizard"
+msgstr "%1 - 首次连接向导"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:616
+msgid "Network settings updated."
+msgstr "网络设置已更新!"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:644
+#, fuzzy
+msgid "Running pre-connection command..."
+msgstr "连接失败."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:650
+msgid "Connecting to '%1'..."
+msgstr "连接到 '%1'..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:669
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:685
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:718
+#, fuzzy
+msgid "Connection failed."
+msgstr "连接已断开"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:701
+#, fuzzy
+msgid "Running post-connection command..."
+msgstr "首次连接向导"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:708
+msgid "Testing connection..."
+msgstr "正在测试连接..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:714
+msgid "Successfully connected to '%1'."
+msgstr "成功连接到 '%1'."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid ""
+"Connection failed.\n"
+"Would you like to review settings for this network?"
+msgstr ""
+"连接失败\n"
+"你希望检查该网络设置吗?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid "Review Settings?"
+msgstr "检查设置?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:761
+msgid ""
+"<qt><p>You are about to disconnect from '<b>%1</b>'.</p><p>Would you like to "
+"continue?<p></qt>"
+msgstr "<qt><p>您即将从网络 '<b>%1</b>'.断开,</p><p>要继续吗?<p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:766
+#, fuzzy
+msgid "Running pre-disconnection command..."
+msgstr "连接失败."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:772
+msgid "Disconnecting..."
+msgstr "正在断开网络..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:778
+msgid "Waiting for DHCP client to shut down..."
+msgstr "等待DHCP客户端关闭..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:801
+#, fuzzy
+msgid "Running post-disconnection command..."
+msgstr "首次连接向导"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:810
+msgid "Cancelled."
+msgstr "已取消"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:906
+msgid "&Disconnect"
+msgstr "&断开连接"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:908
+msgid "Disconnect from the selected network"
+msgstr "断开该网络"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:911
+msgid "&Connect"
+msgstr "&连接"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:913 rc.cpp:39
+#, no-c-format
+msgid "Connect to the selected network"
+msgstr "连接到选定网络"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:960
+msgid "&Stop"
+msgstr "&停止"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:964
+msgid ""
+"Terminate current process\n"
+"(%1)"
+msgstr "终止当前进程<br> (%1)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:979 rc.cpp:26
+#, no-c-format
+msgid "Quit the application"
+msgstr "退出应用程序o"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1038
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1047
+msgid "Disconnect..."
+msgstr "正在断开连接..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1041
+#, fuzzy
+msgid "Connect"
+msgstr "连接"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1043
+msgid "Forget Settings..."
+msgstr "忽略设置..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1044
+msgid "Edit Settings..."
+msgstr "编辑设置..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1050
+msgid "Configure and Connect..."
+msgstr "设置并连接..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1063
+#, fuzzy
+msgid "%1 Settings"
+msgstr "%1 设置"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr ""
+"_: 翻译人员名单\n"
+"张福平"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr ""
+"_: 翻译人员EMAIL列表\n"
+"justin-brain@hotmail.com"
+
+#: /home/pn/Development/wlassistant/src/main.cpp:30
+#: /home/pn/Development/wlassistant/src/main.cpp:42 rc.cpp:3
+#, no-c-format
+msgid "Wireless Assistant"
+msgstr "无线网络助手"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:76
+msgid ""
+"<qt><p>The network changed its security settings.</p><p>Please go to "
+"<i>Security</i> tab of the following dialog and configure WEP settings.</p></"
+"qt>"
+msgstr ""
+"<qt><p>该网络安全设置已更改。</p><p>请到以下对话框中的<i>安全</i>选项卡中配置"
+"WEP设置。</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:78
+msgid ""
+"<qt><p>Your WEP Key is not set properly.</p><p>Please go to <i>Security</i> "
+"tab of the following dialog and enter the required key.</p></qt>"
+msgstr ""
+"<qt><p>您的WEP密钥设置有问题。</p><p>请在以下对话框中的<i>安全</i>选项卡中输"
+"入合适的密钥。</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:82
+msgid ""
+"<qt><p>The network has stopped broadcasting its ESSID since the last time "
+"you were connected.</p><p>Would you like to use '<b>%1</b>' as an ESSID for "
+"this network?</p><p><i>NOTE: If you answer No, a dialog will appear where "
+"you will be able to specify a different ESSID.</i></p></qt>"
+msgstr ""
+"<qt><p>自从上次您成功连接后该网络已停止广播其扩展服务区标示符(ESSID)。</"
+"p><p>您希望使用<b>%1</b>作为该网络的ESSID吗?</p><p><i>注意:如果您回答\"否"
+"\",程序将会弹出对话框让您设置一个不同的ESSID。</i></p></qt>"
+
+#: rc.cpp:9
+#, no-c-format
+msgid "Alt+O"
+msgstr ""
+
+#: rc.cpp:12
+#, no-c-format
+msgid "Toggle network list/options"
+msgstr "网络触发器列表/选项"
+
+#: rc.cpp:15
+#, no-c-format
+msgid ""
+"<p><b>Options Button</b></p>\n"
+"<p>Pressing this toggle button will show the available application options.</"
+"p>\n"
+"<p><i>HINT: Press this button again to return to the network list.</i></p>"
+msgstr ""
+"<p><b>选项</b></p>\n"
+"<p>点击该按钮将显示所有可用选项.</p>\n"
+"<p><i>提示:再次点击该按钮将返回到网络列表。</i></p>"
+
+#: rc.cpp:23
+#, no-c-format
+msgid "Alt+Q"
+msgstr ""
+
+#: rc.cpp:29
+#, no-c-format
+msgid ""
+"<p><b>Quit Button</b></p>\n"
+"<p>Pressing this button will quit the application.</p>"
+msgstr ""
+"<p><b>退出</b></p>\n"
+"<p>点击此按钮将退出该程序</p>"
+
+#: rc.cpp:33
+#, fuzzy, no-c-format
+msgid "Co&nnect"
+msgstr "连接"
+
+#: rc.cpp:36 rc.cpp:181
+#, no-c-format
+msgid "Alt+N"
+msgstr ""
+
+#: rc.cpp:42
+#, no-c-format
+msgid ""
+"<p><b>Connect/Disconnect Button</b></p>\n"
+"<p>Pressing this button will connect to/disconnect from the network "
+"currently selected in the network list.</p>"
+msgstr ""
+"<p><b>连接/断开</b></p>\n"
+"<p>点击该按钮将连接/断开网络列表中被选定的网络。</p>"
+
+#: rc.cpp:46
+#, no-c-format
+msgid "Refresh"
+msgstr "刷新"
+
+#: rc.cpp:50
+#, no-c-format
+msgid "Refresh network list"
+msgstr "刷新网络列表"
+
+#: rc.cpp:53
+#, no-c-format
+msgid ""
+"<p><b>Scan Button</b></p>\n"
+"<p>Pressing this button will scan for wireless networks and refresh the "
+"network list.</p>"
+msgstr ""
+"<p><b>扫描</b></p>\n"
+"<p>点击该按钮将扫描所有可用无线网络并刷新该网络列表。</p>"
+
+#: rc.cpp:57
+#, no-c-format
+msgid "Device:"
+msgstr "设备:"
+
+#: rc.cpp:60
+#, no-c-format
+msgid "Pick a network device to use"
+msgstr "请选择一个需要使用的网络设备"
+
+#: rc.cpp:63
+#, no-c-format
+msgid ""
+"<p><b>Device Selection</b></p>\n"
+"<p>This combo box allows you to select which wireless card to use.</p>\n"
+"<p><i>NOTE: Selecting a different card will refresh the network list.</i></p>"
+msgstr ""
+"<p><b>选择设备</b></p>\n"
+"<p>您可以使用该选项卡来选择您希望使用的无线网卡。</p>\n"
+"<p><i>注意:选择另一张无线网卡将会刷新网络列表。</i></p>"
+
+#: rc.cpp:68 rc.cpp:199 rc.cpp:325
+#, no-c-format
+msgid "ESSID"
+msgstr "扩展服务区标示符(ESSID)"
+
+#: rc.cpp:71
+#, no-c-format
+msgid "Channel"
+msgstr "频道"
+
+#: rc.cpp:74
+#, no-c-format
+msgid "Link Quality"
+msgstr "连接质量"
+
+#: rc.cpp:77
+#, no-c-format
+msgid "WEP/WPA"
+msgstr ""
+
+#: rc.cpp:80
+#, no-c-format
+msgid "AP"
+msgstr "无线访问节点"
+
+#: rc.cpp:83
+#, no-c-format
+msgid ""
+"<p><b>Network List</b></p>\n"
+"<p>This list shows all the wireless networks that have been found.</p>\n"
+"<p><i>HINT: Click the Refresh button to update this list.</i></p>"
+msgstr ""
+"<p><b>网络列表</b></p>\n"
+"<p>该列表显示了所有可用无线网络。</p>\n"
+"<p><i>提示:点击\"刷新\"按钮可更新该列表。</i></p>"
+
+#: rc.cpp:88
+#, no-c-format
+msgid "Ready"
+msgstr ""
+
+#: rc.cpp:91
+#, no-c-format
+msgid ""
+"<p><b>Status Bar</b></p>\n"
+"<p>Messages describing current process are shown in this area.</p>"
+msgstr ""
+"<p><b>状态栏</b></p>\n"
+"<p>该区域用来显示程序当前进程。</p>"
+
+#: rc.cpp:95
+#, no-c-format
+msgid "Automatically connect on startup"
+msgstr ""
+
+#: rc.cpp:99
+#, no-c-format
+msgid ""
+"<p><b>AutomaticallyConnect on Startup</b></p>\n"
+"<p>Checking this box will make the application try to connect to the best "
+"available network. Only networks that have been previously configured will "
+"be taken into account.</p>"
+msgstr ""
+
+#: rc.cpp:103
+#, no-c-format
+msgid "Automaticall&y reconnect if connection is lost"
+msgstr ""
+
+#: rc.cpp:106
+#, no-c-format
+msgid "Alt+Y"
+msgstr ""
+
+#: rc.cpp:109
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Automatically Reconnect if Connection is Lost</b></p>\n"
+"<p>Checking this box will make the application try to reconnect after the "
+"connection is lost.</p>"
+msgstr ""
+"<p><b>连接成功后退出</b></p>\n"
+"<p>选择该选项后,应用程序将在成功建立一个无线网络连接后退出。</p>"
+
+#: rc.cpp:113
+#, no-c-format
+msgid "Quit upon successful connection"
+msgstr "连接成功后退出"
+
+#: rc.cpp:117
+#, no-c-format
+msgid ""
+"<p><b>Quit Upon Successful Connection</b></p>\n"
+"<p>Checking this box will make the application close after successfully "
+"establishing a connection to a wireless network.</p>"
+msgstr ""
+"<p><b>连接成功后退出</b></p>\n"
+"<p>选择该选项后,应用程序将在成功建立一个无线网络连接后退出。</p>"
+
+#: rc.cpp:121
+#, no-c-format
+msgid "&Group access points with the same ESSID"
+msgstr ""
+
+#: rc.cpp:124
+#, no-c-format
+msgid "Alt+G"
+msgstr ""
+
+#: rc.cpp:127
+#, no-c-format
+msgid ""
+"<p><b>Group Access Points with the Same ESSID</b></p>\n"
+"<p>Checking this box will make all access points with the same ESSID appear "
+"as one item in the network list.</p>"
+msgstr ""
+
+#: rc.cpp:131
+#, no-c-format
+msgid "Delay before scanning:"
+msgstr ""
+
+#: rc.cpp:134 rc.cpp:145 rc.cpp:167
+#, no-c-format
+msgid "Specify how long to wait for an IP"
+msgstr "指定获取IP地址的时间上限"
+
+#: rc.cpp:137 rc.cpp:148 rc.cpp:170
+#, no-c-format
+msgid ""
+"<p><b>DHCP Client Timeout</b></p>\n"
+"<p>This option specifies the amount of time after which the application "
+"should stop waiting for an IP address and assume that the connection has "
+"failed.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have problems connecting "
+"to some networks.</i></p>"
+msgstr ""
+"<p><b>DHCP 客户端超时</b></p>\n"
+"<p>该选项用于指定获取IP地址的时间上限,超过该时间限制应用程序将会认为连接已失"
+"败。</p>\n"
+"<p><i>提示:如果您在连接某个网络时遇到问题,可以尝试提高该时间限制。</i></p>"
+
+#: rc.cpp:142
+#, no-c-format
+msgid "DHCP client timeout:"
+msgstr "DHCP 客户端超时:"
+
+#: rc.cpp:153 rc.cpp:164 rc.cpp:412 rc.cpp:441 rc.cpp:470 rc.cpp:499
+#, no-c-format
+msgid "s"
+msgstr "s"
+
+#: rc.cpp:156
+#, fuzzy, no-c-format
+msgid "Specify how long to wait before scanning"
+msgstr "指定获取IP地址的时间上限"
+
+#: rc.cpp:159
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Delay Before Scanning</b></p>\n"
+"<p>This option specifies the amount of time to wait between bringing the "
+"interface up and performing a scan.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have to refresh the list "
+"manually to see all the available networks.</i></p>"
+msgstr ""
+"<p><b>DHCP 客户端超时</b></p>\n"
+"<p>该选项用于指定获取IP地址的时间上限,超过该时间限制应用程序将会认为连接已失"
+"败。</p>\n"
+"<p><i>提示:如果您在连接某个网络时遇到问题,可以尝试提高该时间限制。</i></p>"
+
+#: rc.cpp:175
+#, no-c-format
+msgid ""
+"<i>Press the button below to enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</i>"
+msgstr ""
+"<i>您可以按下该按钮以便显示所有曾经用 \"下次不再显示\" 选项关闭的信息。</i>"
+
+#: rc.cpp:178
+#, fuzzy, no-c-format
+msgid "E&nable All Messages"
+msgstr "显示所有信息"
+
+#: rc.cpp:184
+#, no-c-format
+msgid ""
+"<p><b>Enable All Messages</b></p>\n"
+"<p>Pressing this button will enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</p>"
+msgstr ""
+"<p><b>显示所有信息</b></p>\n"
+"<p>点击该按钮将会显示所有曾经用 \"下次不再显示\" 选项关闭的信息。</p>"
+
+#: rc.cpp:188
+#, no-c-format
+msgid "First Connection Wizard"
+msgstr "首次连接向导"
+
+#: rc.cpp:191
+#, no-c-format
+msgid "Welcome to First Connection Wizard"
+msgstr "欢迎使用首次连接向导!"
+
+#: rc.cpp:194
+#, no-c-format
+msgid ""
+"<b><p>This is the first time you are trying to connect to the selected "
+"network.</p></b>\n"
+"<p>You will be asked a few questions necessary to configure this connection."
+"</p>\n"
+"<p><i>Press Next to continue.</i></p>"
+msgstr ""
+"<b><p>这是您第一次试图连接该网络。</p></b>\n"
+"<p>请您回答相关问题以便配置该网络。</p>\n"
+"<p><i>按 \"下一步\" 继续。</i></p>"
+
+#: rc.cpp:202
+#, no-c-format
+msgid ""
+"<p><b>You are trying to connect to a network that does not broadcast its "
+"ESSID.</b></p>\n"
+"<p>Please specify ESSID that you would like to use when connecting to this "
+"access point.</p>"
+msgstr ""
+"<p><b>您正在试图连接一个不广播其ESSID的网络</b></p>\n"
+"<p>请指定您希望使用的扩展服务区标示符(ESSID)以便连接到该无线访问节点(AP)"
+"</p>"
+
+#: rc.cpp:206 rc.cpp:328
+#, no-c-format
+msgid "ESSID:"
+msgstr "扩展服务区标示符(ESSID):"
+
+#: rc.cpp:209
+#, no-c-format
+msgid "Interface Configuration"
+msgstr "接口设置"
+
+#: rc.cpp:213 rc.cpp:334
+#, no-c-format
+msgid "Automatic (DHCP)"
+msgstr "自动获取 (DHCP)"
+
+#: rc.cpp:217
+#, no-c-format
+msgid "Manual"
+msgstr "手动设置"
+
+#: rc.cpp:221
+#, no-c-format
+msgid ""
+"<p><b>Your IP and other parameters need to be configured to connect to any "
+"network.</b></p>\n"
+"<p>Which configuration option would you like to use when connecting to this "
+"network?</p>"
+msgstr ""
+"<p><b>在连接网络前,请先配置您的IP地址和其他相关参数。</b></p>\n"
+"<p>您希望使用哪个配置选项连接到该网络?</p>"
+
+#: rc.cpp:225
+#, no-c-format
+msgid "Interface Parameters"
+msgstr "接口参数"
+
+#: rc.cpp:228 rc.cpp:355
+#, no-c-format
+msgid "Secondary DNS:"
+msgstr "次选DNS服务器:"
+
+#: rc.cpp:231 rc.cpp:343
+#, no-c-format
+msgid "IP:"
+msgstr "IP地址:"
+
+#: rc.cpp:234 rc.cpp:340
+#, no-c-format
+msgid "Netmask:"
+msgstr "子网掩码:"
+
+#: rc.cpp:237 rc.cpp:358
+#, no-c-format
+msgid "Primary DNS:"
+msgstr "首选DNS服务器"
+
+#: rc.cpp:240 rc.cpp:349
+#, no-c-format
+msgid "Gateway:"
+msgstr "网关:"
+
+#: rc.cpp:243 rc.cpp:352
+#, no-c-format
+msgid "Domain:"
+msgstr "域名:"
+
+#: rc.cpp:246 rc.cpp:346
+#, no-c-format
+msgid "Broadcast:"
+msgstr "广播地址:"
+
+#: rc.cpp:249
+#, no-c-format
+msgid ""
+"<p><b>Please specify interface parameters to be used to connect to this "
+"network.</b></p>\n"
+"<p>You may leave some fields blank.</p>"
+msgstr ""
+"<p><b>请指定连接到该网络的接口参数</b></p>\n"
+"<p>您可以将某些选项置空。</p>"
+
+#: rc.cpp:253
+#, no-c-format
+msgid "WEP Configuration"
+msgstr "WEP配置"
+
+#: rc.cpp:256
+#, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WEP authentication.</"
+"b></p>\n"
+"<p>Which WEP mode would you like to use?</p>"
+msgstr ""
+"<p><b>您希望连接的网络需要连线对等加密(WEP)授权</b></p>\n"
+"<p>您希望使用哪种连线对等加密(WEP)模式</p>"
+
+#: rc.cpp:261
+#, fuzzy, no-c-format
+msgid "Open S&ystem"
+msgstr "开发系统"
+
+#: rc.cpp:264
+#, no-c-format
+msgid "Shared Key"
+msgstr "共享密钥"
+
+#: rc.cpp:267 rc.cpp:288
+#, fuzzy, no-c-format
+msgid "<p><b>Please provide a key to be used with this network.</b></p>"
+msgstr ""
+"<p><b>请提供一个连接到该网络的密钥。</b></p>\n"
+"可以使用任何iwconfig支持的格式。"
+
+#: rc.cpp:270
+#, no-c-format
+msgid "WEP key:"
+msgstr "WEP密钥"
+
+#: rc.cpp:273 rc.cpp:285 rc.cpp:370 rc.cpp:391
+#, no-c-format
+msgid "ASCII"
+msgstr ""
+
+#: rc.cpp:276
+#, fuzzy, no-c-format
+msgid "WPA Configuration"
+msgstr "WEP配置"
+
+#: rc.cpp:279
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WPA authentication.</"
+"b></p>"
+msgstr ""
+"<p><b>您希望连接的网络需要连线对等加密(WEP)授权</b></p>\n"
+"<p>您希望使用哪种连线对等加密(WEP)模式</p>"
+
+#: rc.cpp:282
+#, fuzzy, no-c-format
+msgid "WPA Key:"
+msgstr "WEP密钥"
+
+#: rc.cpp:291 rc.cpp:376
+#, no-c-format
+msgid "<b>?<br>?<br>?<br>?</b>"
+msgstr ""
+
+#: rc.cpp:294 rc.cpp:373
+#, no-c-format
+msgid ""
+"WPA Version:<br>Group Cipher:<br>Pairwise Cipher:<br>Authentication Suite:"
+msgstr ""
+
+#: rc.cpp:297
+#, no-c-format
+msgid "Done!"
+msgstr "完成!"
+
+#: rc.cpp:300
+#, no-c-format
+msgid ""
+"<p><b>Congratulations!</b></p>\n"
+"<p>You have successfully finished configuring this connection.</p>\n"
+"<p><b>Press Finish to connect!</b></p>"
+msgstr ""
+"<p><b>恭喜!</b></p>\n"
+"<p>您已成功完成该连接的配置!</p>\n"
+"<p><b>请点击\"完成\"按钮连接该网络!</b></p>"
+
+#: rc.cpp:311
+#, no-c-format
+msgid "F1"
+msgstr "F1"
+
+#: rc.cpp:322
+#, no-c-format
+msgid "I&nterface"
+msgstr "接口"
+
+#: rc.cpp:337
+#, fuzzy, no-c-format
+msgid "&Manual"
+msgstr "手动设置"
+
+#: rc.cpp:361
+#, no-c-format
+msgid "Securit&y"
+msgstr "安全"
+
+#: rc.cpp:364
+#, fuzzy, no-c-format
+msgid "WPA Settings"
+msgstr "%1 设置"
+
+#: rc.cpp:367 rc.cpp:388
+#, no-c-format
+msgid "Key:"
+msgstr "密钥:"
+
+#: rc.cpp:379
+#, fuzzy, no-c-format
+msgid "WEP Settings"
+msgstr "%1 设置"
+
+#: rc.cpp:382
+#, fuzzy, no-c-format
+msgid "Open Syste&m"
+msgstr "开发系统"
+
+#: rc.cpp:385
+#, no-c-format
+msgid "Alt+M"
+msgstr ""
+
+#: rc.cpp:394
+#, fuzzy, no-c-format
+msgid "Shared &Key"
+msgstr "共享密钥"
+
+#: rc.cpp:397
+#, no-c-format
+msgid "Alt+K"
+msgstr ""
+
+#: rc.cpp:400
+#, no-c-format
+msgid "Advanced"
+msgstr ""
+
+#: rc.cpp:403
+#, no-c-format
+msgid ""
+"<b>Security Warning:</b> the commands specified below will be ran with the "
+"same privileges as Wireless Assistant has."
+msgstr ""
+
+#: rc.cpp:406
+#, fuzzy, no-c-format
+msgid "Pre-Connection Command"
+msgstr "连接失败."
+
+#: rc.cpp:409 rc.cpp:438 rc.cpp:467 rc.cpp:496
+#, no-c-format
+msgid "Timeout:"
+msgstr ""
+
+#: rc.cpp:415 rc.cpp:444 rc.cpp:473 rc.cpp:502
+#, no-c-format
+msgid "Amount of time after which the process will be killed."
+msgstr ""
+
+#: rc.cpp:418 rc.cpp:447 rc.cpp:476 rc.cpp:505
+#, no-c-format
+msgid ""
+"<p><b>Timeout</b></p>\n"
+"<p>This option specifies how long should Wireless Assistant wait for the "
+"process to finish, before it will be killed.</p>"
+msgstr ""
+
+#: rc.cpp:422 rc.cpp:451 rc.cpp:480 rc.cpp:509
+#, no-c-format
+msgid "Run detached"
+msgstr ""
+
+#: rc.cpp:425 rc.cpp:454 rc.cpp:483 rc.cpp:512
+#, no-c-format
+msgid "Don't wait for the process to finish."
+msgstr ""
+
+#: rc.cpp:428 rc.cpp:457 rc.cpp:486 rc.cpp:515
+#, no-c-format
+msgid ""
+"<p><b>Run Detached</b></p>\n"
+"<p>If this checkbox is selected Wireless Assistant will not wait for the "
+"process to finish.</p>"
+msgstr ""
+
+#: rc.cpp:432 rc.cpp:461 rc.cpp:490 rc.cpp:519
+#, fuzzy, no-c-format
+msgid "Command:"
+msgstr "域名:"
+
+#: rc.cpp:435
+#, fuzzy, no-c-format
+msgid "Post-Connection Command"
+msgstr "首次连接向导"
+
+#: rc.cpp:464
+#, no-c-format
+msgid "Pre-Disconnection Command"
+msgstr ""
+
+#: rc.cpp:493
+#, no-c-format
+msgid "Post-Disconnection Command"
+msgstr ""
+
+#~ msgid "WEP Mode"
+#~ msgstr "连线对等加密(WEP)模式"
+
+#~ msgid "WEP?"
+#~ msgstr "连线对等加密"
+
+#, fuzzy
+#~ msgid "Application Options"
+#~ msgstr "应用程序选项"
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..9947ebc
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,963 @@
+# translation of zh_TW.po to
+# translation of zh_CN.po to
+# translation of wlassistant to Simplified Chinese
+# This file is distributed under the same license as the wlassistant package.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# Zhang fu ping <justin-brain@hotmail.com>, 2005.
+# Zhang fu ping <justin-brain@hotmail.com>, 2005.
+# justin <root@justin.linpus>, 2005.
+# justin <justin-brain@linpus.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: zh_TW\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-04-02 02:31+0200\n"
+"PO-Revision-Date: 2005-12-15 16:24+0800\n"
+"Last-Translator: justin <justin-brain@linpus.com>\n"
+"Language-Team: <zh@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.10\n"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:103
+msgid "Initializing..."
+msgstr "正在起始..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:110
+msgid ""
+"Kernel 2.6 or later not present.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"Kernel2.6或更高版本不存在!\n"
+"無線網路助手將立即結束。"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:156
+msgid ""
+"No usable wireless devices found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"未發現任何無線裝置\n"
+"無線網路助手將立即結束。"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:179
+msgid ""
+"<qt><p>You might have insufficient permissions for Wireless Assistant to "
+"function properly.</p><p>Did you run it using '<tt>sudo</tt>'?</p></qt>"
+msgstr ""
+"<qt><p>您的權限不夠,可能無法正常執行無線網路助手的所有功能。</p><p>您是否執"
+"行了\"<tt>sudo</tt>\"指令</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:200
+msgid ""
+"Executable(s) '%1' could not be found.\n"
+"Wireless Assistant will now quit."
+msgstr ""
+"未發現任何可執行的 '%1'.\n"
+"無線網路助手將立即結束。"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid ""
+"Connection to '%1' has been lost!\n"
+"Would you like to reconnect?"
+msgstr ""
+" '%1' 的連線已斷開!\n"
+"您想要重新連線嗎?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:238
+msgid "Connection Lost"
+msgstr "連線已斷開"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:252
+msgid ""
+"<qt><p>Settings for network '<b>%1</b>' are about to be deleted.</p><p>Would "
+"you like to continue?</p></qt>"
+msgstr "<qt><p> '<b>%1</b>' 網路設定將被移除,</p><p>您想要繼續嗎?</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:257
+msgid "Settings deleted."
+msgstr "設定已移除!"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:285
+msgid ""
+"<qt><p>File '<i>%1</i>' could not be opened for writing.</p><p>Nameserver(s) "
+"and/or domain are not set.</p></qt>"
+msgstr ""
+"<qt><p>檔案 '<i>%1</i>' 無法寫入</p><p>名字/域名伺服器設定失敗。</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:317
+msgid "Bringing interface %1 up..."
+msgstr "啟動埠 %1..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:321
+msgid "Waiting before scanning..."
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:328
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:334
+msgid "Scanning..."
+msgstr "掃描..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:343
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:807
+msgid "Done."
+msgstr "完成。"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:348
+msgid "No networks found."
+msgstr "未找到任何網路。"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:351
+#, fuzzy
+msgid ""
+"Radio of your wireless card seems to be turned off using an external switch "
+"on your computer.\n"
+"You need turn it on to be able to use wireless networks."
+msgstr ""
+"無線網卡已被電腦上的外部程式關閉。\n"
+"要使用無線網路您必須先唤醒該網卡。"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:459
+msgid "Freq (Hz)"
+msgstr "頻率 (赫兹)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:473
+msgid ""
+"Radio of your wireless card is off.\n"
+"Would you like to turn it on?"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:559
+#, fuzzy
+msgid "Auto connection failed."
+msgstr "首次連線向導"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:570
+msgid ""
+"<qt><p><b>Can not connect to network '%1'.<b></p><p>The network you are "
+"trying to connect to requires WPA authentication. The necessary executables "
+"<i>wpa_supplicant</i> and <i>wpa_cli</i> could not be found. Install "
+"<i>wpa_supplicant</i> and restart Wireless Assistant to connect.</p></qt>"
+msgstr ""
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:579
+msgid "%1 - First Connection Wizard"
+msgstr "%1 - 首次連線向導"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:616
+msgid "Network settings updated."
+msgstr "網路設定已更新!"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:644
+#, fuzzy
+msgid "Running pre-connection command..."
+msgstr "連線失敗."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:650
+msgid "Connecting to '%1'..."
+msgstr "連線到 '%1'..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:669
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:685
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:718
+#, fuzzy
+msgid "Connection failed."
+msgstr "連線已斷開"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:701
+#, fuzzy
+msgid "Running post-connection command..."
+msgstr "首次連線向導"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:708
+msgid "Testing connection..."
+msgstr "正在測試連線..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:714
+msgid "Successfully connected to '%1'."
+msgstr "成功連線到 '%1'."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid ""
+"Connection failed.\n"
+"Would you like to review settings for this network?"
+msgstr ""
+"連線失敗\n"
+"你希望檢查該網路設定嗎?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:722
+msgid "Review Settings?"
+msgstr "檢查設定?"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:761
+msgid ""
+"<qt><p>You are about to disconnect from '<b>%1</b>'.</p><p>Would you like to "
+"continue?<p></qt>"
+msgstr "<qt><p>您即將從網路 '<b>%1</b>'.斷開,</p><p>要繼續嗎?<p></qt>"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:766
+#, fuzzy
+msgid "Running pre-disconnection command..."
+msgstr "連線失敗."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:772
+msgid "Disconnecting..."
+msgstr "正在斷開網路..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:778
+msgid "Waiting for DHCP client to shut down..."
+msgstr "等待DHCP用戶端關閉..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:801
+#, fuzzy
+msgid "Running post-disconnection command..."
+msgstr "首次連線向導"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:810
+msgid "Cancelled."
+msgstr "已取消"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:906
+msgid "&Disconnect"
+msgstr "&斷開連線"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:908
+msgid "Disconnect from the selected network"
+msgstr "斷開該網路"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:911
+msgid "&Connect"
+msgstr "&連線"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:913 rc.cpp:39
+#, no-c-format
+msgid "Connect to the selected network"
+msgstr "連線到選取網路"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:960
+msgid "&Stop"
+msgstr "&停止"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:964
+msgid ""
+"Terminate current process\n"
+"(%1)"
+msgstr "終止目前程式<br> (%1)"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:979 rc.cpp:26
+#, no-c-format
+msgid "Quit the application"
+msgstr "結束應用程式o"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1038
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1047
+msgid "Disconnect..."
+msgstr "正在斷開連線..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1041
+#, fuzzy
+msgid "Connect"
+msgstr "連線"
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1043
+msgid "Forget Settings..."
+msgstr "舍棄設定..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1044
+msgid "Edit Settings..."
+msgstr "編輯設定..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1050
+msgid "Configure and Connect..."
+msgstr "設定并連線..."
+
+#: /home/pn/Development/wlassistant/src/wlassistant.cpp:1063
+#, fuzzy
+msgid "%1 Settings"
+msgstr "%1 設定"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr ""
+"_: 翻譯人員名單\n"
+"張福平"
+
+#: /home/pn/Development/wlassistant/src/_translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr ""
+"_: 翻譯人員EMAIL清單\n"
+"justin-brain@hotmail.com"
+
+#: /home/pn/Development/wlassistant/src/main.cpp:30
+#: /home/pn/Development/wlassistant/src/main.cpp:42 rc.cpp:3
+#, no-c-format
+msgid "Wireless Assistant"
+msgstr "無線網路助手"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:76
+msgid ""
+"<qt><p>The network changed its security settings.</p><p>Please go to "
+"<i>Security</i> tab of the following dialog and configure WEP settings.</p></"
+"qt>"
+msgstr ""
+"<qt><p>該網路安全設定已變更。</p><p>請到以下對話方塊中的<i>安全</i>選項卡中配"
+"置WEP設定。</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:78
+msgid ""
+"<qt><p>Your WEP Key is not set properly.</p><p>Please go to <i>Security</i> "
+"tab of the following dialog and enter the required key.</p></qt>"
+msgstr ""
+"<qt><p>您的WEP加密鍵設定有問題。</p><p>請在以下對話方塊中的<i>安全</i>選項卡"
+"中匯入合適的加密鍵。</p></qt>"
+
+#: /home/pn/Development/wlassistant/src/netparams.h:82
+msgid ""
+"<qt><p>The network has stopped broadcasting its ESSID since the last time "
+"you were connected.</p><p>Would you like to use '<b>%1</b>' as an ESSID for "
+"this network?</p><p><i>NOTE: If you answer No, a dialog will appear where "
+"you will be able to specify a different ESSID.</i></p></qt>"
+msgstr ""
+"<qt><p>自從上次您成功連線後該網路已停止廣播其延伸服務區標示符(ESSID)。</"
+"p><p>您希望使用<b>%1</b>作為該網路的ESSID嗎?</p><p><i>注意:如果您回答\"否"
+"\",程式將會即現對話方塊讓您設定一個不同的ESSID。</i></p></qt>"
+
+#: rc.cpp:9
+#, no-c-format
+msgid "Alt+O"
+msgstr ""
+
+#: rc.cpp:12
+#, no-c-format
+msgid "Toggle network list/options"
+msgstr "網路正反器清單/選項"
+
+#: rc.cpp:15
+#, no-c-format
+msgid ""
+"<p><b>Options Button</b></p>\n"
+"<p>Pressing this toggle button will show the available application options.</"
+"p>\n"
+"<p><i>HINT: Press this button again to return to the network list.</i></p>"
+msgstr ""
+"<p><b>選項</b></p>\n"
+"<p>點選該按鈕將察看所有可用選項.</p>\n"
+"<p><i>輔助說明:再次點選該按鈕將傳回到網路清單。</i></p>"
+
+#: rc.cpp:23
+#, no-c-format
+msgid "Alt+Q"
+msgstr ""
+
+#: rc.cpp:29
+#, no-c-format
+msgid ""
+"<p><b>Quit Button</b></p>\n"
+"<p>Pressing this button will quit the application.</p>"
+msgstr ""
+"<p><b>結束</b></p>\n"
+"<p>點選此按鈕將結束該程式</p>"
+
+#: rc.cpp:33
+#, fuzzy, no-c-format
+msgid "Co&nnect"
+msgstr "連線"
+
+#: rc.cpp:36 rc.cpp:181
+#, no-c-format
+msgid "Alt+N"
+msgstr ""
+
+#: rc.cpp:42
+#, no-c-format
+msgid ""
+"<p><b>Connect/Disconnect Button</b></p>\n"
+"<p>Pressing this button will connect to/disconnect from the network "
+"currently selected in the network list.</p>"
+msgstr ""
+"<p><b>連線/斷開</b></p>\n"
+"<p>點選該按鈕將連線/斷開網路清單中被選取的網路。</p>"
+
+#: rc.cpp:46
+#, no-c-format
+msgid "Refresh"
+msgstr "清除"
+
+#: rc.cpp:50
+#, no-c-format
+msgid "Refresh network list"
+msgstr "清除網路清單"
+
+#: rc.cpp:53
+#, no-c-format
+msgid ""
+"<p><b>Scan Button</b></p>\n"
+"<p>Pressing this button will scan for wireless networks and refresh the "
+"network list.</p>"
+msgstr ""
+"<p><b>掃描</b></p>\n"
+"<p>點選該按鈕將掃描所有可用無線網路并清除該網路清單。</p>"
+
+#: rc.cpp:57
+#, no-c-format
+msgid "Device:"
+msgstr "裝置:"
+
+#: rc.cpp:60
+#, no-c-format
+msgid "Pick a network device to use"
+msgstr "請選取一個需要使用的網路裝置"
+
+#: rc.cpp:63
+#, no-c-format
+msgid ""
+"<p><b>Device Selection</b></p>\n"
+"<p>This combo box allows you to select which wireless card to use.</p>\n"
+"<p><i>NOTE: Selecting a different card will refresh the network list.</i></p>"
+msgstr ""
+"<p><b>選取裝置</b></p>\n"
+"<p>您可以使用該選項卡來選取您希望使用的無綫網卡。</p>\n"
+"<p><i>注意:選取另一張無線網卡將會清除網路清單。</i></p>"
+
+#: rc.cpp:68 rc.cpp:199 rc.cpp:325
+#, no-c-format
+msgid "ESSID"
+msgstr "延伸服務區標示符(ESSID)"
+
+#: rc.cpp:71
+#, no-c-format
+msgid "Channel"
+msgstr "頻道"
+
+#: rc.cpp:74
+#, no-c-format
+msgid "Link Quality"
+msgstr "連線品質"
+
+#: rc.cpp:77
+#, no-c-format
+msgid "WEP/WPA"
+msgstr ""
+
+#: rc.cpp:80
+#, no-c-format
+msgid "AP"
+msgstr "無線存取節點"
+
+#: rc.cpp:83
+#, no-c-format
+msgid ""
+"<p><b>Network List</b></p>\n"
+"<p>This list shows all the wireless networks that have been found.</p>\n"
+"<p><i>HINT: Click the Refresh button to update this list.</i></p>"
+msgstr ""
+"<p><b>網路清單</b></p>\n"
+"<p>該清單察看了所有可用無線網路。</p>\n"
+"<p><i>輔助說明:點選 \"清除\"按鈕可更新該清單。</i></p>"
+
+#: rc.cpp:88
+#, no-c-format
+msgid "Ready"
+msgstr ""
+
+#: rc.cpp:91
+#, no-c-format
+msgid ""
+"<p><b>Status Bar</b></p>\n"
+"<p>Messages describing current process are shown in this area.</p>"
+msgstr ""
+"<p><b>狀態欄</b></p>\n"
+"<p>該區域用來察看程式目前程式。</p>"
+
+#: rc.cpp:95
+#, no-c-format
+msgid "Automatically connect on startup"
+msgstr ""
+
+#: rc.cpp:99
+#, no-c-format
+msgid ""
+"<p><b>AutomaticallyConnect on Startup</b></p>\n"
+"<p>Checking this box will make the application try to connect to the best "
+"available network. Only networks that have been previously configured will "
+"be taken into account.</p>"
+msgstr ""
+
+#: rc.cpp:103
+#, no-c-format
+msgid "Automaticall&y reconnect if connection is lost"
+msgstr ""
+
+#: rc.cpp:106
+#, no-c-format
+msgid "Alt+Y"
+msgstr ""
+
+#: rc.cpp:109
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Automatically Reconnect if Connection is Lost</b></p>\n"
+"<p>Checking this box will make the application try to reconnect after the "
+"connection is lost.</p>"
+msgstr ""
+"<p><b>連線成功後結束</b></p>\n"
+"<p>選取該選項後,應用程式將在成功建立一個無線網路連線後結束。</p>"
+
+#: rc.cpp:113
+#, no-c-format
+msgid "Quit upon successful connection"
+msgstr "連線成功後結束"
+
+#: rc.cpp:117
+#, no-c-format
+msgid ""
+"<p><b>Quit Upon Successful Connection</b></p>\n"
+"<p>Checking this box will make the application close after successfully "
+"establishing a connection to a wireless network.</p>"
+msgstr ""
+"<p><b>連線成功後結束</b></p>\n"
+"<p>選取該選項後,應用程式將在成功建立一個無線網路連線後結束。</p>"
+
+#: rc.cpp:121
+#, no-c-format
+msgid "&Group access points with the same ESSID"
+msgstr ""
+
+#: rc.cpp:124
+#, no-c-format
+msgid "Alt+G"
+msgstr ""
+
+#: rc.cpp:127
+#, no-c-format
+msgid ""
+"<p><b>Group Access Points with the Same ESSID</b></p>\n"
+"<p>Checking this box will make all access points with the same ESSID appear "
+"as one item in the network list.</p>"
+msgstr ""
+
+#: rc.cpp:131
+#, no-c-format
+msgid "Delay before scanning:"
+msgstr ""
+
+#: rc.cpp:134 rc.cpp:145 rc.cpp:167
+#, no-c-format
+msgid "Specify how long to wait for an IP"
+msgstr "指定抓取IP位址的時間上限"
+
+#: rc.cpp:137 rc.cpp:148 rc.cpp:170
+#, no-c-format
+msgid ""
+"<p><b>DHCP Client Timeout</b></p>\n"
+"<p>This option specifies the amount of time after which the application "
+"should stop waiting for an IP address and assume that the connection has "
+"failed.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have problems connecting "
+"to some networks.</i></p>"
+msgstr ""
+"<p><b>DHCP 用戶端逾時</b></p>\n"
+"<p>該選項用于指定抓取IP位址的時間上限,超過該時間限制應用程式將會認為連線已失"
+"敗。</p>\n"
+"<p><i>輔助說明:如果您在連線某個網路時遇到問題,可以嘗試提高該時間限制。</"
+"i></p>"
+
+#: rc.cpp:142
+#, no-c-format
+msgid "DHCP client timeout:"
+msgstr "DHCP 用戶端逾時:"
+
+#: rc.cpp:153 rc.cpp:164 rc.cpp:412 rc.cpp:441 rc.cpp:470 rc.cpp:499
+#, no-c-format
+msgid "s"
+msgstr "s"
+
+#: rc.cpp:156
+#, fuzzy, no-c-format
+msgid "Specify how long to wait before scanning"
+msgstr "指定抓取IP位址的時間上限"
+
+#: rc.cpp:159
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>Delay Before Scanning</b></p>\n"
+"<p>This option specifies the amount of time to wait between bringing the "
+"interface up and performing a scan.</p>\n"
+"<p><i>HINT: Increasing this number can help if you have to refresh the list "
+"manually to see all the available networks.</i></p>"
+msgstr ""
+"<p><b>DHCP 用戶端逾時</b></p>\n"
+"<p>該選項用于指定抓取IP位址的時間上限,超過該時間限制應用程式將會認為連線已失"
+"敗。</p>\n"
+"<p><i>輔助說明:如果您在連線某個網路時遇到問題,可以嘗試提高該時間限制。</"
+"i></p>"
+
+#: rc.cpp:175
+#, no-c-format
+msgid ""
+"<i>Press the button below to enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</i>"
+msgstr ""
+"<i>您可以按下該按鈕以便察看所有曾經用 \"下次不再察看\" 選項關閉的資訊。</i>"
+
+#: rc.cpp:178
+#, fuzzy, no-c-format
+msgid "E&nable All Messages"
+msgstr "察看所有資訊"
+
+#: rc.cpp:184
+#, no-c-format
+msgid ""
+"<p><b>Enable All Messages</b></p>\n"
+"<p>Pressing this button will enable all messages which have been turned off "
+"with the 'Don't Show Again' feature.</p>"
+msgstr ""
+"<p><b>察看所有資訊</b></p>\n"
+"<p>點選該按鈕將會察看所有曾經用 \"下次不再察看\" 選項關閉的資訊。</p>"
+
+#: rc.cpp:188
+#, no-c-format
+msgid "First Connection Wizard"
+msgstr "首次連線向導"
+
+#: rc.cpp:191
+#, no-c-format
+msgid "Welcome to First Connection Wizard"
+msgstr "歡迎使用首次連線向導!"
+
+#: rc.cpp:194
+#, no-c-format
+msgid ""
+"<b><p>This is the first time you are trying to connect to the selected "
+"network.</p></b>\n"
+"<p>You will be asked a few questions necessary to configure this connection."
+"</p>\n"
+"<p><i>Press Next to continue.</i></p>"
+msgstr ""
+"<b><p>這是您第一次嘗試連線該網路。</p></b>\n"
+"<p>請您回答相關問題以便配置該網路。</p>\n"
+"<p><i>按 \"下一步\" 繼續。</i></p>"
+
+#: rc.cpp:202
+#, no-c-format
+msgid ""
+"<p><b>You are trying to connect to a network that does not broadcast its "
+"ESSID.</b></p>\n"
+"<p>Please specify ESSID that you would like to use when connecting to this "
+"access point.</p>"
+msgstr ""
+"<p><b>您正在嘗試連線一個不廣播其ESSID的網路</b></p>\n"
+"<p>請指定您希望使用的延伸服務區標示符(ESSID)以便連線到該無線存取節點(AP)"
+"</p>"
+
+#: rc.cpp:206 rc.cpp:328
+#, no-c-format
+msgid "ESSID:"
+msgstr "延伸服務區標示符(ESSID):"
+
+#: rc.cpp:209
+#, no-c-format
+msgid "Interface Configuration"
+msgstr "介面設定"
+
+#: rc.cpp:213 rc.cpp:334
+#, no-c-format
+msgid "Automatic (DHCP)"
+msgstr "自動抓取 (DHCP)"
+
+#: rc.cpp:217
+#, no-c-format
+msgid "Manual"
+msgstr "手動設定"
+
+#: rc.cpp:221
+#, no-c-format
+msgid ""
+"<p><b>Your IP and other parameters need to be configured to connect to any "
+"network.</b></p>\n"
+"<p>Which configuration option would you like to use when connecting to this "
+"network?</p>"
+msgstr ""
+"<p><b>在連線網路前,請先配置您的IP位址和其他相關引數。</b></p>\n"
+"<p>您希望使用哪個配置選項連線到該網路?</p>"
+
+#: rc.cpp:225
+#, no-c-format
+msgid "Interface Parameters"
+msgstr "介面引數"
+
+#: rc.cpp:228 rc.cpp:355
+#, no-c-format
+msgid "Secondary DNS:"
+msgstr "次選DNS伺服器:"
+
+#: rc.cpp:231 rc.cpp:343
+#, no-c-format
+msgid "IP:"
+msgstr "IP位址:"
+
+#: rc.cpp:234 rc.cpp:340
+#, no-c-format
+msgid "Netmask:"
+msgstr "網路遮罩:"
+
+#: rc.cpp:237 rc.cpp:358
+#, no-c-format
+msgid "Primary DNS:"
+msgstr "偏好DNS伺服器:"
+
+#: rc.cpp:240 rc.cpp:349
+#, no-c-format
+msgid "Gateway:"
+msgstr "閘道:"
+
+#: rc.cpp:243 rc.cpp:352
+#, no-c-format
+msgid "Domain:"
+msgstr "域名:"
+
+#: rc.cpp:246 rc.cpp:346
+#, no-c-format
+msgid "Broadcast:"
+msgstr "廣播位址:"
+
+#: rc.cpp:249
+#, no-c-format
+msgid ""
+"<p><b>Please specify interface parameters to be used to connect to this "
+"network.</b></p>\n"
+"<p>You may leave some fields blank.</p>"
+msgstr ""
+"<p><b>請指定連線到該網路的介面引數</b></p>\n"
+"<p>您可以將某些選項置空。</p>"
+
+#: rc.cpp:253
+#, no-c-format
+msgid "WEP Configuration"
+msgstr "WEP配置"
+
+#: rc.cpp:256
+#, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WEP authentication.</"
+"b></p>\n"
+"<p>Which WEP mode would you like to use?</p>"
+msgstr ""
+"<p><b>您希望連線的網路需要連線對等加密(WEP)授權</b></p>\n"
+"<p>您希望使用哪種連線對等加密(WEP)型態</p>"
+
+#: rc.cpp:261
+#, fuzzy, no-c-format
+msgid "Open S&ystem"
+msgstr "開發系統"
+
+#: rc.cpp:264
+#, no-c-format
+msgid "Shared Key"
+msgstr "共用加密鍵"
+
+#: rc.cpp:267 rc.cpp:288
+#, fuzzy, no-c-format
+msgid "<p><b>Please provide a key to be used with this network.</b></p>"
+msgstr ""
+"<p><b>請提供一個連線到該網路的加密鍵。</b></p>\n"
+"可以使用任何iwconfig支援的格式。"
+
+#: rc.cpp:270
+#, no-c-format
+msgid "WEP key:"
+msgstr "WEP加密鍵"
+
+#: rc.cpp:273 rc.cpp:285 rc.cpp:370 rc.cpp:391
+#, no-c-format
+msgid "ASCII"
+msgstr ""
+
+#: rc.cpp:276
+#, fuzzy, no-c-format
+msgid "WPA Configuration"
+msgstr "WEP配置"
+
+#: rc.cpp:279
+#, fuzzy, no-c-format
+msgid ""
+"<p><b>The network you are trying to connect to requires WPA authentication.</"
+"b></p>"
+msgstr ""
+"<p><b>您希望連線的網路需要連線對等加密(WEP)授權</b></p>\n"
+"<p>您希望使用哪種連線對等加密(WEP)型態</p>"
+
+#: rc.cpp:282
+#, fuzzy, no-c-format
+msgid "WPA Key:"
+msgstr "WEP加密鍵"
+
+#: rc.cpp:291 rc.cpp:376
+#, no-c-format
+msgid "<b>?<br>?<br>?<br>?</b>"
+msgstr ""
+
+#: rc.cpp:294 rc.cpp:373
+#, no-c-format
+msgid ""
+"WPA Version:<br>Group Cipher:<br>Pairwise Cipher:<br>Authentication Suite:"
+msgstr ""
+
+#: rc.cpp:297
+#, no-c-format
+msgid "Done!"
+msgstr "完成!"
+
+#: rc.cpp:300
+#, no-c-format
+msgid ""
+"<p><b>Congratulations!</b></p>\n"
+"<p>You have successfully finished configuring this connection.</p>\n"
+"<p><b>Press Finish to connect!</b></p>"
+msgstr ""
+"<p><b>恭喜!</b></p>\n"
+"<p>您已成功完成該連線的配置!</p>\n"
+"<p><b>請點選\"完成\"按鈕連線該網路!</b></p>"
+
+#: rc.cpp:311
+#, no-c-format
+msgid "F1"
+msgstr "F1"
+
+#: rc.cpp:322
+#, no-c-format
+msgid "I&nterface"
+msgstr "介面"
+
+#: rc.cpp:337
+#, fuzzy, no-c-format
+msgid "&Manual"
+msgstr "手動設定"
+
+#: rc.cpp:361
+#, no-c-format
+msgid "Securit&y"
+msgstr "安全"
+
+#: rc.cpp:364
+#, fuzzy, no-c-format
+msgid "WPA Settings"
+msgstr "%1 設定"
+
+#: rc.cpp:367 rc.cpp:388
+#, no-c-format
+msgid "Key:"
+msgstr "加密鍵:"
+
+#: rc.cpp:379
+#, fuzzy, no-c-format
+msgid "WEP Settings"
+msgstr "%1 設定"
+
+#: rc.cpp:382
+#, fuzzy, no-c-format
+msgid "Open Syste&m"
+msgstr "開發系統"
+
+#: rc.cpp:385
+#, no-c-format
+msgid "Alt+M"
+msgstr ""
+
+#: rc.cpp:394
+#, fuzzy, no-c-format
+msgid "Shared &Key"
+msgstr "共用加密鍵"
+
+#: rc.cpp:397
+#, no-c-format
+msgid "Alt+K"
+msgstr ""
+
+#: rc.cpp:400
+#, no-c-format
+msgid "Advanced"
+msgstr ""
+
+#: rc.cpp:403
+#, no-c-format
+msgid ""
+"<b>Security Warning:</b> the commands specified below will be ran with the "
+"same privileges as Wireless Assistant has."
+msgstr ""
+
+#: rc.cpp:406
+#, fuzzy, no-c-format
+msgid "Pre-Connection Command"
+msgstr "連線失敗."
+
+#: rc.cpp:409 rc.cpp:438 rc.cpp:467 rc.cpp:496
+#, no-c-format
+msgid "Timeout:"
+msgstr ""
+
+#: rc.cpp:415 rc.cpp:444 rc.cpp:473 rc.cpp:502
+#, no-c-format
+msgid "Amount of time after which the process will be killed."
+msgstr ""
+
+#: rc.cpp:418 rc.cpp:447 rc.cpp:476 rc.cpp:505
+#, no-c-format
+msgid ""
+"<p><b>Timeout</b></p>\n"
+"<p>This option specifies how long should Wireless Assistant wait for the "
+"process to finish, before it will be killed.</p>"
+msgstr ""
+
+#: rc.cpp:422 rc.cpp:451 rc.cpp:480 rc.cpp:509
+#, no-c-format
+msgid "Run detached"
+msgstr ""
+
+#: rc.cpp:425 rc.cpp:454 rc.cpp:483 rc.cpp:512
+#, no-c-format
+msgid "Don't wait for the process to finish."
+msgstr ""
+
+#: rc.cpp:428 rc.cpp:457 rc.cpp:486 rc.cpp:515
+#, no-c-format
+msgid ""
+"<p><b>Run Detached</b></p>\n"
+"<p>If this checkbox is selected Wireless Assistant will not wait for the "
+"process to finish.</p>"
+msgstr ""
+
+#: rc.cpp:432 rc.cpp:461 rc.cpp:490 rc.cpp:519
+#, fuzzy, no-c-format
+msgid "Command:"
+msgstr "域名:"
+
+#: rc.cpp:435
+#, fuzzy, no-c-format
+msgid "Post-Connection Command"
+msgstr "首次連線向導"
+
+#: rc.cpp:464
+#, no-c-format
+msgid "Pre-Disconnection Command"
+msgstr ""
+
+#: rc.cpp:493
+#, no-c-format
+msgid "Post-Disconnection Command"
+msgstr ""
+
+#~ msgid "WEP Mode"
+#~ msgstr "連線對等加密(WEP)型態"
+
+#~ msgid "WEP?"
+#~ msgstr "連線對等加密"
+
+#, fuzzy
+#~ msgid "Application Options"
+#~ msgstr "應用程式選項"
diff --git a/src/SConscript b/src/SConscript
new file mode 100644
index 0000000..85a3fee
--- /dev/null
+++ b/src/SConscript
@@ -0,0 +1,26 @@
+#! /usr/bin/env python
+## Thomas Nagy, 2005
+## This file can be reused freely for any project (see COPYING)
+
+Import( 'env' )
+
+obj=env.kobject('program')
+obj.target='wlassistant'
+obj.source="""
+main.cpp
+netlistviewitem.cpp
+ui_NetParamsEdit.ui
+ui_netparamsedit.cpp
+ui_NetParamsWizard.ui
+ui_netparamswizard.cpp
+ui_main.ui
+waconfig.cpp
+watools.cpp
+wlassistant.cpp
+"""
+
+obj.cxxflags='-DQT_THREAD_SUPPORT'
+obj.libs='qt-mt kdecore kdeui iw'
+obj.execute()
+
+#env.KDEinstall( 'KDEMENU', 'Utilities', 'wlassistant.desktop' ) \ No newline at end of file
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..a06f95e
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,56 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Pawel Nawrocki *
+ * pnawrocki@interia.pl *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+
+#include "wlassistant.h"
+
+#include <kapplication.h>
+#include <kaboutdata.h>
+#include <kcmdlineargs.h>
+#include <klocale.h>
+
+static const char description[] =
+ I18N_NOOP("Wireless Assistant");
+
+static const char version[] = "0.5.7";
+
+static KCmdLineOptions options[] =
+ {
+ // { "+[URL]", I18N_NOOP( "Document to open" ), 0 },
+ KCmdLineLastOption
+ };
+
+int main(int argc, char **argv)
+{
+ KAboutData about("wlassistant", I18N_NOOP("Wireless Assistant"), version, description,
+ KAboutData::License_GPL, "(C) %{YEAR} Pawel Nawrocki", 0, 0, "pnawrocki@interia.pl");
+ about.addAuthor( "Pawel Nawrocki", 0, "pnawrocki@interia.pl" );
+ KCmdLineArgs::init(argc, argv, &about);
+ KCmdLineArgs::addCmdLineOptions( options );
+ KApplication app;
+ WirelessAssistant *mainWin = 0;
+ mainWin = new WirelessAssistant();
+ mainWin->setCaption( QString("%1 %2").arg(description).arg(version) );
+ app.setMainWidget( mainWin );
+ mainWin->show();
+
+ // mainWin has WDestructiveClose flag by default, so it will delete itself.
+ return app.exec();
+}
diff --git a/src/netlistviewitem.cpp b/src/netlistviewitem.cpp
new file mode 100644
index 0000000..a607eee
--- /dev/null
+++ b/src/netlistviewitem.cpp
@@ -0,0 +1,239 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Pawel Nawrocki *
+ * pnawrocki@interia.pl *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include "netlistviewitem.h"
+
+#include <iostream>
+
+#include <kiconloader.h>
+#include <kiconeffect.h>
+#include <kdeversion.h>
+
+void NetListViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment)
+{
+ /// HACK fixes: higher item (connected) is drawn using regular height upon widget change (widgetStack);
+ if ( height()!=mHeight )
+ setHeight( mHeight );
+
+ /// PREPARE COLORS ///
+ QColor bgColor, fgColor;
+ /// colors of selected item
+ if ( listView()->isSelected(this) ) {
+ bgColor = cg.color( QColorGroup::Highlight ); /// settings for selected item;
+ fgColor = cg.color( QColorGroup::HighlightedText );
+ /// colors of deselected item`
+ } else {
+ if (mConnected)
+ bgColor = cg.color( QColorGroup::Background);
+ else {
+#if KDE_IS_VERSION(3,4,0)
+ bgColor = ((KListViewItem*)this)->backgroundColor(column);
+#else
+
+ bgColor = ((KListViewItem*)this)->backgroundColor();
+#endif
+
+ }
+ fgColor = cg.color( QColorGroup::Text);
+ if (mQuality<8)
+ fgColor = fgColor.light();
+ }
+
+ /// DRAW BACKGROUND ///
+ p->fillRect(0,0,width,height(),bgColor);
+ if (mConnected) {
+ /// draw a line separating connectedItem from the rest of the list.
+ p->setPen( bgColor.dark(130) );
+ p->drawLine(0, height()-1, width, height()-1);
+ }
+
+ switch (column) {
+
+ /// DRAW QUALITY ///
+ case mQualityColumn: {
+ QPixmap qualityIcon = SmallIcon("knewstuff");
+ QPixmap qualityIconGray = KIconEffect().apply( qualityIcon, KIconEffect::ToGray, 1, Qt::black, true );
+ int barWidth = int(mQuality/8)*8;
+ if (mQuality>0)
+ barWidth+=8; //add 8 (half a star) b/c int rounds down.
+ if (barWidth>96)
+ barWidth=96;
+ int icoTop = int( ( this->height()-16 )/2 );
+ p->drawTiledPixmap(listView()->itemMargin(),icoTop,6*16, 16, qualityIconGray );
+ p->drawTiledPixmap(listView()->itemMargin(),icoTop,barWidth, 16, qualityIcon );
+ break;
+ }
+
+ /// DRAW ENCRYPTION ///
+ case mEncColumn: {
+ if (mEnc) {
+ int icoTop = int( ( this->height()-16 )/2 );
+ int icoLeft = int( ( width-listView()->itemMargin()-16 )/2 );
+ QPixmap encIcon = SmallIcon("encrypted");
+ p->drawPixmap(icoLeft,icoTop, encIcon );
+ }
+ break;
+ }
+
+ /// DRAW ESSID ///
+ case mEssidColumn: {
+ /// draw icon and its shadow.
+ if (mConnected) {
+ QPixmap connectedIcon;
+ connectedIcon = SmallIcon("forward");
+ int icoTop = int( ( this->height()-16 )/2 );
+ p->drawPixmap(listView()->itemMargin(),icoTop, connectedIcon );
+ }
+
+ QFont mFont = listView()->font();
+ if (mConnected)
+ mFont.setBold( true );
+ if (mHidden)
+ mFont.setItalic( true );
+ p->setFont( mFont );
+ /// draw shadow + essid name(not connected)
+ if (mConnected) {
+ p->setPen( bgColor.dark(130) );
+ p->drawText(16+(listView()->itemMargin()*2),0,width, height(), AlignVCenter, mEssid);
+ p->setPen( bgColor.dark(220) );
+ p->drawText(16+(listView()->itemMargin()*2)-1,-1,width, height(), AlignVCenter, mEssid);
+ p->setPen( fgColor );
+ p->drawText(16+(listView()->itemMargin()*2)-2,-2,width, height(), AlignVCenter, mEssid);
+
+ } else {
+ /// draw essid name (not connected)
+ p->setPen( fgColor );
+ p->drawText(listView()->itemMargin(),0,width, height(), AlignVCenter, mEssid);
+ }
+ break;
+ }
+
+ /// DRAW CHANNEL ///
+ case mChanColumn: {
+ QFont mFont = listView()->font();
+ mFont.setItalic(true);
+ if (mConnected)
+ mFont.setBold( true );
+ p->setFont( mFont );
+ if (mConnected) {
+ p->setPen( bgColor.dark(130) );
+ p->drawText(listView()->itemMargin(),0,width, height(), AlignCenter, mChannel);
+ p->setPen( bgColor.dark(220) );
+ p->drawText(listView()->itemMargin()-1,-1,width, height(), AlignCenter, mChannel);
+ } else {
+ p->setPen( bgColor.dark(220) );
+ p->drawText(listView()->itemMargin(),0,width, height(), AlignCenter, mChannel);
+ }
+ break;
+ }
+ /// DRAW ACCESS POINT ///
+ case mAPColumn: {
+ QFont mFont = listView()->font();
+ if (mHidden)
+ mFont.setItalic( true );
+ if (mConnected)
+ mFont.setBold( true );
+ p->setFont( mFont );
+ if (mConnected) {
+ p->setPen( bgColor.dark(130) );
+ p->drawText(listView()->itemMargin(),0,width, height(), AlignVCenter, mAP);
+ p->setPen( bgColor.dark(220) );
+ p->drawText(listView()->itemMargin()-1,-1,width, height(), AlignVCenter, mAP);
+
+ } else {
+ p->setPen( bgColor.dark(220) );
+ p->drawText(listView()->itemMargin(),0,width, height(), AlignVCenter, mAP);
+ }
+ break;
+ }
+
+ default:
+ KListViewItem::paintCell(p, cg, column, width, alignment);
+
+ } //switch
+}
+
+int NetListViewItem::width(const QFontMetrics &fm, const QListView *lv, int column) const
+{
+ int w;
+ QFont mFont = listView()->font();
+ if (mConnected)
+ mFont.setBold(true);
+ if (mHidden)
+ mFont.setItalic(true);
+ QFontMetrics mFm( mFont );
+
+ if (column == mQualityColumn)
+ w = 6*16 + (lv->itemMargin()*2);
+ else if (column == mEncColumn)
+ w = 16 + (lv->itemMargin()*2);
+ else if (column == mChanColumn)
+ w = mFm.width( mChannel ) + (lv->itemMargin()*2);
+ else if (column == mEssidColumn)
+ w = mFm.width( mEssid ) + (lv->itemMargin()*2);
+ else if (column == mAPColumn)
+ w = mFm.width( mAP ) + (lv->itemMargin()*2);
+ /*else if (column == mModeColumn)
+ w = fm.width( mMode ) + (lv->itemMargin()*2);*/
+
+ else
+ w = 0;
+
+ int headerw = fm.width( listView()->columnText(column) ) + (lv->itemMargin()*2);
+ if (w < headerw)
+ w = headerw;
+
+ return w;
+}
+
+QString NetListViewItem::key( int column, bool ascending ) const
+{
+ if (mConnected) { // make sure that connected item is always 1st.
+ if (ascending)
+ return "0";
+ else
+ return "ZZZ";
+ }
+ QString t = QString::null;
+ if (column == mQualityColumn) {
+ t = QString::number( mQuality );
+ if (mQuality < 10)
+ t.prepend("0");
+ } else if (column == mEncColumn) {
+ if (mEnc)
+ t = "1";
+ else
+ t="0";
+ } else if (column == mEssidColumn) {
+ t = mEssid.upper(); // add .upper() to make it case-insensitive;
+ } else if (column == mChanColumn) {
+ t = mChannel;
+ if ( mChannel.length() == 1 )
+ t.prepend("0");
+ } else if (column == mAPColumn) {
+ t = mAP.upper();
+ /*} else if (column == mModeColumn) {
+ t = mMode.upper();*/
+
+ }
+
+
+ return t;
+}
diff --git a/src/netlistviewitem.h b/src/netlistviewitem.h
new file mode 100644
index 0000000..6410c86
--- /dev/null
+++ b/src/netlistviewitem.h
@@ -0,0 +1,176 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Pawel Nawrocki *
+ * pnawrocki@interia.pl *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef WA_NETLISTVIEWITEM_H
+#define WA_NETLISTVIEWITEM_H
+
+#include <iostream>
+
+#include <qpainter.h>
+
+#include <klistview.h>
+#include <kmessagebox.h>
+
+class NetListViewItem : public KListViewItem
+{
+public:
+ //NetListViewItem(KListView *parent) : KListViewItem(parent) {}
+ //NetListViewItem(KListView *parent, KListViewItem *after) : KListViewItem(parent, after) {}
+ //NetListViewItem(KListView *parent, KListViewItem *after, QString essid, QString mode) : KListViewItem(parent, after, essid, mode) {}
+ NetListViewItem(KListView *parent, QString essid, QString chan, int quality, bool enc, QString ap, bool hidden, bool connected = 0 )
+ : KListViewItem(parent, QString::null, QString::null, QString::null, QString::null, QString::null)
+ {
+ mEssid = essid;
+ mChannel = chan;
+ //mMode = mode;
+ mQuality = quality;
+ mEnc = enc;
+ mAP = ap;
+ mHidden = hidden;
+ mConnected = connected;
+ mHeight = height();
+ mWpaSettings = QStringList();
+ }
+
+ ~NetListViewItem()
+ {}
+
+ void setEssid(const QString& theValue)
+ {
+ mEssid = theValue;
+ setText(mEssidColumn, mEssid);
+ //update();
+ }
+ QString essid() const
+ {
+ return mEssid;
+ }
+
+ void setChannel(const QString& theValue)
+ {
+ if ( mChannel != theValue ) { //repaint only if difference visible in quality stars
+ mChannel = theValue;
+ repaint();
+ }
+ }
+
+
+ QString channel() const
+ {
+ return mChannel;
+ }
+
+ /*QString mode() const
+ {
+ return mMode;
+ }*/
+
+ bool enc() const
+ {
+ return mEnc;
+ }
+
+ QString ap() const
+ {
+ return mAP;
+ }
+
+ void setAp(const QString& ap) {
+ mAP = ap;
+ setText(mAPColumn, mAP);
+ }
+
+ bool hidden() const
+ {
+ return mHidden;
+ }
+
+ void setConnected(bool theValue)
+ {
+ mConnected = theValue;
+ if (mConnected)
+ mHeight+=10;
+ else {
+ mHeight-=10;
+ }
+ setHeight( mHeight );
+ repaint();
+ }
+
+
+ bool isConnected() const
+ {
+ return mConnected;
+ }
+
+ void setQuality(const int& theValue)
+ {
+ if ( int(mQuality/8) != int(theValue/8) ) { //repaint only if difference visible in quality stars
+ mQuality = theValue;
+ repaint();
+ } else
+ mQuality = theValue;
+ }
+
+ int quality() const
+ {
+ return mQuality;
+ }
+
+ void setWpaSettings(const QStringList& theValue)
+ {
+ mWpaSettings = theValue;
+ }
+
+
+ QStringList wpaSettings() const
+ {
+ return mWpaSettings;
+ }
+
+
+
+
+
+private:
+ virtual void paintCell (QPainter *p, const QColorGroup &cg, int column, int width, int alignment);
+ virtual int width(const QFontMetrics &fm, const QListView *lv, int column) const;
+ virtual QString key( int column, bool ascending ) const;
+
+ QString mEssid;
+ QString mChannel;
+ //QString mMode;
+ int mQuality;
+ bool mEnc;
+ QString mAP;
+ bool mHidden;
+ bool mConnected;
+ int mHeight;
+ QStringList mWpaSettings;
+
+ static const int mEssidColumn = 0;
+ static const int mChanColumn = 1;
+ static const int mQualityColumn = 2;
+ static const int mEncColumn = 3;
+ static const int mAPColumn = 4;
+
+};
+
+#endif // WA_NETLISTVIEWITEM_H
diff --git a/src/netparams.h b/src/netparams.h
new file mode 100644
index 0000000..3ec8352
--- /dev/null
+++ b/src/netparams.h
@@ -0,0 +1,289 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Pawel Nawrocki *
+ * pnawrocki@interia.pl *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef WA_NETPARAMS_H
+#define WA_NETPARAMS_H
+
+#include <iostream>
+#include <qfile.h>
+#include <kmessagebox.h>
+#include <klocale.h>
+
+class WANetParams
+{
+public:
+ QString iface;
+ QString essid;
+ //QString mode;
+ QString channel;
+ QString ap;
+ bool wep;
+ QString wepMode;
+ QString wepKey;
+ bool wpa;
+ QStringList wpaSettings;
+ QString wpaKey;
+
+ bool dhcp;
+ QString ip;
+ QString netmask;
+ QString broadcast;
+ QString gateway;
+ QString domain;
+ QString dns1;
+ QString dns2;
+
+ bool hiddenEssid;
+ bool wasHiddenEssid;
+ bool wasWep;
+
+ QString preConnectionCommand;
+ QString postConnectionCommand;
+ QString preDisconnectionCommand;
+ QString postDisconnectionCommand;
+ int preConnectionTimeout;
+ int postConnectionTimeout;
+ int preDisconnectionTimeout;
+ int postDisconnectionTimeout;
+ bool preConnectionDetached;
+ bool postConnectionDetached;
+ bool preDisconnectionDetached;
+ bool postDisconnectionDetached;
+
+ bool review()
+ {
+ bool r = false; //DEFAULTS TO 'no review needed'
+ if (wep)
+ if ( (wepMode.isEmpty()) || (wepKey.isEmpty()) ) {
+ if (!wasWep) {
+ KMessageBox::information(0, i18n("<qt><p>The network changed its security settings.</p><p>Please go to <i>Security</i> tab of the following dialog and configure WEP settings.</p></qt>") );
+ } else
+ KMessageBox::error(0, i18n("<qt><p>Your WEP Key is not set properly.</p><p>Please go to <i>Security</i> tab of the following dialog and enter the required key.</p></qt>") );
+ r = true;
+ }
+ if ( (hiddenEssid) && (!wasHiddenEssid) )
+ if ( KMessageBox::questionYesNo(0, i18n("<qt><p>The network has stopped broadcasting its ESSID since the last time you were connected.</p><p>Would you like to use '<b>%1</b>' as an ESSID for this network?</p><p><i>NOTE: If you answer No, a dialog will appear where you will be able to specify a different ESSID.</i></p></qt>").arg(essid) ) != 3 ) // !=YES
+ r = true;
+
+ wasHiddenEssid = hiddenEssid;
+ wasWep = wep;
+ return r;
+ }
+
+ QString netParamsString()
+ {
+ QStringList mNPS;
+ mNPS << boolToString(hiddenEssid) << essid << ap << channel << boolToString(wep) << wepMode << wepKey << boolToString(dhcp) << ip << netmask << broadcast << gateway << domain << dns1 << dns2 << boolToString(wasHiddenEssid) << boolToString(wasWep) << \
+ preConnectionCommand << QString::number(preConnectionTimeout) << boolToString(preConnectionDetached) << \
+ postConnectionCommand << QString::number(postConnectionTimeout) << boolToString(postConnectionDetached) << \
+ preDisconnectionCommand << QString::number(preDisconnectionTimeout) << boolToString(preDisconnectionDetached) << \
+ postDisconnectionCommand << QString::number(postDisconnectionTimeout) << boolToString(postDisconnectionDetached) << \
+ wpaSettings.join(",") << wpaKey;
+ return mNPS.join(",");
+ }
+
+ void loadNetParamsString( const QString & nps )
+ {
+ /*if (nps.section(",",0,0)=="true")
+ hiddenEssid=true;
+ else
+ hiddenEssid=false;*/ // COMMENTED OUT because hiddenEssid boolean is set from the list item
+ essid = nps.section(",",1,1);
+ ap = nps.section(",",2,2);
+ //channel = nps.section(",",3,3); COMMENTED OUT because channel is set from the list item
+ /*if (nps.section(",",4,4)=="true")
+ wep=true;
+ else
+ wep=false;*/ // COMMENTED OUT because wep boolean is set from the list item
+ wepMode = nps.section(",",5,5);
+ wepKey = nps.section(",",6,6);
+ dhcp = ( nps.section(",",7,7) == "true" );
+ ip = nps.section(",",8,8);
+ netmask = nps.section(",",9,9);
+ broadcast = nps.section(",",10,10);
+ gateway = nps.section(",",11,11);
+ domain = nps.section(",",12,12);
+ dns1 = nps.section(",",13,13);
+ dns2 = nps.section(",",14,14);
+ wasHiddenEssid = ( nps.section(",",15,15)=="true" );
+ wasWep = ( nps.section(",",16,16)=="true" );
+
+ preConnectionCommand = nps.section(",",17,17);
+ preConnectionTimeout = nps.section(",",18,18).toInt();
+ preConnectionDetached = ( nps.section(",",19,19) == "true" );
+
+ postConnectionCommand = nps.section(",",20,20);
+ postConnectionTimeout = nps.section(",",21,21).toInt();
+ postConnectionDetached = ( nps.section(",",22,22) == "true" );
+
+ preDisconnectionCommand = nps.section(",",23,23);
+ preDisconnectionTimeout = nps.section(",",24,24).toInt();
+ preDisconnectionDetached = ( nps.section(",",25,25) == "true" );
+
+ postDisconnectionCommand = nps.section(",",26,26);
+ postDisconnectionTimeout = nps.section(",",27,27).toInt();
+ postDisconnectionDetached = ( nps.section(",",28,28) == "true" );
+ wpaSettings = QStringList::split( ",", nps.section(",",29,32) ); // 4 fields
+ wpaKey = nps.section(",",33,33);
+
+ }
+private:
+ QString boolToString( bool b )
+ {
+ QString result;
+ b ? result = "true" : result = "false";
+ return result;
+ }
+};
+
+class WACommands
+{
+public:
+ bool allFound;
+ QStringList notFound;
+
+ void init()
+ {
+ QStringList binDirs;
+ binDirs << "/sbin" << "/usr/sbin" << "/usr/local/sbin" << "/bin" << "/usr/bin" << "/usr/local/bin";
+
+ wpa_supplicant = getPath("wpa_supplicant", binDirs);
+ wpa_cli = getPath("wpa_cli", binDirs);
+ dhcp = getPath("dhcpcd", binDirs); //these 2 checks have to be first, so allFound flag is properly set.
+ if (dhcp.isEmpty())
+ dhcp = getPath("dhclient", binDirs);
+ if (!dhcp.isEmpty()) {
+ allFound=1;
+ dhcpClient = dhcp.section("/",-1,-1);
+ std::cout << "DHCP Client: " << dhcpClient << std::endl;
+ }
+
+ ifconfig = getPath("ifconfig", binDirs);
+ iwconfig = getPath("iwconfig", binDirs);
+ iwlist = getPath("iwlist", binDirs);
+ route = getPath("route", binDirs);
+ pidof = getPath("pidof", binDirs);
+
+ if (!allFound)
+ std::cout << "Executable(s) not found:" << notFound.join(", ") << std::endl;
+ else
+ std::cout << "All executables found." << std::endl;
+ }
+
+ QStringList cmd( const QString & action, const WANetParams & np, const bool & quiet = false )
+ {
+ QStringList mCmd;
+
+ /*if (action=="ifup")
+ mCmd << ifconfig << np.iface << "up";
+
+ else if (action=="ifdown")
+ mCmd << ifconfig << np.iface << "down";
+
+ else*/ if (action=="radio_on")
+ mCmd << iwconfig << np.iface << "txpower" << "auto";
+
+ else if (action=="scan")
+ mCmd << iwlist << np.iface << "scan";
+
+ else if (action=="disconnect")
+ mCmd << iwconfig << np.iface << "mode" << "managed" << "key" << "off" << "ap" << "off" << "essid" << "off";
+
+ else if (action=="iwconfig_set") {
+ mCmd << iwconfig << np.iface << "mode" << "managed";
+ if (np.channel.toInt()>0)
+ mCmd << "channel" << np.channel;
+ mCmd << "key";
+ if (np.wep && !np.wepKey.isEmpty())
+ mCmd << np.wepMode << np.wepKey;
+ else
+ mCmd << "off";
+ mCmd << "essid" << np.essid;
+
+ } else if (action=="iwconfig_ap") {
+ mCmd << iwconfig << np.iface << "ap" << np.ap;
+
+ } else if (action=="ifconfig_dhcp") {
+ if (dhcpClient=="dhcpcd")
+ mCmd << dhcp << "-nd" << np.iface;
+ else if (dhcpClient=="dhclient")
+ mCmd << dhcp << np.iface; // << "-1" << "-q"
+
+ } else if (action=="kill_dhcp") {
+ if ( dhcpClient=="dhcpcd") //dhcpcd
+ mCmd << dhcp << "-k" << np.iface;
+ else //dhclient
+ mCmd << dhcp << "-r" << np.iface;
+
+ } else if (action=="ifconfig_manual") {
+ mCmd << ifconfig << np.iface << np.ip;
+ if (!np.netmask.isEmpty())
+ mCmd << "netmask" << np.netmask;
+ if (!np.broadcast.isEmpty())
+ mCmd << "broadcast" << np.broadcast;
+
+ } else if (action=="route_add") {
+ if (!np.gateway.isEmpty())
+ mCmd << route << "add" << "default" << "gw" << np.gateway;
+
+ } else if (action=="route_del") {
+ if (!np.gateway.isEmpty())
+ mCmd << route << "del" << "default" << "gw" << np.gateway;
+
+ } else
+ std::cout << "Unknown action: " << action << std::endl;
+
+ if ( (!mCmd.isEmpty()) && (!quiet) ) {//mCmd = QStringList();
+ QString mCmdString = mCmd.join(" ");
+ if (!np.wepKey.isEmpty()) mCmdString.replace(np.wepKey, "xxxxxxxxxx");
+ std::cout << action << ": " << mCmdString << std::endl;
+ }
+ return mCmd;
+ }
+
+ QString route;
+ QString dhcpClient;
+ QString wpa_supplicant;
+ QString wpa_cli;
+private:
+ QString ifconfig;
+ QString iwconfig;
+ QString iwlist;
+ QString dhcp;
+ QString pidof;
+
+ QString getPath(QString file, QStringList dirs)
+ {
+ QString s;
+ for ( QStringList::Iterator it = dirs.begin(); it != dirs.end(); it++ ) {
+ if (QFile( QString(*it+"/"+file) ).exists()) {
+ s = QString(*it+"/"+file);
+ break;
+ }
+ }
+ if (s.isEmpty()) {
+ allFound = 0;
+ notFound << file;
+ }
+ return s;
+ }
+};
+
+#endif //WA_NETPARAMS_H
diff --git a/src/ui_NetParamsEdit.ui b/src/ui_NetParamsEdit.ui
new file mode 100644
index 0000000..b10b5f3
--- /dev/null
+++ b/src/ui_NetParamsEdit.ui
@@ -0,0 +1,1111 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>netProperties</class>
+<widget class="QDialog">
+<property name="name">
+<cstring>netProperties</cstring>
+</property>
+<property name="geometry">
+<rect>
+<x>0</x>
+<y>0</y>
+<width>420</width>
+<height>504</height>
+</rect>
+</property>
+<property name="sizePolicy">
+<sizepolicy>
+<hsizetype>5</hsizetype>
+<vsizetype>1</vsizetype>
+<horstretch>0</horstretch>
+<verstretch>0</verstretch>
+</sizepolicy>
+</property>
+<property name="caption">
+<string>Properties</string>
+</property>
+<property name="sizeGripEnabled">
+<bool>false</bool>
+</property>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<property name="margin">
+<number>11</number>
+</property>
+<property name="spacing">
+<number>6</number>
+</property>
+<widget class="QLayoutWidget" row="1" column="0">
+<property name="name">
+<cstring>Layout1</cstring>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<property name="margin">
+<number>0</number>
+</property>
+<property name="spacing">
+<number>6</number>
+</property>
+<widget class="QPushButton">
+<property name="name">
+<cstring>buttonHelp</cstring>
+</property>
+<property name="text">
+<string>&amp;Help</string>
+</property>
+<property name="accel">
+<string>F1</string>
+</property>
+<property name="autoDefault">
+<bool>true</bool>
+</property>
+</widget>
+<spacer>
+<property name="name">
+<cstring>Horizontal Spacing2</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>20</width>
+<height>20</height>
+</size>
+</property>
+</spacer>
+<widget class="QPushButton">
+<property name="name">
+<cstring>buttonOk</cstring>
+</property>
+<property name="text">
+<string>&amp;OK</string>
+</property>
+<property name="accel">
+<string></string>
+</property>
+<property name="autoDefault">
+<bool>true</bool>
+</property>
+<property name="default">
+<bool>true</bool>
+</property>
+</widget>
+<widget class="QPushButton">
+<property name="name">
+<cstring>buttonCancel</cstring>
+</property>
+<property name="text">
+<string>&amp;Cancel</string>
+</property>
+<property name="accel">
+<string></string>
+</property>
+<property name="autoDefault">
+<bool>true</bool>
+</property>
+</widget>
+</hbox>
+</widget>
+<widget class="QTabWidget" row="0" column="0">
+<property name="name">
+<cstring>tabNetParams</cstring>
+</property>
+<widget class="QWidget">
+<property name="name">
+<cstring>tabInterface</cstring>
+</property>
+<attribute name="title">
+<string>I&amp;nterface</string>
+</attribute>
+<vbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QGroupBox">
+<property name="name">
+<cstring>boxEssid</cstring>
+</property>
+<property name="sizePolicy">
+<sizepolicy>
+<hsizetype>5</hsizetype>
+<vsizetype>1</vsizetype>
+<horstretch>0</horstretch>
+<verstretch>0</verstretch>
+</sizepolicy>
+</property>
+<property name="title">
+<string>ESSID</string>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel1</cstring>
+</property>
+<property name="text">
+<string>ESSID:</string>
+</property>
+</widget>
+<widget class="QLineEdit">
+<property name="name">
+<cstring>essid</cstring>
+</property>
+</widget>
+</hbox>
+</widget>
+<widget class="QButtonGroup">
+<property name="name">
+<cstring>buttonGroup1</cstring>
+</property>
+<property name="sizePolicy">
+<sizepolicy>
+<hsizetype>5</hsizetype>
+<vsizetype>3</vsizetype>
+<horstretch>0</horstretch>
+<verstretch>0</verstretch>
+</sizepolicy>
+</property>
+<property name="title">
+<string>Configuration</string>
+</property>
+<vbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLayoutWidget">
+<property name="name">
+<cstring>layout3</cstring>
+</property>
+<vbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QRadioButton">
+<property name="name">
+<cstring>radioDhcp</cstring>
+</property>
+<property name="text">
+<string>Automatic (DHCP)</string>
+</property>
+</widget>
+<widget class="QRadioButton">
+<property name="name">
+<cstring>radioManualConfig</cstring>
+</property>
+<property name="text">
+<string>&amp;Manual</string>
+</property>
+</widget>
+</vbox>
+</widget>
+<widget class="QFrame">
+<property name="name">
+<cstring>boxManualConfig</cstring>
+</property>
+<property name="frameShape">
+<enum>NoFrame</enum>
+</property>
+<property name="frameShadow">
+<enum>Raised</enum>
+</property>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLineEdit" row="2" column="1">
+<property name="name">
+<cstring>netmask</cstring>
+</property>
+</widget>
+<widget class="QLabel" row="2" column="0">
+<property name="name">
+<cstring>textLabel4</cstring>
+</property>
+<property name="text">
+<string>Netmask:</string>
+</property>
+</widget>
+<widget class="QLineEdit" row="0" column="1">
+<property name="name">
+<cstring>ip</cstring>
+</property>
+</widget>
+<widget class="QLineEdit" row="4" column="1">
+<property name="name">
+<cstring>domain</cstring>
+</property>
+</widget>
+<widget class="QLabel" row="0" column="0">
+<property name="name">
+<cstring>textLabel2</cstring>
+</property>
+<property name="text">
+<string>IP:</string>
+</property>
+</widget>
+<widget class="QLabel" row="1" column="0">
+<property name="name">
+<cstring>textLabel3</cstring>
+</property>
+<property name="text">
+<string>Broadcast:</string>
+</property>
+</widget>
+<widget class="QLabel" row="3" column="0">
+<property name="name">
+<cstring>textLabel5</cstring>
+</property>
+<property name="text">
+<string>Gateway:</string>
+</property>
+</widget>
+<widget class="QLineEdit" row="5" column="1">
+<property name="name">
+<cstring>dns1</cstring>
+</property>
+</widget>
+<widget class="QLabel" row="4" column="0">
+<property name="name">
+<cstring>textLabel6</cstring>
+</property>
+<property name="text">
+<string>Domain:</string>
+</property>
+</widget>
+<widget class="QLineEdit" row="1" column="1">
+<property name="name">
+<cstring>broadcast</cstring>
+</property>
+</widget>
+<widget class="QLineEdit" row="3" column="1">
+<property name="name">
+<cstring>gateway</cstring>
+</property>
+</widget>
+<widget class="QLineEdit" row="6" column="1">
+<property name="name">
+<cstring>dns2</cstring>
+</property>
+</widget>
+<widget class="QLabel" row="6" column="0">
+<property name="name">
+<cstring>textLabel8</cstring>
+</property>
+<property name="text">
+<string>Secondary DNS:</string>
+</property>
+</widget>
+<widget class="QLabel" row="5" column="0">
+<property name="name">
+<cstring>textLabel7</cstring>
+</property>
+<property name="text">
+<string>Primary DNS:</string>
+</property>
+</widget>
+</grid>
+</widget>
+</vbox>
+</widget>
+<spacer>
+<property name="name">
+<cstring>spacer2</cstring>
+</property>
+<property name="orientation">
+<enum>Vertical</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>20</width>
+<height>21</height>
+</size>
+</property>
+</spacer>
+</vbox>
+</widget>
+<widget class="QWidget">
+<property name="name">
+<cstring>tabSecurity</cstring>
+</property>
+<attribute name="title">
+<string>Securit&amp;y</string>
+</attribute>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<spacer row="2" column="0">
+<property name="name">
+<cstring>spacer3</cstring>
+</property>
+<property name="orientation">
+<enum>Vertical</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>21</width>
+<height>40</height>
+</size>
+</property>
+</spacer>
+<widget class="QButtonGroup" row="1" column="0">
+<property name="name">
+<cstring>groupWpa</cstring>
+</property>
+<property name="title">
+<string>WPA Settings</string>
+</property>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLayoutWidget" row="1" column="0">
+<property name="name">
+<cstring>layout33</cstring>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel1_2_2</cstring>
+</property>
+<property name="sizePolicy">
+<sizepolicy>
+<hsizetype>1</hsizetype>
+<vsizetype>5</vsizetype>
+<horstretch>0</horstretch>
+<verstretch>0</verstretch>
+</sizepolicy>
+</property>
+<property name="text">
+<string>Key:</string>
+</property>
+</widget>
+<widget class="QLineEdit">
+<property name="name">
+<cstring>wpaKey</cstring>
+</property>
+<property name="echoMode">
+<enum>Password</enum>
+</property>
+</widget>
+<widget class="QCheckBox">
+<property name="name">
+<cstring>checkWpaAscii</cstring>
+</property>
+<property name="text">
+<string>ASCII</string>
+</property>
+</widget>
+</hbox>
+</widget>
+<widget class="QLayoutWidget" row="0" column="0">
+<property name="name">
+<cstring>layout34</cstring>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel1_3_5</cstring>
+</property>
+<property name="sizePolicy">
+<sizepolicy>
+<hsizetype>3</hsizetype>
+<vsizetype>5</vsizetype>
+<horstretch>0</horstretch>
+<verstretch>0</verstretch>
+</sizepolicy>
+</property>
+<property name="text">
+<string>WPA Version:&lt;br&gt;Group Cipher:&lt;br&gt;Pairwise Cipher:&lt;br&gt;Authentication Suite:</string>
+</property>
+</widget>
+<widget class="QLabel">
+<property name="name">
+<cstring>labelWpaSettings</cstring>
+</property>
+<property name="sizePolicy">
+<sizepolicy>
+<hsizetype>1</hsizetype>
+<vsizetype>5</vsizetype>
+<horstretch>0</horstretch>
+<verstretch>0</verstretch>
+</sizepolicy>
+</property>
+<property name="text">
+<string>&lt;b&gt;?&lt;br&gt;?&lt;br&gt;?&lt;br&gt;?&lt;/b&gt;</string>
+</property>
+</widget>
+<spacer>
+<property name="name">
+<cstring>spacer71</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>131</width>
+<height>21</height>
+</size>
+</property>
+</spacer>
+</hbox>
+</widget>
+</grid>
+</widget>
+<widget class="QButtonGroup" row="0" column="0">
+<property name="name">
+<cstring>groupWep</cstring>
+</property>
+<property name="title">
+<string>WEP Settings</string>
+</property>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QRadioButton" row="0" column="0">
+<property name="name">
+<cstring>radioWepOpen</cstring>
+</property>
+<property name="text">
+<string>Open Syste&amp;m</string>
+</property>
+<property name="accel">
+<string>Alt+M</string>
+</property>
+</widget>
+<widget class="QLayoutWidget" row="2" column="0">
+<property name="name">
+<cstring>layout35</cstring>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel1_2</cstring>
+</property>
+<property name="sizePolicy">
+<sizepolicy>
+<hsizetype>1</hsizetype>
+<vsizetype>5</vsizetype>
+<horstretch>0</horstretch>
+<verstretch>0</verstretch>
+</sizepolicy>
+</property>
+<property name="text">
+<string>Key:</string>
+</property>
+</widget>
+<widget class="QLineEdit">
+<property name="name">
+<cstring>wepKey</cstring>
+</property>
+<property name="echoMode">
+<enum>Password</enum>
+</property>
+</widget>
+<widget class="QCheckBox">
+<property name="name">
+<cstring>checkWepAscii</cstring>
+</property>
+<property name="text">
+<string>ASCII</string>
+</property>
+</widget>
+</hbox>
+</widget>
+<widget class="QRadioButton" row="1" column="0">
+<property name="name">
+<cstring>radioWepRestricted</cstring>
+</property>
+<property name="text">
+<string>Shared &amp;Key</string>
+</property>
+<property name="accel">
+<string>Alt+K</string>
+</property>
+</widget>
+</grid>
+</widget>
+</grid>
+</widget>
+<widget class="QWidget">
+<property name="name">
+<cstring>tabAdvanced</cstring>
+</property>
+<attribute name="title">
+<string>Advanced</string>
+</attribute>
+<vbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel1_4</cstring>
+</property>
+<property name="text">
+<string>&lt;b&gt;Security Warning:&lt;/b&gt; the commands specified below will be ran with the same privileges as Wireless Assistant has.</string>
+</property>
+</widget>
+<widget class="QGroupBox">
+<property name="name">
+<cstring>groupBox3</cstring>
+</property>
+<property name="title">
+<string>Pre-Connection Command</string>
+</property>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLayoutWidget" row="1" column="0">
+<property name="name">
+<cstring>layout6</cstring>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<spacer>
+<property name="name">
+<cstring>spacer7</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>130</width>
+<height>20</height>
+</size>
+</property>
+</spacer>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel1_3</cstring>
+</property>
+<property name="text">
+<string>Timeout:</string>
+</property>
+</widget>
+<widget class="QSpinBox">
+<property name="name">
+<cstring>preConnectionTimeout</cstring>
+</property>
+<property name="suffix">
+<string>s</string>
+</property>
+<property name="maxValue">
+<number>60</number>
+</property>
+<property name="minValue">
+<number>1</number>
+</property>
+<property name="value">
+<number>20</number>
+</property>
+<property name="toolTip" stdset="0">
+<string>Amount of time after which the process will be killed.</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Timeout&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;This option specifies how long should Wireless Assistant wait for the process to finish, before it will be killed.&lt;/p&gt;</string>
+</property>
+</widget>
+<widget class="QCheckBox">
+<property name="name">
+<cstring>preConnectionDetached</cstring>
+</property>
+<property name="text">
+<string>Run detached</string>
+</property>
+<property name="toolTip" stdset="0">
+<string>Don't wait for the process to finish.</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Run Detached&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;If this checkbox is selected Wireless Assistant will not wait for the process to finish.&lt;/p&gt;</string>
+</property>
+</widget>
+</hbox>
+</widget>
+<widget class="QLayoutWidget" row="0" column="0">
+<property name="name">
+<cstring>layout7</cstring>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel1_3_2</cstring>
+</property>
+<property name="text">
+<string>Command:</string>
+</property>
+</widget>
+<widget class="QLineEdit">
+<property name="name">
+<cstring>preConnectionCommand</cstring>
+</property>
+</widget>
+</hbox>
+</widget>
+</grid>
+</widget>
+<widget class="QGroupBox">
+<property name="name">
+<cstring>groupBox3_2</cstring>
+</property>
+<property name="title">
+<string>Post-Connection Command</string>
+</property>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLayoutWidget" row="1" column="0">
+<property name="name">
+<cstring>layout6_2</cstring>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<spacer>
+<property name="name">
+<cstring>spacer7_2</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>130</width>
+<height>20</height>
+</size>
+</property>
+</spacer>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel1_3_3</cstring>
+</property>
+<property name="text">
+<string>Timeout:</string>
+</property>
+</widget>
+<widget class="QSpinBox">
+<property name="name">
+<cstring>postConnectionTimeout</cstring>
+</property>
+<property name="suffix">
+<string>s</string>
+</property>
+<property name="maxValue">
+<number>60</number>
+</property>
+<property name="minValue">
+<number>1</number>
+</property>
+<property name="value">
+<number>20</number>
+</property>
+<property name="toolTip" stdset="0">
+<string>Amount of time after which the process will be killed.</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Timeout&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;This option specifies how long should Wireless Assistant wait for the process to finish, before it will be killed.&lt;/p&gt;</string>
+</property>
+</widget>
+<widget class="QCheckBox">
+<property name="name">
+<cstring>postConnectionDetached</cstring>
+</property>
+<property name="text">
+<string>Run detached</string>
+</property>
+<property name="toolTip" stdset="0">
+<string>Don't wait for the process to finish.</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Run Detached&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;If this checkbox is selected Wireless Assistant will not wait for the process to finish.&lt;/p&gt;</string>
+</property>
+</widget>
+</hbox>
+</widget>
+<widget class="QLayoutWidget" row="0" column="0">
+<property name="name">
+<cstring>layout7_2</cstring>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel1_3_2_2</cstring>
+</property>
+<property name="text">
+<string>Command:</string>
+</property>
+</widget>
+<widget class="QLineEdit">
+<property name="name">
+<cstring>postConnectionCommand</cstring>
+</property>
+</widget>
+</hbox>
+</widget>
+</grid>
+</widget>
+<widget class="QGroupBox">
+<property name="name">
+<cstring>groupBox3_3</cstring>
+</property>
+<property name="title">
+<string>Pre-Disconnection Command</string>
+</property>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLayoutWidget" row="1" column="0">
+<property name="name">
+<cstring>layout6_3</cstring>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<spacer>
+<property name="name">
+<cstring>spacer7_3</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>130</width>
+<height>20</height>
+</size>
+</property>
+</spacer>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel1_3_4</cstring>
+</property>
+<property name="text">
+<string>Timeout:</string>
+</property>
+</widget>
+<widget class="QSpinBox">
+<property name="name">
+<cstring>preDisconnectionTimeout</cstring>
+</property>
+<property name="suffix">
+<string>s</string>
+</property>
+<property name="maxValue">
+<number>60</number>
+</property>
+<property name="minValue">
+<number>1</number>
+</property>
+<property name="value">
+<number>20</number>
+</property>
+<property name="toolTip" stdset="0">
+<string>Amount of time after which the process will be killed.</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Timeout&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;This option specifies how long should Wireless Assistant wait for the process to finish, before it will be killed.&lt;/p&gt;</string>
+</property>
+</widget>
+<widget class="QCheckBox">
+<property name="name">
+<cstring>preDisconnectionDetached</cstring>
+</property>
+<property name="text">
+<string>Run detached</string>
+</property>
+<property name="toolTip" stdset="0">
+<string>Don't wait for the process to finish.</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Run Detached&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;If this checkbox is selected Wireless Assistant will not wait for the process to finish.&lt;/p&gt;</string>
+</property>
+</widget>
+</hbox>
+</widget>
+<widget class="QLayoutWidget" row="0" column="0">
+<property name="name">
+<cstring>layout7_3</cstring>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel1_3_2_3</cstring>
+</property>
+<property name="text">
+<string>Command:</string>
+</property>
+</widget>
+<widget class="QLineEdit">
+<property name="name">
+<cstring>preDisconnectionCommand</cstring>
+</property>
+</widget>
+</hbox>
+</widget>
+</grid>
+</widget>
+<widget class="QGroupBox">
+<property name="name">
+<cstring>groupBox3_3_2</cstring>
+</property>
+<property name="title">
+<string>Post-Disconnection Command</string>
+</property>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLayoutWidget" row="1" column="0">
+<property name="name">
+<cstring>layout6_3_2</cstring>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<spacer>
+<property name="name">
+<cstring>spacer7_3_2</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>130</width>
+<height>20</height>
+</size>
+</property>
+</spacer>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel1_3_4_2</cstring>
+</property>
+<property name="text">
+<string>Timeout:</string>
+</property>
+</widget>
+<widget class="QSpinBox">
+<property name="name">
+<cstring>postDisconnectionTimeout</cstring>
+</property>
+<property name="suffix">
+<string>s</string>
+</property>
+<property name="maxValue">
+<number>60</number>
+</property>
+<property name="minValue">
+<number>1</number>
+</property>
+<property name="value">
+<number>20</number>
+</property>
+<property name="toolTip" stdset="0">
+<string>Amount of time after which the process will be killed.</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Timeout&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;This option specifies how long should Wireless Assistant wait for the process to finish, before it will be killed.&lt;/p&gt;</string>
+</property>
+</widget>
+<widget class="QCheckBox">
+<property name="name">
+<cstring>postDisconnectionDetached</cstring>
+</property>
+<property name="text">
+<string>Run detached</string>
+</property>
+<property name="toolTip" stdset="0">
+<string>Don't wait for the process to finish.</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Run Detached&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;If this checkbox is selected Wireless Assistant will not wait for the process to finish.&lt;/p&gt;</string>
+</property>
+</widget>
+</hbox>
+</widget>
+<widget class="QLayoutWidget" row="0" column="0">
+<property name="name">
+<cstring>layout7_3_2</cstring>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel1_3_2_3_2</cstring>
+</property>
+<property name="text">
+<string>Command:</string>
+</property>
+</widget>
+<widget class="QLineEdit">
+<property name="name">
+<cstring>postDisconnectionCommand</cstring>
+</property>
+</widget>
+</hbox>
+</widget>
+</grid>
+</widget>
+<spacer>
+<property name="name">
+<cstring>spacer4</cstring>
+</property>
+<property name="orientation">
+<enum>Vertical</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>31</width>
+<height>20</height>
+</size>
+</property>
+</spacer>
+</vbox>
+</widget>
+</widget>
+</grid>
+</widget>
+<connections>
+<connection>
+<sender>buttonOk</sender>
+<signal>clicked()</signal>
+<receiver>netProperties</receiver>
+<slot>accept()</slot>
+</connection>
+<connection>
+<sender>buttonCancel</sender>
+<signal>clicked()</signal>
+<receiver>netProperties</receiver>
+<slot>reject()</slot>
+</connection>
+<connection>
+<sender>radioManualConfig</sender>
+<signal>toggled(bool)</signal>
+<receiver>boxManualConfig</receiver>
+<slot>setEnabled(bool)</slot>
+</connection>
+<connection>
+<sender>radioDhcp</sender>
+<signal>toggled(bool)</signal>
+<receiver>boxManualConfig</receiver>
+<slot>setDisabled(bool)</slot>
+</connection>
+<connection>
+<sender>preConnectionDetached</sender>
+<signal>toggled(bool)</signal>
+<receiver>preConnectionTimeout</receiver>
+<slot>setDisabled(bool)</slot>
+</connection>
+<connection>
+<sender>postConnectionDetached</sender>
+<signal>toggled(bool)</signal>
+<receiver>postConnectionTimeout</receiver>
+<slot>setDisabled(bool)</slot>
+</connection>
+<connection>
+<sender>preDisconnectionDetached</sender>
+<signal>toggled(bool)</signal>
+<receiver>preDisconnectionTimeout</receiver>
+<slot>setDisabled(bool)</slot>
+</connection>
+<connection>
+<sender>postDisconnectionDetached</sender>
+<signal>toggled(bool)</signal>
+<receiver>postDisconnectionTimeout</receiver>
+<slot>setDisabled(bool)</slot>
+</connection>
+</connections>
+<tabstops>
+<tabstop>essid</tabstop>
+<tabstop>radioDhcp</tabstop>
+<tabstop>radioManualConfig</tabstop>
+<tabstop>ip</tabstop>
+<tabstop>broadcast</tabstop>
+<tabstop>netmask</tabstop>
+<tabstop>gateway</tabstop>
+<tabstop>domain</tabstop>
+<tabstop>dns1</tabstop>
+<tabstop>dns2</tabstop>
+<tabstop>tabNetParams</tabstop>
+<tabstop>radioWepOpen</tabstop>
+<tabstop>radioWepRestricted</tabstop>
+<tabstop>wepKey</tabstop>
+<tabstop>buttonHelp</tabstop>
+<tabstop>buttonOk</tabstop>
+<tabstop>buttonCancel</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/src/ui_NetParamsWizard.ui b/src/ui_NetParamsWizard.ui
new file mode 100644
index 0000000..14e8a46
--- /dev/null
+++ b/src/ui_NetParamsWizard.ui
@@ -0,0 +1,892 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>NetParamsWizard</class>
+<widget class="QWizard">
+<property name="name">
+<cstring>NetParamsWizard</cstring>
+</property>
+<property name="geometry">
+<rect>
+<x>0</x>
+<y>0</y>
+<width>427</width>
+<height>356</height>
+</rect>
+</property>
+<property name="caption">
+<string>First Connection Wizard</string>
+</property>
+<property name="sizeGripEnabled">
+<bool>false</bool>
+</property>
+<property name="modal">
+<bool>true</bool>
+</property>
+<property name="titleFont">
+<font>
+<bold>1</bold>
+</font>
+</property>
+<widget class="QWidget">
+<property name="name">
+<cstring>welcome</cstring>
+</property>
+<attribute name="title">
+<string>Welcome to First Connection Wizard</string>
+</attribute>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLabel" row="0" column="0">
+<property name="name">
+<cstring>textLabel1_2</cstring>
+</property>
+<property name="text">
+<string>&lt;b&gt;&lt;p&gt;This is the first time you are trying to connect to the selected network.&lt;/p&gt;&lt;/b&gt;
+&lt;p&gt;You will be asked a few questions necessary to configure this connection.&lt;/p&gt;
+&lt;p&gt;&lt;i&gt;Press Next to continue.&lt;/i&gt;&lt;/p&gt;</string>
+</property>
+<property name="alignment">
+<set>WordBreak|AlignTop</set>
+</property>
+</widget>
+</grid>
+</widget>
+<widget class="QWidget">
+<property name="name">
+<cstring>WizardPage</cstring>
+</property>
+<attribute name="title">
+<string>ESSID</string>
+</attribute>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<property name="spacing">
+<number>15</number>
+</property>
+<widget class="QLabel" row="0" column="0" rowspan="1" colspan="4">
+<property name="name">
+<cstring>textLabel8_2</cstring>
+</property>
+<property name="text">
+<string>&lt;p&gt;&lt;b&gt;You are trying to connect to a network that does not broadcast its ESSID.&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;Please specify ESSID that you would like to use when connecting to this access point.&lt;/p&gt;</string>
+</property>
+</widget>
+<spacer row="2" column="2">
+<property name="name">
+<cstring>spacer54</cstring>
+</property>
+<property name="orientation">
+<enum>Vertical</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>21</width>
+<height>100</height>
+</size>
+</property>
+</spacer>
+<widget class="QLabel" row="1" column="1">
+<property name="name">
+<cstring>textLabel9</cstring>
+</property>
+<property name="text">
+<string>ESSID:</string>
+</property>
+<property name="alignment">
+<set>AlignVCenter|AlignRight</set>
+</property>
+</widget>
+<widget class="QLineEdit" row="1" column="2">
+<property name="name">
+<cstring>essid</cstring>
+</property>
+</widget>
+<spacer row="1" column="3">
+<property name="name">
+<cstring>spacer55</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>101</width>
+<height>21</height>
+</size>
+</property>
+</spacer>
+<spacer row="1" column="0">
+<property name="name">
+<cstring>spacer56</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>61</width>
+<height>21</height>
+</size>
+</property>
+</spacer>
+</grid>
+</widget>
+<widget class="QWidget">
+<property name="name">
+<cstring>ConfigMode</cstring>
+</property>
+<attribute name="title">
+<string>Interface Configuration</string>
+</attribute>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<property name="spacing">
+<number>15</number>
+</property>
+<spacer row="1" column="2">
+<property name="name">
+<cstring>spacer5</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>80</width>
+<height>21</height>
+</size>
+</property>
+</spacer>
+<spacer row="1" column="0">
+<property name="name">
+<cstring>spacer4</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>60</width>
+<height>31</height>
+</size>
+</property>
+</spacer>
+<spacer row="2" column="1">
+<property name="name">
+<cstring>spacer6</cstring>
+</property>
+<property name="orientation">
+<enum>Vertical</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>21</width>
+<height>20</height>
+</size>
+</property>
+</spacer>
+<widget class="QButtonGroup" row="1" column="1">
+<property name="name">
+<cstring>buttonGroup3</cstring>
+</property>
+<property name="focusPolicy">
+<enum>TabFocus</enum>
+</property>
+<property name="lineWidth">
+<number>0</number>
+</property>
+<property name="title">
+<string></string>
+</property>
+<property name="flat">
+<bool>true</bool>
+</property>
+<vbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QRadioButton">
+<property name="name">
+<cstring>radioDhcp</cstring>
+</property>
+<property name="text">
+<string>Automatic (DHCP)</string>
+</property>
+<property name="accel">
+<string></string>
+</property>
+<property name="checked">
+<bool>true</bool>
+</property>
+</widget>
+<widget class="QRadioButton">
+<property name="name">
+<cstring>radioManualConfig</cstring>
+</property>
+<property name="text">
+<string>Manual</string>
+</property>
+<property name="accel">
+<string></string>
+</property>
+</widget>
+</vbox>
+</widget>
+<widget class="QLabel" row="0" column="0" rowspan="1" colspan="3">
+<property name="name">
+<cstring>textLabel2_2</cstring>
+</property>
+<property name="text">
+<string>&lt;p&gt;&lt;b&gt;Your IP and other parameters need to be configured to connect to any network.&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;Which configuration option would you like to use when connecting to this network?&lt;/p&gt;</string>
+</property>
+</widget>
+</grid>
+</widget>
+<widget class="QWidget">
+<property name="name">
+<cstring>ManualConfig</cstring>
+</property>
+<attribute name="title">
+<string>Interface Parameters</string>
+</attribute>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<property name="spacing">
+<number>15</number>
+</property>
+<widget class="QLayoutWidget" row="1" column="1">
+<property name="name">
+<cstring>layout12</cstring>
+</property>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLineEdit" row="5" column="1">
+<property name="name">
+<cstring>dns1</cstring>
+</property>
+<property name="maxLength">
+<number>32767</number>
+</property>
+</widget>
+<widget class="QLineEdit" row="3" column="1">
+<property name="name">
+<cstring>gateway</cstring>
+</property>
+<property name="maxLength">
+<number>32767</number>
+</property>
+</widget>
+<widget class="QLabel" row="6" column="0">
+<property name="name">
+<cstring>textLabel6</cstring>
+</property>
+<property name="text">
+<string>Secondary DNS:</string>
+</property>
+<property name="alignment">
+<set>AlignVCenter|AlignRight</set>
+</property>
+</widget>
+<widget class="QLineEdit" row="0" column="1">
+<property name="name">
+<cstring>ip</cstring>
+</property>
+<property name="maxLength">
+<number>32767</number>
+</property>
+</widget>
+<widget class="QLineEdit" row="1" column="1">
+<property name="name">
+<cstring>broadcast</cstring>
+</property>
+<property name="maxLength">
+<number>32767</number>
+</property>
+</widget>
+<widget class="QLabel" row="0" column="0">
+<property name="name">
+<cstring>textLabel1</cstring>
+</property>
+<property name="text">
+<string>IP:</string>
+</property>
+<property name="alignment">
+<set>AlignVCenter|AlignRight</set>
+</property>
+</widget>
+<widget class="QLabel" row="2" column="0">
+<property name="name">
+<cstring>textLabel3</cstring>
+</property>
+<property name="text">
+<string>Netmask:</string>
+</property>
+<property name="alignment">
+<set>AlignVCenter|AlignRight</set>
+</property>
+</widget>
+<widget class="QLineEdit" row="6" column="1">
+<property name="name">
+<cstring>dns2</cstring>
+</property>
+<property name="maxLength">
+<number>32767</number>
+</property>
+</widget>
+<widget class="QLabel" row="5" column="0">
+<property name="name">
+<cstring>textLabel5</cstring>
+</property>
+<property name="text">
+<string>Primary DNS:</string>
+</property>
+<property name="alignment">
+<set>AlignVCenter|AlignRight</set>
+</property>
+</widget>
+<widget class="QLabel" row="3" column="0">
+<property name="name">
+<cstring>textLabel7</cstring>
+</property>
+<property name="text">
+<string>Gateway:</string>
+</property>
+<property name="alignment">
+<set>AlignVCenter|AlignRight</set>
+</property>
+</widget>
+<widget class="QLineEdit" row="4" column="1">
+<property name="name">
+<cstring>domain</cstring>
+</property>
+</widget>
+<widget class="QLineEdit" row="2" column="1">
+<property name="name">
+<cstring>netmask</cstring>
+</property>
+<property name="maxLength">
+<number>32767</number>
+</property>
+</widget>
+<widget class="QLabel" row="4" column="0">
+<property name="name">
+<cstring>textLabel4</cstring>
+</property>
+<property name="text">
+<string>Domain:</string>
+</property>
+<property name="alignment">
+<set>AlignVCenter|AlignRight</set>
+</property>
+</widget>
+<widget class="QLabel" row="1" column="0">
+<property name="name">
+<cstring>textLabel2</cstring>
+</property>
+<property name="text">
+<string>Broadcast:</string>
+</property>
+<property name="alignment">
+<set>AlignVCenter|AlignRight</set>
+</property>
+</widget>
+</grid>
+</widget>
+<spacer row="1" column="2">
+<property name="name">
+<cstring>spacer7</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>60</width>
+<height>31</height>
+</size>
+</property>
+</spacer>
+<spacer row="1" column="0">
+<property name="name">
+<cstring>spacer8</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>50</width>
+<height>21</height>
+</size>
+</property>
+</spacer>
+<spacer row="2" column="1">
+<property name="name">
+<cstring>spacer9</cstring>
+</property>
+<property name="orientation">
+<enum>Vertical</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>21</width>
+<height>16</height>
+</size>
+</property>
+</spacer>
+<widget class="QLabel" row="0" column="0" rowspan="1" colspan="3">
+<property name="name">
+<cstring>textLabel3_2</cstring>
+</property>
+<property name="text">
+<string>&lt;p&gt;&lt;b&gt;Please specify interface parameters to be used to connect to this network.&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;You may leave some fields blank.&lt;/p&gt;</string>
+</property>
+</widget>
+</grid>
+</widget>
+<widget class="QWidget">
+<property name="name">
+<cstring>WepConfig</cstring>
+</property>
+<attribute name="title">
+<string>WEP Configuration</string>
+</attribute>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLabel" row="0" column="0" rowspan="1" colspan="6">
+<property name="name">
+<cstring>textLabel5_2</cstring>
+</property>
+<property name="text">
+<string>&lt;p&gt;&lt;b&gt;The network you are trying to connect to requires WEP authentication.&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;Which WEP mode would you like to use?&lt;/p&gt;</string>
+</property>
+</widget>
+<widget class="QButtonGroup" row="1" column="3">
+<property name="name">
+<cstring>buttonGroup3_2_2</cstring>
+</property>
+<property name="lineWidth">
+<number>0</number>
+</property>
+<property name="title">
+<string></string>
+</property>
+<property name="flat">
+<bool>true</bool>
+</property>
+<vbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QRadioButton">
+<property name="name">
+<cstring>radioWepOpen</cstring>
+</property>
+<property name="text">
+<string>Open S&amp;ystem</string>
+</property>
+<property name="checked">
+<bool>true</bool>
+</property>
+</widget>
+<widget class="QRadioButton">
+<property name="name">
+<cstring>radioButton2_2_2</cstring>
+</property>
+<property name="text">
+<string>Shared Key</string>
+</property>
+</widget>
+</vbox>
+</widget>
+<spacer row="1" column="0" rowspan="1" colspan="3">
+<property name="name">
+<cstring>spacer4_2_2</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>122</width>
+<height>31</height>
+</size>
+</property>
+</spacer>
+<spacer row="1" column="4" rowspan="1" colspan="2">
+<property name="name">
+<cstring>spacer5_2_2</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>150</width>
+<height>21</height>
+</size>
+</property>
+</spacer>
+<widget class="QLabel" row="2" column="0" rowspan="1" colspan="6">
+<property name="name">
+<cstring>textLabel6_2</cstring>
+</property>
+<property name="text">
+<string>&lt;p&gt;&lt;b&gt;Please provide a key to be used with this network.&lt;/b&gt;&lt;/p&gt;</string>
+</property>
+</widget>
+<spacer row="4" column="3">
+<property name="name">
+<cstring>spacer17</cstring>
+</property>
+<property name="orientation">
+<enum>Vertical</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>31</width>
+<height>16</height>
+</size>
+</property>
+</spacer>
+<spacer row="3" column="5">
+<property name="name">
+<cstring>spacer15</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>50</width>
+<height>21</height>
+</size>
+</property>
+</spacer>
+<spacer row="3" column="0">
+<property name="name">
+<cstring>spacer16</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>30</width>
+<height>21</height>
+</size>
+</property>
+</spacer>
+<widget class="QLabel" row="3" column="1">
+<property name="name">
+<cstring>textLabel8</cstring>
+</property>
+<property name="text">
+<string>WEP key:</string>
+</property>
+<property name="alignment">
+<set>AlignVCenter|AlignRight</set>
+</property>
+</widget>
+<widget class="QLineEdit" row="3" column="2" rowspan="1" colspan="2">
+<property name="name">
+<cstring>wepKey</cstring>
+</property>
+<property name="minimumSize">
+<size>
+<width>140</width>
+<height>0</height>
+</size>
+</property>
+<property name="echoMode">
+<enum>Password</enum>
+</property>
+</widget>
+<widget class="QCheckBox" row="3" column="4">
+<property name="name">
+<cstring>checkWepAscii</cstring>
+</property>
+<property name="text">
+<string>ASCII</string>
+</property>
+</widget>
+</grid>
+</widget>
+<widget class="QWidget">
+<property name="name">
+<cstring>WizardPage</cstring>
+</property>
+<attribute name="title">
+<string>WPA Configuration</string>
+</attribute>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<spacer row="4" column="3">
+<property name="name">
+<cstring>spacer17_2</cstring>
+</property>
+<property name="orientation">
+<enum>Vertical</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>31</width>
+<height>54</height>
+</size>
+</property>
+</spacer>
+<spacer row="3" column="6">
+<property name="name">
+<cstring>spacer15_2</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>80</width>
+<height>21</height>
+</size>
+</property>
+</spacer>
+<spacer row="3" column="0">
+<property name="name">
+<cstring>spacer16_2</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>49</width>
+<height>21</height>
+</size>
+</property>
+</spacer>
+<widget class="QLabel" row="0" column="0" rowspan="1" colspan="7">
+<property name="name">
+<cstring>textLabel5_2_2</cstring>
+</property>
+<property name="text">
+<string>&lt;p&gt;&lt;b&gt;The network you are trying to connect to requires WPA authentication.&lt;/b&gt;&lt;/p&gt;</string>
+</property>
+</widget>
+<widget class="QLabel" row="3" column="1" rowspan="1" colspan="2">
+<property name="name">
+<cstring>textLabel8_3</cstring>
+</property>
+<property name="text">
+<string>WPA Key:</string>
+</property>
+<property name="alignment">
+<set>AlignVCenter|AlignRight</set>
+</property>
+</widget>
+<widget class="QLineEdit" row="3" column="3" rowspan="1" colspan="2">
+<property name="name">
+<cstring>wpaKey</cstring>
+</property>
+<property name="minimumSize">
+<size>
+<width>140</width>
+<height>0</height>
+</size>
+</property>
+<property name="echoMode">
+<enum>Password</enum>
+</property>
+</widget>
+<widget class="QCheckBox" row="3" column="5">
+<property name="name">
+<cstring>checkWpaAscii</cstring>
+</property>
+<property name="text">
+<string>ASCII</string>
+</property>
+</widget>
+<widget class="QLabel" row="2" column="0" rowspan="1" colspan="7">
+<property name="name">
+<cstring>textLabel6_2_2</cstring>
+</property>
+<property name="text">
+<string>&lt;p&gt;&lt;b&gt;Please provide a key to be used with this network.&lt;/b&gt;&lt;/p&gt;</string>
+</property>
+</widget>
+<spacer row="1" column="0" rowspan="1" colspan="2">
+<property name="name">
+<cstring>spacer43</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>80</width>
+<height>21</height>
+</size>
+</property>
+</spacer>
+<spacer row="1" column="6">
+<property name="name">
+<cstring>spacer42</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>60</width>
+<height>31</height>
+</size>
+</property>
+</spacer>
+<widget class="QLabel" row="1" column="4" rowspan="1" colspan="2">
+<property name="name">
+<cstring>labelWpaSettings</cstring>
+</property>
+<property name="sizePolicy">
+<sizepolicy>
+<hsizetype>1</hsizetype>
+<vsizetype>5</vsizetype>
+<horstretch>0</horstretch>
+<verstretch>0</verstretch>
+</sizepolicy>
+</property>
+<property name="text">
+<string>&lt;b&gt;?&lt;br&gt;?&lt;br&gt;?&lt;br&gt;?&lt;/b&gt;</string>
+</property>
+</widget>
+<widget class="QLabel" row="1" column="2" rowspan="1" colspan="2">
+<property name="name">
+<cstring>textLabel1_3</cstring>
+</property>
+<property name="sizePolicy">
+<sizepolicy>
+<hsizetype>3</hsizetype>
+<vsizetype>5</vsizetype>
+<horstretch>0</horstretch>
+<verstretch>0</verstretch>
+</sizepolicy>
+</property>
+<property name="text">
+<string>WPA Version:&lt;br&gt;Group Cipher:&lt;br&gt;Pairwise Cipher:&lt;br&gt;Authentication Suite:</string>
+</property>
+</widget>
+</grid>
+</widget>
+<widget class="QWidget">
+<property name="name">
+<cstring>done</cstring>
+</property>
+<attribute name="title">
+<string>Done!</string>
+</attribute>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLabel" row="0" column="0">
+<property name="name">
+<cstring>textLabel7_2</cstring>
+</property>
+<property name="text">
+<string>&lt;p&gt;&lt;b&gt;Congratulations!&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;You have successfully finished configuring this connection.&lt;/p&gt;
+&lt;p&gt;&lt;b&gt;Press Finish to connect!&lt;/b&gt;&lt;/p&gt;</string>
+</property>
+<property name="alignment">
+<set>WordBreak|AlignTop</set>
+</property>
+</widget>
+</grid>
+</widget>
+</widget>
+<tabstops>
+<tabstop>buttonGroup3</tabstop>
+<tabstop>ip</tabstop>
+<tabstop>broadcast</tabstop>
+<tabstop>netmask</tabstop>
+<tabstop>gateway</tabstop>
+<tabstop>domain</tabstop>
+<tabstop>dns1</tabstop>
+<tabstop>dns2</tabstop>
+<tabstop>radioWepOpen</tabstop>
+<tabstop>wepKey</tabstop>
+<tabstop>radioDhcp</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/src/ui_main.ui b/src/ui_main.ui
new file mode 100644
index 0000000..eca55a9
--- /dev/null
+++ b/src/ui_main.ui
@@ -0,0 +1,759 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>mainWindow</class>
+<widget class="QDialog">
+<property name="name">
+<cstring>mainWindow</cstring>
+</property>
+<property name="geometry">
+<rect>
+<x>0</x>
+<y>0</y>
+<width>588</width>
+<height>324</height>
+</rect>
+</property>
+<property name="caption">
+<string>Wireless Assistant</string>
+</property>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="KPushButton" row="2" column="1">
+<property name="name">
+<cstring>buttonOptions</cstring>
+</property>
+<property name="minimumSize">
+<size>
+<width>0</width>
+<height>0</height>
+</size>
+</property>
+<property name="text">
+<string>&amp;Options</string>
+</property>
+<property name="accel">
+<string>Alt+O</string>
+</property>
+<property name="toggleButton">
+<bool>true</bool>
+</property>
+<property name="toolTip" stdset="0">
+<string>Toggle network list/options</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Options Button&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;Pressing this toggle button will show the available application options.&lt;/p&gt;
+&lt;p&gt;&lt;i&gt;HINT: Press this button again to return to the network list.&lt;/i&gt;&lt;/p&gt;</string>
+</property>
+</widget>
+<widget class="KPushButton" row="4" column="1">
+<property name="name">
+<cstring>buttonClose</cstring>
+</property>
+<property name="text">
+<string>&amp;Quit</string>
+</property>
+<property name="accel">
+<string>Alt+Q</string>
+</property>
+<property name="default">
+<bool>true</bool>
+</property>
+<property name="toolTip" stdset="0">
+<string>Quit the application</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Quit Button&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;Pressing this button will quit the application.&lt;/p&gt;</string>
+</property>
+</widget>
+<widget class="KPushButton" row="1" column="1">
+<property name="name">
+<cstring>buttonConnect</cstring>
+</property>
+<property name="enabled">
+<bool>false</bool>
+</property>
+<property name="minimumSize">
+<size>
+<width>120</width>
+<height>0</height>
+</size>
+</property>
+<property name="text">
+<string>Co&amp;nnect</string>
+</property>
+<property name="accel">
+<string>Alt+N</string>
+</property>
+<property name="toolTip" stdset="0">
+<string>Connect to the selected network</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Connect/Disconnect Button&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;Pressing this button will connect to/disconnect from the network currently selected in the network list.&lt;/p&gt;</string>
+</property>
+</widget>
+<widget class="KPushButton" row="0" column="1">
+<property name="name">
+<cstring>buttonScan</cstring>
+</property>
+<property name="enabled">
+<bool>false</bool>
+</property>
+<property name="text">
+<string>Refresh</string>
+</property>
+<property name="accel">
+<string></string>
+</property>
+<property name="flat">
+<bool>false</bool>
+</property>
+<property name="toolTip" stdset="0">
+<string>Refresh network list</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Scan Button&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;Pressing this button will scan for wireless networks and refresh the network list.&lt;/p&gt;</string>
+</property>
+</widget>
+<spacer row="3" column="1">
+<property name="name">
+<cstring>spacer14</cstring>
+</property>
+<property name="orientation">
+<enum>Vertical</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>21</width>
+<height>120</height>
+</size>
+</property>
+</spacer>
+<widget class="QLayoutWidget" row="0" column="0" rowspan="5" colspan="1">
+<property name="name">
+<cstring>layout16</cstring>
+</property>
+<vbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<property name="margin">
+<number>0</number>
+</property>
+<widget class="QFrame">
+<property name="name">
+<cstring>frameDevice</cstring>
+</property>
+<property name="sizePolicy">
+<sizepolicy>
+<hsizetype>5</hsizetype>
+<vsizetype>1</vsizetype>
+<horstretch>0</horstretch>
+<verstretch>0</verstretch>
+</sizepolicy>
+</property>
+<property name="frameShape">
+<enum>NoFrame</enum>
+</property>
+<property name="frameShadow">
+<enum>Plain</enum>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<property name="margin">
+<number>0</number>
+</property>
+<widget class="QLabel">
+<property name="name">
+<cstring>devLabel</cstring>
+</property>
+<property name="sizePolicy">
+<sizepolicy>
+<hsizetype>1</hsizetype>
+<vsizetype>0</vsizetype>
+<horstretch>0</horstretch>
+<verstretch>0</verstretch>
+</sizepolicy>
+</property>
+<property name="minimumSize">
+<size>
+<width>0</width>
+<height>20</height>
+</size>
+</property>
+<property name="text">
+<string>Device:</string>
+</property>
+</widget>
+<widget class="KComboBox">
+<property name="name">
+<cstring>devCombo</cstring>
+</property>
+<property name="enabled">
+<bool>false</bool>
+</property>
+<property name="sizePolicy">
+<sizepolicy>
+<hsizetype>3</hsizetype>
+<vsizetype>0</vsizetype>
+<horstretch>0</horstretch>
+<verstretch>0</verstretch>
+</sizepolicy>
+</property>
+<property name="minimumSize">
+<size>
+<width>60</width>
+<height>0</height>
+</size>
+</property>
+<property name="toolTip" stdset="0">
+<string>Pick a network device to use</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Device Selection&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;This combo box allows you to select which wireless card to use.&lt;/p&gt;
+&lt;p&gt;&lt;i&gt;NOTE: Selecting a different card will refresh the network list.&lt;/i&gt;&lt;/p&gt;</string>
+</property>
+</widget>
+</hbox>
+</widget>
+<widget class="QWidgetStack">
+<property name="name">
+<cstring>widgetStack</cstring>
+</property>
+<property name="sizePolicy">
+<sizepolicy>
+<hsizetype>7</hsizetype>
+<vsizetype>7</vsizetype>
+<horstretch>0</horstretch>
+<verstretch>0</verstretch>
+</sizepolicy>
+</property>
+<property name="frameShape">
+<enum>PopupPanel</enum>
+</property>
+<property name="frameShadow">
+<enum>Sunken</enum>
+</property>
+<property name="lineWidth">
+<number>2</number>
+</property>
+<widget class="QWidget">
+<property name="name">
+<cstring>netPage</cstring>
+</property>
+<attribute name="id">
+<number>0</number>
+</attribute>
+<grid>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<property name="margin">
+<number>0</number>
+</property>
+<property name="spacing">
+<number>0</number>
+</property>
+<widget class="KListView" row="0" column="0">
+<column>
+<property name="text">
+<string>ESSID</string>
+</property>
+<property name="clickable">
+<bool>true</bool>
+</property>
+<property name="resizable">
+<bool>true</bool>
+</property>
+</column>
+<column>
+<property name="text">
+<string>Channel</string>
+</property>
+<property name="clickable">
+<bool>true</bool>
+</property>
+<property name="resizable">
+<bool>true</bool>
+</property>
+</column>
+<column>
+<property name="text">
+<string>Link Quality</string>
+</property>
+<property name="clickable">
+<bool>true</bool>
+</property>
+<property name="resizable">
+<bool>false</bool>
+</property>
+</column>
+<column>
+<property name="text">
+<string>WEP/WPA</string>
+</property>
+<property name="clickable">
+<bool>true</bool>
+</property>
+<property name="resizable">
+<bool>false</bool>
+</property>
+</column>
+<column>
+<property name="text">
+<string>AP</string>
+</property>
+<property name="clickable">
+<bool>true</bool>
+</property>
+<property name="resizable">
+<bool>true</bool>
+</property>
+</column>
+<property name="name">
+<cstring>netList</cstring>
+</property>
+<property name="frameShape">
+<enum>NoFrame</enum>
+</property>
+<property name="frameShadow">
+<enum>Plain</enum>
+</property>
+<property name="lineWidth">
+<number>1</number>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Network List&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;This list shows all the wireless networks that have been found.&lt;/p&gt;
+&lt;p&gt;&lt;i&gt;HINT: Click the Refresh button to update this list.&lt;/i&gt;&lt;/p&gt;</string>
+</property>
+</widget>
+<widget class="QLabel" row="1" column="0">
+<property name="name">
+<cstring>statusLabel</cstring>
+</property>
+<property name="sizePolicy">
+<sizepolicy>
+<hsizetype>7</hsizetype>
+<vsizetype>0</vsizetype>
+<horstretch>0</horstretch>
+<verstretch>0</verstretch>
+</sizepolicy>
+</property>
+<property name="minimumSize">
+<size>
+<width>0</width>
+<height>20</height>
+</size>
+</property>
+<property name="margin">
+<number>5</number>
+</property>
+<property name="text">
+<string>Ready</string>
+</property>
+<property name="alignment">
+<set>WordBreak|AlignVCenter</set>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Status Bar&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;Messages describing current process are shown in this area.&lt;/p&gt;</string>
+</property>
+</widget>
+</grid>
+</widget>
+<widget class="QWidget">
+<property name="name">
+<cstring>optionsPage</cstring>
+</property>
+<attribute name="id">
+<number>1</number>
+</attribute>
+<vbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLayoutWidget">
+<property name="name">
+<cstring>layout20</cstring>
+</property>
+<vbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QCheckBox">
+<property name="name">
+<cstring>checkAutoConnect</cstring>
+</property>
+<property name="text">
+<string>Automatically connect on startup</string>
+</property>
+<property name="accel">
+<string></string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;AutomaticallyConnect on Startup&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;Checking this box will make the application try to connect to the best available network. Only networks that have been previously configured will be taken into account.&lt;/p&gt;</string>
+</property>
+</widget>
+<widget class="QCheckBox">
+<property name="name">
+<cstring>checkAutoReconnect</cstring>
+</property>
+<property name="text">
+<string>Automaticall&amp;y reconnect if connection is lost</string>
+</property>
+<property name="accel">
+<string>Alt+Y</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Automatically Reconnect if Connection is Lost&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;Checking this box will make the application try to reconnect after the connection is lost.&lt;/p&gt;</string>
+</property>
+</widget>
+<widget class="QCheckBox">
+<property name="name">
+<cstring>checkAutoQuit</cstring>
+</property>
+<property name="text">
+<string>Quit upon successful connection</string>
+</property>
+<property name="accel">
+<string></string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Quit Upon Successful Connection&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;Checking this box will make the application close after successfully establishing a connection to a wireless network.&lt;/p&gt;</string>
+</property>
+</widget>
+<widget class="QCheckBox">
+<property name="name">
+<cstring>checkGroupAPs</cstring>
+</property>
+<property name="text">
+<string>&amp;Group access points with the same ESSID</string>
+</property>
+<property name="accel">
+<string>Alt+G</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Group Access Points with the Same ESSID&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;Checking this box will make all access points with the same ESSID appear as one item in the network list.&lt;/p&gt;</string>
+</property>
+</widget>
+</vbox>
+</widget>
+<widget class="QLayoutWidget">
+<property name="name">
+<cstring>layout17</cstring>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLayoutWidget">
+<property name="name">
+<cstring>layout12</cstring>
+</property>
+<vbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel2_2</cstring>
+</property>
+<property name="text">
+<string>Delay before scanning:</string>
+</property>
+<property name="toolTip" stdset="0">
+<string>Specify how long to wait for an IP</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;DHCP Client Timeout&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;This option specifies the amount of time after which the application should stop waiting for an IP address and assume that the connection has failed.&lt;/p&gt;
+&lt;p&gt;&lt;i&gt;HINT: Increasing this number can help if you have problems connecting to some networks.&lt;/i&gt;&lt;/p&gt;</string>
+</property>
+</widget>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel2</cstring>
+</property>
+<property name="text">
+<string>DHCP client timeout:</string>
+</property>
+<property name="toolTip" stdset="0">
+<string>Specify how long to wait for an IP</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;DHCP Client Timeout&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;This option specifies the amount of time after which the application should stop waiting for an IP address and assume that the connection has failed.&lt;/p&gt;
+&lt;p&gt;&lt;i&gt;HINT: Increasing this number can help if you have problems connecting to some networks.&lt;/i&gt;&lt;/p&gt;</string>
+</property>
+</widget>
+</vbox>
+</widget>
+<widget class="QLayoutWidget">
+<property name="name">
+<cstring>layout13</cstring>
+</property>
+<vbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<spacer>
+<property name="name">
+<cstring>spacer24_2</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Fixed</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>21</width>
+<height>20</height>
+</size>
+</property>
+</spacer>
+<spacer>
+<property name="name">
+<cstring>spacer24</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Fixed</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>21</width>
+<height>20</height>
+</size>
+</property>
+</spacer>
+</vbox>
+</widget>
+<widget class="QLayoutWidget">
+<property name="name">
+<cstring>layout14</cstring>
+</property>
+<vbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<widget class="QSpinBox">
+<property name="name">
+<cstring>spinDelayBeforeScanning</cstring>
+</property>
+<property name="suffix">
+<string>s</string>
+</property>
+<property name="maxValue">
+<number>20</number>
+</property>
+<property name="minValue">
+<number>0</number>
+</property>
+<property name="value">
+<number>0</number>
+</property>
+<property name="toolTip" stdset="0">
+<string>Specify how long to wait before scanning</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Delay Before Scanning&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;This option specifies the amount of time to wait between bringing the interface up and performing a scan.&lt;/p&gt;
+&lt;p&gt;&lt;i&gt;HINT: Increasing this number can help if you have to refresh the list manually to see all the available networks.&lt;/i&gt;&lt;/p&gt;</string>
+</property>
+</widget>
+<widget class="QSpinBox">
+<property name="name">
+<cstring>spinDhcpTimeout</cstring>
+</property>
+<property name="suffix">
+<string>s</string>
+</property>
+<property name="maxValue">
+<number>60</number>
+</property>
+<property name="minValue">
+<number>5</number>
+</property>
+<property name="value">
+<number>15</number>
+</property>
+<property name="toolTip" stdset="0">
+<string>Specify how long to wait for an IP</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;DHCP Client Timeout&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;This option specifies the amount of time after which the application should stop waiting for an IP address and assume that the connection has failed.&lt;/p&gt;
+&lt;p&gt;&lt;i&gt;HINT: Increasing this number can help if you have problems connecting to some networks.&lt;/i&gt;&lt;/p&gt;</string>
+</property>
+</widget>
+</vbox>
+</widget>
+<widget class="QLayoutWidget">
+<property name="name">
+<cstring>layout15</cstring>
+</property>
+<vbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<spacer>
+<property name="name">
+<cstring>spacer25_2</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>101</width>
+<height>21</height>
+</size>
+</property>
+</spacer>
+<spacer>
+<property name="name">
+<cstring>spacer25</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>118</width>
+<height>21</height>
+</size>
+</property>
+</spacer>
+</vbox>
+</widget>
+</hbox>
+</widget>
+<widget class="QLabel">
+<property name="name">
+<cstring>textLabel1</cstring>
+</property>
+<property name="text">
+<string>&lt;i&gt;Press the button below to enable all messages which have been turned off with the 'Don't Show Again' feature.&lt;/i&gt;</string>
+</property>
+</widget>
+<widget class="QLayoutWidget">
+<property name="name">
+<cstring>layout19</cstring>
+</property>
+<hbox>
+<property name="name">
+<cstring>unnamed</cstring>
+</property>
+<spacer>
+<property name="name">
+<cstring>spacer22</cstring>
+</property>
+<property name="orientation">
+<enum>Horizontal</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>201</width>
+<height>21</height>
+</size>
+</property>
+</spacer>
+<widget class="QPushButton">
+<property name="name">
+<cstring>buttonEnableAllMessages</cstring>
+</property>
+<property name="text">
+<string>E&amp;nable All Messages</string>
+</property>
+<property name="accel">
+<string>Alt+N</string>
+</property>
+<property name="whatsThis" stdset="0">
+<string>&lt;p&gt;&lt;b&gt;Enable All Messages&lt;/b&gt;&lt;/p&gt;
+&lt;p&gt;Pressing this button will enable all messages which have been turned off with the 'Don't Show Again' feature.&lt;/p&gt;</string>
+</property>
+</widget>
+</hbox>
+</widget>
+<spacer>
+<property name="name">
+<cstring>spacer16</cstring>
+</property>
+<property name="orientation">
+<enum>Vertical</enum>
+</property>
+<property name="sizeType">
+<enum>Expanding</enum>
+</property>
+<property name="sizeHint">
+<size>
+<width>20</width>
+<height>31</height>
+</size>
+</property>
+</spacer>
+</vbox>
+</widget>
+</widget>
+</vbox>
+</widget>
+</grid>
+</widget>
+<tabstops>
+<tabstop>devCombo</tabstop>
+<tabstop>netList</tabstop>
+<tabstop>buttonScan</tabstop>
+<tabstop>buttonConnect</tabstop>
+<tabstop>buttonOptions</tabstop>
+<tabstop>buttonClose</tabstop>
+<tabstop>checkAutoQuit</tabstop>
+<tabstop>spinDhcpTimeout</tabstop>
+<tabstop>buttonEnableAllMessages</tabstop>
+</tabstops>
+<slots>
+<slot>netScan()</slot>
+<slot>netConnect()</slot>
+<slot>showCfgDlg()</slot>
+<slot>setDeviceList()</slot>
+</slots>
+<functions>
+<function>updateStatus(char sts)</function>
+</functions>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+<includehint>kpushbutton.h</includehint>
+<includehint>kpushbutton.h</includehint>
+<includehint>kpushbutton.h</includehint>
+<includehint>kpushbutton.h</includehint>
+<includehint>kcombobox.h</includehint>
+<includehint>klistview.h</includehint>
+</includehints>
+</UI>
diff --git a/src/ui_netparamsedit.cpp b/src/ui_netparamsedit.cpp
new file mode 100644
index 0000000..0e994d6
--- /dev/null
+++ b/src/ui_netparamsedit.cpp
@@ -0,0 +1,174 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Pawel Nawrocki *
+ * pnawrocki@interia.pl *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+
+#include "ui_netparamsedit.h"
+#include "netparams.h"
+
+#include <qgroupbox.h>
+#include <qlineedit.h>
+#include <qradiobutton.h>
+#include <qcheckbox.h>
+#include <qtabwidget.h>
+#include <qpushbutton.h>
+#include <qspinbox.h>
+#include <qbuttongroup.h>
+#include <qlabel.h>
+
+#include <kiconloader.h>
+
+ui_NetParamsEdit::ui_NetParamsEdit(QWidget* parent, const char* name, bool modal, WFlags fl)
+ : netProperties(parent,name, modal,fl)
+{
+ buttonHelp->hide();
+ buttonOk->setIconSet( SmallIconSet("ok") );
+ buttonCancel->setIconSet( SmallIconSet("cancel") );
+}
+
+ui_NetParamsEdit::~ui_NetParamsEdit()
+{}
+
+/*$SPECIALIZATION$*/
+
+/*void ui_NetParamsEdit::setWepEnabled( bool w )
+{
+ tabSecurity->setShown(w);
+}*/
+
+/*void ui_NetParamsEdit::setEssidEnabled( bool e )
+{
+ boxEssid->setShown(e);
+}*/
+
+void ui_NetParamsEdit::setValues( const WANetParams & np )
+{
+ boxEssid->setShown(np.hiddenEssid);
+ essid->setText(np.essid);
+
+ tabNetParams->setTabEnabled( tabSecurity, (np.wep || np.wpa) );
+
+ if ( tabSecurity->isEnabled() ) {
+ groupWep->setEnabled( np.wep );
+ groupWpa->setEnabled( np.wpa );
+ if (np.wep) {
+ if (np.wepMode=="open")
+ radioWepOpen->setChecked(1);
+ else
+ radioWepRestricted->setChecked(1);
+ if ( np.wepKey.left(2)=="s:" ) { //ASCII key
+ checkWepAscii->setChecked(true);
+ wepKey->setText( np.wepKey.right(np.wepKey.length()-2) );
+ } else { //HEX key
+ checkWepAscii->setChecked(false);
+ wepKey->setText( np.wepKey );
+ }
+ }
+ if (np.wpa) {
+ labelWpaSettings->setText( QString("<i>%1</i>").arg( np.wpaSettings.join("<br>") ) );
+ if ( np.wpaKey.left(2)=="s:" ) { //ASCII key
+ checkWpaAscii->setChecked(true);
+ wpaKey->setText( np.wpaKey.right(np.wpaKey.length()-2) );
+ } else { //HEX key
+ checkWpaAscii->setChecked(false);
+ wpaKey->setText( np.wpaKey );
+ }
+ }
+ }
+
+ radioDhcp->setChecked( np.dhcp );
+ radioManualConfig->setChecked( !np.dhcp );
+
+ ip->setText(np.ip);
+ broadcast->setText( np.broadcast );
+ netmask->setText( np.netmask );
+ gateway->setText( np.gateway );
+ domain->setText( np.domain );
+ dns1->setText( np.dns1 );
+ dns2->setText( np.dns2 );
+
+ preConnectionCommand->setText( np.preConnectionCommand );
+ preConnectionDetached->setChecked( np.preConnectionDetached );
+ preConnectionTimeout->setValue( np.preConnectionTimeout );
+
+ postConnectionCommand->setText( np.postConnectionCommand );
+ postConnectionDetached->setChecked( np.postConnectionDetached );
+ postConnectionTimeout->setValue( np.postConnectionTimeout );
+
+ preDisconnectionCommand->setText( np.preDisconnectionCommand );
+ preDisconnectionDetached->setChecked( np.preDisconnectionDetached );
+ preDisconnectionTimeout->setValue( np.preDisconnectionTimeout );
+
+ postDisconnectionCommand->setText( np.postDisconnectionCommand );
+ postDisconnectionDetached->setChecked( np.postDisconnectionDetached );
+ postDisconnectionTimeout->setValue( np.postDisconnectionTimeout );
+}
+
+WANetParams ui_NetParamsEdit::readNetParams( WANetParams & np )
+{
+ if (np.hiddenEssid) {
+ np.wasHiddenEssid = true;
+ np.essid = essid->text();
+ }
+ np.dhcp = radioDhcp->isChecked();
+ np.ip = ip->text();
+ np.broadcast = broadcast->text();
+ np.netmask = netmask->text();
+ np.gateway = gateway->text();
+ np.domain = domain->text();
+ np.dns1 = dns1->text();
+ np.dns2 = dns2->text();
+ if (np.wep) { // WEP authentication needed
+ np.wasWep = true;
+ if (radioWepOpen->isChecked())
+ np.wepMode = "open";
+ else
+ np.wepMode = "restricted";
+ np.wepKey = wepKey->text();
+ if (checkWepAscii->isChecked())
+ np.wepKey.prepend("s:");
+ }
+ if (np.wpa) { // WPA authentication needed
+ np.wpaKey = wpaKey->text();
+ if (checkWpaAscii->isChecked())
+ np.wpaKey.prepend("s:");
+ }
+
+
+ np.preConnectionCommand = preConnectionCommand->text();
+ np.preConnectionTimeout = preConnectionTimeout->value();
+ np.preConnectionDetached = preConnectionDetached->isChecked();
+
+ np.postConnectionCommand = postConnectionCommand->text();
+ np.postConnectionTimeout = postConnectionTimeout->value();
+ np.postConnectionDetached = postConnectionDetached->isChecked();
+
+ np.preDisconnectionCommand = preDisconnectionCommand->text();
+ np.preDisconnectionTimeout = preDisconnectionTimeout->value();
+ np.preDisconnectionDetached = preDisconnectionDetached->isChecked();
+
+ np.postDisconnectionCommand = postDisconnectionCommand->text();
+ np.postDisconnectionTimeout = postDisconnectionTimeout->value();
+ np.postDisconnectionDetached = postDisconnectionDetached->isChecked();
+
+ return np;
+}
+
+#include "ui_netparamsedit.moc"
+
diff --git a/src/ui_netparamsedit.h b/src/ui_netparamsedit.h
new file mode 100644
index 0000000..4c3b8b0
--- /dev/null
+++ b/src/ui_netparamsedit.h
@@ -0,0 +1,53 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Pawel Nawrocki *
+ * pnawrocki@interia.pl *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef UI_NETPARAMSEDIT_H
+#define UI_NETPARAMSEDIT_H
+
+#include "ui_NetParamsEdit.h"
+
+class WANetParams;
+
+class ui_NetParamsEdit : public netProperties
+{
+ Q_OBJECT
+
+public:
+ ui_NetParamsEdit(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+ ~ui_NetParamsEdit();
+ /*$PUBLIC_FUNCTIONS$*/
+ //void setWepEnabled( bool w );
+ //void setEssidEnabled( bool e );
+ void setValues( const WANetParams & np );
+ WANetParams readNetParams( WANetParams & np );
+
+public slots:
+ /*$PUBLIC_SLOTS$*/
+
+protected:
+ /*$PROTECTED_FUNCTIONS$*/
+
+protected slots:
+ /*$PROTECTED_SLOTS$*/
+
+};
+
+#endif
+
diff --git a/src/ui_netparamswizard.cpp b/src/ui_netparamswizard.cpp
new file mode 100644
index 0000000..9945eea
--- /dev/null
+++ b/src/ui_netparamswizard.cpp
@@ -0,0 +1,107 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Pawel Nawrocki *
+ * pnawrocki@interia.pl *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+
+#include "ui_netparamswizard.h"
+#include "netparams.h"
+
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qlineedit.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+
+#include <kiconloader.h>
+
+ui_NetParamsWizard::ui_NetParamsWizard(QWidget* parent, const char* name, bool modal, WFlags fl)
+ : NetParamsWizard(parent,name, modal,fl)
+{
+ backButton()->setIconSet( SmallIconSet("back") );
+ nextButton()->setIconSet( SmallIconSet("forward") );
+ cancelButton()->setIconSet( SmallIconSet("cancel") );
+ finishButton()->setIconSet( SmallIconSet("ok") );
+ //helpButton()->setIconSet( SmallIconSet("help") );
+ helpButton()->hide();
+ setFinishEnabled( page( pageCount()-1 ), true );
+}
+
+ui_NetParamsWizard::~ui_NetParamsWizard()
+{}
+
+/*$SPECIALIZATION$*/
+
+void ui_NetParamsWizard::setWepEnabled( bool w )
+{
+ setAppropriate( page(4), w );
+}
+
+void ui_NetParamsWizard::setWpaEnabled( bool w, QStringList settings )
+{
+ setAppropriate( page(5), w );
+ if (w) labelWpaSettings->setText( QString("<i>%1</i>").arg( settings.join("<br>") ) );
+}
+
+
+void ui_NetParamsWizard::setEssidEnabled( bool e )
+{
+ setAppropriate( page(1), e );
+}
+
+void ui_NetParamsWizard::next()
+{
+ if (indexOf(currentPage())==2)
+ setAppropriate( page(3), radioManualConfig->isChecked() );
+ QWizard::next();
+}
+
+WANetParams ui_NetParamsWizard::readNetParams( WANetParams & np )
+{
+ if (appropriate(page(1)))
+ np.essid = essid->text();
+ np.dhcp = radioDhcp->isChecked();
+ if (!np.dhcp) { // manual configuration option selected
+ np.ip = ip->text();
+ np.broadcast = broadcast->text();
+ np.netmask = netmask->text();
+ np.gateway = gateway->text();
+ np.domain = domain->text();
+ np.dns1 = dns1->text();
+ np.dns2 = dns2->text();
+ }
+ if (np.wep) { // WEP authentication needed
+ if (radioWepOpen->isChecked())
+ np.wepMode = "open";
+ else
+ np.wepMode = "restricted";
+ np.wepKey = wepKey->text();
+ if (checkWepAscii->isChecked())
+ np.wepKey.prepend("s:");
+ }
+ if (np.wpa) { // WPA authentication needed
+ np.wpaKey = wpaKey->text();
+ if (checkWpaAscii->isChecked())
+ np.wpaKey.prepend("s:");
+ }
+
+ return np;
+}
+
+#include "ui_netparamswizard.moc"
+
diff --git a/src/ui_netparamswizard.h b/src/ui_netparamswizard.h
new file mode 100644
index 0000000..fc3dfcb
--- /dev/null
+++ b/src/ui_netparamswizard.h
@@ -0,0 +1,53 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Pawel Nawrocki *
+ * pnawrocki@interia.pl *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef UI_NETPARAMSWIZARD_H
+#define UI_NETPARAMSWIZARD_H
+
+#include "ui_NetParamsWizard.h"
+
+
+class WANetParams;
+class ui_NetParamsWizard : public NetParamsWizard
+{
+ Q_OBJECT
+
+public:
+ ui_NetParamsWizard(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+ ~ui_NetParamsWizard();
+ /*$PUBLIC_FUNCTIONS$*/
+ void setWepEnabled( bool w );
+ void setWpaEnabled( bool w, QStringList settings = QStringList() );
+ void setEssidEnabled( bool e );
+ WANetParams readNetParams( WANetParams & np );
+
+public slots:
+ /*$PUBLIC_SLOTS$*/
+
+protected:
+ /*$PROTECTED_FUNCTIONS$*/
+
+protected slots:
+ /*$PROTECTED_SLOTS$*/
+ virtual void next();
+};
+
+#endif
+
diff --git a/src/waconfig.cpp b/src/waconfig.cpp
new file mode 100644
index 0000000..aadad38
--- /dev/null
+++ b/src/waconfig.cpp
@@ -0,0 +1,29 @@
+#include "waconfig.h"
+
+#include <kstaticdeleter.h>
+
+WAConfig *WAConfig::mSelf = 0;
+static KStaticDeleter<WAConfig> staticWAConfigDeleter;
+
+WAConfig *WAConfig::self()
+{
+ if ( !mSelf ) {
+ staticWAConfigDeleter.setObject( mSelf, new WAConfig() );
+ mSelf->readConfig();
+ }
+
+ return mSelf;
+}
+
+WAConfig::WAConfig( )
+ : KConfigSkeleton( QString::fromLatin1( "wlassistantrc" ) )
+{
+ mSelf = this;
+}
+
+WAConfig::~WAConfig()
+{
+ if ( mSelf == this )
+ staticWAConfigDeleter.setObject( mSelf, 0, false );
+}
+
diff --git a/src/waconfig.h b/src/waconfig.h
new file mode 100644
index 0000000..bedcaf1
--- /dev/null
+++ b/src/waconfig.h
@@ -0,0 +1,45 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Pawel Nawrocki *
+ * pnawrocki@interia.pl *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef WACONFIG_H
+#define WACONFIG_H
+
+#include <kconfigskeleton.h>
+
+class WAConfig : public KConfigSkeleton
+{
+ public:
+
+ static WAConfig *self();
+ ~WAConfig();
+
+ static
+ void writeConfig()
+ {
+ static_cast<KConfigSkeleton*>(self())->writeConfig();
+ }
+ protected:
+
+ WAConfig();
+ static WAConfig *mSelf;
+};
+
+#endif
+
diff --git a/src/watools.cpp b/src/watools.cpp
new file mode 100644
index 0000000..5814274
--- /dev/null
+++ b/src/watools.cpp
@@ -0,0 +1,312 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Pawel Nawrocki *
+ * pnawrocki@interia.pl *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include "watools.h"
+
+#include <unistd.h> //provides readlink
+#include <dirent.h>
+#include <stdio.h> //to get values from /sys
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <arpa/inet.h> //inet_ntoa
+#include <iostream> //debugging
+
+char* WATools::ifname = 0;
+int WATools::iw_socket = -1;
+int WATools::prev_tx_packets = 0;
+int WATools::prev_rx_packets = 0;
+
+//////////////////////
+///// GENERAL INTERFACE CALLS
+bool WATools::isUp( const char* _ifname ) ///returns true if specified interface is up. Uses request SIOCGIFFLAGS
+{
+ if (_ifname==0)
+ _ifname = ifname;
+
+ struct ifreq req;
+ if ( doRequest( SIOCGIFFLAGS, &req, _ifname ) < 0) // get interface flags
+ return 0;
+// ( req.ifr_flags & IFF_UP ) ? std::cout << "* UP: YES" << std::endl : std::cout << "* UP: NO" << std::endl;
+ return ( req.ifr_flags & IFF_UP );
+}
+
+bool WATools::setUp( bool u, const char* _ifname ) /// brings interface up or down. Requests SIOCGIFFLAGS and SIOCSIFFLAGS
+{
+ if (_ifname==0)
+ _ifname = ifname;
+
+ struct ifreq req;
+ if ( doRequest( SIOCGIFFLAGS, &req, _ifname ) < 0 ) //get current flags, so they're not reset
+ return 0;
+
+ if ( u != (req.ifr_flags & IFF_UP) )
+ req.ifr_flags ^= IFF_UP; //change value of IFF_UP flag (XOR)
+
+ return ( doRequest( SIOCSIFFLAGS, &req, _ifname ) > -1 ); //set up/down flag, > -1 if succeeded
+}
+
+char* WATools::ip( const char* _ifname ) ///returns current IP. Request SIOCGIFADDR
+{
+ if (_ifname==0)
+ _ifname = ifname;
+
+ struct ifreq req;
+ static char buffer[16];
+ if ( doRequest( SIOCGIFADDR, &req, _ifname ) < 0 )
+ strcpy( buffer, "0.0.0.0" );
+ else
+ strcpy( buffer, inet_ntoa( ((sockaddr_in*)&req.ifr_addr)->sin_addr ) );
+// std::cout << "* IP ADDRESS: " << buffer << std::endl;
+ return buffer;
+}
+
+int WATools::txpackets( const char* _ifname ) ///returns number of packets send via _iface
+{
+ if (_ifname==0)
+ _ifname = ifname;
+
+ return getStatistic( "tx_packets", _ifname );
+}
+
+int WATools::rxpackets( const char* _ifname ) ///returns number of packets received via _iface
+{
+ if (_ifname==0)
+ _ifname = ifname;
+
+ return getStatistic( "rx_packets", _ifname );
+}
+
+
+//////////////////////
+///// WIRELESS EXTENSIONS CALLS
+
+bool WATools::isWireless( const char* _ifname ) /// returns TRUE if the specified interface supports Wireless Extensions
+{
+ static iwreq req;
+ memset( &req, 0, sizeof(req) );
+ return ( doWirelessRequest(SIOCGIWNAME, &req, _ifname ) > -1 );
+}
+
+char* WATools::essid( const char* _ifname ) ///returns current ESSID (for the specified interface). Request SIOCGIWESSID
+{
+ static iwreq req;
+ static char buffer[IW_ESSID_MAX_SIZE + 1];
+
+ memset( buffer, 0, sizeof(buffer) );
+ req.u.essid.pointer = buffer; //set pointer of essid string resulting from request to buffer
+ req.u.essid.length = IW_ESSID_MAX_SIZE;
+ if( doWirelessRequest(SIOCGIWESSID, &req, _ifname) < 0 ) // try to get ap address.
+ return 0; // no ap address
+ return buffer;
+}
+
+char* WATools::ap( const char* _ifname ) ///returns current AP (for the specified interface). Request SIOCGIWAP
+{
+ static iwreq req;
+ if( doWirelessRequest(SIOCGIWAP, &req, _ifname) < 0 ) // try to get ap address.
+ return 0; // no ap address
+ static char buffer[32];
+ iw_ether_ntop( (const struct ether_addr *)req.u.ap_addr.sa_data, buffer );
+
+// std::cout << "* AP ADDRESS: " << buffer << std::endl;
+ return buffer;
+}
+
+int WATools::quality( const char* _ifname ) ///returns active link quality in range 0-100 (for the specified interface)
+{
+ static iw_statistics stats;
+ if ( doWirelessStatisticsRequest( &stats, _ifname ) < 0 )
+ return 0;
+ unsigned int std_qual = (100*stats.qual.qual)/50; //calculate normalized quality (0-100). 50 is the best noise/signal difference
+ if (std_qual > 100) std_qual = 100;
+
+// std::cout << "* QUALITY: " << std_qual << std::endl;
+ return std_qual;
+}
+
+int WATools::txpower( const char* _ifname ) ///returns current txpower in mW (for the specified interface). Request SIOCGIWTXPOW
+{
+ static iwreq req;
+ if( doWirelessRequest(SIOCGIWTXPOW, &req, _ifname) < 0 ) // try to get txpower.
+ return 0; // no txpower
+ else {
+ if (req.u.txpower.disabled)
+ return -1;
+ else
+ return req.u.txpower.value;
+ }
+}
+
+bool WATools::hasKey( const char* _ifname ) ///returns true if WEP key for the specified interface is set. Request SIOCGIWENCODE
+{
+ static iwreq req;
+ static char buffer[IW_ENCODING_TOKEN_MAX + 1];
+
+ memset( buffer, 0, sizeof(buffer) );
+ req.u.encoding.pointer = buffer; //set pointer of encoding string resulting from request to buffer
+ req.u.encoding.length = IW_ENCODING_TOKEN_MAX;
+
+ if( doWirelessRequest(SIOCGIWENCODE, &req, _ifname) < 0 ) // try to get current key flags.
+ return 0;
+// ( strlen(buffer)!=0 ) ? std::cout << "* KEY: YES" << std::endl : std::cout << "*KEY: NO" << std::endl;
+ return ( strlen(buffer)!=0 ); // not encoding token empty
+}
+
+int WATools::availableNetworks( const char* _ifname ) //returns a list of available networks
+{
+ static struct wireless_scan_head context;
+ static struct wireless_scan* scan;
+
+ if (_ifname==0)
+ _ifname = ifname;
+ if (iw_socket<0)
+ iw_socket = iw_sockets_open(); //get kernel socket
+ if (iw_socket<0)
+ return 0;
+
+ iw_scan( iw_socket, (char*)_ifname, iw_get_kernel_we_version(), &context );
+ scan = context.result;
+
+ int i = 0;
+ if ( scan = context.result ) do {
+ char buffer[32];
+ //iw_ether_ntop( (const struct ether_addr *)scan->ap_addr.sa_data, buffer );
+ //printf( "ESSID: %s, quality: %i\n", scan->b.essid, scan->stats.qual.qual );
+ i++;
+ } while (scan = scan->next);
+ printf( "WATools: Networks found: %i\n", i );
+}
+
+
+//////////////////////
+///// MISC FUNCTIONS
+
+bool WATools::isConnected( const char* _ifname ) ///returns true if interface is properly configured and associated
+{
+ bool ret;
+ if ( WATools::isUp( _ifname ) && \
+ (strcmp( WATools::ip( _ifname ), "0.0.0.0" ) != 0) && \
+ (strcmp( WATools::ap( _ifname ), "00:00:00:00:00:00" ) != 0) && \
+ (WATools::quality( _ifname ) > 0) ) {
+ int tx = txpackets( _ifname);
+ if ( tx > prev_tx_packets + WA_TX_THRESHOLD ) {
+ prev_tx_packets = tx;
+ int rx = rxpackets( _ifname );
+ if ( rx > prev_rx_packets ) {
+ prev_rx_packets = rx;
+ ret = 1;
+ } else { // no packets received since last change
+ std::cout << "Connection lost (TX threshold exceeded)" << std::endl;
+ ret = 0;
+ }
+ } else ret = 1; // no packets sent since last check
+ } else ret = 0;
+ return ret;
+}
+
+char* WATools::kernelModule( const char* _ifname ) ///returns KERNEL MODULE name for the given interface
+{
+ /// DOES SOMEONE KNOW A BETTER WAY TO RETRIEVE IT?
+ char origPath[64], symPath[64];
+ static char module[32];
+ char* p;
+ sprintf( origPath, "/sys/class/net/%s/device/driver", _ifname );
+ memset( &symPath, 0, sizeof(symPath) );
+ readlink( (const char*)origPath, symPath, sizeof(symPath) );
+ p = strtok( symPath, "/" );
+ do {
+ strcpy( module, p );
+ p = strtok( NULL, "/" );
+ } while ( p != NULL ); //last part of the symlinked directory is the module name used for the interface.
+ return module;
+}
+
+
+//////////////////////
+///// PRIVATE CONVENIENCE FUNCTIONS
+
+int WATools::getStatistic( const char* statName, const char* _ifname )
+{
+ if (_ifname==0)
+ _ifname = ifname;
+
+ char path[64];
+ sprintf( path, "/sys/class/net/%s/statistics/%s", _ifname, statName );
+
+ FILE* f = fopen( path, "r" );
+ void* ptr;
+ static char buffer[16];
+ fgets(buffer, sizeof(buffer), f);
+ fclose(f);
+ return atoi( buffer ); //convert string to integer
+}
+
+int WATools::doRequest( int request, struct ifreq* reqStruct, const char* _ifname )
+{
+ if (_ifname==0)
+ _ifname = ifname;
+ if (iw_socket<0)
+ iw_socket = iw_sockets_open(); //get kernel socket
+ if (iw_socket<0)
+ return 0;
+
+ memset( reqStruct, 0, sizeof(reqStruct) );
+ strncpy(reqStruct->ifr_name, _ifname, IFNAMSIZ);
+ return ioctl(iw_socket, request, reqStruct);
+}
+
+int WATools::doWirelessRequest( int request, struct iwreq* reqStruct, const char* _ifname )
+{
+ if (_ifname==0)
+ _ifname = ifname;
+ if (iw_socket<0)
+ iw_socket = iw_sockets_open(); //get kernel socket
+ if (iw_socket<0)
+ return 0;
+
+ memset( reqStruct, 0, sizeof(reqStruct) );
+ strncpy(reqStruct->ifr_name, _ifname, IFNAMSIZ);
+ return ioctl(iw_socket, request, reqStruct);
+}
+
+int WATools::doWirelessStatisticsRequest( iw_statistics* iwStats, const char* _ifname )
+{
+ if (_ifname==0)
+ _ifname = ifname;
+ if (iw_socket<0)
+ iw_socket = iw_sockets_open();//get kernel socket
+ if (iw_socket<0)
+ return 0;
+
+ unsigned int has_range;
+ iw_range range;
+
+ if ( iw_get_range_info(iw_socket, _ifname, &range) < 0 )
+ has_range = 0;
+ else
+ has_range = 1;
+ return iw_get_stats(iw_socket, _ifname, iwStats, &range, has_range);
+}
+
+void WATools::cleanup()
+{
+ if (!iw_socket<0)
+ iw_sockets_close(iw_socket);
+}
diff --git a/src/watools.h b/src/watools.h
new file mode 100644
index 0000000..e2088e5
--- /dev/null
+++ b/src/watools.h
@@ -0,0 +1,76 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Pawel Nawrocki *
+ * pnawrocki@interia.pl *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef WATOOLS_H
+#define WATOOLS_H
+
+//maximum number of packets send without any received. When it's exceeded, the connection is considered lost.
+#define WA_TX_THRESHOLD 14
+
+#include <iwlib.h>
+#include <time.h>
+class QStringList;
+
+class WATools
+{
+public:
+ static inline void setInterface( const char* new_ifname ) //sets default (fallback) interface
+ {
+ ifname = (char*)new_ifname;
+ }
+ static inline char* interface() //returns default (fallback) interface
+ {
+ return ifname;
+ }
+ // general interface functions
+ static bool isUp( const char* _ifname = 0 ); //returns current STATUS
+ static bool setUp( bool u, const char* _ifname = 0 ); //bring interface up/down
+ static char* ip( const char* _ifname = 0 ); //returns current IP
+ static int txpackets( const char* _ifname = 0 ); //returns number of packets send via _iface
+ static int rxpackets( const char* _ifname = 0 ); //returns number of packets received via _iface
+
+ // wireless extensions calls
+ static bool isWireless( const char* _ifname ); //returns true if iface is a valid wireless interface
+ static char* essid( const char* _ifname = 0 ); //returns current ESSID
+ static char* ap( const char* _ifname = 0 ); //returns current AP
+ static int quality( const char* _ifname = 0 ); //returns current QUALITY
+ static int txpower( const char* _ifname = 0 ); //returns current TXPOWER
+
+ static bool hasKey( const char* _ifname = 0 ); //returns true if WEP key for the specified interface is set
+
+ static int availableNetworks( const char* _ifname = 0 ); //returns a list of available networks
+
+ // misc functions
+ static bool isConnected( const char* _ifname = 0 ); //returns true if the interface is properly CONFIGURED AND ASSOCIATED
+ static char* kernelModule( const char* _ifname = 0 ); //returns KERNEL MODULE name for the given interface
+ static void cleanup(); //closes open socket etc.
+
+private:
+ static char* ifname;
+ static int iw_socket;
+ static int prev_tx_packets, prev_rx_packets;
+
+ static int getStatistic( const char* statName, const char* _ifname = 0 );
+ static int doRequest( int request, struct ifreq* reqStruct, const char* _ifname = 0 );
+ static int doWirelessRequest( int request, struct iwreq* reqStruct, const char* _ifname = 0 );
+ static int doWirelessStatisticsRequest( iw_statistics* iwStats, const char* _ifname = 0 );
+};
+
+#endif //WATOOLS_H
diff --git a/src/wlassistant.cpp b/src/wlassistant.cpp
new file mode 100644
index 0000000..bf58914
--- /dev/null
+++ b/src/wlassistant.cpp
@@ -0,0 +1,1264 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Pawel Nawrocki *
+ * pnawrocki@interia.pl *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#include "wlassistant.h"
+#include "netlistviewitem.h"
+#include "waconfig.h"
+#include "watools.h"
+#include "ui_netparamswizard.h"
+#include "ui_netparamsedit.h"
+
+#include <iostream>
+#include <linux/version.h> //provides LINUX_VERSION* macros
+
+#include <qregexp.h>
+#include <qlabel.h>
+#include <qprocess.h>
+#include <qcursor.h>
+#include <qeventloop.h>
+#include <qtimer.h>
+#include <qcheckbox.h>
+#include <qspinbox.h>
+#include <qwidgetstack.h>
+#include <qtooltip.h>
+
+#include <kpushbutton.h>
+#include <kcombobox.h>
+#include <klistview.h>
+#include <kapplication.h>
+#include <kiconloader.h>
+#include <kmessagebox.h>
+#include <kpopupmenu.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+
+WirelessAssistant::WirelessAssistant(QWidget* parent, const char* name, bool modal, WFlags fl)
+ : mainWindow(parent,name, modal,fl)
+{
+ buttonScan->setIconSet( SmallIconSet("reload") );
+ buttonConnect->setIconSet( SmallIconSet("connect_creating") );
+ buttonOptions->setIconSet( SmallIconSet("configure") );
+ buttonClose->setIconSet( SmallIconSet("fileclose") );
+
+ netList->setAllColumnsShowFocus(1);
+ netList->setItemMargin(8);
+ frameDevice->hide();
+
+ /// Network List Widget
+ connect( buttonScan, SIGNAL(clicked()),
+ this, SLOT(netScan()) );
+
+ connect( buttonConnect, SIGNAL(clicked()),
+ this, SLOT(itemAction()) );
+
+ connect( buttonClose, SIGNAL(clicked()),
+ this, SLOT(close()) );
+
+ connect( devCombo, SIGNAL(activated( const QString & )),
+ this, SLOT(setDev( const QString & )) );
+
+ connect( netList, SIGNAL(rightButtonPressed( QListViewItem*, const QPoint&, int )),
+ SLOT(showItemContextMenu( QListViewItem*, const QPoint&, int )) );
+
+ /// Settings Widget
+ connect( buttonOptions, SIGNAL(toggled(bool)),
+ this, SLOT(togglePage(bool)) );
+
+ connect( buttonEnableAllMessages, SIGNAL(clicked()),
+ this, SLOT(enableAllMessages()) );
+
+ /// Global KDE Options
+ connect( KApplication::kApplication(), SIGNAL(settingsChanged(int)),
+ this, SLOT(updateConfiguration(int)) );
+
+ setMouseBehaviour();
+
+ QTimer::singleShot(10, this, SLOT(init()) ); //WAIT FOR THE UI TO BE READY BEFORE FURTHER SETUP (msec)
+}
+
+WirelessAssistant::~WirelessAssistant()
+{}
+
+/*$SPECIALIZATION$*/
+
+
+void WirelessAssistant::init()
+{
+ statusLabel->setText(i18n("Initializing..."));
+ statusLabel->repaint();
+
+ ////////////////////////////////////////
+ ///// CHECK FOR SYSFS (KERNEL 2.6) /////
+ if ( !QFile::exists("/sys") ) {
+ std::cout << "Sysfs not present. Exiting." << std::endl;
+ KMessageBox::error( 0, i18n("Kernel 2.6 or later not present.\nWireless Assistant will now quit.") );
+ close();
+ return;
+ }
+
+ /////////////////////////////////////////////////////
+ ///// LOAD CONFIG FILE INCL. ALL NET PARAMETERS /////
+ WAConfig::self()->setCurrentGroup("Global Options");
+ WAConfig::self()->addItemBool("Auto Quit", autoQuit);
+ WAConfig::self()->addItemBool("Auto Reconnect", autoReconnect);
+ WAConfig::self()->addItemBool("Auto Connect", autoConnect);
+ WAConfig::self()->addItemInt("Delay Before Scanning", DelayBeforeScanning);
+ WAConfig::self()->addItemBool("Group APs", groupAPs);
+ WAConfig::self()->addItemInt("DHCP Client Timeout", DhcpTimeout);
+ WAConfig::self()->addItemString("Interface", NetParams.iface);
+
+ WAConfig::self()->setCurrentGroup("Paths");
+ // Commented out cos no longer needed. Paths are detected when necessary.
+ /*WAConfig::self()->addItemString("DHCP Info (dhcpcd)", dhcpcdInfoPath);
+ WAConfig::self()->addItemString("DHCP PID File (dhcpcd)", dhcpcdPidPath);
+ WAConfig::self()->addItemString("DHCP Info (dhclient)", dhclientInfoPath);
+ WAConfig::self()->addItemString("DHCP PID File (dhclient)", dhclientPidPath);*/
+
+ WAConfig::self()->setCurrentGroup("Network Parameters");
+ WAConfig::self()->addItemStringList("NetParamsList", NetParamsList );
+ WAConfig::self()->readConfig();
+ checkAutoQuit->setChecked(autoQuit);
+ checkAutoReconnect->setChecked(autoReconnect);
+ checkAutoConnect->setChecked(autoConnect);
+ checkGroupAPs->setChecked(groupAPs);
+ if (!DelayBeforeScanning)
+ DelayBeforeScanning = spinDelayBeforeScanning->value();
+ else
+ spinDelayBeforeScanning->setValue(DelayBeforeScanning);
+ if (!DhcpTimeout)
+ DhcpTimeout = spinDhcpTimeout->value();
+ else
+ spinDhcpTimeout->setValue(DhcpTimeout);
+
+ std::cout << "Loaded application options." << std::endl;
+
+ ///////////////////////////////////
+ ///// DETECT WIRELESS DEVICES /////
+ QStringList devList = interfaceList();
+ if ( devList.count()==0 ) {
+ std::cout << "No wireless interfaces found. Exiting." << std::endl;
+ KMessageBox::error(0, i18n("No usable wireless devices found.\nWireless Assistant will now quit."));
+ close();
+ return;
+ }
+ std::cout << "Wireless interface(s): " << devList.join(", ") << std::endl;
+ devCombo->insertStringList(devList);
+
+ if (devCombo->count() > 1) { //check if last used (saved) interface is available (only if more that 1 interface present).
+ for (int i=0; i<devCombo->count(); i++) {
+ if ( devCombo->text(i)==NetParams.iface ) { //select matching interface.
+ devCombo->setCurrentItem( i );
+ break;
+ }
+ }
+ frameDevice->show(); //only if more than 1 wireless device.
+ }
+ NetParams.iface = devCombo->currentText(); // set interface name
+ WATools::setInterface( NetParams.iface ); // set fallback interface for WATools
+
+ //////////////////////////////////
+ ///// CHECK FILE PERMISSIONS /////
+ if (!QFileInfo("/etc/resolv.conf").isWritable()) {
+ std::cout << "warning: /etc/resolv.conf not writable" << std::endl;
+ KMessageBox::information(0, i18n("<qt><p>You might have insufficient permissions for Wireless Assistant to function properly.</p><p>Did you run it using '<tt>sudo</tt>'?</p></qt>") );
+ }
+ std::cout << "Permissions checked." << std::endl;
+
+ //////////////////////////////////
+ ///// INITIALIZE COMMANDS
+ Commands.init();
+
+ ///////////////////////////////////////
+ ///// INITIALIZE GLOBAL VARIABLES /////
+ wpaAvailable = ( !( Commands.wpa_supplicant.isEmpty() || Commands.wpa_cli.isEmpty() ) );
+ connectedItem = 0;
+ timerGui = new QTimer();
+ timerConnectionCheck = new QTimer();
+ connect( timerGui, SIGNAL(timeout()), SLOT(updateConnectedItem()) );
+ connect( timerConnectionCheck, SIGNAL(timeout()), SLOT(checkConnectionStatus()) );
+
+ ////////////////////////
+ ///// DETECT & SET PATHS /////
+ if (!Commands.allFound) { //all ok or ONLY dhcpcd not found (i.e. dhclient present).
+ std::cout << "Missing executables (" << Commands.notFound.join("', '") << "). Exiting." << std::endl;
+ KMessageBox::error(0, i18n("Executable(s) '%1' could not be found.\nWireless Assistant will now quit.").arg(Commands.notFound.join("', '")) );
+ close();
+ return;
+ }
+
+ KStandardDirs standardDirs;
+ wpaConfigFile = standardDirs.saveLocation("config").append("wlassistantwpa");
+
+ ///////////////////////////////////////
+ ///// SCAN FOR AVAILABLE NETWORKS /////
+ if ( autoConnect )
+ QTimer::singleShot( 0, this, SLOT(netAutoConnect()) );
+ else
+ QTimer::singleShot( 0, this, SLOT(netScan()) );
+}
+
+void WirelessAssistant::checkConnectionStatus()
+{
+ QListViewItem* lvi;
+ if (groupAPs) lvi = getItemByEssid( WATools::essid(NetParams.iface));
+ else lvi = getItemByAp( WATools::ap(NetParams.iface ));
+ bool needsKey;
+ lvi ? needsKey = static_cast<NetListViewItem*>(lvi)->enc() : needsKey = 0;
+ if ( WATools::isConnected(NetParams.iface) && WATools::hasKey(NetParams.iface)==needsKey ) { //connection OK
+ if (!connectedItem) {
+ std::cout << "Now connected to '" << WATools::essid(NetParams.iface) << "'" << std::endl;
+ if (groupAPs && NetParams.ap=="any") {
+ setConnectedItem( WATools::essid( NetParams.iface ) );
+ setNetParamsFromConfig( WATools::essid( NetParams.iface ) );
+ } else {
+ setConnectedItem( WATools::ap( NetParams.iface ) );
+ setNetParamsFromConfig( WATools::ap( NetParams.iface ) );
+ }
+ setNetParamsFromList( connectedItem );
+ }
+ } else if (connectedItem) { //connection LOST
+ setConnectedItem(0);
+ timerConnectionCheck->stop();
+ if ( autoReconnect || KMessageBox::questionYesNo(0, i18n("Connection to '%1' has been lost!\nWould you like to reconnect?").arg(NetParams.essid), i18n("Connection Lost") , KStdGuiItem::yes(), KStdGuiItem::no() ) == KMessageBox::Yes ) {
+ netDisconnect( true );
+ netConnect();
+ }
+ timerConnectionCheck->start( WA_CONNECTION_CHECK_INTERVAL );
+ }
+}
+
+void WirelessAssistant::removeNetParams()
+{
+ NetListViewItem *nvi = static_cast<NetListViewItem*>(netList->selectedItem());
+ QString ap = nvi->ap(); QString essid = nvi->essid();
+ for (QStringList::Iterator nps = NetParamsList.begin(); nps != NetParamsList.end(); nps++) {
+ if ( (*nps).section(",",2,2)==ap && (*nps).section(",",1,1)==essid) {
+ if ( KMessageBox::warningContinueCancel(0, i18n("<qt><p>Settings for network '<b>%1</b>' are about to be deleted.</p><p>Would you like to continue?</p></qt>").arg(essid)) == KMessageBox::Continue ) {
+ if (nvi->hidden()) // hiddenEssid = 1
+ nvi->setEssid("<hidden>");
+ NetParamsList.remove(nps);
+ WAConfig::self()->writeConfig();
+ statusLabel->setText( i18n("Settings deleted.") );
+ }
+ break;
+ }
+ }
+}
+
+
+void WirelessAssistant::setDNS( const WANetParams & np )
+{
+ QFile f("/etc/resolv.conf");
+ if (f.open( IO_WriteOnly | IO_Truncate )) {
+ QTextStream s( &f );
+ if (!np.domain.isEmpty()) {
+ s << QString("domain " + np.domain + "\n");
+ std::cout << "resolv.conf: domain " << np.domain << std::endl;
+ }
+ if (!np.dns1.isEmpty()) {
+ s << QString("nameserver " + np.dns1 + "\n");
+ std::cout << "resolv.conf: nameserver " << np.dns1 << std::endl;
+ }
+ if (!np.dns2.isEmpty()) {
+ s << QString("nameserver " + np.dns2 + "\n");
+ std::cout << "resolv.conf: nameserver " << np.dns2 << std::endl;
+ }
+ f.close();
+ } else {
+ std::cout << "dns setup error: " << f.name() << " is not writeable." << std::endl;
+ KMessageBox::error(0, i18n("<qt><p>File '<i>%1</i>' could not be opened for writing.</p><p>Nameserver(s) and/or domain are not set.</p></qt>").arg(f.name()) );
+ }
+}
+
+void WirelessAssistant::netScan()
+{
+ timerConnectionCheck->stop(); //stop while scanning.
+ netScan( NetParams );
+ if (netList->childCount() > 0) {
+ QTimer::singleShot( 0, this, SLOT(checkConnectionStatus()) );
+ timerConnectionCheck->start(WA_CONNECTION_CHECK_INTERVAL);
+ }
+}
+
+void WirelessAssistant::netScan( const WANetParams & np )
+{
+ if (!radioEnabled()) {
+ statusLabel->setText("Radio off. Scanning aborted.");
+ std::cout << "Radio is off!" << std::endl;
+ setUi(1);
+ return;
+ }
+
+ setUi(0);
+
+ bool wasConnected = false;
+ if (connectedItem) {
+ wasConnected = true;
+ setConnectedItem( 0 );
+ }
+
+ if ( !WATools::isUp(np.iface) ) {
+ statusLabel->setText(i18n("Bringing interface %1 up...").arg(np.iface));
+ //runCommand( Commands.cmd("ifup",np) );
+ WATools::setUp(true, np.iface);
+ if (DelayBeforeScanning>0) {
+ statusLabel->setText(i18n("Waiting before scanning..."));
+ statusLabel->repaint();
+ KApplication::eventLoop()->processEvents( QEventLoop::ExcludeUserInput );
+ usleep(DelayBeforeScanning * 1000000); // delay * 1000ms
+ }
+ }
+
+ statusLabel->setText(i18n("Scanning..."));
+ statusLabel->repaint();
+
+ netList->clear();
+
+ QString result;
+ statusLabel->setText(i18n("Scanning..."));
+ result = runCommand( Commands.cmd("scan",np) );
+
+ parseScan( result );
+
+ if (netList->childCount() > 0) {
+ std::cout << "Networks found: " << QString::number( netList->childCount() ) << std::endl;
+ if (wasConnected)
+ groupAPs ? setConnectedItem( WATools::essid() ) : setConnectedItem( WATools::ap() ); //mark item as connected.
+ statusLabel->setText( i18n("Done.") );
+ } else {
+ //Workaround for cards overusing cache - bringing if down seems to solve it.
+ //runCommand( Commands.cmd("ifdown", NetParams) ); //Commented out b/c it seems to cause more problems than it solves. (like no scan results)
+ std::cout << "No networks found!" << std::endl;
+ statusLabel->setText( i18n("No networks found.") );
+ if ( result.find("Resource temporarily unavailable")>-1 ) {
+ std::cout << "Radio switch seems to be off." << std::endl;
+ KMessageBox::information(0, i18n("Radio of your wireless card seems to be turned off using an external switch on your computer.\nYou need turn it on to be able to use wireless networks.") );
+ }
+ }
+ setNetListColumns();
+}
+
+void WirelessAssistant::parseScan( const QString & output )
+{
+ QString essid;
+ QStringList essidList;
+ QString channel;
+ QString mode;
+ int qualInt;
+ bool enc; //default to false
+ bool hidden; //default to false
+ QString ap;
+
+ // security parameters
+ bool wpa;
+ QStringList wpaSettings;
+ //QString wpaVersion, wpaGroupCipher, wpaPairwiseCipher, wpaAuthenticationSuite;
+
+
+ bool ok_channel = true; //does iwlist return channel?
+ QString section;
+
+ netList->setUpdatesEnabled( false ); //do not redraw while adding items to avoid flicker.
+
+ for (int i=1; (!output.section("Cell ",i,i).isEmpty()); i++ ) {
+ section = output.section("Cell ",i,i);
+
+ // GET ESSID VALUE
+ essid = getVal(section, "ESSID\\W+\"(.+)\"");
+
+ // GET CHANNEL NUMBER
+ channel = getVal(section, "Channel\\D+(\\d+)" );
+ if (channel.isEmpty()) {
+ channel = getVal(section, "Frequency\\D+(\\d.+)Hz");
+ ok_channel = false;
+ }
+
+ // GET MODE VALUE
+ mode = getVal(section, "Mode:(\\w)"); //get 1st letter of mode.
+ if (mode.upper()!="M") //this covers both Managed and Master. Other are unsupported.
+ continue;
+
+ // GET AP
+ ap = getVal(section, "Address\\W+(\\S+)");
+
+ if (essid.isEmpty()) {
+ if (!ap.isEmpty()) //older wireless-tools report "", not "<hidden>"
+ essid = "<hidden>";
+ else
+ continue; //some cards report one '' essid even when no network's present. Workaround.
+ }
+
+ if (essid=="<hidden>") {
+ hidden = true;
+ essid = matchEssidForAp( ap );
+ } else
+ hidden=false;
+
+ // GET QUALITY
+ int wsignal;
+ //check if driver reports quality directly
+ qualInt = getVal(section, "Quality\\D+(\\d+)").toInt();
+
+ if (qualInt == 0) { //noise not reported? estimate.
+ wsignal = getVal(section, "Signal level\\D+(\\d+)" ).toInt();
+ qualInt = 100-wsignal;
+ }
+ qualInt = (100*qualInt)/50; //adjust and normalize quality (0-100). 50 is the best (6 stars) noise/signal difference
+ if (qualInt > 100) qualInt = 100;
+
+ // GET ENCRYPTION
+ if (getVal(section, "Encryption key\\W+(\\w+)" ).upper()=="OFF")
+ enc = false;
+ else {
+ enc = true;
+
+ wpaSettings.clear();
+ if ( section.contains("WPA2 Version") ) wpaSettings << "WPA2"; //prefer WPA2 over WPA
+ else if ( section.contains("WPA Version") ) wpaSettings << "WPA";
+
+ wpa = ( !wpaSettings.isEmpty() );
+ if (wpa) {
+ wpaSettings << getVal(section, "Group Cipher : (\\w+)") \
+ << getVal(section, "Pairwise Ciphers \\(\\d+\\) : ([\\w ]+)[\n\r]") \
+ << getVal(section, "Authentication Suites \\(\\d+\\) : ([\\w ]+)[\n\r]");
+ }
+ }
+
+ // CHECK IF SAME ESSID ALREADY FOUND, if necessary
+ if (groupAPs) {
+ if ( !hidden && essidList.contains(essid) ) {
+ NetListViewItem* sameEssid = static_cast<NetListViewItem*>(getItemByEssid(essid));
+ sameEssid->setAp("any");
+ if (sameEssid->quality() < qualInt) {
+ sameEssid->setQuality(qualInt);
+ sameEssid->setChannel(channel);
+ }
+ continue;
+ }
+ essidList << essid;
+ }
+
+ NetListViewItem* nvi = new NetListViewItem( netList, essid, channel, qualInt, enc, ap, hidden );
+ if (wpa) nvi->setWpaSettings( wpaSettings );
+ }
+
+ if (!ok_channel)
+ netList->setColumnText( 1, i18n("Freq (Hz)") );
+
+ /// @fixme HACK: Test item for the network list.
+ /// new NetListViewItem( netList, "Test Net", "9", 76, 1, "00:00:00:00:00:11", 0 );
+
+
+ netList->setUpdatesEnabled( true );
+ setUi(1);
+}
+
+bool WirelessAssistant::radioEnabled()
+{
+ bool r;
+ if ( WATools::txpower()==-1 ) {
+ if (KMessageBox::questionYesNo(0, i18n("Radio of your wireless card is off.\nWould you like to turn it on?") )== KMessageBox::Yes) {
+ runCommand( Commands.cmd("radio_on", NetParams) );
+ r = true;
+ } else {
+ r = false;
+ }
+ } else
+ r = true;
+
+ return r;
+}
+
+void WirelessAssistant::setNetParamsFromList( QListViewItem* lvi )
+{
+ NetListViewItem *nvi = static_cast<NetListViewItem*>(lvi);
+ NetParams.essid = nvi->essid();
+ NetParams.hiddenEssid = nvi->hidden();
+ //NetParams.mode = nvi->mode();
+ NetParams.channel = nvi->channel();
+ NetParams.ap = nvi->ap();
+ NetParams.wpaSettings = nvi->wpaSettings();
+ NetParams.wep = ( nvi->enc() && NetParams.wpaSettings.isEmpty() );
+ NetParams.wpa = ( nvi->enc() && !NetParams.wpaSettings.isEmpty() );
+}
+
+bool WirelessAssistant::setNetParamsFromConfig( const QString & s )
+{
+ for (QStringList::Iterator nps = NetParamsList.begin(); nps != NetParamsList.end(); nps++) {
+ if ( (*nps).section(",",2,2)==s || ( (*nps).section(",",1,1)==s && (*nps).section(",",2,2)=="any") ) {
+ NetParams.loadNetParamsString( *nps );
+ if (!s.contains(":")) NetParams.ap = "any"; //if searched by essid
+ return 1;
+ }
+ }
+ return 0;
+}
+
+void WirelessAssistant::itemAction()
+{
+ QListViewItem* lvi = netList->selectedItem();
+ if (!lvi)
+ return;
+
+ NetListViewItem* nvi = static_cast<NetListViewItem*>(lvi);
+ ///////////////////
+ ///// ACTIONS /////
+ if (nvi->isConnected()) {
+ std::cout << "ACTION: DISCONNECT." << std::endl;
+ netDisconnect();
+ return;
+ } else {
+ std::cout << "ACTION: CONNECT." << std::endl;
+ netConnect();
+ return;
+ }
+}
+
+void WirelessAssistant::netAutoConnect()
+{
+ netScan();
+ if ( WATools::isConnected(NetParams.iface) ) return;
+
+ int bestItem = -1;
+ int bestQuality = 0;
+ for ( int i = 0; i < netList->childCount(); i++ ) {
+ NetListViewItem* nvi = static_cast<NetListViewItem*>( netList->itemAtIndex(i) );
+ QString search = nvi->ap();
+ if (search == "any") search = nvi->essid();
+ if ( setNetParamsFromConfig(search) ) {
+ if ( nvi->quality() > bestQuality ) {
+ bestQuality = nvi->quality();
+ bestItem = i;
+ }
+ }
+ }
+
+ if ( bestItem != -1 ) {
+ NetListViewItem* nvi = static_cast<NetListViewItem*>( netList->itemAtIndex( bestItem ) );
+ setNetParamsFromList( nvi );
+ QString search = nvi->ap();
+ if (search == "any") search = nvi->essid();
+ setNetParamsFromConfig( search );
+ timerConnectionCheck->stop();
+ netConnect( NetParams );
+ timerConnectionCheck->start(WA_CONNECTION_CHECK_INTERVAL);
+ } else {
+ statusLabel->setText( i18n("Auto connection failed.") );
+ std::cout << "Auto connection failed: no available configured networks found." << std::endl;
+ }
+}
+
+void WirelessAssistant::netConnect()
+{
+ timerConnectionCheck->stop();
+ setNetParamsFromList( netList->selectedItem() );
+ //can't connect if WPA needed, and wpa_supplicant and wpa_cli not available
+ if ( NetParams.wpa && !wpaAvailable ) {
+ KMessageBox::error(0, i18n("<qt><p><b>Can not connect to network '%1'.<b></p><p>The network you are trying to connect to requires WPA authentication. The necessary executables <i>wpa_supplicant</i> and <i>wpa_cli</i> could not be found. Install <i>wpa_supplicant</i> and restart Wireless Assistant to connect.</p></qt>").arg(NetParams.essid) );
+ timerConnectionCheck->start(WA_CONNECTION_CHECK_INTERVAL); //resume connection checking
+ return;
+ }
+ QString search = NetParams.ap;
+ if (search == "any") search = NetParams.essid;
+ if ( (NetParams.essid=="<hidden>") || (!setNetParamsFromConfig( search )) ) {
+ ui_NetParamsWizard *netwiz = new ui_NetParamsWizard;
+ if (!NetParams.hiddenEssid)
+ netwiz->setCaption( i18n("%1 - First Connection Wizard").arg(NetParams.essid) );
+ netwiz->setEssidEnabled( NetParams.hiddenEssid );
+ netwiz->setWepEnabled( NetParams.wep );
+ netwiz->setWpaEnabled( NetParams.wpa, NetParams.wpaSettings );
+ netwiz->exec();
+ if (netwiz->result()==QDialog::Rejected) {
+ delete netwiz;
+ timerConnectionCheck->start(WA_CONNECTION_CHECK_INTERVAL); //resume connection checking
+ return;
+ } else {
+ NetParams = netwiz->readNetParams( NetParams );
+ NetParams.wasHiddenEssid = NetParams.hiddenEssid; //first time values.
+ NetParams.wasWep = NetParams.wep;
+ NetParamsList << NetParams.netParamsString();
+ if (NetParams.hiddenEssid)
+ static_cast<NetListViewItem*>(netList->selectedItem())->setEssid( NetParams.essid );
+ WAConfig::self()->writeConfig();
+ delete netwiz;
+ }
+ }
+
+ if (NetParams.review())
+ editNetParams();
+ updateNetParams();
+ netConnect( NetParams );
+ timerConnectionCheck->start(WA_CONNECTION_CHECK_INTERVAL);
+}
+
+void WirelessAssistant::updateNetParams()
+{
+ for (QStringList::Iterator nps = NetParamsList.begin(); nps != NetParamsList.end(); nps++) {
+ if ( (*nps).section(",",2,2)==NetParams.ap ) {
+ QString newNps = NetParams.netParamsString();
+ if ( newNps!=(*nps) ) {
+ (*nps) = newNps;
+ WAConfig::self()->writeConfig();
+ std::cout << "Network settings updated." << std::endl;
+ statusLabel->setText( i18n("Network settings updated.") );
+ break;
+ }
+ }
+ }
+}
+
+QString WirelessAssistant::matchEssidForAp( const QString & ap )
+{
+ for (QStringList::Iterator nps = NetParamsList.begin(); nps != NetParamsList.end(); nps++) {
+ if ( (*nps).section(",",2,2)==ap ) {
+ return (*nps).section(",",1,1); //essid
+ }
+ }
+ return "<hidden>";
+}
+
+void WirelessAssistant::netConnect( const WANetParams & np )
+{
+ setUi(0);
+
+ if (connectedItem)
+ netDisconnect( true );
+ else if ( dhcpClientRunning() )
+ runCommand( Commands.cmd("kill_dhcp", np) ); //kill any stale DHCP client running
+
+ if ( !np.preConnectionCommand.isEmpty() ) {
+ std::cout << "Running pre-connection command: " << np.preConnectionCommand << std::endl;
+ statusLabel->setText( i18n("Running pre-connection command...") );
+ runCommand( QStringList::split( " ", np.preConnectionCommand ), np.preConnectionTimeout, np.preConnectionDetached );
+ } else
+ std::cout << "No pre-connection command specified." << std::endl;
+
+
+ statusLabel->setText( i18n("Connecting to '%1'...").arg(np.essid) );
+ statusLabel->repaint();
+ if (!WATools::isUp(np.iface) ) WATools::setUp( true, np.iface );
+ //runCommand( Commands.cmd("ifup", np) );
+ if ( runCommand( Commands.cmd("iwconfig_set", np) ).find("8B04") > -1 ) { // error 8B04 - Request 'Set Frequency' not supported.
+ WANetParams np2 = np;
+ np2.channel = "0";
+ runCommand( Commands.cmd("iwconfig_set", np2) );
+ }
+
+ runCommand( Commands.cmd("iwconfig_ap", np) );
+
+ ///////////////////////
+ ///// RUN WPA CLIENT IF NEEDED
+ if (np.wpa) {
+ if ( generateWpaConfigFile( np.essid, np.wpaSettings, np.wpaKey ) ) {
+ if ( !setWpaClientEnabled( true, np.iface ) ) {
+ setUi(1);
+ std::cout << "CONNECTION FAILED." << std::endl;
+ statusLabel->setText( i18n("Connection failed.") );
+ runCommand( Commands.cmd("disconnect", np ) );
+ return;
+ }
+ }
+ }
+
+ ////////////////////////
+ ///// CONFIGURE IP ADDRESS etc.
+ if (np.dhcp) { //DHCP config
+ QString dhcp_out = runCommand( Commands.cmd("ifconfig_dhcp", np), DhcpTimeout );
+ if ( dhcp_out.contains("::ERR::") && !dhcp_out.contains("bound to ") ) { // 'bound to' is a check for dhclient, which gives some output to stderr even when succeeded
+ if ( dhcpClientRunning() )
+ runCommand( Commands.cmd("kill_dhcp", np) ); //kill any stale DHCP client running (seems it's dhclient only)
+ setUi(1);
+ std::cout << "CONNECTION FAILED." << std::endl;
+ statusLabel->setText( i18n("Connection failed.") );
+ runCommand( Commands.cmd("disconnect", np ) );
+ return;
+ }
+ } else { //manual config
+ runCommand( Commands.cmd("ifconfig_manual", np) );
+ setDNS( np );
+ runCommand( Commands.cmd("route_add", np) );
+ }
+
+ if ( !np.postConnectionCommand.isEmpty() ) {
+ std::cout << "Running post-connection command: " << np.postConnectionCommand << std::endl;
+ statusLabel->setText( i18n("Running post-connection command...") );
+ runCommand( QStringList::split( " ", np.postConnectionCommand ), np.postConnectionTimeout, np.postConnectionDetached );
+ } else
+ std::cout << "No post-connection command specified." << std::endl;
+
+ //////////////////////
+ ///// CHECK CONNECTION
+ statusLabel->setText(i18n("Testing connection..."));
+ usleep(200*1000); //sleep 200ms to make sure all parameters are set.
+ if ( WATools::isConnected(np.iface)) {
+ if (autoQuit)
+ this->close();
+ groupAPs ? setConnectedItem( np.essid ) : setConnectedItem( np.ap );
+ statusLabel->setText( i18n("Successfully connected to '%1'.").arg(np.essid) );
+ setUi(1);
+ } else {
+ std::cout << "CONNECTION FAILED." << std::endl;
+ statusLabel->setText(i18n("Connection failed."));
+ runCommand( Commands.cmd("disconnect", np ) );
+ setConnectedItem( 0 );
+ setUi(1);
+ if (KMessageBox::questionYesNo(0, i18n("Connection failed.\nWould you like to review settings for this network?"), i18n("Review Settings?") , KStdGuiItem::yes(), KStdGuiItem::no(), "ReviewSettings" ) == KMessageBox::Yes)
+ editNetParams();
+ }
+}
+
+void WirelessAssistant::updateConnectedItem()
+{
+ connectedItem->setQuality( WATools::quality() );
+}
+
+void WirelessAssistant::setConnectedItem( const QString & netid )
+{
+ timerConnectionCheck->stop(); //stop timer while changing currentItem
+ if (connectedItem) {
+ timerGui->stop();
+ connectedItem->setConnected( false );
+ connectedItem = 0;
+ }
+ if (!netid.isEmpty()) {
+ QListViewItem* lvi;
+ if (netid.contains(":")) lvi = getItemByAp( netid ); //netid is an AP address
+ else lvi = getItemByEssid( netid );
+ if (lvi) {
+ NetListViewItem* nvi = static_cast<NetListViewItem*>(lvi);
+ nvi->setConnected( true );
+ connectedItem = nvi;
+ netList->sort(); // sort to make sure new connectedItem is 1st.
+ }
+ }
+
+ if (connectedItem) {
+ timerGui->start(2500); //update quality indicator every 2.5seconds
+ }
+ updateConnectButton( netList->selectedItem() );
+ timerConnectionCheck->start(WA_CONNECTION_CHECK_INTERVAL);
+}
+
+void WirelessAssistant::netDisconnect( const bool & quiet )
+{
+ if ( (quiet) || (KMessageBox::warningContinueCancel(0, i18n("<qt><p>You are about to disconnect from '<b>%1</b>'.</p><p>Would you like to continue?<p></qt>").arg(connectedItem->essid()) )== KMessageBox::Continue ) ) {
+ timerConnectionCheck->stop(); //stop while disconnecting.
+
+ if ( !NetParams.preDisconnectionCommand.isEmpty() ) {
+ std::cout << "Running pre-disconnection command: " << NetParams.preDisconnectionCommand << std::endl;
+ statusLabel->setText( i18n("Running pre-disconnection command...") );
+ runCommand( QStringList::split( " ", NetParams.preDisconnectionCommand ), NetParams.preDisconnectionTimeout, NetParams.preDisconnectionDetached );
+ } else
+ std::cout << "No pre-disconnection command specified." << std::endl;
+
+
+ statusLabel->setText( i18n("Disconnecting...") );
+ statusLabel->repaint();
+ setConnectedItem( 0 );
+ if ( NetParams.dhcp ) {
+ if ( dhcpClientRunning() ) {
+ runCommand( Commands.cmd( "kill_dhcp", NetParams ) );
+ statusLabel->setText( i18n("Waiting for DHCP client to shut down...") );
+ statusLabel->repaint();
+ QTimer* tmr = new QTimer();
+ tmr->start(1500, true); //wait 1.5sec for dhcp client to really shutdown, single shot.
+ while ( tmr->isActive() ) {
+ KApplication::eventLoop()->processEvents( QEventLoop::AllEvents );
+ usleep(75*1000); //75msec on Linux
+ }
+ delete tmr;
+ }
+ } else {
+ runCommand( Commands.cmd( "route_del", NetParams ) );
+ }
+ runCommand( Commands.cmd( "disconnect", NetParams ) );
+ WATools::setUp( false, NetParams.iface );
+
+ if ( NetParams.wpa )
+ setWpaClientEnabled( false );
+
+ std::cout << "DISCONNECTED." << std::endl;
+
+ if ( !NetParams.postDisconnectionCommand.isEmpty() ) {
+ std::cout << "Running post-disconnection command: " << NetParams.postDisconnectionCommand << std::endl;
+ statusLabel->setText( i18n("Running post-disconnection command...") );
+ runCommand( QStringList::split( " ", NetParams.postDisconnectionCommand ), NetParams.postDisconnectionTimeout, NetParams.postDisconnectionDetached );
+ } else
+ std::cout << "No post-disconnection command specified." << std::endl;
+
+
+ statusLabel->setText( i18n("Done.") );
+ timerConnectionCheck->start(WA_CONNECTION_CHECK_INTERVAL);
+ } else {
+ statusLabel->setText( i18n("Cancelled.") );
+ }
+}
+
+QListViewItem* WirelessAssistant::getItemByAp( const QString & ap )
+{
+ QListViewItem* lvi = netList->firstChild();
+ while (lvi) {
+ if ( static_cast<NetListViewItem*>(lvi)->
+ ap() == ap ) {
+ break;
+ }
+ lvi = lvi->nextSibling();
+ }
+ return lvi;
+}
+
+QListViewItem* WirelessAssistant::getItemByEssid( const QString & essid )
+{
+ QListViewItem* lvi = netList->firstChild();
+ while (lvi) {
+ if ( static_cast<NetListViewItem*>(lvi)->
+ essid() == essid ) {
+ break;
+ }
+ lvi = lvi->nextSibling();
+ }
+ return lvi;
+}
+
+
+void WirelessAssistant::updateConfiguration(int category)
+{
+ if (category == KApplication::SETTINGS_MOUSE) {
+ setMouseBehaviour();
+ return;
+ }
+ if (category == -1) {
+ autoQuit = checkAutoQuit->isChecked();
+ autoReconnect = checkAutoReconnect->isChecked();
+ autoConnect = checkAutoConnect->isChecked();
+ groupAPs = checkGroupAPs->isChecked();
+ DelayBeforeScanning = spinDelayBeforeScanning->value();
+ DhcpTimeout = spinDhcpTimeout->value();
+ }
+}
+
+void WirelessAssistant::togglePage(bool options)
+{
+ buttonScan->setDisabled(options);
+ buttonConnect->setDisabled(options);
+ if (options) {
+ if (WAConfig::self()->config()->groupList().contains("Notification Messages")>0)
+ buttonEnableAllMessages->setEnabled(true);
+ else
+ buttonEnableAllMessages->setEnabled(false);
+ widgetStack->raiseWidget(optionsPage);
+ } else {
+ widgetStack->raiseWidget(netPage);
+ updateConfiguration(-1);
+ }
+}
+
+void WirelessAssistant::enableAllMessages()
+{
+ KMessageBox::enableAllMessages();
+ buttonEnableAllMessages->setEnabled( false );
+}
+
+void WirelessAssistant::setMouseBehaviour()
+{
+ if ( KGlobalSettings::singleClick() ) {
+ disconnect( netList, SIGNAL(selectionChanged(QListViewItem*)),
+ this, SLOT(updateConnectButton(QListViewItem*)) );
+ disconnect( netList, SIGNAL(doubleClicked(QListViewItem*, const QPoint &, int)),
+ this, SLOT(itemAction()) );
+ connect( netList, SIGNAL(clicked(QListViewItem*, const QPoint &, int)),
+ this, SLOT(itemAction()) );
+ buttonConnect->hide();
+ } else {
+ disconnect( netList, SIGNAL(clicked(QListViewItem*, const QPoint &, int)),
+ this, SLOT(itemAction()) );
+
+ connect( netList, SIGNAL(selectionChanged(QListViewItem*)),
+ this, SLOT(updateConnectButton(QListViewItem*)) );
+ connect( netList, SIGNAL(doubleClicked(QListViewItem*, const QPoint &, int)),
+ this, SLOT(itemAction()) );
+ buttonConnect->show();
+ }
+}
+
+void WirelessAssistant::updateConnectButton(QListViewItem* lvi)
+{
+ QToolTip::remove
+ (buttonConnect);
+ if ( lvi == connectedItem ) {
+ buttonConnect->setText( i18n("&Disconnect") );
+ QToolTip::add
+ ( buttonConnect, i18n("Disconnect from the selected network") );
+
+ } else {
+ buttonConnect->setText( i18n("&Connect") );
+ QToolTip::add
+ ( buttonConnect, i18n("Connect to the selected network") );
+
+ }
+}
+
+void WirelessAssistant::setDev( const QString & ifname)
+{
+ NetParams.iface = ifname;
+ WATools::setInterface( ifname );
+ std::cout << "Selected interface: " << ifname << std::endl;
+ netScan();
+}
+
+QString WirelessAssistant::runCommand( const QStringList & cmd, int timeout, bool detached )
+{
+ if (cmd.isEmpty())
+ return QString::null;
+
+ // a very basic and easy-to-workaround attepmt to restrict using dangerous commands via custom commands setting. This *REALLY* needs a working solution.
+ if ( cmd[0] == "rm" || cmd[0] == "mv" || cmd[0] == "cp" || cmd[0] == "ln" ) return QString::null;
+
+ QProcess* p = new QProcess( this );
+ p->setArguments( cmd );
+
+ p->start();
+ if (detached) {
+ p = 0;
+ return QString::null;
+ }
+
+ QTimer* timerProc = new QTimer(); //timeout timer
+ if ( timeout>0 && !detached ) {
+ connect( timerProc, SIGNAL(timeout()), p, SLOT(kill()) );
+ timerProc->start(timeout*1000); //convert sec to msec
+ }
+
+ connect(buttonClose, SIGNAL(clicked()),
+ p, SLOT(kill()) );
+ int i = 0;
+
+ while ( p->isRunning() ) { // PROCESS USER EVENTS
+ KApplication::eventLoop()->processEvents( QEventLoop::AllEvents );
+ usleep(75*1000); //75msec on Linux (75000msec on Windows...)
+ if (i==27) { // ca 2sec have passed and the process is still running. Replace the 'Close' button with 'Stop'.
+ disconnect(buttonClose, SIGNAL(clicked()),
+ this, SLOT(close()) );
+ buttonClose->setIconSet( SmallIconSet("stop") );
+ buttonClose->setText( i18n("&Stop") );
+ QToolTip::remove
+ (buttonClose);
+ QToolTip::add
+ ( buttonClose, i18n("Terminate current process\n(%1)").arg( p->arguments().join(" ") ) );
+ }
+ i++;
+ }
+
+ disconnect(buttonClose, SIGNAL(clicked()),
+ p, SLOT(kill()) );
+ if (i>27) {//set 'stop' back to 'close' if needed
+ connect(buttonClose, SIGNAL(clicked()),
+ this, SLOT(close()) );
+ buttonClose->setIconSet( SmallIconSet("fileclose") );
+ buttonClose->setText( i18n("&Quit") );
+ QToolTip::remove
+ (buttonClose);
+ QToolTip::add
+ ( buttonClose, i18n("Quit the application") );
+ }
+
+ if (timerProc->isActive())
+ timerProc->stop();
+ delete timerProc;
+ QString e = QString( p->readStderr() );
+ QString o = QString( p->readStdout() );
+ if (!p->normalExit()) {
+ o.append("::ERR::killed");
+ //std::cout << "Process terminated (timed out)." << std::endl; //too much output when checking for internet when it's not available.
+ }
+ delete p;
+
+ if (!e.isEmpty()) {
+ std::cout << "==>stderr: " << e;// << std::endl;
+ o.append("::ERR::");
+ o.append(e);
+ }
+
+ return o;
+}
+
+void WirelessAssistant::setUi(int uiState)
+{
+
+ if (uiState==0) {
+ devCombo->setEnabled( false );
+ buttonScan->setEnabled( false );
+ buttonConnect->setEnabled( false );
+ buttonOptions->setEnabled( false );
+ KApplication::setOverrideCursor( QCursor(Qt::BusyCursor) );
+ } else {
+ if (devCombo->count() > 0) {
+ devCombo->setEnabled( true );
+ buttonScan->setEnabled( true );
+ }
+ if (netList->childCount() > 0)
+ buttonConnect->setEnabled( true );
+ buttonOptions->setEnabled( true );
+ KApplication::restoreOverrideCursor();
+ }
+}
+
+void WirelessAssistant::showItemContextMenu( QListViewItem* i, const QPoint& p, int c )
+{
+ if (!i)
+ return;
+
+ NetListViewItem *nvi = static_cast<NetListViewItem*>(i);
+
+ QString search = nvi->ap();
+ if (search == "any") search = nvi->essid();
+ bool isConfigured = setNetParamsFromConfig(search);
+
+ KPopupMenu *icm = new KPopupMenu();
+ icm->insertTitle(nvi->essid());
+ if (isConfigured) {
+ if (nvi->isConnected()) {
+ icm->insertItem( SmallIcon("connect_no"), i18n("Disconnect..."), this, SLOT(netDisconnect()) );
+ //icm->insertItem( SmallIcon("reload"), i18n("Reconnect"), this, SLOT(netConnect()) );
+ } else
+ icm->insertItem( SmallIcon("connect_creating"), i18n("Connect"), this, SLOT(netConnect()) );
+ icm->insertSeparator();
+ icm->insertItem(i18n("Forget Settings..."), this, SLOT(removeNetParams()) );
+ icm->insertItem(i18n("Edit Settings..."), this, SLOT(editNetParams()) );
+ } else {
+ if (nvi->isConnected()) {
+ icm->insertItem( SmallIcon("connect_no"), i18n("Disconnect..."), this, SLOT(netDisconnect()) );
+ //icm->insertItem( SmallIcon("reload"), i18n("Configure and Reconnect..."), this, SLOT(netConnect()) );
+ } else
+ icm->insertItem( SmallIcon("connect_creating"), i18n("Configure and Connect..."), this, SLOT(netConnect()) );
+ }
+ icm->exec( QCursor::pos() );
+}
+
+void WirelessAssistant::editNetParams()
+{
+ setNetParamsFromList( netList->selectedItem() ); //prepare NetParams
+ if (NetParams.ap!="any") setNetParamsFromConfig( NetParams.ap ); //prepare NetParams
+ else setNetParamsFromConfig( NetParams.essid );
+
+ ui_NetParamsEdit *netedit = new ui_NetParamsEdit();
+ netedit->setValues( NetParams );
+ netedit->setCaption( i18n("%1 Settings").arg(NetParams.essid) );
+ netedit->exec();
+ if (netedit->result() == QDialog::Rejected) {
+ delete netedit;
+ return;
+ } else { //accepted
+ NetParams = netedit->readNetParams( NetParams );
+ updateNetParams();
+ }
+}
+
+void WirelessAssistant::setNetListColumns()
+{
+ int realWidth = netList->viewportSize( netList->contentsWidth(), netList->contentsHeight() ).width(); //calculate actual width taking scrollbars into account
+ int essidWidth = realWidth - netList->columnWidth(1) - netList->columnWidth(2) - netList->columnWidth(3);
+
+ netList->setColumnWidth(0, essidWidth);
+ netList->triggerUpdate();
+}
+
+bool WirelessAssistant::dhcpClientRunning()
+{
+ QStringList pidPaths;
+ QString pidFile;
+ pidPaths << "/etc/" << "/etc/dhcpc/" << "/var/run/";
+ if ( Commands.dhcpClient=="dhcpcd" )
+ pidFile = QString("dhcpcd-%1.pid").arg(NetParams.iface);
+ else
+ pidFile = QString("dhclient.pid");
+
+ for ( QStringList::Iterator it = pidPaths.begin(); it != pidPaths.end(); ++it ) {
+ if ( QFile( QString(*it).append(pidFile) ).exists() ) {
+ std::cout << "Running DHCP client found." << std::endl;
+ return true;
+ }
+ }
+ std::cout << "No DHCP client running." << std::endl;
+ return false;
+}
+
+QStringList WirelessAssistant::interfaceList()
+{
+ QDir d("/sys/class/net");
+ QStringList ifList = d.entryList( QDir::Dirs );
+ ifList.remove("."); ifList.remove(".."); ifList.remove("lo");
+ std::cout << "All interfaces: " << ifList.join(", ") << std::endl;
+ for (QStringList::Iterator nps = ifList.begin(); nps != ifList.end(); nps++) {
+ const char* i = *nps;
+ bool w = WATools::isWireless( i );
+ if ( !WATools::isWireless( (const char*)*nps ) ) {
+ nps = ifList.remove( nps ); nps--;
+ }
+ }
+ return ifList;
+}
+
+QString WirelessAssistant::getVal(const QString & str, const QString & rxs)
+{
+ QRegExp rx(rxs);
+ rx.search(str);
+ return rx.cap(1).stripWhiteSpace();
+}
+
+bool WirelessAssistant::generateWpaConfigFile( const QString& essid, const QStringList& wpaSettings, const QString& wpaKey )
+{
+ // 0 WPA version (1 or 2), 1 group, 2 pairwise, 3 suite
+ if ( wpaSettings.isEmpty() ) return QString();
+ QString c = "ctrl_interface=/var/run/wpa_supplicant\nnetwork={\nscan_ssid=0\nssid=\""; //fast_reauth=1\n
+ c.append(essid).append("\"\n");
+
+ // WPA version
+ c.append("proto=").append(wpaSettings[0]).append("\n");
+
+ //WPA authentication suite
+ c.append("key_mgmt=");
+ if ( wpaSettings[3].contains("PSK") ) c.append("WPA-PSK\n");
+ else return QString(); // not supported
+
+ //WPA pairwise cipher
+ c.append("pairwise=");
+ c.append( wpaSettings[2] ).append("\n");
+
+ //WPA group cipher
+ c.append("group=");
+ c.append( wpaSettings[1] ).append("\n");
+
+ //WPA key
+ QString k = QString();
+ if (wpaKey.left(2)=="s:") { // PASSPHRASE
+ k.append("\"");
+ k.append( wpaKey.right( wpaKey.length() - 2 ) );
+ k.append("\"\n");
+ } else
+ k.append( wpaKey ).append("\n"); // HEX KEY
+
+ c.append("psk=").append(k);
+
+ c.append("}\n");
+ //std::cout << "WPA Config:\n" << c << std::endl;
+
+// # WPA protected network, supply your own ESSID and WPAPSK here:
+// network={
+// scan_ssid=0
+// ssid="your_essid_here"
+// proto=WPA
+// key_mgmt=WPA-PSK
+// pairwise=CCMP TKIP
+// group=CCMP TKIP WEP104 WEP40
+// psk=your_psk_here
+// }
+
+ QFile file( wpaConfigFile );
+ if (file.exists()) file.remove();
+ if ( file.open( IO_WriteOnly ) ) {
+ QTextStream stream( &file );
+ stream << c;
+ file.close();
+ //std::cout << "Wrote WPA config: " << wpaConfigFile << std::endl;
+ return 1;
+ } else
+ return 0;
+}
+
+bool WirelessAssistant::setWpaClientEnabled( bool e, const QString& iface, QString driver )
+{
+ if (!e) {
+ if ( runCommand( QStringList(Commands.wpa_cli) << QString("-i%1").arg(NetParams.iface) << "terminate" ).contains("OK") ) {
+ QFile( wpaConfigFile ).remove();
+ return 1;
+ } else
+ return 0; // wpa client was not running.
+ }
+
+ if ( !runCommand( QStringList(Commands.wpa_cli) << QString("-i%1").arg(NetParams.iface) << "status" ).contains("Failed to connect") ) {
+ std::cout << "WPA client already running. Reconfiguring..." << std::endl;
+ runCommand( QStringList(Commands.wpa_cli) << "reconfigure" );
+ } else {
+ if ( driver.isEmpty() ) { //detect needed driver
+ QString k = WATools::kernelModule( iface );
+ if ( k.contains("hermes") ) driver = "hermes";
+ else if ( k.contains("atmel") ) driver = "atmel";
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 13)
+ else if ( k.contains("ipw") ) driver = "ipw"; //wext should be used for kernels newer than 2.6.12
+#endif
+ //Commented out, because ndiswrapper newer than 1.13 works with wext driver.
+ //else if ( k.contains("ndiswrapper") ) driver = "ndiswrapper";
+ //Commented out, because madwifi-ng works with wext driver.
+ //else if ( k.contains("ath") ) driver = "madwifi";
+ else driver = "wext";
+ std::cout << "Using wpa_supplicant driver: " << driver << std::endl;
+ }
+
+ QProcess* wp = new QProcess( this );
+ wp->clearArguments();
+ wp->addArgument( Commands.wpa_supplicant );
+ wp->addArgument( "-W" ); //wait for control interface
+ wp->addArgument( QString("-D%1").arg(driver) );
+ wp->addArgument( QString("-i%1").arg(iface) );
+ wp->addArgument( QString("-c%1").arg(wpaConfigFile) );
+ //std::cout << "Starting WPA client: " << wp->arguments().join(" ") << std::endl;
+ if ( !wp->start() ) {
+ std::cout << "Failed to start WPA client." << std::endl;
+ return 0;
+ }
+ wp = 0;
+ std::cout << "WPA client started. Waiting for status..." << std::endl;
+ }
+
+ usleep(200*1000); //200msec for wpa_supplicant to initiate
+
+ QString o;
+ int i = 0;
+ while ( !(o =runCommand( QStringList(Commands.wpa_cli) << QString("-i%1").arg(NetParams.iface) << "status" )).contains("Failed to connect") ) {
+ for (int c = 0; c < 15; c++) {
+ usleep(75*1000); //75msec
+ KApplication::eventLoop()->processEvents( QEventLoop::AllEvents );
+ i++;
+ }
+ if (i>400) { //more than 30sec have passed
+ runCommand( QStringList(Commands.wpa_cli) << QString("-i%1").arg(NetParams.iface) << "terminate" );
+ return 0;
+ }
+ if ( o.contains("wpa_state=COMPLETED") ) {
+ std::cout << "WPA Authorisation successful." << std::endl;
+ return 1;
+ }
+ }
+ return 0;
+}
+
+
+bool WirelessAssistant::close()
+{
+ updateConfiguration(-1); //read values from setingsPage;
+ WAConfig::self()->writeConfig();
+ std::cout << "Application options saved." << std::endl;
+ WATools::cleanup();
+ std::cout << "Kernel socket closed." << std::endl;
+ return QWidget::close();
+}
+
+
+#include "wlassistant.moc"
diff --git a/src/wlassistant.desktop b/src/wlassistant.desktop
new file mode 100644
index 0000000..b119871
--- /dev/null
+++ b/src/wlassistant.desktop
@@ -0,0 +1,55 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Wireless Assistant
+Comment[pl]=Program do obsługi sieci bezprzewodowych
+Comment[es]=Aplicación para buscar redes inalámbricas
+Exec=ksystraycmd kdesu wlassistant
+Icon=wlassistant
+Type=Application
+Categories=Qt;KDE;Network;
+
+Name[de]=Funknetzassistent
+GenericName=Wireless LAN Manager
+GenericName[ar]=إدارة الشبكة المحلية اللاسلكية
+GenericName[bg]=Безжична мрежа
+GenericName[br]=Merour ar rouedad hep neud
+GenericName[bs]=Upravitelj bežčnim LANom
+GenericName[ca]=Gestor LAN sense fils
+GenericName[cs]=Správce bezdrátové LAN
+GenericName[cy]=Rheolydd LAN Di-Wifr
+GenericName[da]=Håndtering af trådløst netværk
+GenericName[de]=Verwaltung für drahtlose LAN-Verbindungen
+GenericName[el]=Διαχειριστής ασύρματου LAN
+GenericName[es]=Gestor de red inalámbrica
+GenericName[et]=Traadita võrgu haldur
+GenericName[eu]=Kablerik gabeko LAN kudeatzailea
+GenericName[fi]=Langattoman lähiverkon hallinta
+GenericName[fr]=Gestionnaire de réseau sans fil
+GenericName[ga]=Bainisteoir Ghréasáin gan sreang
+GenericName[hi]= बतार लन मनजर
+GenericName[hr]=Upravitelj bežičnog LAN-a
+GenericName[hu]=WiFi-kezelő
+GenericName[is]=Fylgist með staðarneti
+GenericName[it]=Gestione LAN senza fili
+GenericName[ja]=ワイヤレスLANマネージャ
+GenericName[lt]=Bevielio ryšio kontrolės centras
+GenericName[mk]=Менаџер на безжичната локална мрежа
+GenericName[nb]=Trådløst nettverksbehandler
+GenericName[nl]=Draadloos netwerkbeheer
+GenericName[nn]=Handsamar for trådlaust nettverk
+GenericName[pl]=Nadzorca sieci bezprzewodowej
+GenericName[pt]=Gestor de Rede Sem Fios
+GenericName[pt_BR]=Gerenciador de Wireless na LAN
+GenericName[ru]=Менеджер локальной радиосети
+GenericName[sk]=Správca bezdrôtovej siete LAN
+GenericName[sl]=Upravljalec brezžičnega LAN-a
+GenericName[sr]=Управник бежичног LAN-а
+GenericName[sr@Latn]=Upravnik bežičnog LAN-a
+GenericName[sv]=Trådlöst nätverkshantering
+GenericName[ta]=கமபியிலலா LAN மேளாளர
+GenericName[tg]=Мудири Беноқили Шабакаи Маҳаллӣ
+GenericName[tr]=Kablosuz Yerel Ağ Yöneticisi
+GenericName[uk]=Менеджер локальної радіомережі
+GenericName[uz]=Симсиз тармоқ бошқарувчиси
+GenericName[xx]=xxWireless LAN Managerxx
+GenericName[zh_CN]=无线局域网管理器
diff --git a/src/wlassistant.h b/src/wlassistant.h
new file mode 100644
index 0000000..64cd048
--- /dev/null
+++ b/src/wlassistant.h
@@ -0,0 +1,120 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Pawel Nawrocki *
+ * pnawrocki@interia.pl *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef WLASSISTANT_H
+#define WLASSISTANT_H
+
+//connection check interval in msec
+#define WA_CONNECTION_CHECK_INTERVAL 5000
+
+#include "ui_main.h"
+#include "waconfig.h"
+
+#include "netparams.h"
+
+class QTimer;
+class QProcess;
+class NetListViewItem;
+
+class WirelessAssistant : public mainWindow
+{
+ Q_OBJECT
+
+public:
+ /*$PUBLIC_FUNCTIONS$*/
+ WirelessAssistant(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+ ~WirelessAssistant();
+
+ static QString getVal(const QString & str, const QString & rxs);
+
+public slots:
+ /*$PUBLIC_SLOTS$*/
+ virtual void netConnect();
+ virtual void netScan();
+ virtual void netDisconnect( const bool & quiet = false);
+
+private:
+ void netScan( const WANetParams & np );
+ void netConnect( const WANetParams & np );
+ void setDNS( const WANetParams & np );
+ void readConfig();
+ void saveSettings();
+ void setUi(int uiState);
+ void setSingleClick(bool i);
+ QString runCommand( const QStringList & cmd, int timeout = 0, bool detached = 0 );
+ void setNetParamsFromList( QListViewItem* lvi );
+ bool setNetParamsFromConfig( const QString & s );
+ QString matchEssidForAp( const QString & ap );
+ bool radioEnabled();
+ QListViewItem* getItemByAp( const QString & ap );
+ QListViewItem* getItemByEssid( const QString & essid );
+ void setConnectedItem( const QString & netid );
+ QString getGateway();
+ bool dhcpClientRunning();
+ QStringList interfaceList();
+ bool generateWpaConfigFile( const QString& essid, const QStringList& wpaSettings, const QString& wpaKey );
+ bool setWpaClientEnabled( bool e, const QString& iface = 0, QString driver = 0 );
+
+ QStringList NetParamsList;
+ QStringList execsNotFound;
+ NetListViewItem* connectedItem;
+ QString wpaConfigFile;
+ /// settings saved in wlassistantrc
+ bool autoQuit;
+ bool autoReconnect;
+ bool autoConnect;
+ bool groupAPs;
+ bool wpaAvailable;
+ int DelayBeforeScanning;
+ int DhcpTimeout;
+ /*QString dhcpcdInfoPath;
+ QString dhclientInfoPath;
+ QString dhcpcdPidPath;
+ QString dhclientPidPath;*/
+ /// end settings.
+
+ WACommands Commands;
+ WANetParams NetParams;
+ QTimer* timerGui;
+ QTimer* timerConnectionCheck;
+
+protected slots:
+ /*$PROTECTED_SLOTS$*/
+ virtual void init();
+ virtual void netAutoConnect();
+ virtual void parseScan( const QString & output );
+ virtual void setDev( const QString & ifname);
+ virtual void setNetListColumns();
+ virtual void updateConfiguration(int category = -1);
+ virtual void updateConnectedItem();
+ virtual void showItemContextMenu( QListViewItem* i, const QPoint& p, int c);
+ virtual void editNetParams();
+ virtual void removeNetParams();
+ virtual void updateNetParams();
+ virtual void itemAction();
+ virtual void checkConnectionStatus();
+ virtual void updateConnectButton(QListViewItem* lvi);
+ virtual void setMouseBehaviour();
+ virtual void togglePage(bool options );
+ virtual void enableAllMessages();
+ virtual bool close();
+};
+
+#endif