Author: tgoettlicher
Date: Wed Feb 6 11:56:53 2008
New Revision: 44181
URL: http://svn.opensuse.org/viewcvs/yast?rev=44181&view=rev
Log:
initial checkin
Added:
branches/tmp/tgoettlicher/yast2_2nd_rewrite/CMakeLists.txt
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/AUTHOR
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/CMakeLists.txt
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/HACKING
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/LAYOUT.html
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/Messages.sh (with props)
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/TODO
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/CMakeLists.txt
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-about-me.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-accessibility.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-advanced-user-settings.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-advanced.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-appearance.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-bluetooth.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-computer-administration.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-desktop.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-display.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-general.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-keyboard-and-mouse.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-look-and-feel.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-network-and-connectivity.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-network-settings.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-notifications.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-personal.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-regional-and-language.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-sharing.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-system.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-window-behaviour.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/systemsettingscategory.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedsortfilterproxymodel.cpp
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedsortfilterproxymodel.h
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedsortfilterproxymodel_p.h
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedview.cpp
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedview.h
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedview_p.h
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorydrawer.cpp
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorydrawer.h
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcmodulemodel.cpp
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcmodulemodel.h
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcmultiwidget.h
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kicongrouppage.cpp
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kicongrouppage.h
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/main.cpp
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/mainwindow.cpp
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/mainwindow.h
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/menuitem.cpp
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/menuitem.h
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/moduleiconitem.cpp
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/moduleiconitem.h
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/modulesview.cpp
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/modulesview.h
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/systemsettings.desktop
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/systemsettingsrc
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/systemsettingsui.rc
branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/version.h
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/CMakeLists.txt
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/CMakeLists.txt?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/CMakeLists.txt (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/CMakeLists.txt Wed Feb 6 11:56:53 2008
@@ -0,0 +1,96 @@
+project(KDEBASE_WORKSPACE)
+
+# where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked
+set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules )
+
+
+#search packages used by KDE
+find_package(KDE4 REQUIRED)
+find_package(Strigi REQUIRED)
+find_package(Blitz REQUIRED)
+
+macro_optional_find_package(USB)
+macro_optional_find_package(Fontconfig)
+macro_optional_find_package(OpenGL)
+
+include (MacroLibrary)
+include (KDE4Defaults)
+
+macro_optional_find_package(OpenGL)
+
+include(ConfigureChecks.cmake)
+configure_file(config-unix.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-unix.h )
+configure_file(config-X11.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-X11.h )
+configure_file (config-workspace.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-workspace.h )
+configure_file (startkde.cmake ${CMAKE_CURRENT_BINARY_DIR}/startkde @ONLY)
+
+add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS} -DHAVE_CONFIG_H=1)
+include_directories (${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${KDE4_INCLUDES})
+
+set( backgroundlib_SRCS
+ ${CMAKE_CURRENT_SOURCE_DIR}/kcontrol/kdm/background/bgrender.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/kcontrol/kdm/background/bgsettings.cpp
+)
+
+set( kcmbackgroundlib_SRCS
+ ${CMAKE_CURRENT_SOURCE_DIR}/kcontrol/kdm/background/bgdialog.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/kcontrol/kdm/background/bgadvanced.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/kcontrol/kdm/background/bgmonitor.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/kcontrol/kdm/background/bgwallpaper.cpp
+)
+
+include_directories(
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/kdm
+ ${CMAKE_CURRENT_SOURCE_DIR}/libs
+ ${CMAKE_CURRENT_SOURCE_DIR}/libs/kworkspace
+)
+# libs
+add_subdirectory(cmake)
+add_subdirectory(libs)
+
+# system settings (kcontrol replacement)
+add_subdirectory( systemsettings )
+
+# core apps
+add_subdirectory( kcheckpass )
+add_subdirectory( kscreensaver )
+add_subdirectory( solid )
+add_subdirectory( ksmserver )
+add_subdirectory( kcminit )
+add_subdirectory( ksplash )
+add_subdirectory( ksysguard )
+add_subdirectory( ktip )
+add_subdirectory( klipper )
+add_subdirectory( kmenuedit )
+add_subdirectory( krunner )
+add_subdirectory( kwin )
+add_subdirectory( plasma )
+add_subdirectory( kstartupconfig )
+
+
+add_subdirectory( khotkeys )
+
+# apps we need to figure out what to do with
+add_subdirectory( kcontrol )
+add_subdirectory( ksystraycmd )
+
+# data
+add_subdirectory( doc )
+add_subdirectory( wallpapers )
+add_subdirectory( menu )
+
+if(X11_Xau_FOUND AND X11_Xdmcp_FOUND)
+ add_subdirectory( kdm )
+else(X11_Xau_FOUND AND X11_Xdmcp_FOUND)
+ MESSAGE(STATUS "Xau lib or Xdmcp lib was missing. kdm will not compile")
+endif(X11_Xau_FOUND AND X11_Xdmcp_FOUND)
+
+SET(krunner_DEPENDS "plasma")
+
+########### install files ###############
+install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/startkde DESTINATION ${BIN_INSTALL_DIR})
+
+if(CMAKE_SOURCE_DIR STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
+ macro_display_feature_log()
+endif(CMAKE_SOURCE_DIR STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/AUTHOR
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/AUTHOR?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/AUTHOR (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/AUTHOR Wed Feb 6 11:56:53 2008
@@ -0,0 +1 @@
+Benjamin Charles Meyer < ben + systempreferences at meyerhome dot net >
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/CMakeLists.txt
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/CMakeLists.txt?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/CMakeLists.txt (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/CMakeLists.txt Wed Feb 6 11:56:53 2008
@@ -0,0 +1,32 @@
+
+ADD_SUBDIRECTORY( categories )
+
+########### next target ###############
+
+SET(systemsettings_SRCS
+ kcmodulemodel.cpp
+ kcmultiwidget.cpp
+ main.cpp
+ mainwindow.cpp
+ menuitem.cpp
+ moduleiconitem.cpp
+ kcategorizedview.cpp
+ kcategorydrawer.cpp
+ )
+
+
+KDE4_ADD_EXECUTABLE(systemsettings ${systemsettings_SRCS})
+
+# Uses KIO for KRun and KUtils for KCModuleInfo
+TARGET_LINK_LIBRARIES(systemsettings ${KDE4_KUTILS_LIBS} ${KDE4_KIO_LIBS} )
+
+INSTALL( TARGETS systemsettings DESTINATION ${BIN_INSTALL_DIR})
+
+
+########### install files ###############
+
+install( FILES systemsettings.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} )
+install( FILES systemsettingsrc DESTINATION ${SYSCONF_INSTALL_DIR} )
+install( FILES systemsettingsui.rc DESTINATION ${DATA_INSTALL_DIR}/systemsettings )
+
+
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/HACKING
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/HACKING?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/HACKING (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/HACKING Wed Feb 6 11:56:53 2008
@@ -0,0 +1,31 @@
+This is an overview of how the code is situated and a very brief overview of what the classes do. See the header files for a more indepth overview of what the classes do.
+
+-- System Settings classes --
+
+mainwindow - The KMainWindow contains KActions, the stack of the iconlist and the current module(s) view.
+
+modulesview - The widget that is the icon view that users see when the first enter the app.
+kcmsearch - Search widget that can search ModulesView and enable/disable items.
+
+modulesiconitem - The individual modules items. Used for loading enabled/disabled images and storing the list of modules acosiated with the item.
+
+kcmodulemenu - Class that reads in a freedesktop.org .menu file into a QValueList.
+
+kcmultiwidget - A basterdized kcmultidialog from kdelibs/kutil that provides info about the current shown dialog so the about dialog and caption can be updated and prompts for unsaved changes.
+
+-- INSTALL --
+
+To install a new menu you have to install three files.
+
+(if you have debian, if you have another system use locate to determine where kde-system.* is installed and install in the same place.
+
+-/etc/xdg/menus/system-settings.menu
+-/etc/xdg/menus/applications-merged/system-settings-merge.menu
+-/usr/share/desktop-directories/system-settings.directory
+
+Also don't forget to install the ui file.
+-/share/apps/systemsettings/systempreferencesui.rc
+And the desktop file.
+-share/applications/kde/systemsettings.desktop
+
+When you change (or install) any of the first three files make sure to run kbuildsycoca to re-generate the cache files or log out and back in.
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/LAYOUT.html
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/LAYOUT.html?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/LAYOUT.html (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/LAYOUT.html Wed Feb 6 11:56:53 2008
@@ -0,0 +1,125 @@
+
+<h1>KDE System Settings</h1>
+
+<p>
+This document describes how the System Settings is layed out.
+
+<p>
+This document was inspired partially by the TODO file located at kdebase/kcontrol/TODO. Most of the changed are the exact same and were planned to be done for KDE4. This document is simply a little bit more fleshed out version. I recomend checking out that document if you havn't already.
+
+<p>
+The reason for this document is:
+<p>
+1) To categorize the settings together in a user friendly manor.<br>
+2) To explain why a setting is where it is and to determine where new settings should go.<br>
+3) Because of #2 stop the constant reorganization of KControl at every release confusing users and developers because there isn't a documented location for where thing go with explanations of why.
+<p>
+The System Settings Center is divided into four sections.
+<ul>
+<li><a href="#personal">Personal</a></li>
+<li><a href="#hardware">Hardware</a></li>
+<li><a href="#system">System</a></li>
+<li><a href="#other">Other</a></li>
+</ul>
+
+Within KDE there are over 50 kcm modules designed for the Control Center and many more for konquror and other applications. With so many modules there is no way for a users to find what they are looking for by scanning. To solve this there are three levels, the last one isn't normally visable to the user and groups very similar items.
+<p>
+Modules in the System Settings should configure things not do things. Some examples include the theme manager. It sets/saves themes. Although it configures settings it is a seperate application because it does actions rather then just setting/getting values. Items that
+<p>
+Modules that exists within multiple applications configuration menu such as spell check and cddb should not be in the menu.
+
+<hr>
+<a name="personal"><h1>Personal</h1></a>
+Personal is made up of two parts. The simplest differece between the two are theme settings will be shared amung friends while users settings wont be.
+<ul>
+<li><a href="#personal_theme">Theme Goodies</a></li>
+<li><a href="#personal_user">User Settings</a></li>
+</ul>
+
+<h3><a name="personal_theme">Theme Goodies</a></h3> which can be changed without affecting productivity and often doesn't directly apply to a specific user, but to a user base (Theme of the month crowd).
+
+These deal with how applications are presented to users and how users interact with them. These don't deal with anything that isn't directly seen/heard or interacted with.
+<p>
+Every setting in this category must be able to be locked for example in an government enviornment where they determine exactly how a desktop is to look for every user. It may look ugly, but users should still be able to acomplish tasks no matter what these settings are set to.
+<p>
+A separate application (Theme Manager) can set the items in this category on mass to give an overall theme for the user. This application can also save the current settings.
+
+<h3><a name="personal_user">User Settings</a></h3>
+Such as that apply to this computer such as language and personal choice for default web browser. These settings determine how a user interacts with a computer, but is personal to that user and typically isn't shared like a theme or icons set is.
+
+<h2>Appearance</h2>
+The Appearance deals with the look of the applications and desktop. These settings typically will be settings that can be replaced by alternatives created outside of KDE. These settings will most likely be also set/used by other Unix desktop enviornments so that all the applications can integration together (and look consistant to the user). It contains the following items:<br>
+Colors, Fonts, Icons, Style, Window Decorations
+
+<h2>Desktop</h2>
+These items discus how the desktop behaves. How the windows interact with each other, the very bottom of the screen (desktop), the very top (screensaver), and loading of the desktop. These are all separate setting from KDE (or Gnome) applications and the applications shouldn't need to access them or know about them.
+It contains the following items:<br>
+Background, Screensaver, Behavior, Window Behavior, Window-Specific Settings, Login Screen
+<p>
+Panel.
+These settings all deal with when users perform actions dealing with or originating from the panel. It contains the following items:<br>
+Panels, Taskbar, Launch Feedback, Multiple Desktops
+
+<h2>KDE Components</h2>
+Specific actuall KDE components which users will probably never actually touch.
+
+<h2>Accessibility</h2>
+ - International
+ - KHotKeys etc
+
+<h2>Security</h2>
+-kdewallet
+
+<h2>Sound</h2>
+Sounds, flashes, logs or other events that happen when KDE applications.
+System Bell
+System Notifications
+
+<h2>User Account</h2>
+- Password changer, paths, Default Applications, Session Manager
+
+<hr>
+<a name="hardware"><h1>Hardware</h1></a>
+Hardware deals with physical hardware configuration. Configuration is not only for the hardware, but the required supporting systems that use the hardware.
+
+<h2>Network</h2>
+File Sharing
+Local Network Browsing
+Preferences / Proxy
+Wireless
+Firewall
+<h2>Display</h2>
+It contains the following items:<br>
+Size & Orientation, Gamma
+<h2>Power</h2>
+Display power control
+laptop battery, cpu temp etc
+<h2>Keyboard & Mouse</h2>
+Keyboard, Keyboard Layout, Keyboard Shortcuts, Mouse, KHotKeys
+<h2>Printer</h2>
+<h2>Joystick</h2>
+<h2>Audio</h2>
+Mixer, SoundSystem (arts)
+
+<hr>
+<a name="system"><h1>System</h1></a>
+System deals with settings relating to this computer.
+
+<h2>Date & Time</h2>
+Date, Time, Time zone
+
+<h2>Fonts</h2>
+
+<h2>Book Disk</h2>
+Lilo, Grub
+
+<h2>Packages</h2>
+System update / rpm manager etc
+
+<h2>Login Manager</h2>
+Login Manger
+
+<hr>
+<a name="other"><h1>Other</h1></a>
+A default KDE install should contain nothing here. If there is something here than this document has failed and needs to be revised. Until that can happen its temporary home is here. A user should never see this catagory.
+
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/Messages.sh
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/Messages.sh?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/Messages.sh (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/Messages.sh Wed Feb 6 11:56:53 2008
@@ -0,0 +1,2 @@
+#! /usr/bin/env bash
+$XGETTEXT *.cpp -o $podir/systemsettings.pot
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/TODO
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/TODO?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/TODO (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/TODO Wed Feb 6 11:56:53 2008
@@ -0,0 +1,23 @@
+Save to real config files.
+Module Help link
+Module Default/Reset link
+X Use tabs
+View Menu should list of all modules
+Remove "module" string
+Fix connection
+
+config icon sizes
+command line option to open in new window
+
+Modules
+-lilo _has_ to be spead up
+X -Date & Time icon should have a Clock
+-Samba needs a new icon
+-Remote needs a new icon
+
+Search
+-Make search smaller and on the right
+-Grep docs?
+-Tie into kconfigXT somehow?
+-Look at Spotlight
+-Task oriented?
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/CMakeLists.txt
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/CMakeLists.txt?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/CMakeLists.txt (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/CMakeLists.txt Wed Feb 6 11:56:53 2008
@@ -0,0 +1,25 @@
+
+install( FILES systemsettingscategory.desktop DESTINATION ${SERVICETYPES_INSTALL_DIR} )
+
+install( FILES
+ settings-advanced.desktop
+ settings-advanced-user-settings.desktop
+ settings-computer-administration.desktop
+ settings-display.desktop
+ settings-general.desktop
+ settings-look-and-feel.desktop
+ settings-network-and-connectivity.desktop
+ settings-personal.desktop
+ settings-system.desktop
+ settings-about-me.desktop
+ settings-accessibility.desktop
+ settings-appearance.desktop
+ settings-bluetooth.desktop
+ settings-desktop.desktop
+ settings-keyboard-and-mouse.desktop
+ settings-notifications.desktop
+ settings-regional-and-language.desktop
+ settings-sharing.desktop
+ settings-window-behaviour.desktop
+ settings-network-settings.desktop
+ DESTINATION ${SERVICES_INSTALL_DIR} )
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-about-me.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-about-me.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-about-me.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-about-me.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,59 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=about-me
+X-KDE-System-Settings-Parent-Category=personal
+Icon=preferences-desktop-user
+
+Name=About Me
+Name[ar]=Ùبذة عÙÙ
+Name[bg]=Ðа мен
+Name[ca]=Quant a mi
+Name[da]=Om mig
+Name[de]=Persönliche Informationen
+Name[el]=ΣÏεÏικά με μÎνα
+Name[eo]=Pri mi
+Name[es]=Acerca de mÃ
+Name[et]=Isiklik info
+Name[eu]=Niri buruz
+Name[fa]=دربار٠Ù
Ù
+Name[fi]=Minä
+Name[fr]=Ã propos de moi
+Name[fy]=Ynfo oer my
+Name[ga]=Maidir Liomsa
+Name[gl]=Acerca de min
+Name[he]=××××ת××
+Name[hi]=मà¥à¤°à¥ बारॠमà¥à¤
+Name[hu]=Névjegy
+Name[is]=Um mig
+Name[it]=Informazioni su di me
+Name[ja]=å人æ
å ±
+Name[kk]=ӨзÑм ÑÑÑалÑ
+Name[km]=á¢ááá¸âáááá»áâ
+Name[ko]=ë´ ì ë³´
+Name[ku]=Der barê min de
+Name[lv]=Par mani
+Name[nb]=Om meg
+Name[nds]=Brukerdaten
+Name[ne]=मà¥à¤°à¥ बारà¥à¤®à¤¾
+Name[nl]=Info over mij
+Name[nn]=Om meg
+Name[oc]=A prepaus de ieu
+Name[pa]=ਮà©à¨°à© ਬਾਰà©
+Name[pl]=O mnie
+Name[pt]=Acerca de Mim
+Name[pt_BR]=Sobre Eu
+Name[ru]=ÐиÑнÑе даннÑе
+Name[se]=Iežan dieÄut
+Name[sl]=O meni
+Name[sr]=Рмени
+Name[sr@latin]=O meni
+Name[sv]=Om mig
+Name[tg]=ÐÐ°Ñ Ð±Ð¾Ñаи ман
+Name[th]=à¹à¸à¸µà¹à¸¢à¸§à¸à¸±à¸à¸à¸±à¸
+Name[tr]=Hakkımda
+Name[uk]=ÐÑо мене
+Name[wa]=Ã
d fwait d' mi
+Name[x-test]=xxAbout Mexx
+Name[zh_CN]=å
³äºæèªå·±
+Name[zh_TW]=éæ¼æ
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-accessibility.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-accessibility.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-accessibility.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-accessibility.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,78 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=accessibility
+X-KDE-System-Settings-Parent-Category=personal
+Icon=preferences-desktop-accessibility
+
+Name=Accessibility
+Name[af]=Toeganklikheid
+Name[ar]=إتاØØ© اÙÙصÙÙ
+Name[be]=ÐаÑÑÑпнаÑÑÑ
+Name[bg]=РавноÑÑоен доÑÑÑп
+Name[bn]=সহাà§à¦ পà§à¦°à¦¯à§à¦à§à¦¤à¦¿
+Name[br]=Haezadusted
+Name[ca]=Accessibilitat
+Name[cs]=ZpÅÃstupnÄnÃ
+Name[csb]=Pòmòce przëstãpù
+Name[cy]=Hygyrchedd
+Name[da]=Tilgængelighed
+Name[de]=Zugangshilfen
+Name[el]=Î ÏοÏιÏÏÏηÏα
+Name[eo]=Alirebleco
+Name[es]=Accesibilidad
+Name[et]=Hõlbustus
+Name[eu]=Erabilerraztasuna
+Name[fa]=دستÛابÛâپذÛرÛ
+Name[fi]=Esteettömyys
+Name[fr]=Accessibilité
+Name[fy]=Tagonklikens
+Name[ga]=Inrochtaineacht
+Name[gl]=Acesibilidade
+Name[he]=× ××ש×ת
+Name[hi]=पहà¥à¤à¤
+Name[hr]=PristupaÄnost
+Name[hu]=Kezelési segÃtség
+Name[is]=Aðgengi
+Name[it]=AccessibilitÃ
+Name[ja]=ã¢ã¯ã»ã·ããªãã£
+Name[ka]=á¡áááªáááá£á á á¨áá¡áá«áááááááá
+Name[kk]=ÐÑÐ½Ð°Ð¹Ñ Ð¼Ò¯Ð¼ÐºÑндÑкÑеÑ
+Name[km]=ááááááá¶áâáá¶ááááá½á
+Name[kn]=ನಿಲà³à²à²£à³ (à²à²à³à²¸à³à²¸à²¿à²¬à²¿à²²à²¿à²à²¿)
+Name[ko]=ë´ê² íìí ì¤ì
+Name[lt]=Prieinamumas
+Name[lv]=Pieejamība
+Name[mk]=ÐÑиÑÑапливоÑÑ
+Name[ms]=Kebolehcapaian
+Name[nb]=Tilgjengelighet
+Name[nds]=Behinnertenhülp
+Name[ne]=पहà¥à¤à¤à¤¤à¤¾
+Name[nl]=Toegankelijkheid
+Name[nn]=Tilgjenge
+Name[oc]=Accessibilitat
+Name[pa]=ਸਹà©à¨²à¨¤à¨¾à¨
+Name[pl]=DostÄpnoÅÄ
+Name[pt]=Acessibilidade
+Name[pt_BR]=Acessibilidade
+Name[ro]=Accesibilitate
+Name[ru]=СпеÑиалÑнÑе возможноÑÑи
+Name[se]=Ãlkkibut geavaheapmi
+Name[sk]=PrÃstupnosÅ¥
+Name[sl]=Dostopnost
+Name[sr]=ÐÑиÑÑÑпаÑноÑÑ
+Name[sr@latin]=PristupaÄnost
+Name[sv]=Handikappstöd
+Name[ta]=à®
ணà¯à®à®²à¯
+Name[te]=à°
à°à°¦à±à°¬à°¾à°à±
+Name[tg]=ТавонÑбӣ
+Name[th]=à¸à¸±à¸§à¸à¹à¸§à¸¢à¹à¸à¸à¸²à¸£à¹à¸à¹à¸à¸²à¸
+Name[tr]=EriÅilebilirlik
+Name[uk]=ÐоÑÑÑпнÑÑÑÑ
+Name[uz]=ÒÑлайликлаÑ
+Name[vi]=Khả nÄng truy cáºp
+Name[wa]=Accessibilité
+Name[x-test]=xxAccessibilityxx
+Name[xh]=Unikezelo
+Name[zh_CN]=è¾
å©
+Name[zh_TW]=ç¡éç¤è¼å©
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-advanced-user-settings.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-advanced-user-settings.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-advanced-user-settings.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-advanced-user-settings.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,61 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=advanced-user-settings
+X-KDE-System-Settings-Parent-Category=advanced
+Icon=system-users
+
+Name=Advanced User Settings
+Name[ar]=إعدادات اÙÙ
ستخدÙ
اÙÙ
تÙدÙ
Ø©
+Name[be]=ÐдмÑÑловÑÑ Ð½Ð°ÑÑаÑÐ»ÐµÐ½Ð½Ñ ÐºÐ°ÑÑÑÑалÑнÑка
+Name[bg]=ÐаÑÑÑойване пÑедпазиÑÐµÐ»Ñ Ð½Ð° екÑана
+Name[ca]=Parà metres avançats d'usuari
+Name[csb]=Awansowóné nastôwë brëkòwników
+Name[da]=Avanceret brugeropsætning
+Name[de]=Erweiterte Benutzereinstellungen
+Name[el]=Î ÏοÏÏÏημÎÎ½ÎµÏ ÏÏ
θμίÏÎµÎ¹Ï ÏÏήÏÏη
+Name[eo]=Plia uzantagordo
+Name[es]=Preferencias para usuarios avanzados
+Name[et]=Muud kasutaja seadistused
+Name[eu]=Erabiltzaile aurreratu ezarpenak
+Name[fa]=تÙظÛÙ
ات کاربر Ù¾ÛشرÙتÙ
+Name[fi]=Edistyneen käyttäjän asetukset
+Name[fr]=Configuration avancée de l'utilisateur
+Name[fy]=Avansearre brûkers ynstellings
+Name[ga]=Ardsocruithe Ãsáideora
+Name[gl]=Configuración avanzada do usuario
+Name[he]=×××ר×ת ×שת×ש ×תק×××ת
+Name[hi]=à¤à¤¨à¥à¤¨à¤¤ à¤à¤ªà¤¯à¥à¤à¥à¤¤à¤¾ विनà¥à¤¯à¤¾à¤¸
+Name[hr]=Napredne korisniÄke postavke
+Name[hu]=Speciális beállÃtások
+Name[is]=Frekari stillingar notanda
+Name[it]=Impostazioni utente avanzate
+Name[ja]=詳細ãªã¦ã¼ã¶è¨å®
+Name[kk]=ТÓжÑÑÐ¸Ð±ÐµÐ»Ñ Ð¿Ð°Ð¹Ð´Ð°Ð»Ð°Ð½ÑÑÑнÑÒ£ паÑамеÑÑлеÑÑ
+Name[km]=áá¶áâáááááâá¢ááááááá¾âááááá·áâááááá
+Name[ko]=ê³ ê¸ ì¬ì©ì ì¤ì
+Name[lv]=PaplaÅ¡inÄti lietotÄja iestatÄ«jumi
+Name[nb]=Avanserte brukerinnstillinger
+Name[nds]=Verwiedert Brukerinstellen
+Name[ne]=à¤à¤¨à¥à¤¨à¤¤ पà¥à¤°à¤¯à¥à¤à¤à¤°à¥à¤¤à¤¾ सà¥à¤à¤¿à¤
+Name[nl]=Uitgebreide instellingen
+Name[nn]=Avanserte brukarinnstillingar
+Name[oc]=Paramètres personalizats avançats
+Name[pa]=ਤà¨à¨¨à©à¨à© ਯà©à¨à¨¼à¨° ਸà©à¨à¨¿à©°à¨
+Name[pl]=Zaawansowane ustawienia użytkownika
+Name[pt]=Configuração Avançada do Utilizador
+Name[pt_BR]=Configurações Avançadas do Usuário
+Name[ru]=ÐополниÑелÑнÑе паÑамеÑÑÑ
+Name[se]=Erenoamáš geavaheaddjiheivehusat
+Name[sl]=Napredne nastavitve uporabnika
+Name[sr]=ÐапÑедне коÑиÑниÑке поÑÑавке
+Name[sr@latin]=Napredne korisniÄke postavke
+Name[sv]=Avancerade användarinställningar
+Name[tg]=ТанзимоÑҳои коÑбаÑи пеÑÑаÑÑа
+Name[th]=à¸à¸²à¸£à¸à¸±à¹à¸à¸à¹à¸²à¸à¸¹à¹à¹à¸à¹à¹à¸à¸´à¹à¸¡à¹à¸à¸´à¸¡
+Name[tr]=GeliÅmiÅ Kullanıcı Ayarları
+Name[uk]=ÐодаÑÐºÐ¾Ð²Ñ ÐºÐ¾ÑиÑÑÑваÑÑÐºÑ Ð¿Ð°ÑамеÑÑи
+Name[wa]=Sipepieus apontiaedjes di l'Â uzeu
+Name[x-test]=xxAdvanced User Settingsxx
+Name[zh_CN]=é«çº§ç¨æ·è®¾ç½®
+Name[zh_TW]=é²é使ç¨è
è¨å®
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-advanced.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-advanced.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-advanced.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-advanced.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,77 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-Weight=200
+X-KDE-System-Settings-Category=advanced
+X-KDE-System-Settings-Parent-Category=
+
+Name=Advanced
+Name[af]=Gevorderde
+Name[ar]=Ù
تÙدÙ
+Name[be]=ÐÑаблÑвÑ
+Name[bg]=ÐопÑлниÑелни
+Name[bn]=à¦
à¦à§à¦°à¦¸à¦°
+Name[br]=Barek
+Name[ca]=Avançat
+Name[cs]=PokroÄilé
+Name[csb]=Awansowóné
+Name[cy]=Uwch
+Name[da]=Avanceret
+Name[de]=Erweitert
+Name[el]=Îια ÏÏοÏÏÏημÎνοÏ
Ï
+Name[eo]=Pliaj
+Name[es]=Avanzado
+Name[et]=Muu
+Name[eu]=Aurreratua
+Name[fa]=Ù¾ÛشرÙتÙ
+Name[fi]=Lisäasetukset
+Name[fr]=Avancé
+Name[fy]=Avansearre
+Name[ga]=Casta
+Name[gl]=Avanzado
+Name[he]=×תק××
+Name[hi]=विसà¥à¤¤à¥à¤¤
+Name[hr]=Napredno
+Name[hu]=Speciális
+Name[is]=Ãtarlegt
+Name[it]=Avanzate
+Name[ja]=詳細
+Name[ka]=ááááá¢áááá
+Name[kk]=ÒоÑÑмÑа
+Name[km]=ááááá·áâááááá
+Name[kn]=ಪà³à²°à³à²¢
+Name[ko]=ê³ ê¸
+Name[ku]=PêÅketî
+Name[lt]=SudÄtingiau
+Name[lv]=PaplaÅ¡inÄti
+Name[mk]=ÐапÑедни
+Name[ms]=Lanjutan
+Name[nb]=Avansert
+Name[nds]=Verwiedert
+Name[ne]=à¤à¤¨à¥à¤¨à¤¤
+Name[nl]=Geavanceerd
+Name[nn]=Avansert
+Name[oc]=A_vançat
+Name[pa]=ਤà¨à¨¨à©à¨à©
+Name[pl]=Zaawansowane
+Name[pt]=Avançado
+Name[pt_BR]=Avançados
+Name[ro]=Avansat
+Name[ru]=ÐополниÑелÑно
+Name[se]=Viiddiduvvon
+Name[sk]=PokroÄilé
+Name[sl]=Napredno
+Name[sr]=ÐапÑедно
+Name[sr@latin]=Napredno
+Name[sv]=Avancerat
+Name[ta]=à®à®¯à®°à¯à®¨à®¿à®²à¯
+Name[tg]=ÐеÑÑаÑÑа
+Name[tr]=GeliÅmiÅ
+Name[uk]=ÐодаÑково
+Name[uz]=ÒÑÑимÑа
+Name[vi]=Nâng cao
+Name[wa]=Sipepieus
+Name[x-test]=xxAdvancedxx
+Name[xh]=Ebhekisa phambili
+Name[zh_CN]=é«çº§
+Name[zh_TW]=é²é
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-appearance.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-appearance.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-appearance.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-appearance.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,78 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=appearance
+X-KDE-System-Settings-Parent-Category=look-and-feel
+Icon=preferences-desktop-theme
+
+Name=Appearance
+Name[af]=Voorkoms
+Name[ar]=اÙÙ
ظÙر
+Name[be]=ÐÐ¾Ð½ÐºÐ°Ð²Ñ Ð²ÑглÑд
+Name[bg]=СиÑÑемен панел
+Name[bn]=à¦à§à¦¹à¦¾à¦°à¦¾
+Name[br]=Neuziadur
+Name[ca]=Aparença
+Name[cs]=Vzhled
+Name[csb]=Wëzdrzatk
+Name[cy]=Golwg
+Name[da]=Udseende
+Name[de]=Erscheinungsbild
+Name[el]=ÎμÏάνιÏη
+Name[eo]=Aspekto
+Name[es]=Aspecto
+Name[et]=Välimus
+Name[eu]=Itxura
+Name[fa]=ظاÙر
+Name[fi]=Ulkonäkö
+Name[fr]=Apparence
+Name[fy]=Uterlik
+Name[ga]=Cuma
+Name[gl]=Aparencia
+Name[he]=×ר××
+Name[hi]=रà¥à¤ª
+Name[hr]=Izgled
+Name[hu]=Megjelenés
+Name[is]=Ãtlit
+Name[it]=Aspetto
+Name[ja]=å¤è¦³
+Name[ka]=ááá áááááá
+Name[kk]=ÐÓ©ÑÑнÑÑ
+Name[km]=áá¼ááá¶á
+Name[kn]=ಸà³à²µà²°à³à²ª
+Name[ko]=모ì
+Name[ku]=Xuyanî
+Name[lt]=IÅ¡vaizda
+Name[lv]=Izskats
+Name[mk]=Ðзглед
+Name[ms]=Rupa
+Name[nb]=Utseende
+Name[nds]=Utsehn
+Name[ne]=दà¥à¤à¤¾à¤µà¤
+Name[nl]=Uiterlijk
+Name[nn]=Utsjånad
+Name[oc]=Aparéncia
+Name[pa]=ਦਿੱà¨
+Name[pl]=WyglÄ
d
+Name[pt]=Aparência
+Name[pt_BR]=Aparência
+Name[ro]=Aspect
+Name[ru]=ÐнеÑний вид
+Name[se]=Fárda
+Name[sk]=Vzhľad
+Name[sl]=Videz
+Name[sr]=Ðзглед
+Name[sr@latin]=Izgled
+Name[sv]=Utseende
+Name[ta]=தà¯à®±à¯à®±à®®à¯
+Name[tg]=ÐамÑди зоҳиÑÓ£
+Name[th]=รูà¸à¸¥à¸±à¸à¸©à¸à¹
+Name[tr]=Görünüm
+Name[uk]=ÐиглÑд
+Name[uz]=ТаÑÒи кÑÑиниÑ
+Name[vi]=Diá»n mạo
+Name[wa]=Rivnance
+Name[x-test]=xxAppearancexx
+Name[xh]=Inkangeleko
+Name[zh_CN]=å¤è§
+Name[zh_TW]=å¤è§
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-bluetooth.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-bluetooth.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-bluetooth.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-bluetooth.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,22 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=bluetooth
+X-KDE-System-Settings-Parent-Category=network-and-connectivity
+Icon=preferences-system-bluetooth
+
+Name=Bluetooth
+Name[ar]=بÙÙتÙØ«
+Name[fa]=بÙÙتÙØ«
+Name[hi]=बà¥à¤²à¥à¤à¥à¤¥
+Name[is]=Blátönn
+Name[km]=ááááá¼ááá¼á
+Name[ko]=ë¸ë£¨í¬ì¤
+Name[ne]=बà¥à¤²à¥à¤à¥à¤¥
+Name[pa]=ਬਲਿà¨à¨à©à©±à¨¥
+Name[sr]=ÐлÑÑÑÑ
+Name[sv]=Blåtand
+Name[th]=à¸à¸¥à¸¹à¸à¸¹à¸
+Name[x-test]=xxBluetoothxx
+Name[zh_CN]=èç
+Name[zh_TW]=èè½
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-computer-administration.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-computer-administration.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-computer-administration.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-computer-administration.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,61 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=computer-administration
+X-KDE-System-Settings-Parent-Category=general
+X-KDE-Weight=200
+Icon=preferences-system
+
+Name=Computer Administration
+Name[ar]=إدارة اÙØاسÙب
+Name[be]=ÐдмÑнÑÑÑÑаванне камп'ÑÑÑÑÑ
+Name[bg]=ÐдминиÑÑÑаÑиÑ
+Name[ca]=Administració de l'ordinador
+Name[csb]=Sprôwianié systemÄ
+Name[da]=Computeradministration
+Name[de]=Systemverwaltung
+Name[el]=ÎιαÏείÏιÏη ÏÏ
ÏÏήμαÏοÏ
+Name[eo]=Komputila administrado
+Name[es]=Administración del equipo
+Name[et]=Arvuti haldamine
+Name[eu]=Sistemaren kudeaketa
+Name[fa]=Ø³Ø±Ù¾Ø±Ø³ØªÛ Ø±Ø§ÛاÙÙ
+Name[fi]=Järjestelmän hallinta
+Name[fr]=Administration de l'ordinateur
+Name[fy]=Kompjûter administraasje
+Name[ga]=Riarachán an RÃomhaire
+Name[gl]=Administración do ordenador
+Name[he]=× ×××× ×××ש×
+Name[hi]=à¤à¤®à¥à¤ªà¥à¤¯à¥à¤à¤° पà¥à¤°à¤¶à¤¾à¤¸à¤¨
+Name[hr]=Administracija raÄunala
+Name[hu]=SzámÃtógépkezelÅ
+Name[is]=Kerfisstjórnun
+Name[it]=Amministrazione del computer
+Name[ja]=ã³ã³ãã¥ã¼ã¿ã®ç®¡ç
+Name[kk]=ÐомпÑÑÑеÑÐ´Ñ ÒадаÒалаÑ
+Name[km]=áá¶âááááááááááâáá»ááááá¼áááâ
+Name[ko]=ì»´í¨í° ê´ë¦¬
+Name[lv]=Datora administrÄcija
+Name[nb]=Administrasjon av maskinen
+Name[nds]=Systeempleeg
+Name[ne]=à¤à¤®à¥à¤ªà¥à¤¯à¥à¤à¤° पà¥à¤°à¤¶à¤¾à¤¸à¤¨
+Name[nl]=Computerbeheer
+Name[nn]=Systemadministrasjon
+Name[pa]=à¨à©°à¨ªà¨¿à¨à¨à¨° ਪਰਸ਼ਾਸ਼ਨ
+Name[pl]=Administracja systemu
+Name[pt]=Administração do Computador
+Name[pt_BR]=Administração do Computador
+Name[ru]=СиÑÑемное админиÑÑÑиÑование
+Name[se]=Vuogádathálddašeapmi
+Name[sl]=Sistemsko upravljanje
+Name[sr]=ÐдминиÑÑÑаÑиÑа ÑаÑÑнаÑа
+Name[sr@latin]=Administracija raÄunara
+Name[sv]=Datoradministration
+Name[tg]=ÐÑдиÑи компÑÑеÑ
+Name[th]=à¸à¸²à¸£à¸à¸¹à¹à¸¥à¸£à¸°à¸à¸à¸à¸à¸¡à¸à¸´à¸§à¹à¸à¸à¸£à¹
+Name[tr]=Sistem Yönetimi
+Name[uk]=ÐдмÑнÑÑÑÑÑÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð¿'ÑÑеÑа
+Name[wa]=Manaedjmint del copiutrece
+Name[x-test]=xxComputer Administrationxx
+Name[zh_CN]=计ç®æºç®¡ç
+Name[zh_TW]=é»è
¦ç®¡ç
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-desktop.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-desktop.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-desktop.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-desktop.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,76 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=desktop
+X-KDE-System-Settings-Parent-Category=look-and-feel
+Icon=preferences-desktop
+
+Name=Desktop
+Name[af]=Werkskerm
+Name[ar]=Ø³Ø·Ø Ø§ÙÙ
Ùتب
+Name[be]=ÐÑаÑоÑÐ½Ñ ÑÑол
+Name[bg]=РабоÑен плоÑ
+Name[bn]=ডà§à¦¸à§à¦à¦à¦ª
+Name[br]=Gorretaol
+Name[ca]=Escriptori
+Name[cs]=Pracovnà plocha
+Name[csb]=Pùlt
+Name[cy]=Penbwrdd
+Name[de]=Arbeitsfläche
+Name[el]=ÎÏιÏάνεια εÏγαÏίαÏ
+Name[eo]=Labortablo
+Name[es]=Escritorio
+Name[et]=Töölaud
+Name[eu]=Mahaigaina
+Name[fa]=رÙÙ
ÛزÛ
+Name[fi]=Työpöytä
+Name[fr]=Bureau
+Name[fy]=Buroblêd
+Name[ga]=Deasc
+Name[gl]=Escritorio
+Name[he]=ש×××× ×¢××××
+Name[hi]=डà¥à¤¸à¥à¤à¤à¥à¤ª
+Name[hr]=Radna površina
+Name[hu]=Munkaasztal
+Name[is]=Skjáborð
+Name[ja]=ãã¹ã¯ããã
+Name[ka]=á¡ááá£á¨áá ááá¤á
+Name[kk]=ÐұмÑÑ Ò¯ÑÑелÑ
+Name[km]=áááááá»
+Name[kn]=à²à²£à²à²¤à³à²°à³
+Name[ko]=ë°ì¤í¬í±
+Name[ku]=Sermasê
+Name[lt]=Darbastalis
+Name[lv]=Darbvirsma
+Name[mk]=РабоÑна повÑÑина
+Name[ms]=Ruang Kerja
+Name[nb]=Skrivebord
+Name[nds]=Schriefdisch
+Name[ne]=डà¥à¤¸à¥à¤à¤à¤ª
+Name[nl]=Bureaublad
+Name[nn]=Skrivebord
+Name[oc]=Burèu
+Name[pa]=ਡà©à¨¸à¨à¨à¨¾à¨ª
+Name[pl]=Pulpit
+Name[pt]=Ambiente de Trabalho
+Name[pt_BR]=Ãrea de Trabalho
+Name[ru]=РабоÑий ÑÑол
+Name[se]=Äállinbeavdi
+Name[sk]=Plocha
+Name[sl]=Namizje
+Name[sr]=Радна повÑÑ
+Name[sr@latin]=Radna površ
+Name[sv]=Skrivbord
+Name[ta]=à®®à¯à®²à¯à®®à¯à®à¯
+Name[te]=à°°à°à°à°¸à±à° à°²à°
+Name[tg]=Ðизи коÑÓ£
+Name[th]=à¸à¸·à¹à¸à¸à¸µà¹à¸à¸³à¸à¸²à¸
+Name[tr]=Masaüstü
+Name[uk]=СÑÑлÑниÑÑ
+Name[uz]=ÐÑ ÑÑоли
+Name[vi]=Mà n hình ná»n
+Name[wa]=Sicribanne
+Name[x-test]=xxDesktopxx
+Name[zh_CN]=æ¡é¢
+Name[zh_TW]=æ¡é¢
+
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-display.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-display.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-display.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-display.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,143 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=display
+X-KDE-System-Settings-Parent-Category=computer-administration
+Icon=preferences-desktop-display
+
+Name=Display
+Name[af]=Skerm
+Name[ar]=اÙعرض
+Name[be]=ÐкÑан
+Name[bg]=ÐониÑоÑ
+Name[bn]=ডিসপà§à¦²à§
+Name[br]=Diskwel
+Name[ca]=Pantalla
+Name[cs]=Obrazovka
+Name[csb]=Ekran
+Name[cy]= Arddangos
+Name[da]=Skærm
+Name[de]=Anzeige
+Name[el]=ÎθÏνη
+Name[eo]=Vidigilo
+Name[es]=Pantalla
+Name[et]=Monitor
+Name[eu]=Pantaila
+Name[fa]=ÙÙ
اÛØ´
+Name[fi]=Näyttö
+Name[fr]=Affichage
+Name[fy]=Byldskerm
+Name[ga]=Scáileán
+Name[gl]=Pantalla
+Name[he]=תצ×××
+Name[hi]=पà¥à¤°à¤¦à¤°à¥à¤¶à¤
+Name[hr]=Zaslon
+Name[hu]=KépernyÅ
+Name[is]=Skjár
+Name[ja]=ãã£ã¹ãã¬ã¤
+Name[ka]=á©áááááá
+Name[kk]=ÐиÑплей
+Name[km]=áá¶áâáááá á¶á
+Name[kn]=ಪà³à²°à²¦à²°à³à²¶à²¿à²¸à³
+Name[ko]=ëì¤íë ì´
+Name[lt]=Ekranas
+Name[lv]=EkrÄns
+Name[mk]=ÐÑиказ
+Name[ms]=Paparan
+Name[nb]=Skjerm
+Name[nds]=Dorstellen
+Name[ne]=पà¥à¤°à¤¦à¤°à¥à¤¶à¤¨ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
+Name[nl]=Beeldscherm
+Name[nn]=Skjerm
+Name[oc]=Visualizar
+Name[pa]=ਡਿਸਪਲà©à¨
+Name[pl]=Ekran
+Name[pt]=Ecrã
+Name[pt_BR]=Tela
+Name[ro]=Monitor
+Name[ru]=ÐиÑплей
+Name[se]=Å earbma
+Name[sk]=Displej
+Name[sl]=Zaslon
+Name[sr]=ÐкÑан
+Name[sr@latin]=Ekran
+Name[sv]=Bildskärm
+Name[ta]=à®à®¾à®à¯à®à®¿
+Name[tg]=ÐамоиÑ
+Name[th]=à¸à¸²à¸£à¹à¸ªà¸à¸à¸à¸¥
+Name[tr]=Görüntü
+Name[uk]=ÐиÑплей
+Name[uz]=ÐиÑплей
+Name[vi]=Mà n hình
+Name[wa]=HÃ¥ynaedje
+Name[x-test]=xxDisplayxx
+Name[zh_CN]=æ¾ç¤º
+Name[zh_TW]=顯示
+Comment=Display Settings
+Comment[af]=Skerm Instellings
+Comment[ar]=إعدادات اÙعرض
+Comment[be]=ÐаÑÑаÑÐ»ÐµÐ½Ð½Ñ ÑкÑанÑ
+Comment[bg]=ÐаÑÑÑойване на екÑана
+Comment[bn]=ডিসপà§à¦²à§ সà§à¦à¦¿à¦à¦¸
+Comment[br]=Kefluniañ an diskwel
+Comment[ca]=Arranjament de la pantalla
+Comment[cs]=Nastavenà obrazovky
+Comment[csb]=Ãstôw ekranu
+Comment[cy]=Gosodiadau Arddangos
+Comment[da]=Opsætning af skærm
+Comment[de]=Anzeige-Einstellungen
+Comment[el]=ΡÏ
θμίÏÎµÎ¹Ï Î¿Î¸ÏνηÏ
+Comment[eo]=Vidigila agordo
+Comment[es]=Preferencias de la pantalla
+Comment[et]=Monitoride seadistused
+Comment[eu]=Pantailaren konfigurazioa
+Comment[fa]=ÙÙ
اÛØ´ تÙظÛÙ
ات
+Comment[fi]=Näytön asetukset
+Comment[fr]=Paramètres d'affichage
+Comment[fy]=Byldskerm ynstellings
+Comment[ga]=Socruithe an Scáileáin
+Comment[gl]=Configuración da pantalla
+Comment[he]=×××ר×ת תצ×××
+Comment[hi]=पà¥à¤°à¤à¤à¤¨ विनà¥à¤¯à¤¾à¤¸
+Comment[hr]=Postavke zaslona
+Comment[hu]=KépernyÅbeállÃtások
+Comment[is]=Stillingar skjás
+Comment[it]=Impostazioni del display
+Comment[ja]=ãã£ã¹ãã¬ã¤ã®è¨å®
+Comment[ka]=ááá¡ááááá¡ áááá¤ááá£á áá ááá
+Comment[kk]=ÐиÑплей бапÑаÑлаÑÑ
+Comment[km]=áááááâáá¶áâáááá á¶á
+Comment[ko]=ëì¤íë ì´ ì¤ì
+Comment[lt]=Ekrano parametrai
+Comment[lv]=EkrÄna parametri
+Comment[mk]=ÐоÑÑавÑваÑа на пÑиказоÑ
+Comment[ms]=Seting Paparan
+Comment[nb]=Skjerminnstillinger
+Comment[nds]=Dorstellen inrichten
+Comment[ne]=सà¥à¤à¤¿à¤ पà¥à¤°à¤¦à¤°à¥à¤¶à¤¨ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
+Comment[nl]=Beeldscherminstellingen
+Comment[nn]=Skjerminnstillingar
+Comment[pa]=ਡਿਸਪਲà©à¨
ਸà©à¨à¨¿à©°à¨
+Comment[pl]=Ustawienia ekranu
+Comment[pt]=Configuração do ecrã
+Comment[pt_BR]=Configurações da Tela
+Comment[ro]=ConfigureazÄ monitorul
+Comment[ru]=ÐаÑÑÑойка диÑплеÑ
+Comment[se]=Å earbmaheivehusat
+Comment[sk]=Nastavenie displeja
+Comment[sl]=Nastavitve zaslona
+Comment[sr]=ÐодеÑаваÑа екÑана
+Comment[sr@latin]=Podešavanja ekrana
+Comment[sv]=Anpassa bildskärm
+Comment[ta]=à®
à®®à¯à®ªà¯à®ªà¯à®à®³à¯ à®à®¾à®à¯à®à¯
+Comment[tg]=ТанзимоÑи намоиÑ
+Comment[th]=à¸à¸±à¹à¸à¸à¹à¸²à¸à¸²à¸£à¹à¸ªà¸à¸à¸à¸¥
+Comment[tr]=Görüntü Ayarları
+Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð´Ð¸ÑплеÑ
+Comment[uz]=ÐиÑплейнинг моÑламалаÑи
+Comment[vi]=Thiết láºp Mà n hình
+Comment[wa]=Apontiaedjes do HÃ¥ynaedje
+Comment[x-test]=xxDisplay Settingsxx
+Comment[zh_CN]=æ¾ç¤ºè®¾ç½®
+Comment[zh_TW]=顯示è¨å®
+
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-general.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-general.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-general.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-general.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,62 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-Weight=100
+X-KDE-System-Settings-Category=general
+X-KDE-System-Settings-Parent-Category=
+
+Name=General
+Name[ar]=عاÙ
+Name[be]=ÐгÑлÑнÑÑ
+Name[bg]=ÐÑновно
+Name[br]=Pennañ
+Name[cs]=Obecné
+Name[csb]=Spòdlowé
+Name[da]=Generelt
+Name[de]=Allgemein
+Name[el]=Îενικά
+Name[eo]=Äenerale
+Name[et]=Ãldine
+Name[eu]=Orokorra
+Name[fa]=عÙ
ÙÙ
Û
+Name[fi]=Yleinen
+Name[fr]=Général
+Name[fy]=Algemien
+Name[ga]=Ginearálta
+Name[gl]=Xeral
+Name[he]=××××
+Name[hi]=सामानà¥à¤¯
+Name[hu]=Ãltalános
+Name[is]=Almennt
+Name[it]=Generale
+Name[ja]=å
¨è¬
+Name[kk]=ÐалпÑ
+Name[km]=áá¼áá
+Name[kn]=ಸಾಮಾನà³à²¯
+Name[ko]=ì¼ë°
+Name[ku]=GiÅtî
+Name[lv]=VispÄrÄji
+Name[nb]=Generelt
+Name[nds]=Allgemeen
+Name[ne]=सामनà¥à¤¯
+Name[nl]=Algemeen
+Name[nn]=Generelt
+Name[pa]=à¨à¨®
+Name[pl]=Ogólne
+Name[pt]=Geral
+Name[pt_BR]=Geral
+Name[se]=Oppalaš
+Name[sl]=Splošno
+Name[sr]=ÐпÑÑе
+Name[sr@latin]=Opšte
+Name[sv]=Allmänt
+Name[ta]=பà¯à®¤à¯
+Name[tg]=УмÑмӣ
+Name[th]=à¸à¸±à¹à¸§à¹à¸
+Name[tr]=Genel
+Name[uk]=ÐагалÑне
+Name[vi]=Chung
+Name[wa]=Djenerå
+Name[x-test]=xxGeneralxx
+Name[zh_CN]=常è§
+Name[zh_TW]=ä¸è¬
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-keyboard-and-mouse.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-keyboard-and-mouse.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-keyboard-and-mouse.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-keyboard-and-mouse.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,60 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=keyboard-and-mouse
+X-KDE-System-Settings-Parent-Category=computer-administration
+Icon=preferences-desktop-keyboard
+
+Name=Keyboard & Mouse
+Name[ar]=ÙÙØØ© اÙÙ
ÙاتÙØ ÙاÙÙأرة
+Name[be]=ÐлавÑÑÑÑÑа Ñ Ð¼ÑÑ
+Name[bg]=ÐлавиаÑÑÑни подÑедби
+Name[ca]=Teclat i ratolÃ
+Name[csb]=Klawiatura ë mësz
+Name[da]=Tastatur og mus
+Name[de]=Tastatur & Maus
+Name[el]=ΠληκÏÏολÏγιο & ÏονÏίκι
+Name[eo]=Klavaro & muso
+Name[es]=Teclado y ratón
+Name[et]=Klaviatuur ja hiir
+Name[eu]=Teklatua eta sagua
+Name[fa]=صÙØÙ Ú©ÙÛد Ù Ù
ÙØ´Û
+Name[fi]=Näppäimistö ja hiiri
+Name[fr]=Clavier & Souris
+Name[fy]=Toetseboerd & Mûs
+Name[ga]=Méarchlár agus Luch
+Name[gl]=Teclado e rato
+Name[he]=×ק××ת ××¢××ר
+Name[hi]=à¤à¥à¤à¤à¥à¤ªà¤ व माà¤à¤¸
+Name[hu]=Egér és billentyűzet
+Name[is]=Lyklaborð og mús
+Name[it]=Tastiera e mouse
+Name[ja]=ãã¼ãã¼ãã¨ãã¦ã¹
+Name[kk]=ÐеÑенеÑаÒÑа мен ÑÑÑÒан
+Name[km]=áááá¶áâá
á»á
â áá·áâááááá»áâ
+Name[ko]=í¤ë³´ëì ë§ì°ì¤
+Name[lv]=Tastatūra un pele
+Name[nb]=Tastatur og mus
+Name[nds]=Tastatuur un Muus
+Name[ne]=à¤à¥à¤à¥à¤à¥à¤ªà¤¾à¤à¥ र माà¤à¤¸
+Name[nl]=Toetsenbord en muis
+Name[nn]=Tastatur og mus
+Name[oc]=Clavièr e mirga
+Name[pa]=à¨à©-ਬà©à¨°à¨¡ à¨
ਤ੠ਮਾà¨à¨à¨¸
+Name[pl]=Klawiatura i mysz
+Name[pt]=Teclado e Rato
+Name[pt_BR]=Mouse & Teclado
+Name[ru]=ÐлавиаÑÑÑа и мÑÑÑ
+Name[se]=Boallobeavdi ja sáhpán
+Name[sl]=Tipkovnica in miška
+Name[sr]=ТаÑÑаÑÑÑа и миÑ
+Name[sr@latin]=Tastatura i miš
+Name[sv]=Tangentbord och mus
+Name[tg]=ÐлавиаÑÑÑа ва мÑÑ
+Name[th]=à¹à¸à¹à¸à¸à¸´à¸¡à¸à¹à¹à¸¥à¸°à¹à¸¡à¹à¸²à¸ªà¹
+Name[tr]=Klavye ve Fare
+Name[uk]=ÐлавÑаÑÑÑа Ñ Ð¼Ð¸Ñка
+Name[wa]=Taprece et sori
+Name[x-test]=xxKeyboard & Mousexx
+Name[zh_CN]=é®çåé¼ æ
+Name[zh_TW]=éµç¤èæ»é¼
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-look-and-feel.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-look-and-feel.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-look-and-feel.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-look-and-feel.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,59 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=look-and-feel
+X-KDE-System-Settings-Parent-Category=general
+X-KDE-Weight=80
+Icon=preferences-desktop-theme
+
+Name=Look & Feel
+Name[ar]=اÙÙ
ظÙر ÙاÙسÙÙ
Ø©
+Name[be]=ÐнеÑÐ½Ñ Ð²ÑглÑд Ñ ÑнÑÑÑÑейÑ
+Name[bg]=ÐÑнÑен вид
+Name[ca]=Aspecte i efecte
+Name[cs]=Vzhled a chovánÃ
+Name[de]=Erscheinungsbild & Verhalten
+Name[el]=ÎÏη & αίÏθηÏη
+Name[eo]=Fasado
+Name[es]=Aspecto y comportamiento
+Name[et]=Välimus
+Name[eu]=Itxura eta izaera
+Name[fa]=ظاÙر ٠اØساس
+Name[fi]=Käyttötuntuma
+Name[fr]=Apparence
+Name[fy]=Uterlik & gefoel
+Name[ga]=Cuma
+Name[gl]=Aparencia e comportamento
+Name[he]=×ר×× ×ת××ש×
+Name[hi]=रà¥à¤ª व à¤à¤à¤¾à¤°
+Name[hu]=Megjelenés
+Name[is]=Ãtlit og virkni
+Name[it]=Aspetto
+Name[ja]=å¤è¦³
+Name[kk]=ТүÑÑ Ð¼ÐµÐ½ күйÑ
+Name[km]=áá¼ááá¶á áá·áâáá»ááá¶á
+Name[ko]=모ìµê³¼ ëë
+Name[lt]=IÅ¡vaizda ir jausena
+Name[lv]=Izskats un sajūtas
+Name[nb]=Utseende og oppførsel
+Name[nds]=Utsehn un Bedregen
+Name[ne]=हà¥à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥ र महशà¥à¤¸ à¤à¤°à¥à¤¨à¥à¤¹à¥à¤¸à¥
+Name[nl]=Uiterlijk en gedrag
+Name[nn]=Utsjånad og åtferd
+Name[pa]=ਦਿੱਠà¨
ਤ੠ਮਹਿਸà©à¨¸
+Name[pl]=WyglÄ
d
+Name[pt]=Aparência e Comportamento
+Name[pt_BR]=Aparência
+Name[ru]=ÐнеÑний вид и поведение
+Name[se]=Fárdá ja láhtten
+Name[sl]=Videz in obÄutek
+Name[sr]=Ðзглед и оÑеÑаÑ
+Name[sr@latin]=Izgled i oseÄaj
+Name[sv]=Utseende och känsla
+Name[th]=รูà¸à¸¥à¸±à¸à¸©à¸à¹à¹à¸¥à¸°à¸à¸§à¸²à¸¡à¸£à¸¹à¹à¸ªà¸¶à¸
+Name[tr]=Görünüm
+Name[uk]=ÐиглÑд Ñ Ð¿Ð¾Ð²ÐµÐ´Ñнка
+Name[wa]=Rivnance et dujhance
+Name[x-test]=xxLook & Feelxx
+Name[zh_CN]=è§æ
+Name[zh_TW]=å¤è§èæ覺
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-network-and-connectivity.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-network-and-connectivity.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-network-and-connectivity.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-network-and-connectivity.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,60 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=network-and-connectivity
+X-KDE-System-Settings-Parent-Category=general
+X-KDE-Weight=150
+Icon=preferences-system-network
+
+Name=Network & Connectivity
+Name[ar]=اÙشبÙØ© ÙاÙاتصاÙ
+Name[bg]=ÐнÑеÑÐ½ÐµÑ Ð¸ мÑежа
+Name[ca]=Xarxa i connectivitat
+Name[cs]=SÃÅ¥ a pÅipojenÃ
+Name[da]=Netværk og forbindelse
+Name[de]=Netzwerk & Verbindungen
+Name[el]=ÎίκÏÏ
ο & ÏÏ
νδεÏιμÏÏηÏα
+Name[eo]=Reto kaj konekteco
+Name[es]=Red y conectividad
+Name[et]=Võrk
+Name[eu]=Sarea eta konektibitatea
+Name[fa]=شبک٠٠اتصاÙ
+Name[fi]=Verkko & yhteydet
+Name[fr]=Réseau & Connectivité
+Name[fy]=Netwurk & ferbinings
+Name[ga]=LÃonra agus Comhcheangailteacht
+Name[gl]=Rede e conectividade
+Name[he]=רשת ×ק×ש×ר××ת
+Name[hi]=नà¥à¤à¤µà¤°à¥à¤ व à¤à¤¨à¥à¤à¥à¤à¤¿à¤µà¤¿à¤à¥
+Name[hu]=Hálózat
+Name[is]=Net og tengjanleiki
+Name[it]=Rete e connettivitÃ
+Name[ja]=ãããã¯ã¼ã¯ã¨æ¥ç¶
+Name[kk]=ÐÐµÐ»Ñ & ÐайланÑÑ
+Name[km]=ááááá¶á áá·áâáá¶áááááá¶áá
+Name[ko]=ë¤í¸ìí¬ì ì°ê²°
+Name[ku]=Tor & Girêdan
+Name[lt]=Tinklas ir prisijungimai
+Name[lv]=TÄ«kls un savienojumi
+Name[nb]=Nettverk og tilkoblinger
+Name[nds]=Nettwark un Verbinnen
+Name[ne]=सà¤à¥à¤à¤¾à¤² र à¤à¤¡à¤¾à¤¨
+Name[nl]=Netwerk en connectiviteit
+Name[nn]=Nettverk og samband
+Name[pa]=ਨà©à©±à¨à¨µà¨°à¨ à¨
ਤ੠à¨à©à¨¨à©à¨à¨à¨µà¨¿à¨à©
+Name[pl]=SieÄ i poÅÄ
czenia
+Name[pt]=Rede e Conectividade
+Name[pt_BR]=Rede & Conectividade
+Name[ru]=СеÑÑ
+Name[se]=Fierpmádat ja gullahallan
+Name[sl]=Omrežje in povezljivost
+Name[sr]=ÐÑежа и повезивоÑÑ
+Name[sr@latin]=Mreža i povezivost
+Name[sv]=Nätverk och anslutningar
+Name[th]=à¹à¸à¸£à¸·à¸à¸à¹à¸²à¸¢à¹à¸¥à¸°à¸à¸²à¸£à¹à¸à¸·à¹à¸à¸¡à¸à¹à¸
+Name[tr]=AÄ ve BaÄlanılabilirlik
+Name[uk]=ÐеÑежа Ñ Ð·'ÑднаннÑ
+Name[wa]=Rantoele eyet raloyaedje
+Name[x-test]=xxNetwork & Connectivityxx
+Name[zh_CN]=ç½ç»åè¿æ¥
+Name[zh_TW]=網路é£ç·
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-network-settings.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-network-settings.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-network-settings.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-network-settings.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,63 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=network-settings
+X-KDE-System-Settings-Parent-Category=network-and-connectivity
+Icon=preferences-system-network
+
+Name=Network Settings
+Name[ar]=إعدادات اÙشبÙØ©
+Name[be]=ÐаÑÑаÑÐ»ÐµÐ½Ð½Ñ ÑеÑкÑ
+Name[bg]=ÐÑежови наÑÑÑойки
+Name[br]=Kefluniadur ar Rouedad
+Name[ca]=Parà metres de xarxa
+Name[csb]=Sécowi ùstôw
+Name[da]=Netværksopsætning
+Name[de]=Netzwerk-Einstellungen
+Name[el]=ΡÏ
θμίÏÎµÎ¹Ï Î´Î¹ÎºÏÏοÏ
+Name[eo]=Reta agordo
+Name[es]=Preferencias de red
+Name[et]=Võrguseadistused
+Name[eu]=Sare ezarpenak
+Name[fa]=تÙظÛÙ
ات شبکÙ
+Name[fi]=Verkkoasetukset
+Name[fr]=Configuration réseau
+Name[fy]=Netwurk ynstellings
+Name[ga]=Socruithe LÃonra
+Name[gl]=Configuración da rede
+Name[he]=×××ר×ת רשת
+Name[hi]=नà¥à¤à¤µà¤°à¥à¤ विनà¥à¤¯à¤¾à¤¸
+Name[hr]=Postavke mreže
+Name[hu]=Hálózati beállÃtások
+Name[is]=Netstillingar
+Name[it]=Impostazioni di rete
+Name[ja]=ãããã¯ã¼ã¯ã®è¨å®
+Name[kk]=ÐÐµÐ»Ñ Ð¿Ð°ÑамеÑÑлеÑÑ
+Name[km]=áá¶áâáááááâááááá¶áâ
+Name[ko]=ë¤í¸ìí¬ ì¤ì
+Name[ku]=Mîhengên Torê
+Name[lv]=Tīkla iestatījumi
+Name[nb]=Nettverksinnstillinger
+Name[nds]=Nettwarkinstellen
+Name[ne]=सà¤à¥à¤à¤¾à¤² सà¥à¤à¤¿à¤
+Name[nl]=Netwerkinstellingen
+Name[nn]=Nettverksinnstillingar
+Name[oc]=Paramètres ret
+Name[pa]=ਨà©à©±à¨à¨µà¨°à¨ ਸà©à¨à¨¿à©°à¨
+Name[pl]=Ustawienia sieci
+Name[pt]=Configuração da Rede
+Name[pt_BR]=Configurações de Rede
+Name[ru]=ÐаÑÑÑойка ÑеÑи
+Name[se]=Fierpmádatheivehusat
+Name[sl]=Nastavitve omrežja
+Name[sr]=ÐÑежне поÑÑавке
+Name[sr@latin]=Mrežne postavke
+Name[sv]=Nätverksinställningar
+Name[tg]=ТанзимоÑҳои Ñабака
+Name[th]=à¸à¸±à¹à¸à¸à¹à¸²à¹à¸à¸£à¸·à¸à¸à¹à¸²à¸¢
+Name[tr]=AÄ Ayarları
+Name[uk]=ÐеÑÐµÐ¶Ð½Ñ Ð¿Ð°ÑамеÑÑи
+Name[wa]=Apontiaedjes rantoele
+Name[x-test]=xxNetwork Settingsxx
+Name[zh_CN]=ç½ç»è®¾ç½®
+Name[zh_TW]=網路è¨å®
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-notifications.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-notifications.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-notifications.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-notifications.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,62 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=notifications
+X-KDE-System-Settings-Parent-Category=look-and-feel
+Icon=preferences-desktop-notification
+
+Name=Notifications
+Name[ar]=تÙبÙÙات
+Name[be]=ÐбвÑÑÑÑннÑ
+Name[bg]=УведомÑване
+Name[br]=Kemenn
+Name[ca]=Notificacions
+Name[csb]=Dôwanié wiédzë
+Name[da]=Bekendtgørelser
+Name[de]=Benachrichtigungen
+Name[el]=ÎιδοÏοιήÏειÏ
+Name[eo]=Atentigoj
+Name[es]=Notificaciones
+Name[et]=Märguanded
+Name[eu]=Jakinarazpenak
+Name[fa]=اخطارÙا
+Name[fi]=Huomautukset
+Name[fy]=Notifikaasjes
+Name[ga]=Fógairt
+Name[gl]=Notificacións
+Name[he]=××××¢×ת ×ער×ת
+Name[hi]=सà¥à¤à¤¨à¤¾à¤à¤
+Name[hr]=Obavijesti
+Name[hu]=Rendszerüzenetek
+Name[is]=Kerfistilkynningar
+Name[it]=Avvisi
+Name[ja]=éç¥
+Name[kk]=ÒұлаÒÑандÑÑÑ
+Name[km]=ááá
áááá¸âáá¼áâáááá¹áâ
+Name[kn]=ಸà³à²à²¨à³à²à²³à³
+Name[ko]=ì림
+Name[ku]=Agahdarî
+Name[lv]=PaziÅojumi
+Name[nb]=Varslinger
+Name[nds]=Bescheden
+Name[ne]=सà¥à¤à¤¨à¤¾
+Name[nl]=Meldingen
+Name[nn]=Varslingar
+Name[pa]=ਨà©à¨à©à¨«à¨¿à¨à©à¨¸à¨¼à¨¨
+Name[pl]=Powiadomienia
+Name[pt]=Notificações
+Name[pt_BR]=Notificações
+Name[ru]=СиÑÑемнÑе ÑведомлениÑ
+Name[se]=DieÄáhusat
+Name[sl]=Obvestila
+Name[sr]=ÐбавеÑÑеÑа
+Name[sr@latin]=Obaveštenja
+Name[sv]=Underrättelser
+Name[tg]=Ðгоҳномаҳо
+Name[th]=à¸à¸²à¸£à¹à¸à¹à¸à¹à¸à¸·à¸à¸
+Name[tr]=Bildirimler
+Name[uk]=СповÑÑеннÑ
+Name[wa]=Notifiaedjes
+Name[x-test]=xxNotificationsxx
+Name[zh_CN]=éç¥
+Name[zh_TW]=éç¥
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-personal.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-personal.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-personal.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-personal.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,57 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=personal
+X-KDE-System-Settings-Parent-Category=general
+Icon=preferences-desktop-personal
+
+Name=Personal
+Name[ar]=شخصÙ
+Name[be]=ÐÑабÑÑÑÑÑ
+Name[bg]=ÐиÑни бележки
+Name[csb]=Swòje
+Name[de]=Persönliches
+Name[el]=Î ÏοÏÏÏικά
+Name[eo]=Persona
+Name[et]=Isiklik
+Name[eu]=Pertsonala
+Name[fa]=شخصÛ
+Name[fi]=Henkilökohtaista
+Name[fr]=Personnel
+Name[fy]=Persoanlik
+Name[ga]=Pearsanta
+Name[gl]=Persoal
+Name[he]=×××ר×ת ××ש××ת
+Name[hi]=निà¤à¥
+Name[hu]=Személyes
+Name[is]=Einkaskrár
+Name[it]=Personale
+Name[ja]=å人
+Name[kk]=ÐеÑбеÑ
+Name[km]=áááá¶áááááá½á
+Name[kn]=ವà³à²¯à²à³à²¤à²¿à²
+Name[ko]=ê°ì¸
+Name[ku]=Åexsî
+Name[lv]=Personas
+Name[nb]=Personlig
+Name[nds]=Persöönlich
+Name[ne]=वà¥à¤¯à¤à¥à¤¤à¤¿à¤à¤¤
+Name[nl]=Persoonlijk
+Name[nn]=Personleg
+Name[pa]=ਨਿੱà¨à©
+Name[pl]=Osobiste
+Name[pt]=Pessoal
+Name[pt_BR]=Pessoais
+Name[se]=Persuvnnalaš
+Name[sl]=Osebno
+Name[sr]=ÐиÑни подаÑи
+Name[sr@latin]=LiÄni podaci
+Name[sv]=Personligt
+Name[tg]=ШаÑ
ÑÓ£
+Name[th]=สà¹à¸§à¸à¸à¸¸à¸à¸à¸¥
+Name[tr]=KiÅisel
+Name[uk]=ÐÑобиÑÑÑ Ð¿Ð°ÑамеÑÑи
+Name[wa]=Da vosse
+Name[x-test]=xxPersonalxx
+Name[zh_CN]=个人
+Name[zh_TW]=å人
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-regional-and-language.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-regional-and-language.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-regional-and-language.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-regional-and-language.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,60 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=regional-and-language
+X-KDE-System-Settings-Parent-Category=personal
+Icon=preferences-desktop-locale
+
+Name=Regional & Language
+Name[ar]=اÙبÙد ÙاÙÙغة
+Name[be]=ÐÑаÑна/Ð ÑгÑÑн Ñ Ðова
+Name[bg]=ÐÑÑжава и език
+Name[br]=Rann-vro & yezh
+Name[ca]=PaÃs/Regió i idioma
+Name[csb]=Kraj/dzél kraju ë jãzëk
+Name[de]=Land/Region & Sprache
+Name[el]=ΤοÏικÎÏ ÏÏ
θμίÏÎµÎ¹Ï & γλÏÏÏα
+Name[eo]=Regiono & Lingvo
+Name[es]=Región e idioma
+Name[et]=Riik/regioon ja keel
+Name[eu]=Herrialdea eta hizkuntza
+Name[fa]=Ù
ÙØ·ÙÙâØ§Û Ù Ø²Ø¨Ø§Ù
+Name[fi]=Alue ja kieli
+Name[fr]=Régional & langue
+Name[fy]=Lân/Regio & Taal
+Name[ga]=Réigiún agus Teanga
+Name[gl]=PaÃs e lingua
+Name[he]=××××ר ×שפ×
+Name[hi]=à¤à¥à¤·à¥à¤¤à¥à¤°à¥à¤¯à¤¤à¤¾ व à¤à¤¾à¤·à¤¾
+Name[hu]=Ország és nyelv
+Name[is]=Land & tungumál
+Name[it]=Lingua e paese
+Name[ja]=å½ã¨è¨èª
+Name[kk]=Өлке жÓне ÑÑл
+Name[km]=ááááá áá·áâáá¶áá¶â
+Name[ko]=êµê° ë° ì¸ì´
+Name[ku]=Herêmî & Ziman
+Name[lv]=Reģions un valoda
+Name[nb]=Land/region og språk
+Name[nds]=Land, Regioon un Spraak
+Name[ne]=à¤à¥à¤·à¥à¤¤à¥à¤° र à¤à¤¾à¤·à¤¾
+Name[nl]=Land/regio en taal
+Name[nn]=Land/region og språk
+Name[pa]=à¨à©à¨¤à¨°à© à¨
ਤ੠à¨à¨¾à¨¸à¨¼à¨¾
+Name[pl]=Kraj/region i jÄzyk
+Name[pt]=Região e LÃngua
+Name[pt_BR]=Regional & Idioma
+Name[ru]=СÑÑана и ÑзÑк
+Name[se]=Riika/guovlu ja giella
+Name[sl]=Država/regija in jezik
+Name[sr]=РегиÑа и Ñезик
+Name[sr@latin]=Regija i jezik
+Name[sv]=Region och språk
+Name[tg]=ÐинÑаÒа ва забон
+Name[th]=à¹à¸à¸à¸à¸·à¹à¸à¸à¸µà¹à¹à¸¥à¸°à¸ าษา
+Name[tr]=Ãlke, Bölge ve Dil
+Name[uk]=ÐÑаÑна/ÑегÑон Ñ Ð¼Ð¾Ð²Ð°
+Name[wa]=Payis et lingaedje
+Name[x-test]=xxRegional & Languagexx
+Name[zh_CN]=å°åºåè¯è¨
+Name[zh_TW]=å°åèèªè¨
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-sharing.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-sharing.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-sharing.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-sharing.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,59 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=sharing
+X-KDE-System-Settings-Parent-Category=network-and-connectivity
+Icon=preferences-system-network-sharing
+
+Name=Sharing
+Name[ar]=Ù
شارÙØ©
+Name[be]=Ðбмен
+Name[bg]=СподелÑне
+Name[br]=Rannañ
+Name[ca]=Compartició
+Name[csb]=Ãwòlnienié
+Name[de]=Freigabe
+Name[el]=ÎιαμοιÏαÏμÏÏ
+Name[eo]=Komunigo
+Name[es]=Compartición
+Name[et]=Jagamine
+Name[eu]=Banaketak
+Name[fa]=اشتراک
+Name[fi]=Jaetaan
+Name[fr]=Partage
+Name[fy]=Diele
+Name[ga]=Comhroinnt
+Name[gl]=Compartición
+Name[he]=ש×ת××£
+Name[hi]=साà¤à¥à¤¦à¤¾à¤°à¥
+Name[hr]=Razmjena
+Name[hu]=Megosztás
+Name[is]=Deili
+Name[it]=Condivisione
+Name[ja]=å
±æ
+Name[km]=áá¶áâá
ááâááááá
+Name[ko]=ê³µì
+Name[ku]=Parvekirin
+Name[lv]=Koplietošana
+Name[nb]=Deler
+Name[nds]=Delen
+Name[ne]=साà¤à¥à¤¦à¤¾à¤°à¥
+Name[nl]=Delen
+Name[nn]=Deling
+Name[pa]=ਸਾà¨à¨
+Name[pl]=WspóÅdzielenie
+Name[pt]=Partilha
+Name[pt_BR]=Compartilhamento
+Name[ru]=ÐбÑий доÑÑÑп к Ñайлам
+Name[se]=Juogádeapmi
+Name[sl]=Souporaba
+Name[sr]=ÐеÑеÑе
+Name[sr@latin]=Deljenje
+Name[sv]=Delning
+Name[th]=à¹à¸à¹à¸£à¹à¸§à¸¡à¸à¸±à¸
+Name[tr]=PaylaÅım
+Name[uk]=СпÑлÑне коÑиÑÑÑваннÑ
+Name[wa]=PÃ¥rtaedje
+Name[x-test]=xxSharingxx
+Name[zh_CN]=å
񄧮
+Name[zh_TW]=å享
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-system.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-system.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-system.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-system.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,73 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=system
+X-KDE-System-Settings-Parent-Category=advanced
+Icon=preferences-system
+
+Name=System
+Name[af]=Stelsel
+Name[ar]=اÙÙظاÙ
+Name[be]=СÑÑÑÑма
+Name[bg]=СиÑÑема
+Name[bn]=সিসà§à¦à§à¦®
+Name[br]=Reizhiad
+Name[ca]=Sistema
+Name[cs]=Systém
+Name[csb]=Systema
+Name[cy]=Cysawd
+Name[el]=ΣÏÏÏημα
+Name[eo]=Sistemo
+Name[es]=Sistema
+Name[et]=Süsteem
+Name[eu]=Sistema
+Name[fa]=سÛستÙ
+Name[fi]=Järjestelmä
+Name[fr]=Système
+Name[fy]=Systeem
+Name[ga]=Córas
+Name[gl]=Sistema
+Name[he]=×ער×ת
+Name[hi]=तà¤à¤¤à¥à¤°
+Name[hr]=Sustav
+Name[hu]=Rendszer
+Name[is]=Kerfi
+Name[it]=Sistema
+Name[ja]=ã·ã¹ãã
+Name[ka]=á¡áá¡á¢ááá
+Name[kk]=ÐүйелÑк
+Name[km]=áááááááá
+Name[kn]=ವà³à²¯à²µà²¸à³à²¥à³
+Name[ko]=ìì¤í
+Name[ku]=Pergal
+Name[lt]=Sistema
+Name[lv]=SistÄma
+Name[mk]=СиÑÑем
+Name[ms]=Sistem
+Name[nds]=Systeem
+Name[ne]=पà¥à¤°à¤£à¤¾à¤²à¥
+Name[nl]=Systeem
+Name[oc]=Sistèma
+Name[pa]=ਸਿਸà¨à¨®
+Name[pt]=Sistema
+Name[pt_BR]=Sistema
+Name[ro]=Sistem
+Name[ru]=СиÑÑема
+Name[se]=Vuogádat
+Name[sk]=Systém
+Name[sl]=Sistem
+Name[sr]=СиÑÑем
+Name[sr@latin]=Sistem
+Name[ta]=à®
à®®à¯à®ªà¯à®ªà¯
+Name[te]=à°µà±à°¯à°µà°¸à±à°¥
+Name[tg]=СиÑÑема
+Name[th]=ระà¸à¸
+Name[tr]=Sistem
+Name[uk]=СиÑÑема
+Name[uz]=Тизим
+Name[vi]=Há» thá»ng
+Name[wa]=Sistinme
+Name[x-test]=xxSystemxx
+Name[xh]=Indlela esestyenziswayo
+Name[zh_CN]=ç³»ç»
+Name[zh_TW]=系統
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-window-behaviour.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-window-behaviour.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-window-behaviour.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/settings-window-behaviour.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,76 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=SystemSettingsCategory
+X-KDE-System-Settings-Category=window-behaviour
+X-KDE-System-Settings-Parent-Category=look-and-feel
+Icon=preferences-system-windows
+
+Name=Window Behavior
+Name[af]=Venster Gedrag
+Name[ar]=سÙÙ٠اÙÙÙاÙØ°
+Name[be]=ÐаводзÑÐ½Ñ Ð²Ð¾ÐºÐ½Ð°Ñ
+Name[bg]=ÐÑозоÑÑи
+Name[bn]=à¦à¦à¦£à§à¦¡à§ à¦à¦à¦°à¦£
+Name[br]=Emzalc'h ar prenester
+Name[ca]=Comportament de les finestres
+Name[cs]=Chovánà oken
+Name[csb]=Ãchòwanié òkna
+Name[cy]=Ymddygiad Ffenestri
+Name[da]=Vinduesopførsel
+Name[de]=Fenstereigenschaften
+Name[el]=ΣÏ
μÏεÏιÏοÏά ÏαÏαθÏÏοÏ
+Name[en_GB]=Window Behaviour
+Name[eo]=Fenestrokonduto
+Name[es]=Comportamiento de la ventana
+Name[et]=Akende käitumine
+Name[eu]=Leihoen portaera
+Name[fa]=رÙتار Ù¾ÙجرÙ
+Name[fi]=Ikkunoiden käyttäytyminen
+Name[fr]=Comportement des fenêtres
+Name[fy]=Finstergedrach
+Name[ga]=Oibriú na bhFuinneog
+Name[gl]=Comportamento das fiestras
+Name[he]=פע××ת ×××× ×ת
+Name[hi]=विà¤à¤¡à¥ वà¥à¤¯à¤µà¤¹à¤¾à¤°
+Name[hr]=Ponašanje prozora
+Name[hu]=Ablakműveletek
+Name[is]=Hegðun glugga
+Name[it]=Comportamento delle finestre
+Name[ja]=ã¦ã£ã³ãã¦ã®æå
+Name[ka]=á¤ááá¯á áá¡ á¥áªááá
+Name[kk]=ТеÑезе ÒаÑиеÑÑеÑÑ
+Name[km]=á¥áá·áá¶ááâáááá¢á½á
+Name[ko]=ì°½ ëì
+Name[ku]=Helwesta Paceyan
+Name[lt]=Langų elgsena
+Name[lv]=Loga izturÄÅ¡anÄs
+Name[mk]=ÐднеÑÑваÑе на пÑозоÑÑи
+Name[nb]=Vindusoppførsel
+Name[nds]=Finsterbedregen
+Name[ne]=सà¤à¥à¤à¥à¤¯à¤¾à¤² वà¥à¤¯à¤µà¤¹à¤¾à¤°
+Name[nl]=Venstergedrag
+Name[nn]=Vindaugsåtferd
+Name[pa]=ਵਿੰਡ੠ਰਵੱà¨à¨
+Name[pl]=Okna
+Name[pt]=Comportamento das Janelas
+Name[pt_BR]=Comportamento da Janela
+Name[ro]=Comportament fereastrÄ
+Name[ru]=Ðоведение окна
+Name[se]=Láseláhtten
+Name[sk]=Správanie okien
+Name[sl]=Obnašanje oken
+Name[sr]=ÐонаÑаÑе пÑозоÑа
+Name[sr@latin]=Ponašanje prozora
+Name[sv]=Fönsterbeteende
+Name[ta]=à®à®¾à®³à®° நà®à®¤à¯à®¤à¯
+Name[tg]=РаÑÑоÑи ÑиÑеза
+Name[th]=à¸à¸¤à¸à¸´à¸à¸£à¸£à¸¡à¸à¸à¸à¸«à¸à¹à¸²à¸à¹à¸²à¸
+Name[tr]=Pencere DavranıÅı
+Name[uk]=ÐоведÑнка вÑкон
+Name[uz]=Ðйнанинг Ñ
ÑÑÑÑиÑÑлаÑи
+Name[vi]=Ứng xá» của Cá»a sá»
+Name[wa]=Dujhance des purneas
+Name[x-test]=xxWindow Behaviorxx
+Name[xh]=Ukuziphatha kwe Window
+Name[zh_CN]=çªå£è¡ä¸º
+Name[zh_TW]=è¦çªè¡çº
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/systemsettingscategory.desktop
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/systemsettingscategory.desktop?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/systemsettingscategory.desktop (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/categories/systemsettingscategory.desktop Wed Feb 6 11:56:53 2008
@@ -0,0 +1,61 @@
+[Desktop Entry]
+Type=ServiceType
+X-KDE-ServiceType=SystemSettingsCategory
+Name=System Settings Category
+Name[ar]=Ùئة إعدادات اÙÙظاÙ
+Name[be]=ÐаÑÑгоÑÑÑ ÑÑÑÑÑмнÑÑ
наÑÑаÑленнÑÑ
+Name[bg]=ÐаÑегоÑÐ¸Ñ ÑиÑÑемни наÑÑÑойки
+Name[ca]=Categoria d'arranjament del sistema
+Name[csb]=Kategòrëjô systemòwégò ùstôwù
+Name[de]=Systemeinstellungen-Kategorie
+Name[el]=ÎαÏηγοÏία ÏÏ
θμίÏεÏν ÏÏ
ÏÏήμαÏοÏ
+Name[eo]=Sistemagorda kategorio
+Name[es]=CategorÃa de preferencias del sistema
+Name[et]=Süsteemi seadistuste kategooria
+Name[eu]=Sistema ezarpenen kategoria
+Name[fa]=دست٠تÙظÛÙ
ات سÛستÙ
+Name[fi]=Järjestelmäasetusten luokka
+Name[fr]=Catégorie des paramètres du système
+Name[fy]=Systeem ynstellings katogory
+Name[ga]=Catagóir Socruithe an Chórais
+Name[gl]=CategorÃa de configuración do sistema
+Name[he]=ק×××ר××ת ×××ר×ת ×ער×ת
+Name[hi]=तà¤à¤¤à¥à¤° विनà¥à¤¯à¤¾à¤¸ वरà¥à¤
+Name[hu]=RendszerbeállÃtási kategória
+Name[is]=Kerfisstillingaflokkur
+Name[it]=Categoria delle impostazioni di sistema
+Name[ja]=ã·ã¹ãã è¨å®ã®ã«ãã´ãª
+Name[kk]=Ðүйе паÑамеÑÑÐ»ÐµÑ ÑанаÑÑ
+Name[km]=ááááááâáá¶áâáááááâááááááááâ
+Name[ko]=ìì¤í
ì¤ì ë¶ë¥
+Name[ku]=Kategoriya Mîhengên Pergalê
+Name[lv]=SistÄmas iestatÄ«jumu kategorija
+Name[nb]=Kategori for systeminnstillinger
+Name[nds]=Kategorie Systeeminstellen
+Name[ne]=पà¥à¤°à¤£à¤¾à¤²à¥ सà¥à¤à¤¿à¤ à¤à¥à¤à¤¿
+Name[nl]=Systeeminstellingen-catagorie
+Name[nn]=Kategori for systemval
+Name[pa]=ਸਿਸà¨à¨® ਸà©à¨à¨¿à©°à¨ à¨à©à¨à¨¾à¨à¨°à©
+Name[pl]=Kategoria: Ustawienia systemowe
+Name[pt]=Categoria da Configuração do Sistema
+Name[pt_BR]=Categoria das Configurações do Sistema
+Name[se]=Vuogádatheivehusaid láhki
+Name[sl]=Kategorija sistemskih nastavitev
+Name[sr]=ÐаÑегоÑиÑа ÑиÑÑемÑкиÑ
поÑÑавки
+Name[sr@latin]=Kategorija sistemskih postavki
+Name[sv]=Systeminställningskategori
+Name[th]=หมวà¸à¸«à¸¡à¸¹à¹à¸à¸²à¸£à¸à¸±à¹à¸à¸à¹à¸²à¸£à¸°à¸à¸
+Name[tr]=Sistem Ayarları Kategorisi
+Name[uk]=ÐаÑегоÑÑÑ ÑиÑÑемниÑ
паÑамеÑÑÑв
+Name[wa]=Categoreye d'Â apontiaedjes do sistinme
+Name[x-test]=xxSystem Settings Categoryxx
+Name[zh_CN]=ç³»ç»è®¾ç½®ç±»å«
+Name[zh_TW]=系統è¨å®é¡å¥
+
+# the category identifier
+[PropertyDef::X-KDE-System-Settings-Category]
+Type=QString
+
+# the parent category identifier
+[PropertyDef::X-KDE-System-Settings-Parent-Category]
+Type=QString
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedsortfilterproxymodel.cpp
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedsortfilterproxymodel.cpp?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedsortfilterproxymodel.cpp (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedsortfilterproxymodel.cpp Wed Feb 6 11:56:53 2008
@@ -0,0 +1,288 @@
+/**
+ * This file is part of the KDE project
+ * Copyright (C) 2007 Rafael Fernández López
+ * Copyright (C) 2007 John Tapsell
+ * Copyright (C) 2006 by Dominic Battre
+ * Copyright (C) 2006 by Martin Pool
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "kcategorizedsortfilterproxymodel.h"
+#include "kcategorizedsortfilterproxymodel_p.h"
+
+#include
+
+#include <QItemSelection>
+#include <QStringList>
+#include <QSize>
+
+KCategorizedSortFilterProxyModel::KCategorizedSortFilterProxyModel(QObject *parent)
+ : QSortFilterProxyModel(parent)
+ , d(new Private())
+
+{
+}
+
+KCategorizedSortFilterProxyModel::~KCategorizedSortFilterProxyModel()
+{
+ delete d;
+}
+
+void KCategorizedSortFilterProxyModel::sort(int column, Qt::SortOrder order)
+{
+ d->sortColumn = column;
+ d->sortOrder = order;
+
+ QSortFilterProxyModel::sort(column, order);
+}
+
+bool KCategorizedSortFilterProxyModel::isCategorizedModel() const
+{
+ return d->categorizedModel;
+}
+
+void KCategorizedSortFilterProxyModel::setCategorizedModel(bool categorizedModel)
+{
+ if (categorizedModel == d->categorizedModel)
+ {
+ return;
+ }
+
+ d->categorizedModel = categorizedModel;
+
+ invalidate();
+}
+
+int KCategorizedSortFilterProxyModel::sortColumn() const
+{
+ return d->sortColumn;
+}
+
+Qt::SortOrder KCategorizedSortFilterProxyModel::sortOrder() const
+{
+ return d->sortOrder;
+}
+
+void KCategorizedSortFilterProxyModel::setSortCategoriesByNaturalComparison(bool sortCategoriesByNaturalComparison)
+{
+ if (sortCategoriesByNaturalComparison == d->sortCategoriesByNaturalComparison)
+ {
+ return;
+ }
+
+ d->sortCategoriesByNaturalComparison = sortCategoriesByNaturalComparison;
+
+ invalidate();
+}
+
+bool KCategorizedSortFilterProxyModel::sortCategoriesByNaturalComparison() const
+{
+ return d->sortCategoriesByNaturalComparison;
+}
+
+int KCategorizedSortFilterProxyModel::naturalCompare(const QString &a,
+ const QString &b)
+{
+ // This method chops the input a and b into pieces of
+ // digits and non-digits (a1.05 becomes a | 1 | . | 05)
+ // and compares these pieces of a and b to each other
+ // (first with first, second with second, ...).
+ //
+ // This is based on the natural sort order code code by Martin Pool
+ // http://sourcefrog.net/projects/natsort/
+ // Martin Pool agreed to license this under LGPL or GPL.
+
+ const QChar* currA = a.unicode(); // iterator over a
+ const QChar* currB = b.unicode(); // iterator over b
+
+ if (currA == currB) {
+ return 0;
+ }
+
+ const QChar* begSeqA = currA; // beginning of a new character sequence of a
+ const QChar* begSeqB = currB;
+
+ while (!currA->isNull() && !currB->isNull()) {
+ if (currA->unicode() == QChar::ObjectReplacementCharacter) {
+ return 1;
+ }
+
+ if (currB->unicode() == QChar::ObjectReplacementCharacter) {
+ return -1;
+ }
+
+ if (currA->unicode() == QChar::ReplacementCharacter) {
+ return 1;
+ }
+
+ if (currB->unicode() == QChar::ReplacementCharacter) {
+ return -1;
+ }
+
+ // find sequence of characters ending at the first non-character
+ while (!currA->isNull() && !currA->isDigit()) {
+ ++currA;
+ }
+
+ while (!currB->isNull() && !currB->isDigit()) {
+ ++currB;
+ }
+
+ // compare these sequences
+ const QString subA(begSeqA, currA - begSeqA);
+ const QString subB(begSeqB, currB - begSeqB);
+ const int cmp = QString::localeAwareCompare(subA, subB);
+ if (cmp != 0) {
+ return cmp;
+ }
+
+ if (currA->isNull() || currB->isNull()) {
+ break;
+ }
+
+ // now some digits follow...
+ if ((*currA == '0') || (*currB == '0')) {
+ // one digit-sequence starts with 0 -> assume we are in a fraction part
+ // do left aligned comparison (numbers are considered left aligned)
+ while (1) {
+ if (!currA->isDigit() && !currB->isDigit()) {
+ break;
+ } else if (!currA->isDigit()) {
+ return -1;
+ } else if (!currB->isDigit()) {
+ return + 1;
+ } else if (*currA < *currB) {
+ return -1;
+ } else if (*currA > *currB) {
+ return + 1;
+ }
+ ++currA;
+ ++currB;
+ }
+ } else {
+ // No digit-sequence starts with 0 -> assume we are looking at some integer
+ // do right aligned comparison.
+ //
+ // The longest run of digits wins. That aside, the greatest
+ // value wins, but we can't know that it will until we've scanned
+ // both numbers to know that they have the same magnitude.
+
+ int weight = 0;
+ while (1) {
+ if (!currA->isDigit() && !currB->isDigit()) {
+ if (weight != 0) {
+ return weight;
+ }
+ break;
+ } else if (!currA->isDigit()) {
+ return -1;
+ } else if (!currB->isDigit()) {
+ return + 1;
+ } else if ((*currA < *currB) && (weight == 0)) {
+ weight = -1;
+ } else if ((*currA > *currB) && (weight == 0)) {
+ weight = + 1;
+ }
+ ++currA;
+ ++currB;
+ }
+ }
+
+ begSeqA = currA;
+ begSeqB = currB;
+ }
+
+ if (currA->isNull() && currB->isNull()) {
+ return 0;
+ }
+
+ return currA->isNull() ? -1 : + 1;
+}
+
+bool KCategorizedSortFilterProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
+{
+ if (d->categorizedModel)
+ {
+ int compare = compareCategories(left, right);
+
+ if (compare > 0) // left is greater than right
+ {
+ return false;
+ }
+ else if (compare < 0) // left is less than right
+ {
+ return true;
+ }
+ }
+
+ return subSortLessThan(left, right);
+}
+
+bool KCategorizedSortFilterProxyModel::subSortLessThan(const QModelIndex &left, const QModelIndex &right) const
+{
+ return QSortFilterProxyModel::lessThan(left, right);
+}
+
+int KCategorizedSortFilterProxyModel::compareCategories(const QModelIndex &left, const QModelIndex &right) const
+{
+ QVariant l = (left.model() ? left.model()->data(left, CategorySortRole) : QVariant());
+ QVariant r = (right.model() ? right.model()->data(right, CategorySortRole) : QVariant());
+
+ Q_ASSERT(l.isValid());
+ Q_ASSERT(r.isValid());
+ Q_ASSERT(l.type() == r.type());
+
+ if (l.type() == QVariant::String)
+ {
+ QString lstr = l.toString();
+ QString rstr = r.toString();
+
+ if (d->sortCategoriesByNaturalComparison)
+ {
+ return naturalCompare(lstr, rstr);
+ }
+ else
+ {
+ if (lstr < rstr)
+ {
+ return -1;
+ }
+
+ if (lstr > rstr)
+ {
+ return 1;
+ }
+
+ return 0;
+ }
+ }
+
+ qlonglong lint = l.toLongLong();
+ qlonglong rint = r.toLongLong();
+
+ if (lint < rint)
+ {
+ return -1;
+ }
+
+ if (lint > rint)
+ {
+ return 1;
+ }
+
+ return 0;
+}
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedsortfilterproxymodel.h
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedsortfilterproxymodel.h?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedsortfilterproxymodel.h (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedsortfilterproxymodel.h Wed Feb 6 11:56:53 2008
@@ -0,0 +1,183 @@
+/**
+ * This file is part of the KDE project
+ * Copyright (C) 2007 Rafael Fernández López
+ * Copyright (C) 2007 John Tapsell
+ * Copyright (C) 2006 by Dominic Battre
+ * Copyright (C) 2006 by Martin Pool
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef KCATEGORIZEDSORTFILTERPROXYMODEL_H
+#define KCATEGORIZEDSORTFILTERPROXYMODEL_H
+
+#include
+
+#include
+
+class QItemSelection;
+
+
+/**
+ * This class lets you categorize a view. It is meant to be used along with
+ * KCategorizedView class.
+ *
+ * In general terms all you need to do is to reimplement subSortLessThan() and
+ * compareCategories() methods. In order to make categorization work, you need
+ * to also call setCategorizedModel() class to enable it, since the categorization
+ * is disabled by default.
+ *
+ * @see KCategorizedView
+ *
+ * @author Rafael Fernández López
+ */
+class KDEUI_EXPORT KCategorizedSortFilterProxyModel
+ : public QSortFilterProxyModel
+{
+public:
+ enum AdditionalRoles {
+ // Note: use printf "0x%08X\n" $(($RANDOM*$RANDOM))
+ // to define additional roles.
+ CategoryDisplayRole = 0x17CE990A, ///< This role is used for asking the category to a given index
+
+ CategorySortRole = 0x27857E60 ///< This role is used for sorting categories. You can return a
+ ///< string or a long long value. Strings will be sorted alphabetically
+ ///< while long long will be sorted by their value. Please note that this
+ ///< value won't be shown on the view, is only for sorting purposes. What will
+ ///< be shown as "Category" on the view will be asked with the role
+ ///< CategoryDisplayRole.
+ };
+
+ KCategorizedSortFilterProxyModel(QObject *parent = 0);
+ virtual ~KCategorizedSortFilterProxyModel();
+
+ /**
+ * Overridden from QSortFilterProxyModel. Sorts the source model using
+ * @p column for the given @p order.
+ */
+ virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
+
+ /**
+ * @return whether the model is categorized or not. Disabled by default.
+ */
+ bool isCategorizedModel() const;
+
+ /**
+ * Enables or disables the categorization feature.
+ *
+ * @param categorizedModel whether to enable or disable the categorization feature.
+ */
+ void setCategorizedModel(bool categorizedModel);
+
+ /**
+ * @return the column being used for sorting.
+ */
+ int sortColumn() const;
+
+ /**
+ * @return the sort order being used for sorting.
+ */
+ Qt::SortOrder sortOrder() const;
+
+ /**
+ * Set if the sorting using CategorySortRole will use a natural comparison
+ * in the case that strings were returned. If enabled, QString::localeAwareCompare
+ * will be used for sorting.
+ *
+ * @param sortCategoriesByNaturalComparison whether to sort using a natural comparison or not.
+ */
+ void setSortCategoriesByNaturalComparison(bool sortCategoriesByNaturalComparison);
+
+ /**
+ * @return whether it is being used a natural comparison for sorting. Enabled by default.
+ */
+ bool sortCategoriesByNaturalComparison() const;
+
+ /**
+ * Does a natural comparing of the strings. -1 is returned if \a a
+ * is smaller than \a b. +1 is returned if \a a is greater than \a b. 0
+ * is returned if both values are equal.
+ */
+ static int naturalCompare(const QString &a, const QString &b);
+
+protected:
+ /**
+ * Overridden from QSortFilterProxyModel. If you are subclassing
+ * KCategorizedSortFilterProxyModel, you will probably not need to reimplement this
+ * method.
+ *
+ * It calls compareCategories() to sort by category. If the both items are in the
+ * same category (i.e. compareCategories returns 0), then subSortLessThan is called.
+ *
+ * @return Returns true if the item @p left is less than the item @p right when sorting.
+ *
+ * @warning You usually won't need to reimplement this method when subclassing
+ * from KCategorizedSortFilterProxyModel.
+ */
+ virtual bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
+
+ /**
+ * This method has a similar purpose as lessThan() has on QSortFilterProxyModel.
+ * It is used for sorting items that are in the same category.
+ *
+ * @return Returns true if the item @p left is less than the item @p right when sorting.
+ */
+ virtual bool subSortLessThan(const QModelIndex &left, const QModelIndex &right) const;
+
+ /**
+ * This method compares the category of the @p left index with the category
+ * of the @p right index.
+ *
+ * Internally and if not reimplemented, this method will ask for @p left and
+ * @p right models for role CategorySortRole. In order to correctly sort
+ * categories, the data() metod of the model should return a qlonglong (or numeric) value, or
+ * a QString object. QString objects will be sorted with QString::localeAwareCompare if
+ * sortCategoriesByNaturalComparison() is true.
+ *
+ * @note Please have present that:
+ * QString(QChar(QChar::ObjectReplacementCharacter)) >
+ * QString(QChar(QChar::ReplacementCharacter)) >
+ * [ all possible strings ] >
+ * QString();
+ *
+ * This means that QString() will be sorted the first one, while
+ * QString(QChar(QChar::ObjectReplacementCharacter)) and
+ * QString(QChar(QChar::ReplacementCharacter)) will be sorted in last
+ * position.
+ *
+ * @warning Please note that data() method of the model should return always
+ * information of the same type. If you return a QString for an index,
+ * you should return always QStrings for all indexes for role CategorySortRole
+ * in order to correctly sort categories. You can't mix by returning
+ * a QString for one index, and a qlonglong for other.
+ *
+ * @note If you need a more complex layout, you will have to reimplement this
+ * method.
+ *
+ * @return A negative value if the category of @p left should be placed before the
+ * category of @p right. 0 if @p left and @p right are on the same category, and
+ * a positive value if the category of @p left should be placed after the
+ * category of @p right.
+ */
+ virtual int compareCategories(const QModelIndex &left, const QModelIndex &right) const;
+
+private:
+ class Private;
+ Private *const d;
+};
+
+
+#endif // KCATEGORIZEDSORTFILTERPROXYMODEL_H
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedsortfilterproxymodel_p.h
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedsortfilterproxymodel_p.h?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedsortfilterproxymodel_p.h (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedsortfilterproxymodel_p.h Wed Feb 6 11:56:53 2008
@@ -0,0 +1,48 @@
+/**
+ * This file is part of the KDE project
+ * Copyright (C) 2007 Rafael Fernández López
+ * Copyright (C) 2007 John Tapsell
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef KCATEGORIZEDSORTFILTERPROXYMODEL_P_H
+#define KCATEGORIZEDSORTFILTERPROXYMODEL_P_H
+
+class KCategorizedSortFilterProxyModel;
+
+class KCategorizedSortFilterProxyModel::Private
+{
+public:
+ Private()
+ : sortColumn(0)
+ , sortOrder(Qt::AscendingOrder)
+ , categorizedModel(false)
+ , sortCategoriesByNaturalComparison(true)
+ {
+ }
+
+ ~Private()
+ {
+ }
+
+ int sortColumn;
+ Qt::SortOrder sortOrder;
+ bool categorizedModel;
+ bool sortCategoriesByNaturalComparison;
+};
+
+#endif
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedview.cpp
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedview.cpp?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedview.cpp (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedview.cpp Wed Feb 6 11:56:53 2008
@@ -0,0 +1,1634 @@
+/**
+ * This file is part of the KDE project
+ * Copyright (C) 2007 Rafael Fernández López
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "kcategorizedview.h"
+#include "kcategorizedview_p.h"
+
+#include // trunc on C99 compliant systems
+#include // trunc for not C99 compliant systems
+
+#include <QPainter>
+#include <QScrollBar>
+#include <QPaintEvent>
+
+#include
+
+#include "kcategorydrawer.h"
+#include "kcategorizedsortfilterproxymodel.h"
+
+// By defining DOLPHIN_DRAGANDDROP the custom drag and drop implementation of
+// KCategorizedView is bypassed to have a consistent drag and drop look for all
+// views. Hopefully transparent pixmaps for drag objects will be supported in
+// Qt 4.4, so that this workaround can be skipped.
+#define DOLPHIN_DRAGANDDROP
+
+KCategorizedView::Private::Private(KCategorizedView *listView)
+ : listView(listView)
+ , categoryDrawer(0)
+ , biggestItemSize(QSize(0, 0))
+ , mouseButtonPressed(false)
+ , rightMouseButtonPressed(false)
+ , isDragging(false)
+ , dragLeftViewport(false)
+ , proxyModel(0)
+{
+}
+
+KCategorizedView::Private::~Private()
+{
+}
+
+const QModelIndexList &KCategorizedView::Private::intersectionSet(const QRect &rect)
+{
+ QModelIndex index;
+ QRect indexVisualRect;
+
+ intersectedIndexes.clear();
+
+ int itemHeight;
+
+ if (listView->gridSize().isEmpty())
+ {
+ itemHeight = biggestItemSize.height();
+ }
+ else
+ {
+ itemHeight = listView->gridSize().height();
+ }
+
+ // Lets find out where we should start
+ int top = proxyModel->rowCount() - 1;
+ int bottom = 0;
+ int middle = (top + bottom) / 2;
+ while (bottom <= top)
+ {
+ middle = (top + bottom) / 2;
+
+ index = proxyModel->index(middle, 0);
+ indexVisualRect = visualRect(index);
+ // We need the whole height (not only the visualRect). This will help us to update
+ // all needed indexes correctly (ereslibre)
+ indexVisualRect.setHeight(indexVisualRect.height() + (itemHeight - indexVisualRect.height()));
+
+ if (qMax(indexVisualRect.topLeft().y(),
+ indexVisualRect.bottomRight().y()) < qMin(rect.topLeft().y(),
+ rect.bottomRight().y()))
+ {
+ bottom = middle + 1;
+ }
+ else
+ {
+ top = middle - 1;
+ }
+ }
+
+ for (int i = middle; i < proxyModel->rowCount(); i++)
+ {
+ index = proxyModel->index(i, 0);
+ indexVisualRect = visualRect(index);
+
+ if (rect.intersects(indexVisualRect))
+ intersectedIndexes.append(index);
+
+ // If we passed next item, stop searching for hits
+ if (qMax(rect.bottomRight().y(), rect.topLeft().y()) <
+ qMin(indexVisualRect.topLeft().y(),
+ indexVisualRect.bottomRight().y()))
+ break;
+ }
+
+ return intersectedIndexes;
+}
+
+QRect KCategorizedView::Private::visualRectInViewport(const QModelIndex &index) const
+{
+ if (!index.isValid())
+ return QRect();
+
+ QString curCategory = elementsInfo[index.row()].category;
+
+ QRect retRect;
+
+ if (listView->flow() == QListView::LeftToRight)
+ {
+ if (listView->layoutDirection() == Qt::LeftToRight)
+ {
+ retRect = QRect(listView->spacing(), listView->spacing() * 2 +
+ categoryDrawer->categoryHeight(index, listView->viewOptions()), 0, 0);
+ }
+ else
+ {
+ retRect = QRect(listView->viewport()->width() - listView->spacing(), listView->spacing() * 2 +
+ categoryDrawer->categoryHeight(index, listView->viewOptions()), 0, 0);
+ }
+ }
+ else
+ {
+ retRect = QRect(listView->spacing(), listView->spacing() * 2 +
+ categoryDrawer->categoryHeight(index, listView->viewOptions()), 0, 0);
+ }
+
+ int viewportWidth = listView->viewport()->width() - listView->spacing();
+
+ int itemHeight;
+ int itemWidth;
+
+ if (listView->gridSize().isEmpty() && (listView->flow() == QListView::LeftToRight))
+ {
+ itemHeight = biggestItemSize.height();
+ itemWidth = biggestItemSize.width();
+ }
+ else if (listView->flow() == QListView::LeftToRight)
+ {
+ itemHeight = listView->gridSize().height();
+ itemWidth = listView->gridSize().width();
+ }
+ else if (listView->gridSize().isEmpty() && (listView->flow() == QListView::TopToBottom))
+ {
+ itemHeight = biggestItemSize.height();
+ itemWidth = listView->viewport()->width() - listView->spacing() * 2;
+ }
+ else
+ {
+ itemHeight = listView->gridSize().height();
+ itemWidth = listView->gridSize().width() - listView->spacing() * 2;
+ }
+
+ int itemWidthPlusSeparation = listView->spacing() + itemWidth;
+ if (!itemWidthPlusSeparation)
+ itemWidthPlusSeparation++;
+ int elementsPerRow = viewportWidth / itemWidthPlusSeparation;
+ if (!elementsPerRow)
+ elementsPerRow++;
+
+ int column;
+ int row;
+
+ if (listView->flow() == QListView::LeftToRight)
+ {
+ column = elementsInfo[index.row()].relativeOffsetToCategory % elementsPerRow;
+ row = elementsInfo[index.row()].relativeOffsetToCategory / elementsPerRow;
+
+ if (listView->layoutDirection() == Qt::LeftToRight)
+ {
+ retRect.setLeft(retRect.left() + column * listView->spacing() +
+ column * itemWidth);
+ }
+ else
+ {
+ retRect.setLeft(retRect.right() - column * listView->spacing() -
+ column * itemWidth - itemWidth);
+
+ retRect.setRight(retRect.right() - column * listView->spacing() -
+ column * itemWidth);
+ }
+ }
+ else
+ {
+ elementsPerRow = 1;
+ column = elementsInfo[index.row()].relativeOffsetToCategory % elementsPerRow;
+ row = elementsInfo[index.row()].relativeOffsetToCategory / elementsPerRow;
+ }
+
+ foreach (const QString &category, categories)
+ {
+ if (category == curCategory)
+ break;
+
+ float rows = (float) ((float) categoriesIndexes[category].count() /
+ (float) elementsPerRow);
+
+ int rowsInt = categoriesIndexes[category].count() / elementsPerRow;
+
+ if (rows - trunc(rows)) rowsInt++;
+
+ retRect.setTop(retRect.top() +
+ (rowsInt * itemHeight) +
+ categoryDrawer->categoryHeight(index, listView->viewOptions()) +
+ listView->spacing() * 2);
+
+ if (listView->gridSize().isEmpty())
+ {
+ retRect.setTop(retRect.top() +
+ (rowsInt * listView->spacing()));
+ }
+ }
+
+ if (listView->gridSize().isEmpty())
+ {
+ retRect.setTop(retRect.top() + row * listView->spacing() +
+ (row * itemHeight));
+ }
+ else
+ {
+ retRect.setTop(retRect.top() + (row * itemHeight));
+ }
+
+ retRect.setWidth(itemWidth);
+
+ QModelIndex heightIndex = proxyModel->index(index.row(), 0);
+ if (listView->gridSize().isEmpty())
+ {
+ retRect.setHeight(listView->sizeHintForIndex(heightIndex).height());
+ }
+ else
+ {
+ retRect.setHeight(qMin(listView->sizeHintForIndex(heightIndex).height(),
+ listView->gridSize().height()));
+ }
+
+ return retRect;
+}
+
+QRect KCategorizedView::Private::visualCategoryRectInViewport(const QString &category) const
+{
+ QRect retRect(listView->spacing(),
+ listView->spacing(),
+ listView->viewport()->width() - listView->spacing() * 2,
+ 0);
+
+ if (!proxyModel->rowCount() || !categories.contains(category))
+ return QRect();
+
+ QModelIndex index = proxyModel->index(0, 0, QModelIndex());
+
+ int viewportWidth = listView->viewport()->width() - listView->spacing();
+
+ int itemHeight;
+ int itemWidth;
+
+ if (listView->gridSize().isEmpty())
+ {
+ itemHeight = biggestItemSize.height();
+ itemWidth = biggestItemSize.width();
+ }
+ else
+ {
+ itemHeight = listView->gridSize().height();
+ itemWidth = listView->gridSize().width();
+ }
+
+ int itemWidthPlusSeparation = listView->spacing() + itemWidth;
+ int elementsPerRow = viewportWidth / itemWidthPlusSeparation;
+
+ if (!elementsPerRow)
+ elementsPerRow++;
+
+ if (listView->flow() == QListView::TopToBottom)
+ {
+ elementsPerRow = 1;
+ }
+
+ foreach (const QString &itCategory, categories)
+ {
+ if (itCategory == category)
+ break;
+
+ float rows = (float) ((float) categoriesIndexes[itCategory].count() /
+ (float) elementsPerRow);
+ int rowsInt = categoriesIndexes[itCategory].count() / elementsPerRow;
+
+ if (rows - trunc(rows)) rowsInt++;
+
+ retRect.setTop(retRect.top() +
+ (rowsInt * itemHeight) +
+ categoryDrawer->categoryHeight(index, listView->viewOptions()) +
+ listView->spacing() * 2);
+
+ if (listView->gridSize().isEmpty())
+ {
+ retRect.setTop(retRect.top() +
+ (rowsInt * listView->spacing()));
+ }
+ }
+
+ retRect.setHeight(categoryDrawer->categoryHeight(index, listView->viewOptions()));
+
+ return retRect;
+}
+
+// We're sure elementsPosition doesn't contain index
+const QRect &KCategorizedView::Private::cacheIndex(const QModelIndex &index)
+{
+ QRect rect = visualRectInViewport(index);
+ elementsPosition[index.row()] = rect;
+
+ return elementsPosition[index.row()];
+}
+
+// We're sure categoriesPosition doesn't contain category
+const QRect &KCategorizedView::Private::cacheCategory(const QString &category)
+{
+ QRect rect = visualCategoryRectInViewport(category);
+ categoriesPosition[category] = rect;
+
+ return categoriesPosition[category];
+}
+
+const QRect &KCategorizedView::Private::cachedRectIndex(const QModelIndex &index)
+{
+ if (elementsPosition.contains(index.row())) // If we have it cached
+ { // return it
+ return elementsPosition[index.row()];
+ }
+ else // Otherwise, cache it
+ { // and return it
+ return cacheIndex(index);
+ }
+}
+
+const QRect &KCategorizedView::Private::cachedRectCategory(const QString &category)
+{
+ if (categoriesPosition.contains(category)) // If we have it cached
+ { // return it
+ return categoriesPosition[category];
+ }
+ else // Otherwise, cache it and
+ { // return it
+ return cacheCategory(category);
+ }
+}
+
+QRect KCategorizedView::Private::visualRect(const QModelIndex &index)
+{
+ QRect retRect = cachedRectIndex(index);
+ int dx = -listView->horizontalOffset();
+ int dy = -listView->verticalOffset();
+ retRect.adjust(dx, dy, dx, dy);
+
+ return retRect;
+}
+
+QRect KCategorizedView::Private::categoryVisualRect(const QString &category)
+{
+ QRect retRect = cachedRectCategory(category);
+ int dx = -listView->horizontalOffset();
+ int dy = -listView->verticalOffset();
+ retRect.adjust(dx, dy, dx, dy);
+
+ return retRect;
+}
+
+void KCategorizedView::Private::drawNewCategory(const QModelIndex &index,
+ int sortRole,
+ const QStyleOption &option,
+ QPainter *painter)
+{
+ if (!index.isValid())
+ {
+ return;
+ }
+
+ QStyleOption optionCopy = option;
+ const QString category = proxyModel->data(index, KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString();
+
+ optionCopy.state &= ~QStyle::State_Selected;
+
+ if ((listView->selectionMode() != SingleSelection) && (listView->selectionMode() != NoSelection)) {
+ if ((category == hoveredCategory) && !mouseButtonPressed)
+ {
+ optionCopy.state |= QStyle::State_MouseOver;
+ }
+ else if ((category == hoveredCategory) && mouseButtonPressed)
+ {
+ QPoint initialPressPosition = listView->viewport()->mapFromGlobal(QCursor::pos());
+ initialPressPosition.setY(initialPressPosition.y() + listView->verticalOffset());
+ initialPressPosition.setX(initialPressPosition.x() + listView->horizontalOffset());
+
+ if (initialPressPosition == this->initialPressPosition)
+ {
+ optionCopy.state |= QStyle::State_Selected;
+ }
+ }
+ }
+
+ categoryDrawer->drawCategory(index,
+ sortRole,
+ optionCopy,
+ painter);
+}
+
+
+void KCategorizedView::Private::updateScrollbars()
+{
+ // find the last index in the last category
+ QModelIndex lastIndex = categoriesIndexes.isEmpty() ? QModelIndex() : categoriesIndexes[categories.last()].last();
+
+ int lastItemBottom = cachedRectIndex(lastIndex).top() +
+ listView->spacing() + (listView->gridSize().isEmpty() ? biggestItemSize.height() : listView->gridSize().height()) - listView->viewport()->height();
+
+ listView->horizontalScrollBar()->setRange(0, 0);
+
+ if (listView->verticalScrollMode() == QAbstractItemView::ScrollPerItem)
+ {
+ listView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
+ }
+
+ if (listView->horizontalScrollMode() == QAbstractItemView::ScrollPerItem)
+ {
+ listView->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
+ }
+
+ listView->verticalScrollBar()->setSingleStep(listView->viewport()->height() / 10);
+ listView->verticalScrollBar()->setPageStep(listView->viewport()->height());
+ listView->verticalScrollBar()->setRange(0, lastItemBottom);
+}
+
+void KCategorizedView::Private::drawDraggedItems(QPainter *painter)
+{
+ QStyleOptionViewItemV3 option = listView->viewOptions();
+ option.state &= ~QStyle::State_MouseOver;
+ foreach (const QModelIndex &index, listView->selectionModel()->selectedIndexes())
+ {
+ const int dx = mousePosition.x() - initialPressPosition.x() + listView->horizontalOffset();
+ const int dy = mousePosition.y() - initialPressPosition.y() + listView->verticalOffset();
+
+ option.rect = visualRect(index);
+ option.rect.adjust(dx, dy, dx, dy);
+
+ if (option.rect.intersects(listView->viewport()->rect()))
+ {
+ listView->itemDelegate(index)->paint(painter, option, index);
+ }
+ }
+}
+
+void KCategorizedView::Private::layoutChanged(bool forceItemReload)
+{
+ if (proxyModel && categoryDrawer && proxyModel->isCategorizedModel() &&
+ ((forceItemReload ||
+ (modelSortRole != proxyModel->sortRole()) ||
+ (modelSortColumn != proxyModel->sortColumn()) ||
+ (modelSortOrder != proxyModel->sortOrder()) ||
+ (modelLastRowCount != proxyModel->rowCount()) ||
+ (modelCategorized != proxyModel->isCategorizedModel()))))
+ {
+ // Force the view to update all elements
+ listView->rowsInsertedArtifficial(QModelIndex(), 0, proxyModel->rowCount() - 1);
+
+ if (!forceItemReload)
+ {
+ modelSortRole = proxyModel->sortRole();
+ modelSortColumn = proxyModel->sortColumn();
+ modelSortOrder = proxyModel->sortOrder();
+ modelLastRowCount = proxyModel->rowCount();
+ modelCategorized = proxyModel->isCategorizedModel();
+ }
+ }
+ else if (proxyModel && categoryDrawer && proxyModel->isCategorizedModel())
+ {
+ updateScrollbars();
+ }
+}
+
+void KCategorizedView::Private::drawDraggedItems()
+{
+ QRect rectToUpdate;
+ QRect currentRect;
+ foreach (const QModelIndex &index, listView->selectionModel()->selectedIndexes())
+ {
+ int dx = mousePosition.x() - initialPressPosition.x() + listView->horizontalOffset();
+ int dy = mousePosition.y() - initialPressPosition.y() + listView->verticalOffset();
+
+ currentRect = visualRect(index);
+ currentRect.adjust(dx, dy, dx, dy);
+
+ if (currentRect.intersects(listView->viewport()->rect()))
+ {
+ rectToUpdate = rectToUpdate.united(currentRect);
+ }
+ }
+
+ listView->viewport()->update(lastDraggedItemsRect.united(rectToUpdate));
+
+ lastDraggedItemsRect = rectToUpdate;
+}
+
+
+//==============================================================================
+
+
+KCategorizedView::KCategorizedView(QWidget *parent)
+ : QListView(parent)
+ , d(new Private(this))
+{
+}
+
+KCategorizedView::~KCategorizedView()
+{
+ delete d;
+}
+
+void KCategorizedView::setGridSize(const QSize &size)
+{
+ QListView::setGridSize(size);
+
+ d->layoutChanged(true);
+}
+
+void KCategorizedView::setModel(QAbstractItemModel *model)
+{
+ d->lastSelection = QItemSelection();
+ d->forcedSelectionPosition = 0;
+ d->elementsInfo.clear();
+ d->elementsPosition.clear();
+ d->categoriesIndexes.clear();
+ d->categoriesPosition.clear();
+ d->categories.clear();
+ d->intersectedIndexes.clear();
+ d->modelIndexList.clear();
+ d->hovered = QModelIndex();
+ d->mouseButtonPressed = false;
+ d->rightMouseButtonPressed = false;
+
+ if (d->proxyModel)
+ {
+ QObject::disconnect(d->proxyModel,
+ SIGNAL(layoutChanged()),
+ this, SLOT(slotLayoutChanged()));
+
+ QObject::disconnect(d->proxyModel,
+ SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ this, SLOT(slotLayoutChanged()));
+
+ QObject::disconnect(d->proxyModel,
+ SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(rowsRemoved(QModelIndex,int,int)));
+ }
+
+ QListView::setModel(model);
+
+ d->proxyModel = dynamic_cast(model);
+
+ if (d->proxyModel)
+ {
+ d->modelSortRole = d->proxyModel->sortRole();
+ d->modelSortColumn = d->proxyModel->sortColumn();
+ d->modelSortOrder = d->proxyModel->sortOrder();
+ d->modelLastRowCount = d->proxyModel->rowCount();
+ d->modelCategorized = d->proxyModel->isCategorizedModel();
+
+ QObject::connect(d->proxyModel,
+ SIGNAL(layoutChanged()),
+ this, SLOT(slotLayoutChanged()));
+
+ QObject::connect(d->proxyModel,
+ SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ this, SLOT(slotLayoutChanged()));
+
+ QObject::connect(d->proxyModel,
+ SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(rowsRemoved(QModelIndex,int,int)));
+
+ if (d->proxyModel->rowCount())
+ {
+ d->layoutChanged(true);
+ }
+ }
+ else
+ {
+ d->modelCategorized = false;
+ }
+}
+
+QRect KCategorizedView::visualRect(const QModelIndex &index) const
+{
+ if (!d->proxyModel || !d->categoryDrawer || !d->proxyModel->isCategorizedModel())
+ {
+ return QListView::visualRect(index);
+ }
+
+ if (!qobject_cast(index.model()))
+ {
+ return d->visualRect(d->proxyModel->mapFromSource(index));
+ }
+
+ return d->visualRect(index);
+}
+
+KCategoryDrawer *KCategorizedView::categoryDrawer() const
+{
+ return d->categoryDrawer;
+}
+
+void KCategorizedView::setCategoryDrawer(KCategoryDrawer *categoryDrawer)
+{
+ d->lastSelection = QItemSelection();
+ d->forcedSelectionPosition = 0;
+ d->elementsInfo.clear();
+ d->elementsPosition.clear();
+ d->categoriesIndexes.clear();
+ d->categoriesPosition.clear();
+ d->categories.clear();
+ d->intersectedIndexes.clear();
+ d->modelIndexList.clear();
+ d->hovered = QModelIndex();
+ d->mouseButtonPressed = false;
+ d->rightMouseButtonPressed = false;
+
+ if (!categoryDrawer && d->proxyModel)
+ {
+ QObject::disconnect(d->proxyModel,
+ SIGNAL(layoutChanged()),
+ this, SLOT(slotLayoutChanged()));
+
+ QObject::disconnect(d->proxyModel,
+ SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ this, SLOT(slotLayoutChanged()));
+
+ QObject::disconnect(d->proxyModel,
+ SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(rowsRemoved(QModelIndex,int,int)));
+ }
+ else if (categoryDrawer && d->proxyModel)
+ {
+ QObject::connect(d->proxyModel,
+ SIGNAL(layoutChanged()),
+ this, SLOT(slotLayoutChanged()));
+
+ QObject::connect(d->proxyModel,
+ SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ this, SLOT(slotLayoutChanged()));
+
+ QObject::connect(d->proxyModel,
+ SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(rowsRemoved(QModelIndex,int,int)));
+ }
+
+ d->categoryDrawer = categoryDrawer;
+
+ if (categoryDrawer)
+ {
+ if (d->proxyModel)
+ {
+ if (d->proxyModel->rowCount())
+ {
+ d->layoutChanged(true);
+ }
+ }
+ }
+ else
+ {
+ updateGeometries();
+ }
+}
+
+QModelIndex KCategorizedView::indexAt(const QPoint &point) const
+{
+ if (!d->proxyModel || !d->categoryDrawer || !d->proxyModel->isCategorizedModel())
+ {
+ return QListView::indexAt(point);
+ }
+
+ QModelIndex index;
+
+ QModelIndexList item = d->intersectionSet(QRect(point, point));
+
+ if (item.count() == 1)
+ {
+ index = item[0];
+ }
+
+ return index;
+}
+
+void KCategorizedView::reset()
+{
+ QListView::reset();
+
+ d->lastSelection = QItemSelection();
+ d->forcedSelectionPosition = 0;
+ d->elementsInfo.clear();
+ d->elementsPosition.clear();
+ d->categoriesIndexes.clear();
+ d->categoriesPosition.clear();
+ d->categories.clear();
+ d->intersectedIndexes.clear();
+ d->modelIndexList.clear();
+ d->hovered = QModelIndex();
+ d->biggestItemSize = QSize(0, 0);
+ d->mouseButtonPressed = false;
+ d->rightMouseButtonPressed = false;
+}
+
+void KCategorizedView::paintEvent(QPaintEvent *event)
+{
+ if (!d->proxyModel || !d->categoryDrawer || !d->proxyModel->isCategorizedModel())
+ {
+ QListView::paintEvent(event);
+ return;
+ }
+
+ QStyleOptionViewItemV3 option = viewOptions();
+ option.widget = this;
+ if (wordWrap())
+ {
+ option.features |= QStyleOptionViewItemV2::WrapText;
+ }
+
+ QPainter painter(viewport());
+ QRect area = event->rect();
+ const bool focus = (hasFocus() || viewport()->hasFocus()) &&
+ currentIndex().isValid();
+ const QStyle::State state = option.state;
+ const bool enabled = (state & QStyle::State_Enabled) != 0;
+
+ painter.save();
+
+ QModelIndexList dirtyIndexes = d->intersectionSet(area);
+ foreach (const QModelIndex &index, dirtyIndexes)
+ {
+ option.state = state;
+ option.rect = visualRect(index);
+
+ if (selectionModel() && selectionModel()->isSelected(index))
+ {
+ option.state |= QStyle::State_Selected;
+ }
+
+ if (enabled)
+ {
+ QPalette::ColorGroup cg;
+ if ((d->proxyModel->flags(index) & Qt::ItemIsEnabled) == 0)
+ {
+ option.state &= ~QStyle::State_Enabled;
+ cg = QPalette::Disabled;
+ }
+ else
+ {
+ cg = QPalette::Normal;
+ }
+ option.palette.setCurrentColorGroup(cg);
+ }
+
+ if (focus && currentIndex() == index)
+ {
+ option.state |= QStyle::State_HasFocus;
+ if (this->state() == EditingState)
+ option.state |= QStyle::State_Editing;
+ }
+
+ // we are only interested to give the mouse over feedback when no
+ // dragging is happening (ereslibre)
+ if ((index == d->hovered) && !d->mouseButtonPressed &&
+ (this->state() == QAbstractItemView::NoState))
+ option.state |= QStyle::State_MouseOver;
+ else
+ option.state &= ~QStyle::State_MouseOver;
+
+ itemDelegate(index)->paint(&painter, option, index);
+ }
+
+ // Redraw categories
+ QStyleOptionViewItem otherOption;
+ bool intersectedInThePast = false;
+ foreach (const QString &category, d->categories)
+ {
+ otherOption = option;
+ otherOption.rect = d->categoryVisualRect(category);
+ otherOption.state &= ~QStyle::State_MouseOver;
+
+ if (otherOption.rect.intersects(area))
+ {
+ intersectedInThePast = true;
+
+ QModelIndex indexToDraw = d->proxyModel->index(d->categoriesIndexes[category][0].row(), d->proxyModel->sortColumn());
+
+ d->drawNewCategory(indexToDraw,
+ d->proxyModel->sortRole(), otherOption, &painter);
+ }
+ else if (intersectedInThePast)
+ {
+ break; // the visible area has been finished, we don't need to keep asking, the rest won't intersect
+ // this is doable because we know that categories are correctly ordered on the list
+ }
+ }
+
+ if ((selectionMode() != SingleSelection) && (selectionMode() != NoSelection))
+ {
+ if (d->mouseButtonPressed && !d->isDragging)
+ {
+ QPoint start, end, initialPressPosition;
+
+ initialPressPosition = d->initialPressPosition;
+
+ initialPressPosition.setY(initialPressPosition.y() - verticalOffset());
+ initialPressPosition.setX(initialPressPosition.x() - horizontalOffset());
+
+ if (d->initialPressPosition.x() > d->mousePosition.x() ||
+ d->initialPressPosition.y() > d->mousePosition.y())
+ {
+ start = d->mousePosition;
+ end = initialPressPosition;
+ }
+ else
+ {
+ start = initialPressPosition;
+ end = d->mousePosition;
+ }
+
+ QStyleOptionRubberBand yetAnotherOption;
+ yetAnotherOption.initFrom(this);
+ yetAnotherOption.shape = QRubberBand::Rectangle;
+ yetAnotherOption.opaque = false;
+ yetAnotherOption.rect = QRect(start, end).intersected(viewport()->rect().adjusted(-16, -16, 16, 16));
+ painter.save();
+ style()->drawControl(QStyle::CE_RubberBand, &yetAnotherOption, &painter);
+ painter.restore();
+ }
+ }
+
+ if (d->isDragging && !d->dragLeftViewport)
+ {
+ painter.setOpacity(0.5);
+ d->drawDraggedItems(&painter);
+ }
+
+ painter.restore();
+}
+
+void KCategorizedView::resizeEvent(QResizeEvent *event)
+{
+ QListView::resizeEvent(event);
+
+ // Clear the items positions cache
+ d->elementsPosition.clear();
+ d->categoriesPosition.clear();
+ d->forcedSelectionPosition = 0;
+
+ if (!d->proxyModel || !d->categoryDrawer || !d->proxyModel->isCategorizedModel())
+ {
+ return;
+ }
+
+ d->updateScrollbars();
+}
+
+void KCategorizedView::setSelection(const QRect &rect,
+ QItemSelectionModel::SelectionFlags flags)
+{
+ if (!d->proxyModel || !d->categoryDrawer || !d->proxyModel->isCategorizedModel())
+ {
+ QListView::setSelection(rect, flags);
+ return;
+ }
+
+ if (!flags)
+ return;
+
+ if (flags & QItemSelectionModel::Clear)
+ {
+ selectionModel()->clear();
+ d->lastSelection.clear();
+ }
+
+ QModelIndexList dirtyIndexes = d->intersectionSet(rect);
+
+ // no items affected, just leave
+ if (!dirtyIndexes.count())
+ {
+ selectionModel()->select(d->lastSelection, QItemSelectionModel::SelectCurrent);
+
+ return;
+ }
+
+ QModelIndex topLeft;
+ QModelIndex bottomRight;
+
+ if (d->mouseButtonPressed || d->rightMouseButtonPressed) // selection with click + drag
+ {
+ QItemSelection selection;
+
+ QModelIndex prev = dirtyIndexes[0];
+ QModelIndex first = prev;
+ foreach (const QModelIndex &index, dirtyIndexes)
+ {
+ // we have a different interval. non-contiguous items
+ if ((index.row() - prev.row()) > 1) {
+ selection << QItemSelectionRange(first, prev);
+
+ first = index;
+ }
+
+ prev = index;
+ }
+
+ selection << QItemSelectionRange(first, prev);
+
+ if (flags & QItemSelectionModel::Current)
+ {
+ if (rect.topLeft() == rect.bottomRight())
+ {
+ selectionModel()->setCurrentIndex(indexAt(rect.topLeft()), QItemSelectionModel::NoUpdate);
+ }
+
+ selection.merge(d->lastSelection, flags);
+ }
+ else
+ {
+ selection.merge(selectionModel()->selection(), flags);
+
+ selectionModel()->select(selection, QItemSelectionModel::SelectCurrent);
+
+ return;
+ }
+
+ selectionModel()->select(selection, flags);
+ }
+ else // selection with click + keyboard keys
+ {
+ QModelIndex topLeftIndex = indexAt(QPoint(rect.topLeft().x(),
+ rect.topLeft().y()));
+ QModelIndex bottomRightIndex = indexAt(QPoint(rect.bottomRight().x(),
+ rect.bottomRight().y()));
+
+ // keyboard selection comes "upside down". Let's normalize it
+ if (topLeftIndex.row() > bottomRightIndex.row())
+ {
+ QModelIndex auxIndex = topLeftIndex;
+ topLeftIndex = bottomRightIndex;
+ bottomRightIndex = auxIndex;
+ }
+
+ int viewportWidth = viewport()->width() - spacing();
+ int itemWidth;
+
+ if (gridSize().isEmpty())
+ {
+ itemWidth = d->biggestItemSize.width();
+ }
+ else
+ {
+ itemWidth = gridSize().width();
+ }
+
+ int itemWidthPlusSeparation = spacing() + itemWidth;
+ if (!itemWidthPlusSeparation)
+ itemWidthPlusSeparation++;
+ int elementsPerRow = viewportWidth / itemWidthPlusSeparation;
+ if (!elementsPerRow)
+ elementsPerRow++;
+
+ QModelIndexList theoricDirty(dirtyIndexes);
+ dirtyIndexes.clear();
+ int first = model()->rowCount();
+ int last = 0;
+
+ foreach (const QModelIndex &index, theoricDirty)
+ {
+ if ((index.row() < first) &&
+ ((((topLeftIndex.row() / elementsPerRow) == (index.row() / elementsPerRow)) &&
+ ((topLeftIndex.row() % elementsPerRow) <= (index.row() % elementsPerRow))) ||
+ (topLeftIndex.row() / elementsPerRow) != (index.row() / elementsPerRow)))
+ {
+ first = index.row();
+ topLeft = index;
+ }
+
+ if ((index.row() > last) &&
+ ((((bottomRightIndex.row() / elementsPerRow) == (index.row() / elementsPerRow)) &&
+ ((bottomRightIndex.row() % elementsPerRow) >= (index.row() % elementsPerRow))) ||
+ (bottomRightIndex.row() / elementsPerRow) != (index.row() / elementsPerRow)))
+ {
+ last = index.row();
+ bottomRight = index;
+ }
+ }
+
+ for (int i = first; i <= last; i++)
+ {
+ dirtyIndexes << model()->index(i, theoricDirty[0].column(), theoricDirty[0].parent());
+ }
+
+ QItemSelection selection(topLeft, bottomRight);
+
+ selectionModel()->select(selection, flags);
+ }
+}
+
+void KCategorizedView::mouseMoveEvent(QMouseEvent *event)
+{
+ QListView::mouseMoveEvent(event);
+
+ if (!d->proxyModel || !d->categoryDrawer || !d->proxyModel->isCategorizedModel())
+ {
+ return;
+ }
+
+ QModelIndexList item = d->intersectionSet(QRect(event->pos(), event->pos()));
+
+ if (item.count() == 1)
+ {
+ d->hovered = item[0];
+ }
+ else
+ {
+ d->hovered = QModelIndex();
+ }
+
+ const QString previousHoveredCategory = d->hoveredCategory;
+
+ d->mousePosition = event->pos();
+ d->hoveredCategory = QString();
+
+ // Redraw categories
+ foreach (const QString &category, d->categories)
+ {
+ if (d->categoryVisualRect(category).intersects(QRect(event->pos(), event->pos())))
+ {
+ d->hoveredCategory = category;
+ viewport()->update(d->categoryVisualRect(category));
+ }
+ else if ((category == previousHoveredCategory) &&
+ (!d->categoryVisualRect(previousHoveredCategory).intersects(QRect(event->pos(), event->pos()))))
+ {
+ viewport()->update(d->categoryVisualRect(category));
+ }
+ }
+
+ QRect rect;
+ if (d->mouseButtonPressed && !d->isDragging)
+ {
+ QPoint start, end, initialPressPosition;
+
+ initialPressPosition = d->initialPressPosition;
+
+ initialPressPosition.setY(initialPressPosition.y() - verticalOffset());
+ initialPressPosition.setX(initialPressPosition.x() - horizontalOffset());
+
+ if (d->initialPressPosition.x() > d->mousePosition.x() ||
+ d->initialPressPosition.y() > d->mousePosition.y())
+ {
+ start = d->mousePosition;
+ end = initialPressPosition;
+ }
+ else
+ {
+ start = initialPressPosition;
+ end = d->mousePosition;
+ }
+
+ rect = QRect(start, end).adjusted(-16, -16, 16, 16);
+ rect = rect.united(QRect(start, end).adjusted(16, 16, -16, -16)).intersected(viewport()->rect());
+
+ viewport()->update(rect);
+ }
+}
+
+void KCategorizedView::mousePressEvent(QMouseEvent *event)
+{
+ d->dragLeftViewport = false;
+
+ if (event->button() == Qt::LeftButton)
+ {
+ d->mouseButtonPressed = true;
+
+ d->initialPressPosition = event->pos();
+ d->initialPressPosition.setY(d->initialPressPosition.y() +
+ verticalOffset());
+ d->initialPressPosition.setX(d->initialPressPosition.x() +
+ horizontalOffset());
+ }
+ else if (event->button() == Qt::RightButton)
+ {
+ d->rightMouseButtonPressed = true;
+ }
+
+ QListView::mousePressEvent(event);
+
+ d->lastSelection = selectionModel()->selection();
+
+ viewport()->update(d->categoryVisualRect(d->hoveredCategory));
+}
+
+void KCategorizedView::mouseReleaseEvent(QMouseEvent *event)
+{
+ d->mouseButtonPressed = false;
+ d->rightMouseButtonPressed = false;
+
+ QListView::mouseReleaseEvent(event);
+
+ if (!d->proxyModel || !d->categoryDrawer || !d->proxyModel->isCategorizedModel())
+ {
+ return;
+ }
+
+ QPoint initialPressPosition = viewport()->mapFromGlobal(QCursor::pos());
+ initialPressPosition.setY(initialPressPosition.y() + verticalOffset());
+ initialPressPosition.setX(initialPressPosition.x() + horizontalOffset());
+
+ if ((selectionMode() != SingleSelection) && (selectionMode() != NoSelection) &&
+ (initialPressPosition == d->initialPressPosition))
+ {
+ foreach(const QString &category, d->categories)
+ {
+ if (d->categoryVisualRect(category).contains(event->pos()))
+ {
+ QItemSelection selection = selectionModel()->selection();
+ QModelIndexList indexList = d->categoriesIndexes[category];
+
+ foreach (const QModelIndex &index, indexList)
+ {
+ QModelIndex selectIndex = index.model()->index(index.row(), 0);
+
+ selection << QItemSelectionRange(selectIndex);
+ }
+
+ selectionModel()->select(selection, QItemSelectionModel::SelectCurrent);
+
+ break;
+ }
+ }
+ }
+
+ QRect rect;
+ if (!d->isDragging)
+ {
+ QPoint start, end, initialPressPosition;
+
+ initialPressPosition = d->initialPressPosition;
+
+ initialPressPosition.setY(initialPressPosition.y() - verticalOffset());
+ initialPressPosition.setX(initialPressPosition.x() - horizontalOffset());
+
+ if (d->initialPressPosition.x() > d->mousePosition.x() ||
+ d->initialPressPosition.y() > d->mousePosition.y())
+ {
+ start = d->mousePosition;
+ end = initialPressPosition;
+ }
+ else
+ {
+ start = initialPressPosition;
+ end = d->mousePosition;
+ }
+
+ rect = QRect(start, end).adjusted(-16, -16, 16, 16);
+ rect = rect.united(QRect(start, end).adjusted(16, 16, -16, -16)).intersected(viewport()->rect());
+
+ viewport()->update(rect);
+ }
+
+ if (d->hovered.isValid())
+ viewport()->update(visualRect(d->hovered));
+ else if (!d->hoveredCategory.isEmpty())
+ viewport()->update(d->categoryVisualRect(d->hoveredCategory));
+}
+
+void KCategorizedView::leaveEvent(QEvent *event)
+{
+ d->hovered = QModelIndex();
+ d->hoveredCategory = QString();
+
+ QListView::leaveEvent(event);
+}
+
+void KCategorizedView::startDrag(Qt::DropActions supportedActions)
+{
+ // FIXME: QAbstractItemView does far better here since it sets the
+ // pixmap of selected icons to the dragging cursor, but it sets a non
+ // ARGB window so it is no transparent. Use QAbstractItemView when
+ // this is fixed on Qt.
+ // QAbstractItemView::startDrag(supportedActions);
+#if !defined(DOLPHIN_DRAGANDDROP)
+ QListView::startDrag(supportedActions);
+#endif
+
+ d->isDragging = false;
+ d->mouseButtonPressed = false;
+ d->rightMouseButtonPressed = false;
+
+ viewport()->update(d->lastDraggedItemsRect);
+}
+
+void KCategorizedView::dragMoveEvent(QDragMoveEvent *event)
+{
+ d->mousePosition = event->pos();
+
+ if (d->mouseButtonPressed)
+ {
+ d->isDragging = true;
+ }
+ else
+ {
+ d->isDragging = false;
+ }
+
+ d->dragLeftViewport = false;
+
+#if defined(DOLPHIN_DRAGANDDROP)
+ QAbstractItemView::dragMoveEvent(event);
+#else
+ QListView::dragMoveEvent(event);
+#endif
+
+ if (!d->proxyModel || !d->categoryDrawer || !d->proxyModel->isCategorizedModel())
+ {
+ return;
+ }
+
+ d->drawDraggedItems();
+}
+
+void KCategorizedView::dragLeaveEvent(QDragLeaveEvent *event)
+{
+ d->dragLeftViewport = true;
+
+#if defined(DOLPHIN_DRAGANDDROP)
+ QAbstractItemView::dragLeaveEvent(event);
+#else
+ QListView::dragLeaveEvent(event);
+#endif
+}
+
+void KCategorizedView::dropEvent(QDropEvent *event)
+{
+#if defined(DOLPHIN_DRAGANDDROP)
+ QAbstractItemView::dropEvent(event);
+#else
+ QListView::dropEvent(event);
+#endif
+}
+
+QModelIndex KCategorizedView::moveCursor(CursorAction cursorAction,
+ Qt::KeyboardModifiers modifiers)
+{
+ if ((viewMode() != KCategorizedView::IconMode) ||
+ !d->proxyModel ||
+ !d->categoryDrawer ||
+ d->categories.isEmpty() ||
+ !d->proxyModel->isCategorizedModel())
+ {
+ return QListView::moveCursor(cursorAction, modifiers);
+ }
+
+ int viewportWidth = viewport()->width() - spacing();
+ int itemWidth;
+
+ if (gridSize().isEmpty())
+ {
+ itemWidth = d->biggestItemSize.width();
+ }
+ else
+ {
+ itemWidth = gridSize().width();
+ }
+
+ int itemWidthPlusSeparation = spacing() + itemWidth;
+ if (!itemWidthPlusSeparation)
+ itemWidthPlusSeparation++;
+ int elementsPerRow = viewportWidth / itemWidthPlusSeparation;
+ if (!elementsPerRow)
+ elementsPerRow++;
+
+ QModelIndex current = selectionModel()->currentIndex();
+
+ if (!current.isValid())
+ {
+ if (cursorAction == MoveEnd)
+ {
+ current = model()->index(model()->rowCount() - 1, 0, QModelIndex());
+ d->forcedSelectionPosition = d->elementsInfo[current.row()].relativeOffsetToCategory % elementsPerRow;
+ }
+ else
+ {
+ current = model()->index(0, 0, QModelIndex());
+ d->forcedSelectionPosition = 0;
+ }
+
+ return current;
+ }
+ else if (!current.isValid())
+ {
+ return QModelIndex();
+ }
+
+ QString lastCategory = d->categories.first();
+ QString theCategory = d->categories.first();
+ QString afterCategory = d->categories.first();
+
+ bool hasToBreak = false;
+ foreach (const QString &category, d->categories)
+ {
+ if (hasToBreak)
+ {
+ afterCategory = category;
+
+ break;
+ }
+
+ if (category == d->elementsInfo[current.row()].category)
+ {
+ theCategory = category;
+
+ hasToBreak = true;
+ }
+
+ if (!hasToBreak)
+ {
+ lastCategory = category;
+ }
+ }
+
+ switch (cursorAction)
+ {
+ case QAbstractItemView::MoveUp: {
+ if (d->elementsInfo[current.row()].relativeOffsetToCategory >= elementsPerRow)
+ {
+ int indexToMove = current.row();
+ indexToMove -= qMin(((d->elementsInfo[current.row()].relativeOffsetToCategory) + d->forcedSelectionPosition), elementsPerRow - d->forcedSelectionPosition + (d->elementsInfo[current.row()].relativeOffsetToCategory % elementsPerRow));
+
+ return d->proxyModel->index(indexToMove, 0);
+ }
+ else
+ {
+ int lastCategoryLastRow = (d->categoriesIndexes[lastCategory].count() - 1) % elementsPerRow;
+ int indexToMove = current.row() - d->elementsInfo[current.row()].relativeOffsetToCategory;
+
+ if (d->forcedSelectionPosition >= lastCategoryLastRow)
+ {
+ indexToMove -= 1;
+ }
+ else
+ {
+ indexToMove -= qMin((lastCategoryLastRow - d->forcedSelectionPosition + 1), d->forcedSelectionPosition + elementsPerRow + 1);
+ }
+
+ return d->proxyModel->index(indexToMove, 0);
+ }
+ }
+
+ case QAbstractItemView::MoveDown: {
+ if (d->elementsInfo[current.row()].relativeOffsetToCategory < (d->categoriesIndexes[theCategory].count() - 1 - ((d->categoriesIndexes[theCategory].count() - 1) % elementsPerRow)))
+ {
+ int indexToMove = current.row();
+ indexToMove += qMin(elementsPerRow, d->categoriesIndexes[theCategory].count() - 1 - d->elementsInfo[current.row()].relativeOffsetToCategory);
+
+ return d->proxyModel->index(indexToMove, 0);
+ }
+ else
+ {
+ int afterCategoryLastRow = qMin(elementsPerRow, d->categoriesIndexes[afterCategory].count());
+ int indexToMove = current.row() + (d->categoriesIndexes[theCategory].count() - d->elementsInfo[current.row()].relativeOffsetToCategory);
+
+ if (d->forcedSelectionPosition >= afterCategoryLastRow)
+ {
+ indexToMove += afterCategoryLastRow - 1;
+ }
+ else
+ {
+ indexToMove += qMin(d->forcedSelectionPosition, elementsPerRow);
+ }
+
+ return d->proxyModel->index(indexToMove, 0);
+ }
+ }
+
+ case QAbstractItemView::MoveLeft:
+ if (layoutDirection() == Qt::RightToLeft)
+ {
+ if (!(d->elementsInfo[current.row() + 1].relativeOffsetToCategory % elementsPerRow))
+ return current;
+
+ d->forcedSelectionPosition = d->elementsInfo[current.row() + 1].relativeOffsetToCategory % elementsPerRow;
+
+#if 0 //follow qt view behavior. lateral movements won't change visual row
+ if (d->forcedSelectionPosition < 0)
+ d->forcedSelectionPosition = (d->categoriesIndexes[theCategory].count() - 1) % elementsPerRow;
+#endif
+
+ return d->proxyModel->index(current.row() + 1, 0);
+ }
+
+ if (!(d->elementsInfo[current.row()].relativeOffsetToCategory % elementsPerRow))
+ return current;
+
+ d->forcedSelectionPosition = d->elementsInfo[current.row() - 1].relativeOffsetToCategory % elementsPerRow;
+
+#if 0 //follow qt view behavior. lateral movements won't change visual row
+ if (d->forcedSelectionPosition < 0)
+ d->forcedSelectionPosition = (d->categoriesIndexes[theCategory].count() - 1) % elementsPerRow;
+#endif
+
+ return d->proxyModel->index(current.row() - 1, 0);
+
+ case QAbstractItemView::MoveRight:
+ if (layoutDirection() == Qt::RightToLeft)
+ {
+ if (!(d->elementsInfo[current.row()].relativeOffsetToCategory % elementsPerRow))
+ return current;
+
+ d->forcedSelectionPosition = d->elementsInfo[current.row() - 1].relativeOffsetToCategory % elementsPerRow;
+
+#if 0 //follow qt view behavior. lateral movements won't change visual row
+ if (d->forcedSelectionPosition < 0)
+ d->forcedSelectionPosition = (d->categoriesIndexes[theCategory].count() - 1) % elementsPerRow;
+#endif
+
+ return d->proxyModel->index(current.row() - 1, 0);
+ }
+
+ if (!(d->elementsInfo[current.row() + 1].relativeOffsetToCategory % elementsPerRow))
+ return current;
+
+ d->forcedSelectionPosition = d->elementsInfo[current.row() + 1].relativeOffsetToCategory % elementsPerRow;
+
+#if 0 //follow qt view behavior. lateral movements won't change visual row
+ if (d->forcedSelectionPosition < 0)
+ d->forcedSelectionPosition = (d->categoriesIndexes[theCategory].count() - 1) % elementsPerRow;
+#endif
+
+ return d->proxyModel->index(current.row() + 1, 0);
+
+ default:
+ break;
+ }
+
+ return QListView::moveCursor(cursorAction, modifiers);
+}
+
+void KCategorizedView::rowsInserted(const QModelIndex &parent,
+ int start,
+ int end)
+{
+ QListView::rowsInserted(parent, start, end);
+
+ if (!d->proxyModel || !d->categoryDrawer || !d->proxyModel->isCategorizedModel())
+ {
+ d->forcedSelectionPosition = 0;
+ d->elementsInfo.clear();
+ d->elementsPosition.clear();
+ d->categoriesIndexes.clear();
+ d->categoriesPosition.clear();
+ d->categories.clear();
+ d->intersectedIndexes.clear();
+ d->modelIndexList.clear();
+ d->hovered = QModelIndex();
+ d->biggestItemSize = QSize(0, 0);
+ d->mouseButtonPressed = false;
+ d->rightMouseButtonPressed = false;
+
+ return;
+ }
+
+ rowsInsertedArtifficial(parent, start, end);
+}
+
+void KCategorizedView::rowsInsertedArtifficial(const QModelIndex &parent,
+ int start,
+ int end)
+{
+ Q_UNUSED(parent);
+
+ d->forcedSelectionPosition = 0;
+ d->elementsInfo.clear();
+ d->elementsPosition.clear();
+ d->categoriesIndexes.clear();
+ d->categoriesPosition.clear();
+ d->categories.clear();
+ d->intersectedIndexes.clear();
+ d->modelIndexList.clear();
+ d->hovered = QModelIndex();
+ d->biggestItemSize = QSize(0, 0);
+ d->mouseButtonPressed = false;
+ d->rightMouseButtonPressed = false;
+
+ if (start > end || end < 0 || start < 0 || !d->proxyModel->rowCount())
+ {
+ return;
+ }
+
+ // Add all elements mapped to the source model and explore categories
+ QString prevCategory = d->proxyModel->data(d->proxyModel->index(0, d->proxyModel->sortColumn()), KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString();
+ QString lastCategory = prevCategory;
+ QModelIndexList modelIndexList;
+ struct Private::ElementInfo elementInfo;
+ int offset = -1;
+ for (int k = 0; k < d->proxyModel->rowCount(); ++k)
+ {
+ QModelIndex index = d->proxyModel->index(k, d->proxyModel->sortColumn());
+ QModelIndex indexSize = d->proxyModel->index(k, 0);
+
+ d->biggestItemSize = QSize(qMax(sizeHintForIndex(indexSize).width(),
+ d->biggestItemSize.width()),
+ qMax(sizeHintForIndex(indexSize).height(),
+ d->biggestItemSize.height()));
+
+ d->modelIndexList << index;
+
+ lastCategory = d->proxyModel->data(index, KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString();
+
+ elementInfo.category = lastCategory;
+
+ if (prevCategory != lastCategory)
+ {
+ offset = 0;
+ d->categoriesIndexes.insert(prevCategory, modelIndexList);
+ d->categories << prevCategory;
+ modelIndexList.clear();
+ }
+ else
+ {
+ offset++;
+ }
+
+ elementInfo.relativeOffsetToCategory = offset;
+
+ modelIndexList << index;
+ prevCategory = lastCategory;
+
+ d->elementsInfo.insert(index.row(), elementInfo);
+ }
+
+ d->categoriesIndexes.insert(prevCategory, modelIndexList);
+ d->categories << prevCategory;
+
+ d->updateScrollbars();
+
+ // FIXME: We need to safely save the last selection. This is on my TODO
+ // list (ereslibre).
+ selectionModel()->clear();
+}
+
+void KCategorizedView::rowsRemoved(const QModelIndex &parent,
+ int start,
+ int end)
+{
+ if (d->proxyModel && d->categoryDrawer && d->proxyModel->isCategorizedModel())
+ {
+ // Force the view to update all elements
+ rowsInsertedArtifficial(QModelIndex(), 0, d->proxyModel->rowCount() - 1);
+ }
+}
+
+void KCategorizedView::updateGeometries()
+{
+ if (!d->proxyModel || !d->categoryDrawer || !d->proxyModel->isCategorizedModel())
+ {
+ QListView::updateGeometries();
+ return;
+ }
+
+ // Avoid QListView::updateGeometries(), since it will try to set another
+ // range to our scroll bars, what we don't want (ereslibre)
+ QAbstractItemView::updateGeometries();
+}
+
+void KCategorizedView::slotLayoutChanged()
+{
+ d->layoutChanged();
+}
+
+void KCategorizedView::currentChanged(const QModelIndex ¤t,
+ const QModelIndex &previous)
+{
+ // We need to update the forcedSelectionPosition property in order to correctly
+ // navigate after with keyboard using up & down keys
+
+ int viewportWidth = viewport()->width() - spacing();
+
+ int itemHeight;
+ int itemWidth;
+
+ if (gridSize().isEmpty())
+ {
+ itemHeight = d->biggestItemSize.height();
+ itemWidth = d->biggestItemSize.width();
+ }
+ else
+ {
+ itemHeight = gridSize().height();
+ itemWidth = gridSize().width();
+ }
+
+ int itemWidthPlusSeparation = spacing() + itemWidth;
+ if (!itemWidthPlusSeparation)
+ itemWidthPlusSeparation++;
+ int elementsPerRow = viewportWidth / itemWidthPlusSeparation;
+ if (!elementsPerRow)
+ elementsPerRow++;
+
+ if (d->mouseButtonPressed || d->rightMouseButtonPressed)
+ d->forcedSelectionPosition = d->elementsInfo[current.row()].relativeOffsetToCategory % elementsPerRow;
+
+ QListView::currentChanged(current, previous);
+}
+
+#include "kcategorizedview.moc"
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedview.h
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedview.h?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedview.h (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedview.h Wed Feb 6 11:56:53 2008
@@ -0,0 +1,119 @@
+/**
+ * This file is part of the KDE project
+ * Copyright (C) 2007 Rafael Fernández López
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef KCATEGORIZEDVIEW_H
+#define KCATEGORIZEDVIEW_H
+
+#include
+
+#include
+
+class KCategoryDrawer;
+
+/**
+ * @short Item view for listing items
+ *
+ * KCategorizedView allows you to use it as it were a QListView. You can add an
+ * itemCategorizer to it, so your items became categorized depending on the
+ * KItemCategorizer inherited class rules.
+ *
+ * @see KItemCategorizer, KSortFilterProxyModel
+ *
+ * @author Rafael Fernández López
+ */
+class KDEUI_EXPORT KCategorizedView
+ : public QListView
+{
+ Q_OBJECT
+
+public:
+ KCategorizedView(QWidget *parent = 0);
+
+ ~KCategorizedView();
+
+ virtual void setModel(QAbstractItemModel *model);
+
+ void setGridSize(const QSize &size);
+
+ virtual QRect visualRect(const QModelIndex &index) const;
+
+ KCategoryDrawer *categoryDrawer() const;
+
+ void setCategoryDrawer(KCategoryDrawer *categoryDrawer);
+
+ virtual QModelIndex indexAt(const QPoint &point) const;
+
+public Q_SLOTS:
+ virtual void reset();
+
+protected:
+ virtual void paintEvent(QPaintEvent *event);
+
+ virtual void resizeEvent(QResizeEvent *event);
+
+ virtual void setSelection(const QRect &rect,
+ QItemSelectionModel::SelectionFlags flags);
+
+ virtual void mouseMoveEvent(QMouseEvent *event);
+
+ virtual void mousePressEvent(QMouseEvent *event);
+
+ virtual void mouseReleaseEvent(QMouseEvent *event);
+
+ virtual void leaveEvent(QEvent *event);
+
+ virtual void startDrag(Qt::DropActions supportedActions);
+
+ virtual void dragMoveEvent(QDragMoveEvent *event);
+
+ virtual void dragLeaveEvent(QDragLeaveEvent *event);
+
+ virtual void dropEvent(QDropEvent *event);
+
+ virtual QModelIndex moveCursor(CursorAction cursorAction,
+ Qt::KeyboardModifiers modifiers);
+
+protected Q_SLOTS:
+ virtual void rowsInserted(const QModelIndex &parent,
+ int start,
+ int end);
+
+ virtual void rowsInsertedArtifficial(const QModelIndex &parent,
+ int start,
+ int end);
+
+ virtual void rowsRemoved(const QModelIndex &parent,
+ int start,
+ int end);
+
+ virtual void updateGeometries();
+
+ virtual void slotLayoutChanged();
+
+ virtual void currentChanged(const QModelIndex ¤t,
+ const QModelIndex &previous);
+
+
+private:
+ class Private;
+ Private *d;
+};
+
+#endif // KCATEGORIZEDVIEW_H
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedview_p.h
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedview_p.h?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedview_p.h (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorizedview_p.h Wed Feb 6 11:56:53 2008
@@ -0,0 +1,164 @@
+/**
+ * This file is part of the KDE project
+ * Copyright (C) 2007 Rafael Fernández López
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef KCATEGORIZEDVIEW_P_H
+#define KCATEGORIZEDVIEW_P_H
+
+class KCategorizedSortFilterProxyModel;
+class KCategoryDrawer;
+
+/**
+ * @internal
+ */
+class KCategorizedView::Private
+{
+public:
+ Private(KCategorizedView *listView);
+ ~Private();
+
+
+ // Methods
+
+ /**
+ * Returns the list of items that intersects with @p rect
+ */
+ const QModelIndexList &intersectionSet(const QRect &rect);
+
+ /**
+ * Gets the item rect in the viewport for @p index
+ */
+ QRect visualRectInViewport(const QModelIndex &index) const;
+
+ /**
+ * Returns the category rect in the viewport for @p category
+ */
+ QRect visualCategoryRectInViewport(const QString &category) const;
+
+ /**
+ * Caches and returns the rect that corresponds to @p index
+ */
+ const QRect &cacheIndex(const QModelIndex &index);
+
+ /**
+ * Caches and returns the rect that corresponds to @p category
+ */
+ const QRect &cacheCategory(const QString &category);
+
+ /**
+ * Returns the rect that corresponds to @p index
+ * @note If the rect is not cached, it becomes cached
+ */
+ const QRect &cachedRectIndex(const QModelIndex &index);
+
+ /**
+ * Returns the rect that corresponds to @p category
+ * @note If the rect is not cached, it becomes cached
+ */
+ const QRect &cachedRectCategory(const QString &category);
+
+ /**
+ * Returns the visual rect (taking in count x and y offsets) for @p index
+ * @note If the rect is not cached, it becomes cached
+ */
+ QRect visualRect(const QModelIndex &index);
+
+ /**
+ * Returns the visual rect (taking in count x and y offsets) for @p category
+ * @note If the rect is not cached, it becomes cached
+ */
+ QRect categoryVisualRect(const QString &category);
+
+ /**
+ * This method will draw a new category represented by index
+ * @param index on the rect specified by @p option.rect, with
+ * painter @p painter
+ */
+ void drawNewCategory(const QModelIndex &index,
+ int sortRole,
+ const QStyleOption &option,
+ QPainter *painter);
+
+ /**
+ * This method will update scrollbars ranges. Called when our model changes
+ * or when the view is resized
+ */
+ void updateScrollbars();
+
+ /**
+ * This method will draw dragged items in the painting operation
+ */
+ void drawDraggedItems(QPainter *painter);
+
+ /**
+ * This method will determine which rect needs to be updated because of a
+ * dragging operation
+ */
+ void drawDraggedItems();
+
+ void layoutChanged(bool forceItemReload = false);
+
+
+ // Attributes
+
+ struct ElementInfo
+ {
+ QString category;
+ int relativeOffsetToCategory;
+ };
+
+ // Basic data
+ KCategorizedView *listView;
+ KCategoryDrawer *categoryDrawer;
+ QSize biggestItemSize;
+
+ // Behavior data
+ bool mouseButtonPressed;
+ bool rightMouseButtonPressed;
+ bool isDragging;
+ bool dragLeftViewport;
+ QModelIndex hovered;
+ QString hoveredCategory;
+ QPoint initialPressPosition;
+ QPoint mousePosition;
+ int forcedSelectionPosition;
+
+ // Cache data
+ // We cannot merge some of them into structs because it would affect
+ // performance
+ QHash elementsInfo;
+ QHash elementsPosition;
+ QHash categoriesIndexes;
+ QHash categoriesPosition;
+ QStringList categories;
+ QModelIndexList intersectedIndexes;
+ QRect lastDraggedItemsRect;
+ int modelSortRole;
+ int modelSortColumn;
+ int modelLastRowCount;
+ bool modelCategorized;
+ Qt::SortOrder modelSortOrder;
+ QItemSelection lastSelection;
+
+ // Attributes for speed reasons
+ KCategorizedSortFilterProxyModel *proxyModel;
+ QModelIndexList modelIndexList;
+};
+
+#endif // KCATEGORIZEDVIEW_P_H
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorydrawer.cpp
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorydrawer.cpp?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorydrawer.cpp (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorydrawer.cpp Wed Feb 6 11:56:53 2008
@@ -0,0 +1,118 @@
+/**
+ * This file is part of the KDE project
+ * Copyright (C) 2007 Rafael Fernández López
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "kcategorydrawer.h"
+
+#include <QPainter>
+#include <QStyleOption>
+
+#include
+#include
+
+KCategoryDrawer::KCategoryDrawer()
+{
+}
+
+KCategoryDrawer::~KCategoryDrawer()
+{
+}
+
+void KCategoryDrawer::drawCategory(const QModelIndex &index,
+ int /*sortRole*/,
+ const QStyleOption &option,
+ QPainter *painter) const
+{
+ const QString category = index.model()->data(index, KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString();
+
+ QColor color;
+
+ if (option.state & QStyle::State_Selected)
+ {
+ color = option.palette.color(QPalette::HighlightedText);
+ }
+ else
+ {
+ color = option.palette.color(QPalette::Text);
+ }
+
+ painter->save();
+ painter->setRenderHint(QPainter::Antialiasing);
+
+ if (option.state & QStyle::State_Selected)
+ {
+ QColor selected = option.palette.color(QPalette::Highlight);
+
+ QLinearGradient gradient(option.rect.topLeft(),
+ option.rect.bottomRight());
+ gradient.setColorAt(option.direction == Qt::LeftToRight ? 0
+ : 1, selected);
+ gradient.setColorAt(option.direction == Qt::LeftToRight ? 1
+ : 0, Qt::transparent);
+
+ painter->fillRect(option.rect, gradient);
+ }
+ else if (option.state & QStyle::State_MouseOver)
+ {
+ QColor hover = option.palette.color(QPalette::Highlight).light();
+ hover.setAlpha(88);
+
+ QLinearGradient gradient(option.rect.topLeft(),
+ option.rect.bottomRight());
+ gradient.setColorAt(option.direction == Qt::LeftToRight ? 0
+ : 1, hover);
+ gradient.setColorAt(option.direction == Qt::LeftToRight ? 1
+ : 0, Qt::transparent);
+
+ painter->fillRect(option.rect, gradient);
+ }
+
+ QFont painterFont = painter->font();
+ painterFont.setWeight(QFont::Bold);
+ QFontMetrics metrics(painterFont);
+ painter->setFont(painterFont);
+
+ QRect lineRect(option.rect.left(),
+ option.rect.bottom() - 1,
+ option.rect.width(),
+ 1);
+
+ QLinearGradient gradient(option.rect.topLeft(),
+ option.rect.bottomRight());
+ gradient.setColorAt(option.direction == Qt::LeftToRight ? 0
+ : 1, color);
+ gradient.setColorAt(option.direction == Qt::LeftToRight ? 1
+ : 0, Qt::transparent);
+
+ painter->fillRect(lineRect, gradient);
+
+ painter->setPen(color);
+
+ painter->drawText(option.rect, Qt::AlignVCenter | Qt::AlignLeft,
+ metrics.elidedText(category, Qt::ElideRight, option.rect.width()));
+
+ painter->restore();
+}
+
+int KCategoryDrawer::categoryHeight(const QModelIndex &index, const QStyleOption &option) const
+{
+ Q_UNUSED(index);
+
+ return option.fontMetrics.height() + 4 /* 3 separator; 1 gradient */;
+}
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorydrawer.h
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorydrawer.h?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorydrawer.h (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcategorydrawer.h Wed Feb 6 11:56:53 2008
@@ -0,0 +1,52 @@
+/**
+ * This file is part of the KDE project
+ * Copyright (C) 2007 Rafael Fernández López
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef KCATEGORYDRAWER_H
+#define KCATEGORYDRAWER_H
+
+#include
+
+class QPainter;
+class QModelIndex;
+class QStyleOption;
+
+class KDEUI_EXPORT KCategoryDrawer
+{
+public:
+ KCategoryDrawer();
+
+ virtual ~KCategoryDrawer();
+
+ /**
+ * This method purpose is to draw a category represented by the given
+ * @param index with the given @param sortRole sorting role
+ *
+ * @note This method will be called one time per category, always with the
+ * first element in that category
+ */
+ virtual void drawCategory(const QModelIndex &index,
+ int sortRole,
+ const QStyleOption &option,
+ QPainter *painter) const;
+
+ virtual int categoryHeight(const QModelIndex &index, const QStyleOption &option) const;
+};
+
+#endif // KCATEGORYDRAWER_H
Added: branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcmodulemodel.cpp
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcmodulemodel.cpp?rev=44181&view=auto
==============================================================================
--- branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcmodulemodel.cpp (added)
+++ branches/tmp/tgoettlicher/yast2_2nd_rewrite/systemsettings/kcmodulemodel.cpp Wed Feb 6 11:56:53 2008
@@ -0,0 +1,222 @@
+/* This file is part of the KDE project
+ Copyright 2007 Will Stephenson
+
+ 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) version 3 or any later version
+ accepted by the membership of KDE e.V. (or its successor approved
+ by the membership of KDE e.V.), which shall act as a proxy
+ defined in Section 14 of version 3 of the license.
+
+ 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, see http://www.gnu.org/licenses/.
+*/
+
+#include "kcmodulemodel.h"
+
+#include <QHash>
+#include <QList>
+#include <KDebug>
+#include <KIcon>
+#include <KServiceTypeTrader>
+
+#include "kcategorizedsortfilterproxymodel.h"
+#include "menuitem.h"
+
+Q_DECLARE_METATYPE(MenuItem *)
+
+SystemSettingsProxyModel::SystemSettingsProxyModel( QObject * parent )
+ : KCategorizedSortFilterProxyModel( parent )
+{
+
+}
+
+SystemSettingsProxyModel::~SystemSettingsProxyModel()
+{}
+
+bool SystemSettingsProxyModel::subSortLessThan(const QModelIndex &left, const QModelIndex &right) const
+{
+ QVariant leftWeight = left.data( KCModuleModel::WeightRole );
+ QVariant rightWeight = right.data( KCModuleModel::WeightRole );
+
+ if ( !( leftWeight.isValid() && rightWeight.isValid() ) ) {
+ return KCategorizedSortFilterProxyModel::subSortLessThan( left, right );
+ } else {
+ kDebug() << "comparing " << left.data().toString() << " (" << leftWeight.toInt() << ") and " << right.data().toString() << " (" << rightWeight.toInt() << ")";
+ if ( leftWeight.toInt() == rightWeight.toInt() ) {
+ return left.data().toString() < right.data().toString();
+ } else {
+ return leftWeight.toInt() < rightWeight.toInt();
+ }
+ }
+}
+
+
+bool SystemSettingsProxyModel::filterAcceptsRow( int source_row, const QModelIndex & source_parent ) const
+{
+ QModelIndex index = sourceModel()->index( source_row, 0, source_parent );
+ MenuItem * mItem = index.data( Qt::UserRole ).value