Set initial focus to host input widget.
- cd build
- if [ "$QT_VERSION" = "qt4" ]; then cmake ..; fi
- if [ "$QT_VERSION" = "qt5" ]; then source /opt/qt52/bin/qt52-env.sh && cmake -DUSE_QT5=ON ..; fi
- - make
\ No newline at end of file
+ - make
+
+matrix:
+ exclude:
+ - compiler: clang
+ env: QT_VERSION=qt4
# General setup
#####################################################################
-cmake_minimum_required(VERSION 2.8.9)
+cmake_minimum_required(VERSION 2.8.9) # You'll need at least 2.8.12 for KDE Frameworks integration
project(QuasselIRC)
# Versions
add_feature_info(WANT_QTCLIENT WANT_QTCLIENT "Build the client-only binary (requires a core to connect to)")
add_feature_info(WANT_MONO WANT_MONO "Build the monolithic (all-in-one) binary")
-# Whether to enable KDE integration (pulls in kdelibs and friends as a dependency); requires Qt4 for now
-cmake_dependent_option(WITH_KDE "KDE4 integration" OFF "USE_QT4" OFF)
-add_feature_info(WITH_KDE WITH_KDE "Enable KDE4 integration")
+# Whether to enable KDE integration (work in progress for Qt5 / KDE Frameworks)
+# Note that when building with Qt5, WITH_KDE enables integration with higher-tier KDE frameworks that
+# require runtime support. We still optionally make use of certain Tier 1 frameworks even if WITH_KDE
+# is disabled.
+if (USE_QT4)
+ option(WITH_KDE "KDE4 integration" OFF)
+ add_feature_info(WITH_KDE WITH_KDE "Enable KDE4 integration")
+else()
+ option(WITH_KDE "Integration with the KDE Frameworks runtime environment")
+ add_feature_info(WITH_KDE WITH_KDE "Integrate with the KDE Frameworks runtime environment")
+endif()
cmake_dependent_option(WITH_OXYGEN "Install Oxygen icon set (usually shipped with KDE)" ON "NOT WITH_KDE" OFF)
if (NOT WITH_KDE)
add_definitions(-DHAVE_QT5)
else()
message(STATUS "Building for Qt4...")
- if (BUILD_GUI)
- set(QT_MIN_VERSION "4.6.0")
- else()
- set(QT_MIN_VERSION "4.4.0")
- endif()
+ set(QT_MIN_VERSION "4.8.0")
# Select a Qt installation here, if you don't want to use system Qt
if(QT_PATH)
endif()
endif()
+
# Find package dependencies
#
# Note that you can forcefully disable optional packages
endif()
add_feature_info("WITH_WEBKIT, QtWebKit and QtWebKitWidgets modules" Qt5WebKitWidgets_FOUND "Support showing previews for URLs in chat")
+ # KDE Frameworks
+ ################
+
+ if (WITH_KDE)
+ set(ecm_find_type "REQUIRED")
+ else()
+ # Even with KDE integration disabled, we optionally use tier1 frameworks if we find them
+ set(ecm_find_type "RECOMMENDED")
+ endif()
+
+ # extra-cmake-modules
+ find_package(ECM NO_MODULE QUIET)
+ set_package_properties(ECM PROPERTIES TYPE ${ecm_find_type}
+ URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules"
+ DESCRIPTION "extra modules for CMake, maintained by the KDE project"
+ PURPOSE "Required to find KDE Frameworks components"
+ )
+
+ if (ECM_FOUND)
+ list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
+ endif()
+
+ if (WITH_KDE)
+ find_package(KF5CoreAddons QUIET)
+ set_package_properties(KF5CoreAddons PROPERTIES TYPE REQUIRED
+ URL "http://inqlude.org/libraries/kcoreaddons.html"
+ DESCRIPTION "framework for solving common problems such as caching, randomization, and more"
+ PURPOSE "Required for KDE Frameworks integration"
+ )
+
+ find_package(KF5TextWidgets QUIET)
+ set_package_properties(KF5TextWidgets PROPERTIES TYPE REQUIRED
+ URL "http://inqlude.org/libraries/ktextwidgets.html"
+ DESCRIPTION "framework providing an assortment of widgets for displaying and editing text"
+ PURPOSE "Allows to use extra features provided by KDE Frameworks in input widgets"
+ )
+
+ endif()
+
endif(BUILD_GUI)
if (BUILD_CORE)
find_package(Qt5Script QUIET)
DESCRIPTION "the database support module for Qt5"
)
- # While QCA2 seems to support Qt5, it is not actually co-installable or distinguishable from the Qt4 version...
- # In order to avoid linking against the Qt4 version (which is probably the one installed), disable this for now
- #find_package(QCA2 QUIET)
- #set_package_properties(QCA2 PROPERTIES TYPE RECOMMENDED
- # URL "https://projects.kde.org/projects/kdesupport/qca"
- # DESCRIPTION "Qt Cryptographic Architecture"
- # PURPOSE "Required for encryption support"
- #)
+ find_package(QCA2-QT5)
+ set_package_properties(QCA2-QT5 PROPERTIES TYPE RECOMMENDED
+ URL "https://projects.kde.org/projects/kdesupport/qca"
+ DESCRIPTION "Qt Cryptographic Architecture"
+ PURPOSE "Required for encryption support"
+ )
endif(BUILD_CORE)
)
endif(BUILD_GUI)
+
if (BUILD_CORE)
find_package(QCA2 QUIET)
endif()
-# Various checks
+# Additional compile settings
#####################################################################
-if (NOT ZLIB_FOUND)
- message(STATUS "zlib NOT found, using bundled miniz for compression")
- if (${CMAKE_SIZEOF_VOID_P} EQUAL 4)
- message(STATUS "WARNING: This may be slow on 32 bit systems!")
- endif()
+# This sets -fPIC and friends if required by the installed Qt5 library
+if (USE_QT5 AND Qt5_POSITION_INDEPENDENT_CODE)
+ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+endif()
+
+# Needed to compile with mingw without kde
+if (MINGW AND NOT KDE4_FOUND)
+ add_definitions(-D_WIN32_WINNT=0x0500)
+ message(STATUS "Added _WIN32_WINNT=0x0500 definition for MinGW")
+ # workaround for bug in mingw gcc 4.0
+ add_definitions(-U__STRICT_ANSI__)
endif()
+# Sanitize compiler flags - old versions of KDE set -ansi, which breaks -std=c++11
+if (CMAKE_COMPILER_IS_GNUCXX)
+ string(REPLACE "-ansi" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
+endif()
+
+
+# Setup KDE / KDE Frameworks
+#####################################################################
+
+# We want to do this up here, so we have the necessary variables and defines set before
+# compiling anything
+
if (KDE4_FOUND)
- # We always use external icons for KDE4 support, since we use its iconloader rather than our own
+ # We always use external icons for KDE4 support, since we use its iconloader rather than Qt's
set(EMBED_DATA OFF)
# Better have the compile flags global, even for the core, to avoid problems with linking the mono client
- add_definitions(-DHAVE_KDE ${KDE4_DEFINITIONS})
+ add_definitions(-DHAVE_KDE -DHAVE_KDE4 ${KDE4_DEFINITIONS})
+ set(WITH_KDE4 TRUE)
+endif()
+
+if (USE_QT5 AND WITH_KDE)
+ # If KDE Frameworks are present, they're most probably providing Qt5 integration including icon loading
+ set(EMBED_DATA OFF)
+
+ include(KDEInstallDirs)
+ include(KDECompilerSettings)
+ include(KDECMakeSettings)
+
+ add_definitions(-DHAVE_KDE -DHAVE_KF5)
+ set(WITH_KF5 TRUE)
+endif()
+
+# This needs to come after setting up KDE integration, so we can use KDE-specific paths
+include(QuasselInstallDirs)
+
+# Various config-dependent checks and settings
+#####################################################################
+
+if (NOT ZLIB_FOUND)
+ message(STATUS "zlib NOT found, using bundled miniz for compression")
+ if (${CMAKE_SIZEOF_VOID_P} EQUAL 4)
+ message(STATUS "WARNING: This may be slow on 32 bit systems!")
+ endif()
endif()
# Check for SSL support in Qt
# As there's no easy way to get Qt's configuration in particular for Qt5, let's just compile
# a small test program checking the defines. This works for both Qt4 and Qt5.
cmake_push_check_state(RESET)
-if (Qt5_POSITION_INDEPENDENT_CODE)
- set(CMAKE_POSITION_INDEPENDENT_CODE ON)
-endif()
set(CMAKE_REQUIRED_INCLUDES ${QT_INCLUDES} ${Qt5Core_INCLUDE_DIRS})
check_cxx_source_compiles("
#include \"qglobal.h\"
add_feature_info("Qt Linguist Tools" QT_LCONVERT_EXECUTABLE "Translation support for Quassel")
-# Various settings
-##################
+if (EMBED_DATA)
+ message(STATUS "Embedding data files into the binary")
+else()
+ message(STATUS "Installing data files separately")
+endif()
+
+if (INDICATEQT_FOUND)
+ add_definitions(-DXDG_APPS_INSTALL_DIR=${CMAKE_INSTALL_APPDIR})
+endif()
-# needed to compile with mingw without kde
-if (MINGW AND NOT KDE4_FOUND)
- add_definitions(-D_WIN32_WINNT=0x0500)
- message(STATUS "Added _WIN32_WINNT=0x0500 definition for MinGW")
-# workaround for bug in mingw gcc 4.0
- add_definitions(-U__STRICT_ANSI__)
+if (NOT WIN32)
+ check_function_exists(umask HAVE_UMASK)
+ if(HAVE_UMASK)
+ add_definitions(-DHAVE_UMASK)
+ endif(HAVE_UMASK)
endif()
-# Now set up install locations; those are set by KDE if integration is enabled
-if(NOT KDE4_FOUND)
- if(WIN32)
- set(BIN_INSTALL_DIR ${CMAKE_INSTALL_PREFIX} CACHE FILEPATH "Install path for binaries")
- set(DATA_INSTALL_DIR $ENV{APPDATA}/quassel-irc.org/share/apps CACHE FILEPATH "Install path for data files")
- set(ICON_INSTALL_DIR $ENV{APPDATA}/quassel-irc.org/share/icons CACHE FILEPATH "Global icon install path")
- set(XDG_APPS_INSTALL_DIR $ENV{APPDATA}/quassel-irc.org/share/applications CACHE FILEPATH "Install path for .desktop files")
- else(WIN32)
- set(BIN_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/bin CACHE FILEPATH "Install path for binaries")
- set(DATA_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/apps CACHE FILEPATH "Install path for data files")
- set(ICON_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/icons CACHE FILEPATH "Global icon install path")
- set(XDG_APPS_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/applications CACHE FILEPATH "Install path for .desktop files")
- endif(WIN32)
+
+# Windows-specific stuff
+#####################################################################
+
+if (WIN32)
+ link_libraries(imm32 winmm dbghelp Secur32) # missing by default :/
+ if (MSVC)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /DNOMINMAX")
+ set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBUGINFO "/debug /INCREMENTAL:YES /NODEFAULTLIB:libcmt /DEFAULTLIB:msvcrt")
+ set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/debug /INCREMENTAL:YES /NODEFAULTLIB:libcmt")
+ set(CMAKE_EXE_LINKER_FLAGS_DEBUGFULL "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
+ link_libraries(Version dwmapi shlwapi)
+ if (USE_QT5)
+ set(QT_QTMAIN_LIBRARY Qt5::WinMain)
+ endif()
+ endif()
+ if(HAVE_SSL AND STATIC)
+ find_package(OpenSSL REQUIRED)
+ link_libraries(${OPENSSL_LIBRARIES} ${OPENSSL_EAY_LIBRARIES})
+ endif()
endif()
-if(EMBED_DATA)
- message(STATUS "Embedding data files into the binary")
-else(EMBED_DATA)
- message(STATUS "Installing data files separately")
-endif(EMBED_DATA)
-# RPATH needs to be set correctly
-# Do this down here, since otherwise KDE wants to handle it itself, and fails
-set(CMAKE_INSTALL_RPATH_USE_LINK_PATH 1)
-set(CMAKE_BUILD_WITH_INSTALL_RPATH 1)
+# Static builds (very much non-portable, so don't use -DSTATIC
+# unless you know what you do!)
+#####################################################################
-# Set global buildflags
-# This is very much non-portable, so don't use -DSTATIC until you know what
-# you do.
if(STATIC AND CMAKE_COMPILER_IS_GNUCXX)
- set(CMAKE_CXX_FLAGS "-static-libgcc ${CMAKE_CXX_FLAGS}")
- link_directories(${CMAKE_BINARY_DIR}/staticlibs) # override dynamic libs
- if(HAVE_SSL)
- set(QUASSEL_SSL_LIBRARIES ssl crypto) # these miss in static builds
- endif(HAVE_SSL)
-endif(STATIC AND CMAKE_COMPILER_IS_GNUCXX)
-
-if(WIN32)
- link_libraries(imm32 winmm dbghelp Secur32) # missing by default :/
- if(MSVC)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /DNOMINMAX")
- set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBUGINFO "/debug /INCREMENTAL:YES /NODEFAULTLIB:libcmt /DEFAULTLIB:msvcrt")
- set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/debug /INCREMENTAL:YES /NODEFAULTLIB:libcmt")
- set(CMAKE_EXE_LINKER_FLAGS_DEBUGFULL "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
- link_libraries(Version dwmapi shlwapi)
- if(USE_QT5)
- set(QT_QTMAIN_LIBRARY Qt5::WinMain)
- endif(USE_QT5)
- endif(MSVC)
- if(HAVE_SSL AND STATIC)
- find_package(OpenSSL REQUIRED)
- link_libraries(${OPENSSL_LIBRARIES} ${OPENSSL_EAY_LIBRARIES})
- endif(HAVE_SSL AND STATIC)
-endif(WIN32)
-
-if(INDICATEQT_FOUND)
- add_definitions(-DXDG_APPS_INSTALL_DIR=${XDG_APPS_INSTALL_DIR})
+ set(CMAKE_CXX_FLAGS "-static-libgcc ${CMAKE_CXX_FLAGS}")
+ link_directories(${CMAKE_BINARY_DIR}/staticlibs) # override dynamic libs
+ if (HAVE_SSL)
+ set(QUASSEL_SSL_LIBRARIES ssl crypto) # these miss in static builds
+ endif()
endif()
-if(NOT WIN32)
- check_function_exists(umask HAVE_UMASK)
- if(HAVE_UMASK)
- add_definitions(-DHAVE_UMASK)
- endif(HAVE_UMASK)
-endif(NOT WIN32)
# Generate version information from Git
+#####################################################################
+
include(GetGitRevisionDescription)
get_git_head_revision(GIT_REFSPEC GIT_HEAD)
git_describe(GIT_DESCRIBE --long)
# Sanitize things if we're not in a Git repo
-if(NOT GIT_HEAD OR NOT GIT_DESCRIBE)
+if (NOT GIT_HEAD OR NOT GIT_DESCRIBE)
set(GIT_HEAD "")
set(GIT_DESCRIBE "")
endif()
configure_file(version.h.in ${CMAKE_BINARY_DIR}/version.h @ONLY)
+# Prepare the build
+#####################################################################
+
# These variables will be added to the main targets (CORE, QTCLIENT, MONO)
set(COMMON_DEPS ${RC_WIN32})
set(CORE_DEPS )
add_subdirectory(pics)
add_subdirectory(po)
+
# Set up and display feature summary
#####################################################################
# Finally, compile the sources
# We want this after displaying the feature summary to avoid ugly
-# CMake backtraces in case a required Qt5 modules misses
+# CMake backtraces in case a required Qt5 module is missing
#####################################################################
add_subdirectory(src)
--- /dev/null
+# - Try to find QCA2 (Qt Cryptography Architecture 2) for QT5
+# Once done this will define
+#
+# QCA2-QT5_FOUND - system has QCA2-QT5
+# QCA2-QT5_INCLUDE_DIR - the QCA2-QT5 include directory
+# QCA2-QT5_LIBRARIES - the libraries needed to use QCA2-QT5
+# QCA2-QT5_DEFINITIONS - Compiler switches required for using QCA2-QT5
+#
+# use pkg-config to get the directories and then use these values
+# in the FIND_PATH() and FIND_LIBRARY() calls
+
+# Copyright (c) 2006, Michael Larouche, <michael.larouche@kdemail.net>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+include(FindLibraryWithDebug)
+
+if (QCA2-QT5_INCLUDE_DIR AND QCA2-QT5_LIBRARIES)
+
+ # in cache already
+ set(QCA2-QT5_FOUND TRUE)
+
+else (QCA2-QT5_INCLUDE_DIR AND QCA2-QT5_LIBRARIES)
+
+
+ if (NOT WIN32)
+ find_package(PkgConfig)
+ pkg_check_modules(PC_QCA2-QT5 QUIET qca2-qt5)
+ set(QCA2-QT5_DEFINITIONS ${PC_QCA2-QT5_CFLAGS_OTHER})
+ endif (NOT WIN32)
+
+ find_library_with_debug(QCA2-QT5_LIBRARIES
+ WIN32_DEBUG_POSTFIX d
+ NAMES qca-qt5
+ HINTS ${PC_QCA2-QT5_LIBDIR} ${PC_QCA2-QT5_LIBRARY_DIRS}
+ )
+
+ find_path(QCA2-QT5_INCLUDE_DIR QtCrypto
+ HINTS ${PC_QCA2-QT5_INCLUDEDIR} ${PC_QCA2-QT5_INCLUDE_DIRS}
+ PATH_SUFFIXES QtCrypto)
+
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(QCA2-QT5 DEFAULT_MSG QCA2-QT5_LIBRARIES QCA2-QT5_INCLUDE_DIR)
+
+ mark_as_advanced(QCA2-QT5_INCLUDE_DIR QCA2-QT5_LIBRARIES)
+
+endif (QCA2-QT5_INCLUDE_DIR AND QCA2-QT5_LIBRARIES)
--- /dev/null
+# This file sets up install locations for Quassel
+#
+# (C) 2015 by the Quassel Project <devel@quassel-irc.org>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+
+# Setup install locations
+#####################################################################
+
+# We support the CMake standard variables (CMAKE_INSTALL_<TYPE>_DIR),
+# which can be overridden on the command line. If KDE integration is enabled,
+# we make use of its settings.
+
+if (NOT WITH_KDE)
+ if (WIN32)
+ # On Windows, we have to guess good paths
+ # We must check if the variables are already defined on the command line
+ if (NOT DEFINED CMAKE_INSTALL_BINDIR)
+ set(CMAKE_INSTALL_BINDIR "${CMAKE_INSTALL_PREFIX}" CACHE PATH "Install path for binaries")
+ endif()
+ if (NOT DEFINED CMAKE_INSTALL_DATADIR)
+ set(CMAKE_INSTALL_DATADIR "$ENV{APPDATA}/quassel-irc.org/share/apps" CACHE PATH "Install path for data files")
+ endif()
+ if (NOT DEFINED CMAKE_INSTALL_ICONDIR)
+ set(CMAKE_INSTALL_ICONDIR "$ENV{APPDATA}/quassel-irc.org/share/icons" CACHE PATH "Install path for icons")
+ endif()
+ if (NOT DEFINED CMAKE_INSTALL_APPDIR)
+ set(CMAKE_INSTALL_APPDIR "$ENV{APPDATA}/quassel-irc.org/share/applications" CACHE PATH "Install path for .desktop files")
+ endif()
+ else()
+ # This sets the standard variables; however it doesn't know about icons and apps
+ include(GNUInstallDirs)
+
+ # Special treatment for paths relative to DATAROOTDIR, as found in GNUInstallDirs
+ if (NOT CMAKE_INSTALL_ICONDIR)
+ set(CMAKE_INSTALL_ICONDIR "" CACHE PATH "Install path for icons")
+ set(CMAKE_INSTALL_ICONDIR "${CMAKE_INSTALL_DATAROOTDIR}/icons")
+ endif()
+ if (NOT CMAKE_INSTALL_APPDIR)
+ set(CMAKE_INSTALL_APPDIR "" CACHE PATH "Install path for .desktop files")
+ set(CMAKE_INSTALL_APPDIR "${CMAKE_INSTALL_DATAROOTDIR}/applications")
+ endif()
+ endif()
+else()
+ if (WITH_KDE4)
+ # FindKDE4Internal.cmake sets its own set of variables, however with deprecated names
+ if (NOT DEFINED CMAKE_INSTALL_BINDIR)
+ set(CMAKE_INSTALL_BINDIR "${BIN_INSTALL_DIR}" CACHE PATH "Install path for binaries")
+ endif()
+ if (NOT DEFINED CMAKE_INSTALL_DATADIR)
+ set(CMAKE_INSTALL_DATADIR "${DATA_INSTALL_DIR}" CACHE PATH "Install path for data files")
+ endif()
+ if (NOT DEFINED CMAKE_INSTALL_ICONDIR)
+ set(CMAKE_INSTALL_ICONDIR "${ICON_INSTALL_DIR}" CACHE PATH "Install path for icons")
+ endif()
+ if (NOT DEFINED CMAKE_INSTALL_APPDIR)
+ set(CMAKE_INSTALL_APPDIR "${XDG_APPS_INSTALL_DIR}" CACHE PATH "Install path for .desktop files")
+ endif()
+ endif()
+
+ # KF5 does the correct thing, so we don't need to do anything
+ # We have already included KDEInstallDirs at this point.
+endif()
if (BUILD_GUI)
if (KDE4_FOUND OR (UNIX AND NOT APPLE))
if (WANT_QTCLIENT)
- install(FILES quasselclient.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
+ install(FILES quasselclient.desktop DESTINATION ${CMAKE_INSTALL_APPDIR})
endif()
if (WANT_MONO)
- install(FILES quassel.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
+ install(FILES quassel.desktop DESTINATION ${CMAKE_INSTALL_APPDIR})
endif()
if (KDE4_FOUND)
- install(FILES quassel.notifyrc DESTINATION ${DATA_INSTALL_DIR}/quassel)
+ install(FILES quassel.notifyrc DESTINATION ${CMAKE_INSTALL_DATADIR}/quassel)
endif()
endif()
if (EMBED_DATA)
set(CLIENT_RCS ${CLIENT_RCS} ${CMAKE_CURRENT_SOURCE_DIR}/data.qrc PARENT_SCOPE)
else()
- install(FILES networks.ini DESTINATION ${DATA_INSTALL_DIR}/quassel)
- install(DIRECTORY stylesheets DESTINATION ${DATA_INSTALL_DIR}/quassel)
+ install(FILES networks.ini DESTINATION ${CMAKE_INSTALL_DATADIR}/quassel)
+ install(DIRECTORY stylesheets DESTINATION ${CMAKE_INSTALL_DATADIR}/quassel)
endif()
if (NOT WIN32)
- install(DIRECTORY scripts DESTINATION ${DATA_INSTALL_DIR}/quassel USE_SOURCE_PERMISSIONS)
+ install(DIRECTORY scripts DESTINATION ${CMAKE_INSTALL_DATADIR}/quassel USE_SOURCE_PERMISSIONS)
endif()
endif()
TryExec=quassel
Exec=quassel
Categories=Qt;Network;Chat;IRCClient;
+X-DBUS-ServiceName=org.quassel-irc.quassel
TryExec=quasselclient
Exec=quasselclient
Categories=Qt;Network;Chat;IRCClient;
+X-DBUS-ServiceName=org.quassel-irc.quasselclient
# Install icons
-# We put them in DATA_INSTALL_DIR rather than ICON_INSTALL_DIR, to avoid
-# polluting the global namespace and to allow overriding
+#
+# We put the bundled oxygen icon theme in DATADIR rather than ICONDIR,
+# in order to avoid conflicts. As we add this directory to XDG_DATA_DIRS at runtime,
+# the bundled theme will be found by Qt only if there is no oxygen theme installed
+# in system directories.
+#
+# The hicolor folder contains icons vital for the Quassel UI (such as in the channel and nick
+# lists). It is installed into the system icon directory (in order to allow overriding) and
+# additionally always embedded as a fallback resource.
+
+if (WANT_MONO OR WANT_QTCLIENT)
+ set(ICON_RCS ${CMAKE_CURRENT_SOURCE_DIR}/hicolor.qrc) # always embed those
+
+ if (EMBED_DATA)
+ if (WITH_OXYGEN)
+ message(STATUS "Embedding bundled Oxygen icons")
+ set(ICON_RCS ${ICON_RCS} ${CMAKE_CURRENT_SOURCE_DIR}/oxygen.qrc)
+ endif()
+ else()
+ install(DIRECTORY hicolor DESTINATION ${CMAKE_INSTALL_ICONDIR})
+ if (WITH_OXYGEN)
+ message(STATUS "Installing bundled Oxygen icons")
+ install(DIRECTORY oxygen DESTINATION ${CMAKE_INSTALL_DATADIR}/quassel/icons)
+ endif()
+ endif()
+
+ if (NOT WITH_OXYGEN)
+ message(STATUS "Not installing bundled Oxygen icons")
+ endif()
-if(WANT_MONO OR WANT_QTCLIENT)
-
- # Figure out if we want to install KDE's icons
- # Starting with KDE 4.3, they shouldn't be needed anymore
- set(INSTALL_OXY true)
- string(TOUPPER ${WITH_OXYGEN} OXY_UPPER)
- if(NOT OXY_UPPER)
- set(INSTALL_OXY false)
- elseif(OXY_UPPER MATCHES "AUTO")
- if(HAVE_KDE)
- if(KDE_VERSION VERSION_GREATER 4.2.99)
- set(INSTALL_OXY false)
- endif(KDE_VERSION VERSION_GREATER 4.2.99)
- endif(HAVE_KDE)
- endif(NOT OXY_UPPER)
-
- if(INSTALL_OXY)
- message(STATUS "Installing Oxygen icons")
- else(INSTALL_OXY)
- message(STATUS "Not installing Oxygen icons")
- endif(INSTALL_OXY)
-
- if(EMBED_DATA)
- set(ICON_RCS ${CMAKE_CURRENT_SOURCE_DIR}/hicolor.qrc ${CMAKE_CURRENT_SOURCE_DIR}/oxygen.qrc)
- if(INSTALL_OXY)
- set(ICON_RCS ${ICON_RCS} ${CMAKE_CURRENT_SOURCE_DIR}/oxygen_kde.qrc)
- endif(INSTALL_OXY)
set(CLIENT_RCS ${CLIENT_RCS} ${ICON_RCS} PARENT_SCOPE)
- else(EMBED_DATA)
- install(DIRECTORY hicolor DESTINATION ${ICON_INSTALL_DIR})
- install(DIRECTORY oxygen DESTINATION ${DATA_INSTALL_DIR}/quassel/icons)
- if(INSTALL_OXY)
- install(DIRECTORY oxygen_kde/ DESTINATION ${DATA_INSTALL_DIR}/quassel/icons/oxygen)
- endif(INSTALL_OXY)
- endif(EMBED_DATA)
-endif(WANT_MONO OR WANT_QTCLIENT)
+endif()
# Application icon
-# cmake-2.6.2 can't handle nested conditions
-# if((UNIX AND NOT APPLE) OR HAVE_KDE)
-if(HAVE_KDE OR UNIX)
- if(HAVE_KDE OR NOT APPLE)
-
- install(FILES oxygen_kde/48x48/apps/quassel.png DESTINATION ${ICON_INSTALL_DIR}/hicolor/48x48/apps)
- if(CMAKE_INSTALL_PREFIX STREQUAL "/usr")
- install(FILES oxygen_kde/48x48/apps/quassel.png DESTINATION /usr/share/pixmaps)
- endif(CMAKE_INSTALL_PREFIX STREQUAL "/usr")
-
-# endif((UNIX AND NOT APPLE) OR HAVE_KDE)
- endif(HAVE_KDE OR NOT APPLE)
-endif(HAVE_KDE OR UNIX)
+if (HAVE_KDE OR (UNIX AND NOT APPLE))
+ install(FILES hicolor/48x48/apps/quassel.png DESTINATION ${CMAKE_INSTALL_ICONDIR}/hicolor/48x48/apps)
+ if (CMAKE_INSTALL_PREFIX STREQUAL "/usr")
+ install(FILES hicolor/48x48/apps/quassel.png DESTINATION /usr/share/pixmaps)
+ endif()
+endif()
-The icons found in oxygen and oxygen_kde are a stripped version of the Oxygen
+The icons found in the oxygen directory are a stripped version of the Oxygen
icon theme, part of KDE4, as found in KDE's svn. We have removed the parts of
the theme we don't use in order to conserve space in our own repository and to
make downloads smaller.
The icons found here have been imported from:
-svn://anonsvn.kde.org/home/kde/trunk/KDE/kdebase/runtime/pics/oxygen
-Revision: 1017094
+svn://anonsvn.kde.org/home/kde/trunk/kdesupport/oxygen-icons
+Revision: 1394510
We, the authors of Quassel IRC, do solely distribute this icon set (or parts
thereof), we are not involved in creating/editing/maintaining it. Please see
-the appropriate files, in particular AUTHORS and COPYING, in this directory.
+the appropriate files, in particular AUTHORS and COPYING, in the oxygen directory.
All icon files in this directory were copied verbatim and not modified by us.
We would like to thank the Oxygen team for creating such terrific artwork,
<file>hicolor/16x16/apps/quassel.png</file>
<file>hicolor/22x22/apps/quassel.png</file>
<file>hicolor/32x32/apps/quassel.png</file>
- <file>hicolor/48x48/apps/quassel.png</file>
- <file>hicolor/64x64/apps/quassel.png</file>
- <file>hicolor/128x128/apps/quassel.png</file>
+ <file alias="quassel.png">hicolor/48x48/apps/quassel.png</file>
+ <file alias="quassel-64.png">hicolor/64x64/apps/quassel.png</file>
+ <file alias="quassel-128.png">hicolor/128x128/apps/quassel.png</file>
<file>hicolor/16x16/status/quassel-message.png</file>
<file>hicolor/22x22/status/quassel-message.png</file>
<file>hicolor/32x32/status/quassel-message.png</file>
- <file>hicolor/48x48/status/quassel-message.png</file>
+ <file alias="quassel-message.png">hicolor/48x48/status/quassel-message.png</file>
<file>hicolor/64x64/status/quassel-message.png</file>
<file>hicolor/16x16/status/quassel-inactive.png</file>
<file>hicolor/22x22/status/quassel-inactive.png</file>
<file>hicolor/32x32/status/quassel-inactive.png</file>
- <file>hicolor/48x48/status/quassel-inactive.png</file>
- <file>hicolor/64x64/status/quassel-inactive.png</file>
- <file>hicolor/128x128/status/quassel-inactive.png</file>
+ <file alias="quassel-inactive.png">hicolor/48x48/status/quassel-inactive.png</file>
+ <file alias="quassel-inactive-64.png">hicolor/64x64/status/quassel-inactive.png</file>
+ <file alias="quassel-inactive-128.png">hicolor/128x128/status/quassel-inactive.png</file>
+ <file alias="irc-channel-joined.png">hicolor/16x16/status/irc-channel-joined.png</file>
+ <file alias="irc-channel-parted.png">hicolor/16x16/status/irc-channel-parted.png</file>
+ <file alias="im-user.png">hicolor/16x16/actions/im-user.png</file>
+ <file alias="im-user-away.png">hicolor/16x16/actions/im-user-away.png</file>
+ <file alias="im-user-offline.png">hicolor/16x16/actions/im-user-offline.png</file>
</qresource>
</RCC>
quassel-inactive
quassel-message
-irc-channel-active
-irc-channel-inactive
+irc-channel-joined
+irc-channel-parted
-quassel 16 22 32 48 64 128
+quassel
my $oxygen = shift;
my $source = "../src";
-my $quassel_icons = "oxygen";
-my $output = "oxygen_kde";
-my $qrcfile_quassel = "oxygen.qrc";
-my $qrcfile_kde = "oxygen_kde.qrc";
+my $output = "oxygen";
+my $qrcfile_kde = "oxygen.qrc";
my $extrafile = "import/extra-icons";
my $blacklistfile = "import/blacklisted-icons";
-my %sizes = (
- Desktop => 48,
- Bar => 22,
- MainBar => 22,
- Small => 16,
- Panel => 32,
- Dialog => 22
-);
-
my %req_icons;
+my %found_icons;
my %blacklist;
my %extra;
# First, load the icon blacklist
-# Format: icon-name 16 22 32
open BLACKLIST, "<$blacklistfile" or die "Could not open $blacklistfile\n";
while(<BLACKLIST>) {
s/#.*//;
- next unless my ($name, $sizes) = /([-\w]+)\s+(\d+(?:\s+\d+)*)?/;
- $blacklist{$name} = $sizes;
+ next unless my ($name) = /([-\w]+)\s*/;
+ $blacklist{$name} = 1;
}
close BLACKLIST;
# We now grep the source for things like SmallIcon("fubar") and generate size and name from that
print "Grepping $source for requested icons...\n";
-my @results = `grep -r Icon\\(\\" $source`;
+my @results = `grep -r QIcon::fromTheme\\(\\" $source`;
foreach(@results) {
- next unless my ($type, $name) = /\W+(\s|Desktop|Bar|MainBar|Small|Panel|Dialog)Icon\("([-\w]+)/;
- $type = "Desktop" if $type =~ /\s+/;
- my $size = $sizes{$type};
- $req_icons{$size}{$name} = 1
- unless exists $blacklist{$name} and ($blacklist{$name} == undef or $blacklist{$name} =~ /$size/);
+ next unless my ($name) = /\W+QIcon::fromTheme\(\"([-\w]+)/;
+ $req_icons{$name} = 1
+ unless exists $blacklist{$name};
}
# Add extra icons
open EXTRA, "<$extrafile" or die "Could not open $extrafile\n";
while(<EXTRA>) {
s/#.*//;
- next unless my ($name, $sizes) = /([-\w]+)\s+(\d+(?:\s+\d+)*)/;
- foreach(split /\s+/, $sizes) {
- $req_icons{$_}{$name} = 1;
- }
+ next unless my ($name) = /([-\w]+)\s*/;
+ $req_icons{$name} = 1;
}
close EXTRA;
my %scalables;
print "Copying icons from $oxygen...\n";
-foreach my $size (keys %req_icons) {
- my $sizestr = $size.'x'.$size;
- opendir (BASEDIR, "$oxygen/$sizestr") or die "Could not open dir for size $size\n";
- foreach my $cat (readdir BASEDIR) {
+opendir (BASEDIR, "$oxygen") or die "Could not open oxygen basedir\n";
+foreach my $sizestr (readdir BASEDIR) {
+ next unless $sizestr =~ /\d+x\d+/;
+ opendir (SIZEDIR, "$oxygen/$sizestr") or die "Could not open dir $sizestr\n";
+ foreach my $cat (readdir SIZEDIR) {
next if $cat eq '.' or $cat eq '..';
- system "mkdir -p $output/$sizestr/$cat" and die "Could not create category dir\n";
+ #system "mkdir -p $output/$sizestr/$cat" and die "Could not create category dir\n";
system "mkdir -p $output/scalable/$cat" and die "Could not create category dir\n";
opendir (CATDIR, "$oxygen/$sizestr/$cat") or die "Could not open category dir\n";
foreach my $icon (readdir CATDIR) {
$icon =~ s/\.png$//;
- next unless exists $req_icons{$size}{$icon};
- $scalables{"$cat/$icon"} = 1;
+ next unless exists $req_icons{$icon};
+ $scalables{$cat}{$icon} = 1;
+ system "mkdir -p $output/$sizestr/$cat" and die "Could not create category dir\n";
system "cp -a $oxygen/$sizestr/$cat/$icon.png $output/$sizestr/$cat"
and die "Error while copying file $sizestr/$cat/$icon.png\n";
- # print "Copy: $oxygen/$sizestr/$cat/$icon.png\n";
- delete $req_icons{$size}{$icon};
+ #print "Copy: $oxygen/$sizestr/$cat/$icon.png\n";
+ $found_icons{$icon} = 1;
}
closedir CATDIR;
}
- closedir BASEDIR;
+ closedir SIZEDIR;
}
+closedir BASEDIR;
# Copy scalables
-foreach my $scalable (keys %scalables) {
- system "cp -a $oxygen/scalable/$scalable.svgz $output/scalable/$scalable.svgz";
+foreach my $cat (keys %scalables) {
+ system "mkdir -p $output/scalable/$cat" and die "Could not create category dir\n";
+ foreach my $scalable (keys %scalables{$cat}) {
+ system "cp -a $oxygen/scalable/$cat/$scalable.svgz $output/scalable/$cat/$scalable.svgz";
+ }
}
# Warn if we have still icons left
-foreach my $size (keys %req_icons) {
- foreach my $missing (keys %{ $req_icons{$size} }) {
- print "Warning: Missing icon $missing (size $size)\n";
- }
+foreach my $icon (keys %req_icons) {
+ next if defined $found_icons{$icon};
+ print "Warning: Missing icon $icon\n";
}
# Generate .qrc
my @file_list;
-generate_qrc($quassel_icons, $qrcfile_quassel);
generate_qrc($output, $qrcfile_kde);
+# Copy license etc.
+system "cp $oxygen/AUTHORS $oxygen/CONTRIBUTING $oxygen/COPYING $oxygen/index.theme $output/";
+
print "Done.\n";
########################################################################################
sub push_icon_path {
return unless /\.png$/;
- my $alias = $File::Find::name;
- $alias =~ s,^[^/]*(.*),$1,;
- push @file_list, " <file alias=\"oxygen$alias\">$File::Find::name</file>";
+ push @file_list, " <file>$File::Find::name</file>";
}
<RCC>
<qresource prefix="/icons">
- <file alias="oxygen/16x16/status/irc-channel-inactive.png">oxygen/16x16/status/irc-channel-inactive.png</file>
- <file alias="oxygen/16x16/status/irc-channel-active.png">oxygen/16x16/status/irc-channel-active.png</file>
+ <file>oxygen/22x22/actions/irc-voice.png</file>
+ <file>oxygen/22x22/actions/go-next.png</file>
+ <file>oxygen/22x22/actions/im-user.png</file>
+ <file>oxygen/22x22/actions/im-ban-kick-user.png</file>
+ <file>oxygen/22x22/actions/application-exit.png</file>
+ <file>oxygen/22x22/actions/go-previous.png</file>
+ <file>oxygen/22x22/actions/list-remove-user.png</file>
+ <file>oxygen/22x22/actions/dialog-close.png</file>
+ <file>oxygen/22x22/actions/irc-close-channel.png</file>
+ <file>oxygen/22x22/actions/mail-message-new.png</file>
+ <file>oxygen/22x22/actions/media-playback-start.png</file>
+ <file>oxygen/22x22/actions/document-edit.png</file>
+ <file>oxygen/22x22/actions/show-menu.png</file>
+ <file>oxygen/22x22/actions/go-next-view.png</file>
+ <file>oxygen/22x22/actions/document-open.png</file>
+ <file>oxygen/22x22/actions/dialog-cancel.png</file>
+ <file>oxygen/22x22/actions/edit-delete.png</file>
+ <file>oxygen/22x22/actions/edit-clear-locationbar-ltr.png</file>
+ <file>oxygen/22x22/actions/edit-copy.png</file>
+ <file>oxygen/22x22/actions/list-add-user.png</file>
+ <file>oxygen/22x22/actions/network-disconnect.png</file>
+ <file>oxygen/22x22/actions/network-connect.png</file>
+ <file>oxygen/22x22/actions/irc-remove-operator.png</file>
+ <file>oxygen/22x22/actions/view-refresh.png</file>
+ <file>oxygen/22x22/actions/format-text-color.png</file>
+ <file>oxygen/22x22/actions/irc-unvoice.png</file>
+ <file>oxygen/22x22/actions/im-kick-user.png</file>
+ <file>oxygen/22x22/actions/irc-operator.png</file>
+ <file>oxygen/22x22/actions/configure-shortcuts.png</file>
+ <file>oxygen/22x22/actions/format-list-unordered.png</file>
+ <file>oxygen/22x22/actions/irc-join-channel.png</file>
+ <file>oxygen/22x22/actions/format-fill-color.png</file>
+ <file>oxygen/22x22/actions/help-about.png</file>
+ <file>oxygen/22x22/actions/list-add.png</file>
+ <file>oxygen/22x22/actions/format-text-italic.png</file>
+ <file>oxygen/22x22/actions/go-up.png</file>
+ <file>oxygen/22x22/actions/zoom-in.png</file>
+ <file>oxygen/22x22/actions/edit-clear-locationbar-rtl.png</file>
+ <file>oxygen/22x22/actions/tools-report-bug.png</file>
+ <file>oxygen/22x22/actions/im-user-offline.png</file>
+ <file>oxygen/22x22/actions/view-fullscreen.png</file>
+ <file>oxygen/22x22/actions/format-text-bold.png</file>
+ <file>oxygen/22x22/actions/zoom-out.png</file>
+ <file>oxygen/22x22/actions/flag-blue.png</file>
+ <file>oxygen/22x22/actions/document-encrypt.png</file>
+ <file>oxygen/22x22/actions/go-down.png</file>
+ <file>oxygen/22x22/actions/zoom-original.png</file>
+ <file>oxygen/22x22/actions/edit-rename.png</file>
+ <file>oxygen/22x22/actions/im-user-away.png</file>
+ <file>oxygen/22x22/actions/configure.png</file>
+ <file>oxygen/22x22/actions/format-text-underline.png</file>
+ <file>oxygen/22x22/actions/edit-find.png</file>
+ <file>oxygen/22x22/actions/im-ban-user.png</file>
+ <file>oxygen/22x22/actions/go-previous-view.png</file>
+ <file>oxygen/22x22/devices/network-wired.png</file>
+ <file>oxygen/22x22/apps/quassel.png</file>
+ <file>oxygen/22x22/status/dialog-information.png</file>
+ <file>oxygen/22x22/status/security-low.png</file>
+ <file>oxygen/22x22/status/user-away.png</file>
+ <file>oxygen/22x22/status/security-high.png</file>
+ <file>oxygen/32x32/actions/go-next-view.png</file>
+ <file>oxygen/32x32/actions/go-up.png</file>
+ <file>oxygen/32x32/actions/list-add.png</file>
+ <file>oxygen/32x32/actions/format-fill-color.png</file>
+ <file>oxygen/32x32/actions/go-next.png</file>
+ <file>oxygen/32x32/actions/im-user.png</file>
+ <file>oxygen/32x32/actions/go-previous-view.png</file>
+ <file>oxygen/32x32/actions/edit-copy.png</file>
+ <file>oxygen/32x32/actions/view-refresh.png</file>
+ <file>oxygen/32x32/actions/network-connect.png</file>
+ <file>oxygen/32x32/actions/zoom-out.png</file>
+ <file>oxygen/32x32/actions/im-ban-kick-user.png</file>
+ <file>oxygen/32x32/actions/application-exit.png</file>
+ <file>oxygen/32x32/actions/network-disconnect.png</file>
+ <file>oxygen/32x32/actions/list-remove-user.png</file>
+ <file>oxygen/32x32/actions/im-kick-user.png</file>
+ <file>oxygen/32x32/actions/irc-operator.png</file>
+ <file>oxygen/32x32/actions/edit-rename.png</file>
+ <file>oxygen/32x32/actions/edit-clear-locationbar-rtl.png</file>
+ <file>oxygen/32x32/actions/mail-message-new.png</file>
+ <file>oxygen/32x32/actions/document-edit.png</file>
+ <file>oxygen/32x32/actions/im-ban-user.png</file>
+ <file>oxygen/32x32/actions/document-open.png</file>
+ <file>oxygen/32x32/actions/format-list-unordered.png</file>
+ <file>oxygen/32x32/actions/dialog-cancel.png</file>
+ <file>oxygen/32x32/actions/format-text-italic.png</file>
+ <file>oxygen/32x32/actions/list-add-user.png</file>
+ <file>oxygen/32x32/actions/go-previous.png</file>
+ <file>oxygen/32x32/actions/flag-blue.png</file>
+ <file>oxygen/32x32/actions/irc-remove-operator.png</file>
+ <file>oxygen/32x32/actions/im-user-offline.png</file>
+ <file>oxygen/32x32/actions/view-fullscreen.png</file>
+ <file>oxygen/32x32/actions/configure.png</file>
+ <file>oxygen/32x32/actions/irc-close-channel.png</file>
+ <file>oxygen/32x32/actions/im-user-away.png</file>
+ <file>oxygen/32x32/actions/edit-find.png</file>
+ <file>oxygen/32x32/actions/media-playback-start.png</file>
+ <file>oxygen/32x32/actions/help-about.png</file>
+ <file>oxygen/32x32/actions/configure-shortcuts.png</file>
+ <file>oxygen/32x32/actions/irc-join-channel.png</file>
+ <file>oxygen/32x32/actions/zoom-in.png</file>
+ <file>oxygen/32x32/actions/edit-delete.png</file>
+ <file>oxygen/32x32/actions/irc-voice.png</file>
+ <file>oxygen/32x32/actions/format-text-underline.png</file>
+ <file>oxygen/32x32/actions/go-down.png</file>
+ <file>oxygen/32x32/actions/irc-unvoice.png</file>
+ <file>oxygen/32x32/actions/tools-report-bug.png</file>
+ <file>oxygen/32x32/actions/dialog-close.png</file>
+ <file>oxygen/32x32/actions/format-text-color.png</file>
+ <file>oxygen/32x32/actions/edit-clear-locationbar-ltr.png</file>
+ <file>oxygen/32x32/actions/zoom-original.png</file>
+ <file>oxygen/32x32/actions/format-text-bold.png</file>
+ <file>oxygen/32x32/actions/document-encrypt.png</file>
+ <file>oxygen/32x32/actions/show-menu.png</file>
+ <file>oxygen/32x32/devices/network-wired.png</file>
+ <file>oxygen/32x32/apps/quassel.png</file>
+ <file>oxygen/32x32/status/user-away.png</file>
+ <file>oxygen/32x32/status/dialog-information.png</file>
+ <file>oxygen/32x32/status/security-high.png</file>
+ <file>oxygen/32x32/status/security-low.png</file>
+ <file>oxygen/16x16/actions/edit-delete.png</file>
+ <file>oxygen/16x16/actions/im-user-offline.png</file>
+ <file>oxygen/16x16/actions/view-fullscreen.png</file>
+ <file>oxygen/16x16/actions/im-user.png</file>
+ <file>oxygen/16x16/actions/go-next.png</file>
+ <file>oxygen/16x16/actions/show-menu.png</file>
+ <file>oxygen/16x16/actions/list-add.png</file>
+ <file>oxygen/16x16/actions/edit-clear-locationbar-ltr.png</file>
+ <file>oxygen/16x16/actions/irc-unvoice.png</file>
+ <file>oxygen/16x16/actions/format-text-italic.png</file>
+ <file>oxygen/16x16/actions/dialog-close.png</file>
+ <file>oxygen/16x16/actions/edit-copy.png</file>
+ <file>oxygen/16x16/actions/irc-close-channel.png</file>
+ <file>oxygen/16x16/actions/zoom-out.png</file>
+ <file>oxygen/16x16/actions/irc-join-channel.png</file>
+ <file>oxygen/16x16/actions/format-list-unordered.png</file>
+ <file>oxygen/16x16/actions/zoom-original.png</file>
+ <file>oxygen/16x16/actions/go-next-view.png</file>
+ <file>oxygen/16x16/actions/irc-remove-operator.png</file>
+ <file>oxygen/16x16/actions/tools-report-bug.png</file>
+ <file>oxygen/16x16/actions/configure-shortcuts.png</file>
+ <file>oxygen/16x16/actions/edit-clear-locationbar-rtl.png</file>
+ <file>oxygen/16x16/actions/view-refresh.png</file>
+ <file>oxygen/16x16/actions/format-text-bold.png</file>
+ <file>oxygen/16x16/actions/media-playback-start.png</file>
+ <file>oxygen/16x16/actions/document-encrypt.png</file>
+ <file>oxygen/16x16/actions/format-text-color.png</file>
+ <file>oxygen/16x16/actions/edit-rename.png</file>
+ <file>oxygen/16x16/actions/im-kick-user.png</file>
+ <file>oxygen/16x16/actions/irc-operator.png</file>
+ <file>oxygen/16x16/actions/im-ban-user.png</file>
+ <file>oxygen/16x16/actions/go-previous-view.png</file>
+ <file>oxygen/16x16/actions/format-text-underline.png</file>
+ <file>oxygen/16x16/actions/flag-blue.png</file>
+ <file>oxygen/16x16/actions/network-connect.png</file>
+ <file>oxygen/16x16/actions/format-fill-color.png</file>
+ <file>oxygen/16x16/actions/document-edit.png</file>
+ <file>oxygen/16x16/actions/zoom-in.png</file>
+ <file>oxygen/16x16/actions/go-previous.png</file>
+ <file>oxygen/16x16/actions/configure.png</file>
+ <file>oxygen/16x16/actions/im-ban-kick-user.png</file>
+ <file>oxygen/16x16/actions/application-exit.png</file>
+ <file>oxygen/16x16/actions/document-open.png</file>
+ <file>oxygen/16x16/actions/list-remove-user.png</file>
+ <file>oxygen/16x16/actions/edit-find.png</file>
+ <file>oxygen/16x16/actions/dialog-cancel.png</file>
+ <file>oxygen/16x16/actions/go-down.png</file>
+ <file>oxygen/16x16/actions/list-add-user.png</file>
+ <file>oxygen/16x16/actions/mail-message-new.png</file>
+ <file>oxygen/16x16/actions/help-about.png</file>
+ <file>oxygen/16x16/actions/network-disconnect.png</file>
+ <file>oxygen/16x16/actions/irc-voice.png</file>
+ <file>oxygen/16x16/actions/go-up.png</file>
+ <file>oxygen/16x16/actions/im-user-away.png</file>
+ <file>oxygen/16x16/devices/network-wired.png</file>
+ <file>oxygen/16x16/apps/quassel.png</file>
+ <file>oxygen/16x16/status/security-low.png</file>
+ <file>oxygen/16x16/status/user-away.png</file>
+ <file>oxygen/16x16/status/security-high.png</file>
+ <file>oxygen/16x16/status/dialog-information.png</file>
+ <file>oxygen/64x64/actions/list-add-user.png</file>
+ <file>oxygen/64x64/actions/im-user-away.png</file>
+ <file>oxygen/64x64/actions/configure.png</file>
+ <file>oxygen/64x64/actions/im-user-offline.png</file>
+ <file>oxygen/64x64/actions/go-next.png</file>
+ <file>oxygen/64x64/actions/im-user.png</file>
+ <file>oxygen/64x64/actions/go-up.png</file>
+ <file>oxygen/64x64/actions/im-ban-kick-user.png</file>
+ <file>oxygen/64x64/actions/edit-find.png</file>
+ <file>oxygen/64x64/actions/application-exit.png</file>
+ <file>oxygen/64x64/actions/go-down.png</file>
+ <file>oxygen/64x64/actions/go-previous.png</file>
+ <file>oxygen/64x64/actions/im-ban-user.png</file>
+ <file>oxygen/64x64/actions/im-kick-user.png</file>
+ <file>oxygen/64x64/actions/document-edit.png</file>
+ <file>oxygen/64x64/actions/tools-report-bug.png</file>
+ <file>oxygen/64x64/devices/network-wired.png</file>
+ <file>oxygen/64x64/apps/quassel.png</file>
+ <file>oxygen/64x64/status/security-high.png</file>
+ <file>oxygen/64x64/status/security-low.png</file>
+ <file>oxygen/64x64/status/user-away.png</file>
+ <file>oxygen/64x64/status/dialog-information.png</file>
+ <file>oxygen/128x128/actions/mail-message-new.png</file>
+ <file>oxygen/128x128/actions/im-ban-kick-user.png</file>
+ <file>oxygen/128x128/actions/document-edit.png</file>
+ <file>oxygen/128x128/actions/im-user-offline.png</file>
+ <file>oxygen/128x128/actions/application-exit.png</file>
+ <file>oxygen/128x128/actions/im-user.png</file>
+ <file>oxygen/128x128/actions/go-next.png</file>
+ <file>oxygen/128x128/actions/im-kick-user.png</file>
+ <file>oxygen/128x128/actions/go-down.png</file>
+ <file>oxygen/128x128/actions/list-add-user.png</file>
+ <file>oxygen/128x128/actions/im-ban-user.png</file>
+ <file>oxygen/128x128/actions/go-previous.png</file>
+ <file>oxygen/128x128/actions/configure.png</file>
+ <file>oxygen/128x128/actions/tools-report-bug.png</file>
+ <file>oxygen/128x128/actions/im-user-away.png</file>
+ <file>oxygen/128x128/actions/go-up.png</file>
+ <file>oxygen/128x128/actions/edit-find.png</file>
+ <file>oxygen/128x128/devices/network-wired.png</file>
+ <file>oxygen/128x128/apps/quassel.png</file>
+ <file>oxygen/128x128/status/security-high.png</file>
+ <file>oxygen/128x128/status/security-low.png</file>
+ <file>oxygen/128x128/status/dialog-information.png</file>
+ <file>oxygen/48x48/actions/document-open.png</file>
+ <file>oxygen/48x48/actions/configure-shortcuts.png</file>
+ <file>oxygen/48x48/actions/go-next.png</file>
+ <file>oxygen/48x48/actions/im-user.png</file>
+ <file>oxygen/48x48/actions/flag-blue.png</file>
+ <file>oxygen/48x48/actions/dialog-cancel.png</file>
+ <file>oxygen/48x48/actions/list-add-user.png</file>
+ <file>oxygen/48x48/actions/configure.png</file>
+ <file>oxygen/48x48/actions/edit-find.png</file>
+ <file>oxygen/48x48/actions/irc-join-channel.png</file>
+ <file>oxygen/48x48/actions/edit-clear-locationbar-ltr.png</file>
+ <file>oxygen/48x48/actions/dialog-close.png</file>
+ <file>oxygen/48x48/actions/network-disconnect.png</file>
+ <file>oxygen/48x48/actions/list-add.png</file>
+ <file>oxygen/48x48/actions/irc-voice.png</file>
+ <file>oxygen/48x48/actions/format-list-unordered.png</file>
+ <file>oxygen/48x48/actions/media-playback-start.png</file>
+ <file>oxygen/48x48/actions/tools-report-bug.png</file>
+ <file>oxygen/48x48/actions/go-next-view.png</file>
+ <file>oxygen/48x48/actions/edit-rename.png</file>
+ <file>oxygen/48x48/actions/network-connect.png</file>
+ <file>oxygen/48x48/actions/irc-close-channel.png</file>
+ <file>oxygen/48x48/actions/go-up.png</file>
+ <file>oxygen/48x48/actions/format-text-bold.png</file>
+ <file>oxygen/48x48/actions/zoom-out.png</file>
+ <file>oxygen/48x48/actions/document-encrypt.png</file>
+ <file>oxygen/48x48/actions/im-ban-user.png</file>
+ <file>oxygen/48x48/actions/show-menu.png</file>
+ <file>oxygen/48x48/actions/help-about.png</file>
+ <file>oxygen/48x48/actions/view-refresh.png</file>
+ <file>oxygen/48x48/actions/format-text-italic.png</file>
+ <file>oxygen/48x48/actions/go-previous.png</file>
+ <file>oxygen/48x48/actions/zoom-original.png</file>
+ <file>oxygen/48x48/actions/go-previous-view.png</file>
+ <file>oxygen/48x48/actions/im-kick-user.png</file>
+ <file>oxygen/48x48/actions/edit-clear-locationbar-rtl.png</file>
+ <file>oxygen/48x48/actions/irc-operator.png</file>
+ <file>oxygen/48x48/actions/edit-copy.png</file>
+ <file>oxygen/48x48/actions/format-text-color.png</file>
+ <file>oxygen/48x48/actions/zoom-in.png</file>
+ <file>oxygen/48x48/actions/format-text-underline.png</file>
+ <file>oxygen/48x48/actions/im-ban-kick-user.png</file>
+ <file>oxygen/48x48/actions/application-exit.png</file>
+ <file>oxygen/48x48/actions/list-remove-user.png</file>
+ <file>oxygen/48x48/actions/im-user-offline.png</file>
+ <file>oxygen/48x48/actions/view-fullscreen.png</file>
+ <file>oxygen/48x48/actions/mail-message-new.png</file>
+ <file>oxygen/48x48/actions/go-down.png</file>
+ <file>oxygen/48x48/actions/edit-delete.png</file>
+ <file>oxygen/48x48/actions/format-fill-color.png</file>
+ <file>oxygen/48x48/actions/irc-remove-operator.png</file>
+ <file>oxygen/48x48/actions/irc-unvoice.png</file>
+ <file>oxygen/48x48/actions/document-edit.png</file>
+ <file>oxygen/48x48/actions/im-user-away.png</file>
+ <file>oxygen/48x48/devices/network-wired.png</file>
+ <file>oxygen/48x48/apps/quassel.png</file>
+ <file>oxygen/48x48/status/user-away.png</file>
+ <file>oxygen/48x48/status/dialog-information.png</file>
+ <file>oxygen/48x48/status/security-high.png</file>
+ <file>oxygen/48x48/status/security-low.png</file>
+ <file>oxygen/256x256/devices/network-wired.png</file>
+ <file>oxygen/256x256/apps/quassel.png</file>
</qresource>
</RCC>
Oxygen Icon Theme has been developed by The Oxygen Team.
Art Directors:
-David Vignoni <david@oxygen-icons.org>
Nuno F. Pinheiro <nuno@oxygen-icons.org>
-David J. Miller <miller@oxygen-icons.org>
+David Vignoni <david@oxygen-icons.org>
Naming Coordinator
Jakob Petsovits <jpetso@gmx.at>
Kenneth Wimer <ken@oxygen-icons.org>
Nuno F. Pinheiro <nuno@oxygen-icons.org>
Riccardo Iaconelli <riccardo@oxygen-icons.org>
+David J. Miller <miller@oxygen-icons.org>
Thanks to:
Lee Olson: Contributed drawing used in application-x-bittorent icon.
Marco Aurélio "Coré": Improved audio-input-microphone icon.
Matthias Kretz: Contributed "audio-input-line" device icon.
Mauricio Piacentini <piacentini@kde.org> : game icons mashup
+Erlend Hamberg: "text-x-haskell" mimetype icon.
-If you'd like to help us make Oxygen or contribute in any way please join the irc channel #kde-artists on freenode.net or send a mail to the kde-artists mailing list (artists@kde.org). One of the teeam is almost always online. We'd love to to discuss the possiblity with you :-)
+If you'd like to help us make Oxygen or contribute in any way please join the irc channel #oxygen on freenode.net or send a mail to the kde-artists mailing list (all@oxygen -icons.org) or (nuno@oxygen-icons.org). One of the teeam is almost always online. We'd love to to discuss the possiblity with you :-)
-In order to coordinate the addition of icons to the theme itself, all artists should put their work in a dir labelled Oxygen/ARTIST_NAME (so, mine for instance is Oxygen/Ken/) this allows us to control not only the licensing of the theme but the compatability with the guidelines for creating Oxygen icons.
+In order to coordinate the addition of icons to the theme itself, all external artists should send their work for review to one of the refered emails, they will be reviewd for licensing of the theme and the compatability with the guidelines for creating Oxygen icons.
NOTE:
Contributors should realize that the Oxygen icon theme mantainers can (and probably will) modify, delete, reuse contributed artwork.
The Oxygen Icon Theme
+ Copyright (C) 2007 Nuno Pinheiro <nuno@oxygen-icons.org>
Copyright (C) 2007 David Vignoni <david@icon-king.com>
+ Copyright (C) 2007 David Miller <miller@oxygen-icons.org>
Copyright (C) 2007 Johann Ollivier Lapeyre <johann@oxygen-icons.org>
Copyright (C) 2007 Kenneth Wimer <kwwii@bootsplash.org>
- Copyright (C) 2007 Nuno Fernades Pinheiro <nf.pinheiro@gmail.com>
Copyright (C) 2007 Riccardo Iaconelli <riccardo@oxygen-icons.org>
- Copyright (C) 2007 David Miller <miller@oxygen-icons.org>
+
and others
This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
+ modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3 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.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU Library General Public
+ You should have received a copy of the GNU Lesser General Public
License along with this library. If not, see <http://www.gnu.org/licenses/>.
Clarification:
the use of elements of this art library in a GUI.
kde-artists [at] kde.org
+
+-----
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
--- /dev/null
+[Icon Theme]
+Name=Oxygen
+Name[bs]=Oxygen
+Name[ca]=Oxygen
+Name[ca@valencia]=Oxygen
+Name[cs]=Oxygen
+Name[da]=Oxygen
+Name[de]=Oxygen
+Name[el]=Oxygen
+Name[en_GB]=Oxygen
+Name[es]=Oxígeno
+Name[et]=Oxygen
+Name[eu]=Oxygen
+Name[fa]=اکسیژن
+Name[fi]=Oxygen
+Name[fr]=Oxygen
+Name[gl]=Oxygen
+Name[hu]=Oxygen
+Name[it]=Oxygen
+Name[kk]=Oxygen
+Name[ko]=Oxygen
+Name[mr]=ऑक्सीजन
+Name[nb]=Oxygen
+Name[nds]=Oxygen
+Name[nl]=Oxygen
+Name[pl]=Tlen
+Name[pt]=Oxygen
+Name[pt_BR]=Oxygen
+Name[ro]=Oxygen
+Name[ru]=Oxygen
+Name[sk]=Oxygen
+Name[sl]=Kisik
+Name[sr]=Кисеоник
+Name[sr@ijekavian]=Кисеоник
+Name[sr@ijekavianlatin]=Kiseonik
+Name[sr@latin]=Kiseonik
+Name[sv]=Oxygen
+Name[tr]=Oxygen
+Name[ug]=ئوكسېگىن
+Name[uk]=Oxygen
+Name[x-test]=xxOxygenxx
+Name[zh_CN]=Oxygen(氧气)
+Name[zh_TW]=Oxygen
+
+Comment=Oxygen Team
+Comment[bs]=Oxygen tim
+Comment[ca]=Equip de l'Oxygen
+Comment[ca@valencia]=Equip de l'Oxygen
+Comment[cs]=Tým Oxygen
+Comment[da]=Oxygen-holdet
+Comment[de]=Oxygen-Team
+Comment[el]=Ομάδα Oxygen
+Comment[en_GB]=Oxygen Team
+Comment[es]=Equipo Oxígeno
+Comment[et]=Oxygeni meeskond
+Comment[eu]=Oxygen taldea
+Comment[fa]=تیم اکسیژن
+Comment[fi]=Oxygenin kehitysryhmä
+Comment[fr]=Équipe Oxygen
+Comment[gl]=Equipo de Oxygen
+Comment[hu]=Oxygen csapat
+Comment[it]=La squadra di Oxygen
+Comment[kk]=Oxygen тобы
+Comment[ko]=Oxygen 팀
+Comment[mr]=ऑक्सीजन टीम
+Comment[nb]=Oxygen-laget
+Comment[nds]=Oxygen-Koppel
+Comment[nl]=Oxygen-team
+Comment[pl]=Zespół Oxygen
+Comment[pt]=Equipa do Oxygen
+Comment[pt_BR]=Equipe do Oxygen
+Comment[ro]=Echipa Oxygen
+Comment[ru]=Команда Oxygen
+Comment[sk]=Tím Oxygen
+Comment[sl]=Ekipa Kisika
+Comment[sr]=Тим Кисеоника
+Comment[sr@ijekavian]=Тим Кисеоника
+Comment[sr@ijekavianlatin]=Tim Kiseonika
+Comment[sr@latin]=Tim Kiseonika
+Comment[sv]=Oxygen-gruppen
+Comment[tr]=Oxygen Takımı
+Comment[ug]=ئوكسېگىن ئەترىتى
+Comment[uk]=Команда Oxygen
+Comment[x-test]=xxOxygen Teamxx
+Comment[zh_CN]=Oxygen 团队
+Comment[zh_TW]=Oxygen 開發團隊
+
+DisplayDepth=32
+
+Inherits=hicolor
+
+Example=folder
+
+LinkOverlay=link
+LockOverlay=lockoverlay
+ShareOverlay=share
+ZipOverlay=zip
+
+DesktopDefault=48
+DesktopSizes=16,22,32,48,64,128,256
+ToolbarDefault=22
+ToolbarSizes=16,22,32,48
+MainToolbarDefault=22
+MainToolbarSizes=16,22,32,48
+SmallDefault=16
+SmallSizes=16,22,32,48
+PanelDefault=32
+PanelSizes=16,22,32,48,64,128,256
+DialogDefault=32
+DialogSizes=16,22,32,48,64,128,256
+
+Directories=8x8/emblems,16x16/actions,16x16/animations,16x16/apps,16x16/categories,16x16/devices,16x16/emblems,16x16/emotes,16x16/intl,16x16/mimetypes,16x16/places,16x16/status,16x16/special,22x22/actions,22x22/animations,22x22/apps,22x22/categories,22x22/devices,22x22/emblems,22x22/emotes,22x22/intl,22x22/mimetypes,22x22/places,22x22/status,22x22/special,32x32/actions,32x32/animations,32x32/apps,32x32/categories,32x32/devices,32x32/emblems,32x32/emotes,32x32/intl,32x32/mimetypes,32x32/places,32x32/status,48x48/actions,48x48/animations,48x48/apps,48x48/categories,48x48/devices,48x48/emblems,48x48/emotes,48x48/intl,48x48/mimetypes,48x48/places,48x48/status,64x64/actions,64x64/animations,64x64/apps,64x64/categories,64x64/devices,64x64/emblems,64x64/emotes,64x64/intl,64x64/mimetypes,64x64/places,64x64/status,128x128/actions,128x128/animations,128x128/apps,128x128/categories,128x128/devices,128x128/emblems,128x128/emotes,128x128/intl,128x128/mimetypes,128x128/places,128x128/status,256x256/actions,256x256/apps,256x256/categories,256x256/devices,256x256/mimetypes,256x256/places,256x256/status
+
+[8x8/emblems]
+Size=8
+Context=Emblems
+Type=Threshold
+
+[16x16/actions]
+Size=16
+Context=Actions
+Type=Threshold
+
+[16x16/animations]
+Size=16
+Context=Animations
+Type=Threshold
+
+[16x16/apps]
+Size=16
+Context=Applications
+Type=Threshold
+
+[16x16/categories]
+Size=16
+Context=Categories
+Type=Threshold
+
+[16x16/devices]
+Size=16
+Context=Devices
+Type=Threshold
+
+[16x16/emblems]
+Size=16
+Context=Emblems
+Type=Threshold
+
+[16x16/emotes]
+Size=16
+Context=Emotes
+Type=Threshold
+
+[16x16/intl]
+Size=16
+Context=International
+Type=Threshold
+
+[16x16/mimetypes]
+Size=16
+Context=MimeTypes
+Type=Threshold
+
+[16x16/places]
+Size=16
+Context=Places
+Type=Threshold
+
+[16x16/status]
+Size=16
+Context=Status
+Type=Threshold
+
+[16x16/special]
+Size=16
+Context=Actions
+Type=Threshold
+
+[22x22/actions]
+Size=22
+Context=Actions
+Type=Threshold
+
+[22x22/animations]
+Size=22
+Context=Animations
+Type=Threshold
+
+[22x22/apps]
+Size=22
+Context=Applications
+Type=Threshold
+
+[22x22/categories]
+Size=22
+Context=Categories
+Type=Threshold
+
+[22x22/devices]
+Size=22
+Context=Devices
+Type=Threshold
+
+[22x22/emblems]
+Size=22
+Context=Emblems
+Type=Threshold
+
+[22x22/emotes]
+Size=22
+Context=Emotes
+Type=Threshold
+
+[22x22/intl]
+Size=22
+Context=International
+Type=Threshold
+
+[22x22/mimetypes]
+Size=22
+Context=MimeTypes
+Type=Threshold
+
+[22x22/places]
+Size=22
+Context=Places
+Type=Threshold
+
+[22x22/status]
+Size=22
+Context=Status
+Type=Threshold
+
+[22x22/special]
+Size=22
+Context=Actions
+Type=Threshold
+
+[32x32/actions]
+Size=32
+Context=Actions
+Type=Threshold
+
+[32x32/animations]
+Size=32
+Context=Animations
+Type=Threshold
+
+[32x32/apps]
+Size=32
+Context=Applications
+Type=Threshold
+
+[32x32/categories]
+Size=32
+Context=Categories
+Type=Threshold
+
+[32x32/devices]
+Size=32
+Context=Devices
+Type=Threshold
+
+[32x32/emblems]
+Size=32
+Context=Emblems
+Type=Threshold
+
+[32x32/emotes]
+Size=32
+Context=Emotes
+Type=Threshold
+
+[32x32/intl]
+Size=32
+Context=International
+Type=Threshold
+
+[32x32/mimetypes]
+Size=32
+Context=MimeTypes
+Type=Threshold
+
+[32x32/places]
+Size=32
+Context=Places
+Type=Threshold
+
+[32x32/status]
+Size=32
+Context=Status
+Type=Threshold
+
+[48x48/actions]
+Size=48
+Context=Actions
+Type=Threshold
+
+[48x48/animations]
+Size=48
+Context=Animations
+Type=Threshold
+
+[48x48/apps]
+Size=48
+Context=Applications
+Type=Threshold
+
+[48x48/categories]
+Size=48
+Context=Categories
+Type=Threshold
+
+[48x48/devices]
+Size=48
+Context=Devices
+Type=Threshold
+
+[48x48/emblems]
+Size=48
+Context=Emblems
+Type=Threshold
+
+[48x48/emotes]
+Size=48
+Context=Emotes
+Type=Threshold
+
+[48x48/intl]
+Size=48
+Context=International
+Type=Threshold
+
+[48x48/mimetypes]
+Size=48
+Context=MimeTypes
+Type=Threshold
+
+[48x48/places]
+Size=48
+Context=Places
+Type=Threshold
+
+[48x48/status]
+Size=48
+Context=Status
+Type=Threshold
+
+[64x64/actions]
+Size=64
+Context=Actions
+Type=Threshold
+
+[64x64/animations]
+Size=64
+Context=Animations
+Type=Threshold
+
+[64x64/apps]
+Size=64
+Context=Applications
+Type=Threshold
+
+[64x64/categories]
+Size=64
+Context=Categories
+Type=Threshold
+
+[64x64/devices]
+Size=64
+Context=Devices
+Type=Threshold
+
+[64x64/emblems]
+Size=64
+Context=Emblems
+Type=Threshold
+
+[64x64/emotes]
+Size=64
+Context=Emotes
+Type=Threshold
+
+[64x64/intl]
+Size=64
+Context=International
+Type=Threshold
+
+[64x64/mimetypes]
+Size=64
+Context=MimeTypes
+Type=Threshold
+
+[64x64/places]
+Size=64
+Context=Places
+Type=Threshold
+
+[64x64/status]
+Size=64
+Context=Status
+Type=Threshold
+
+[128x128/actions]
+Size=128
+Context=Actions
+Type=Threshold
+
+[128x128/animations]
+Size=128
+Context=Animations
+Type=Threshold
+
+[128x128/apps]
+Size=128
+Context=Applications
+Type=Threshold
+
+[128x128/categories]
+Size=128
+Context=Categories
+Type=Threshold
+
+[128x128/devices]
+Size=128
+Context=Devices
+Type=Threshold
+
+[128x128/emblems]
+Size=128
+Context=Emblems
+Type=Threshold
+
+[128x128/emotes]
+Size=128
+Context=Emotes
+Type=Threshold
+
+[128x128/categories]
+Size=128
+Context=Categories
+Type=Threshold
+
+[128x128/intl]
+Size=128
+Context=International
+Type=Threshold
+
+[128x128/mimetypes]
+Size=128
+Context=MimeTypes
+Type=Threshold
+
+[128x128/places]
+Size=128
+Context=Places
+Type=Threshold
+
+[128x128/status]
+Size=128
+Context=Status
+Type=Threshold
+
+[256x256/actions]
+Size=256
+Context=Actions
+Type=Threshold
+
+[256x256/apps]
+Size=256
+Context=Applications
+Type=Threshold
+
+[256x256/categories]
+Size=256
+Context=Categories
+Type=Threshold
+
+[256x256/devices]
+Size=256
+Context=Devices
+Type=Threshold
+
+[256x256/mimetypes]
+Size=256
+Context=MimeTypes
+Type=Threshold
+
+[256x256/places]
+Size=256
+Context=Places
+Type=Threshold
+
+[256x256/status]
+Size=256
+Context=Status
+Type=Threshold
+++ /dev/null
-<RCC>
- <qresource prefix="/icons">
- <file alias="oxygen/16x16/actions/im-kick-user.png">oxygen_kde/16x16/actions/im-kick-user.png</file>
- <file alias="oxygen/16x16/actions/im-ban-kick-user.png">oxygen_kde/16x16/actions/im-ban-kick-user.png</file>
- <file alias="oxygen/16x16/actions/irc-operator.png">oxygen_kde/16x16/actions/irc-operator.png</file>
- <file alias="oxygen/16x16/actions/edit-copy.png">oxygen_kde/16x16/actions/edit-copy.png</file>
- <file alias="oxygen/16x16/actions/irc-voice.png">oxygen_kde/16x16/actions/irc-voice.png</file>
- <file alias="oxygen/16x16/actions/im-ban-user.png">oxygen_kde/16x16/actions/im-ban-user.png</file>
- <file alias="oxygen/16x16/actions/edit-clear-locationbar-rtl.png">oxygen_kde/16x16/actions/edit-clear-locationbar-rtl.png</file>
- <file alias="oxygen/16x16/actions/format-fill-color.png">oxygen_kde/16x16/actions/format-fill-color.png</file>
- <file alias="oxygen/16x16/actions/dialog-cancel.png">oxygen_kde/16x16/actions/dialog-cancel.png</file>
- <file alias="oxygen/16x16/actions/format-text-bold.png">oxygen_kde/16x16/actions/format-text-bold.png</file>
- <file alias="oxygen/16x16/actions/flag-blue.png">oxygen_kde/16x16/actions/flag-blue.png</file>
- <file alias="oxygen/16x16/actions/im-user.png">oxygen_kde/16x16/actions/im-user.png</file>
- <file alias="oxygen/16x16/actions/go-next-view.png">oxygen_kde/16x16/actions/go-next-view.png</file>
- <file alias="oxygen/16x16/actions/edit-find.png">oxygen_kde/16x16/actions/edit-find.png</file>
- <file alias="oxygen/16x16/actions/media-playback-start.png">oxygen_kde/16x16/actions/media-playback-start.png</file>
- <file alias="oxygen/16x16/actions/configure-shortcuts.png">oxygen_kde/16x16/actions/configure-shortcuts.png</file>
- <file alias="oxygen/16x16/actions/tools-report-bug.png">oxygen_kde/16x16/actions/tools-report-bug.png</file>
- <file alias="oxygen/16x16/actions/network-disconnect.png">oxygen_kde/16x16/actions/network-disconnect.png</file>
- <file alias="oxygen/16x16/actions/format-text-italic.png">oxygen_kde/16x16/actions/format-text-italic.png</file>
- <file alias="oxygen/16x16/actions/irc-remove-operator.png">oxygen_kde/16x16/actions/irc-remove-operator.png</file>
- <file alias="oxygen/16x16/actions/irc-close-channel.png">oxygen_kde/16x16/actions/irc-close-channel.png</file>
- <file alias="oxygen/16x16/actions/irc-join-channel.png">oxygen_kde/16x16/actions/irc-join-channel.png</file>
- <file alias="oxygen/16x16/actions/go-up.png">oxygen_kde/16x16/actions/go-up.png</file>
- <file alias="oxygen/16x16/actions/help-about.png">oxygen_kde/16x16/actions/help-about.png</file>
- <file alias="oxygen/16x16/actions/view-fullscreen.png">oxygen_kde/16x16/actions/view-fullscreen.png</file>
- <file alias="oxygen/16x16/actions/format-text-color.png">oxygen_kde/16x16/actions/format-text-color.png</file>
- <file alias="oxygen/16x16/actions/mail-message-new.png">oxygen_kde/16x16/actions/mail-message-new.png</file>
- <file alias="oxygen/16x16/actions/zoom-in.png">oxygen_kde/16x16/actions/zoom-in.png</file>
- <file alias="oxygen/16x16/actions/im-user-offline.png">oxygen_kde/16x16/actions/im-user-offline.png</file>
- <file alias="oxygen/16x16/actions/edit-clear-locationbar-ltr.png">oxygen_kde/16x16/actions/edit-clear-locationbar-ltr.png</file>
- <file alias="oxygen/16x16/actions/edit-rename.png">oxygen_kde/16x16/actions/edit-rename.png</file>
- <file alias="oxygen/16x16/actions/view-refresh.png">oxygen_kde/16x16/actions/view-refresh.png</file>
- <file alias="oxygen/16x16/actions/configure.png">oxygen_kde/16x16/actions/configure.png</file>
- <file alias="oxygen/16x16/actions/zoom-out.png">oxygen_kde/16x16/actions/zoom-out.png</file>
- <file alias="oxygen/16x16/actions/go-previous.png">oxygen_kde/16x16/actions/go-previous.png</file>
- <file alias="oxygen/16x16/actions/im-user-away.png">oxygen_kde/16x16/actions/im-user-away.png</file>
- <file alias="oxygen/16x16/actions/document-edit.png">oxygen_kde/16x16/actions/document-edit.png</file>
- <file alias="oxygen/16x16/actions/format-text-underline.png">oxygen_kde/16x16/actions/format-text-underline.png</file>
- <file alias="oxygen/16x16/actions/zoom-original.png">oxygen_kde/16x16/actions/zoom-original.png</file>
- <file alias="oxygen/16x16/actions/show-menu.png">oxygen_kde/16x16/actions/show-menu.png</file>
- <file alias="oxygen/16x16/actions/go-previous-view.png">oxygen_kde/16x16/actions/go-previous-view.png</file>
- <file alias="oxygen/16x16/actions/document-open.png">oxygen_kde/16x16/actions/document-open.png</file>
- <file alias="oxygen/16x16/actions/network-connect.png">oxygen_kde/16x16/actions/network-connect.png</file>
- <file alias="oxygen/16x16/actions/document-encrypt.png">oxygen_kde/16x16/actions/document-encrypt.png</file>
- <file alias="oxygen/16x16/actions/go-down.png">oxygen_kde/16x16/actions/go-down.png</file>
- <file alias="oxygen/16x16/actions/list-add.png">oxygen_kde/16x16/actions/list-add.png</file>
- <file alias="oxygen/16x16/actions/go-next.png">oxygen_kde/16x16/actions/go-next.png</file>
- <file alias="oxygen/16x16/actions/edit-delete.png">oxygen_kde/16x16/actions/edit-delete.png</file>
- <file alias="oxygen/16x16/actions/irc-unvoice.png">oxygen_kde/16x16/actions/irc-unvoice.png</file>
- <file alias="oxygen/16x16/actions/application-exit.png">oxygen_kde/16x16/actions/application-exit.png</file>
- <file alias="oxygen/16x16/status/user-away.png">oxygen_kde/16x16/status/user-away.png</file>
- <file alias="oxygen/16x16/status/security-high.png">oxygen_kde/16x16/status/security-high.png</file>
- <file alias="oxygen/16x16/status/dialog-information.png">oxygen_kde/16x16/status/dialog-information.png</file>
- <file alias="oxygen/16x16/status/security-low.png">oxygen_kde/16x16/status/security-low.png</file>
- <file alias="oxygen/16x16/apps/quassel.png">oxygen_kde/16x16/apps/quassel.png</file>
- <file alias="oxygen/16x16/devices/network-wired.png">oxygen_kde/16x16/devices/network-wired.png</file>
- <file alias="oxygen/48x48/actions/im-kick-user.png">oxygen_kde/48x48/actions/im-kick-user.png</file>
- <file alias="oxygen/48x48/actions/im-ban-kick-user.png">oxygen_kde/48x48/actions/im-ban-kick-user.png</file>
- <file alias="oxygen/48x48/actions/irc-operator.png">oxygen_kde/48x48/actions/irc-operator.png</file>
- <file alias="oxygen/48x48/actions/irc-voice.png">oxygen_kde/48x48/actions/irc-voice.png</file>
- <file alias="oxygen/48x48/actions/im-ban-user.png">oxygen_kde/48x48/actions/im-ban-user.png</file>
- <file alias="oxygen/48x48/actions/im-user.png">oxygen_kde/48x48/actions/im-user.png</file>
- <file alias="oxygen/48x48/actions/network-disconnect.png">oxygen_kde/48x48/actions/network-disconnect.png</file>
- <file alias="oxygen/48x48/actions/irc-remove-operator.png">oxygen_kde/48x48/actions/irc-remove-operator.png</file>
- <file alias="oxygen/48x48/actions/irc-close-channel.png">oxygen_kde/48x48/actions/irc-close-channel.png</file>
- <file alias="oxygen/48x48/actions/irc-join-channel.png">oxygen_kde/48x48/actions/irc-join-channel.png</file>
- <file alias="oxygen/48x48/actions/mail-message-new.png">oxygen_kde/48x48/actions/mail-message-new.png</file>
- <file alias="oxygen/48x48/actions/network-connect.png">oxygen_kde/48x48/actions/network-connect.png</file>
- <file alias="oxygen/48x48/actions/irc-unvoice.png">oxygen_kde/48x48/actions/irc-unvoice.png</file>
- <file alias="oxygen/48x48/status/dialog-information.png">oxygen_kde/48x48/status/dialog-information.png</file>
- <file alias="oxygen/48x48/apps/quassel.png">oxygen_kde/48x48/apps/quassel.png</file>
- <file alias="oxygen/128x128/apps/quassel.png">oxygen_kde/128x128/apps/quassel.png</file>
- <file alias="oxygen/22x22/actions/edit-clear-locationbar-rtl.png">oxygen_kde/22x22/actions/edit-clear-locationbar-rtl.png</file>
- <file alias="oxygen/22x22/actions/dialog-close.png">oxygen_kde/22x22/actions/dialog-close.png</file>
- <file alias="oxygen/22x22/actions/edit-rename.png">oxygen_kde/22x22/actions/edit-rename.png</file>
- <file alias="oxygen/22x22/actions/list-add-user.png">oxygen_kde/22x22/actions/list-add-user.png</file>
- <file alias="oxygen/22x22/actions/list-remove-user.png">oxygen_kde/22x22/actions/list-remove-user.png</file>
- <file alias="oxygen/22x22/apps/quassel.png">oxygen_kde/22x22/apps/quassel.png</file>
- <file alias="oxygen/32x32/apps/quassel.png">oxygen_kde/32x32/apps/quassel.png</file>
- <file alias="oxygen/64x64/apps/quassel.png">oxygen_kde/64x64/apps/quassel.png</file>
- </qresource>
-</RCC>
if(EMBED_DATA)
set(COMMON_RCS ${COMMON_RCS} ${resfile} PARENT_SCOPE)
else(EMBED_DATA)
- install(FILES ${qm_files} DESTINATION ${DATA_INSTALL_DIR}/quassel/translations)
+ install(FILES ${qm_files} DESTINATION ${CMAKE_INSTALL_DATADIR}/quassel/translations)
endif(EMBED_DATA)
add_custom_target(po DEPENDS ${qm_files})
add_definitions(-DWITH_OXYGEN)
endif()
+# For KAboutData
+if (WITH_KF5)
+ set(CLIENT_LIBRARIES ${CLIENT_LIBRARIES} KF5::CoreAddons)
+endif()
+
# Needed for showing the cli option if appropriate
if (HAVE_SYSLOG)
add_definitions(-DHAVE_SYSLOG)
COMPILE_FLAGS "-DBUILD_CORE"
OUTPUT_NAME ../quasselcore)
target_link_libraries(quasselcore mod_core mod_common ${COMMON_LIBRARIES} ${QUASSEL_SSL_LIBRARIES} ${QT_QTMAIN_LIBRARY})
- install(TARGETS quasselcore RUNTIME DESTINATION ${BIN_INSTALL_DIR})
+ install(TARGETS quasselcore RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif(WANT_CORE)
if (KDE4_FOUND)
COMPILE_FLAGS "-DBUILD_QTUI"
OUTPUT_NAME ../quasselclient)
target_link_libraries(quasselclient mod_qtui mod_uisupport mod_client mod_common ${COMMON_LIBRARIES} ${CLIENT_LIBRARIES} ${QUASSEL_SSL_LIBRARIES} ${QT_QTMAIN_LIBRARY})
- install(TARGETS quasselclient RUNTIME DESTINATION ${BIN_INSTALL_DIR})
+ install(TARGETS quasselclient RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif(WANT_QTCLIENT)
if(WANT_MONO)
COMPILE_FLAGS "-DBUILD_MONO"
OUTPUT_NAME ../quassel)
target_link_libraries(quassel mod_qtui mod_uisupport mod_client mod_core mod_common ${COMMON_LIBRARIES} ${CLIENT_LIBRARIES} ${QUASSEL_SSL_LIBRARIES} ${QT_QTMAIN_LIBRARY})
- install(TARGETS quassel RUNTIME DESTINATION ${BIN_INSTALL_DIR})
+ install(TARGETS quassel RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif(WANT_MONO)
# Build bundles for MacOSX
clientcoreinfo.h
)
-if (KDE4_FOUND)
- include_directories(${KDE4_INCLUDES})
- add_definitions(-DHAVE_KDE ${KDE4_DEFINITIONS})
-endif()
-
if (USE_QT5)
list(APPEND qt_modules Widgets)
endif()
add_library(mod_client STATIC ${SOURCES})
qt_use_modules(mod_client Network Core Gui ${qt_modules})
-if (KDE4_FOUND)
- target_link_libraries(mod_client ${KDE4_SOLID_LIBS})
-endif()
-
-add_dependencies(mod_client mod_common)
+target_link_libraries(mod_client mod_common)
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
_probing = true;
QDataStream stream(socket()); // stream handles the endianness for us
+ stream.setVersion(QDataStream::Qt_4_2);
quint32 magic = Protocol::magic;
#ifdef HAVE_SSL
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
CoreConnectionSettings::NetworkDetectionMode CoreConnectionSettings::networkDetectionMode()
{
-#ifdef HAVE_KDE
- NetworkDetectionMode def = UseSolid;
-#else
- NetworkDetectionMode def = UsePingTimeout;
-#endif
- return (NetworkDetectionMode)localValue("NetworkDetectionMode", def).toInt();
+ auto mode = localValue("NetworkDetectionMode", UseQNetworkConfigurationManager).toInt();
+ if (mode == 0)
+ mode = UseQNetworkConfigurationManager; // UseSolid is gone, map that to the new default
+ return static_cast<NetworkDetectionMode>(mode);
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
{
public:
enum NetworkDetectionMode {
- UseSolid,
+ UseQNetworkConfigurationManager = 1, // UseSolid is gone
UsePingTimeout,
NoActiveDetection
};
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
_reconnectTimer.setSingleShot(true);
connect(&_reconnectTimer, SIGNAL(timeout()), SLOT(reconnectTimeout()));
-#ifdef HAVE_KDE
- connect(Solid::Networking::notifier(), SIGNAL(statusChanged(Solid::Networking::Status)),
- SLOT(solidNetworkStatusChanged(Solid::Networking::Status)));
-#endif
+ _qNetworkConfigurationManager = new QNetworkConfigurationManager(this);
+ connect(_qNetworkConfigurationManager, SIGNAL(onlineStateChanged(bool)), SLOT(onlineStateChanged(bool)));
CoreConnectionSettings s;
s.initAndNotify("PingTimeoutInterval", this, SLOT(pingTimeoutIntervalChanged(QVariant)), 60);
if (!_peer) {
CoreConnectionSettings s;
if (_wantReconnect && s.autoReconnect()) {
-#ifdef HAVE_KDE
- // If using Solid, we don't want to reconnect if we're offline
- if (s.networkDetectionMode() == CoreConnectionSettings::UseSolid) {
- if (Solid::Networking::status() != Solid::Networking::Connected
- && Solid::Networking::status() != Solid::Networking::Unknown) {
+ // If using QNetworkConfigurationManager, we don't want to reconnect if we're offline
+ if (s.networkDetectionMode() == CoreConnectionSettings::UseQNetworkConfigurationManager) {
+ if (!_qNetworkConfigurationManager->isOnline()) {
return;
- }
+ }
}
-#endif /* HAVE_KDE */
-
reconnectToCore();
}
}
}
-#ifdef HAVE_KDE
-
-void CoreConnection::solidNetworkStatusChanged(Solid::Networking::Status status)
+void CoreConnection::onlineStateChanged(bool isOnline)
{
CoreConnectionSettings s;
- if (s.networkDetectionMode() != CoreConnectionSettings::UseSolid)
+ if (s.networkDetectionMode() != CoreConnectionSettings::UseQNetworkConfigurationManager)
return;
- switch (status) {
- case Solid::Networking::Unknown:
- case Solid::Networking::Connected:
- //qDebug() << "Solid: Network status changed to connected or unknown";
+ if(isOnline) {
+ // qDebug() << "QNetworkConfigurationManager reports Online";
if (state() == Disconnected) {
if (_wantReconnect && s.autoReconnect()) {
reconnectToCore();
}
}
- break;
- case Solid::Networking::Disconnecting:
- case Solid::Networking::Unconnected:
+ } else {
+ // qDebug() << "QNetworkConfigurationManager reports Offline";
if (state() != Disconnected && !isLocalConnection())
disconnectFromCore(tr("Network is down"), true);
- break;
- default:
- break;
}
}
-#endif
bool CoreConnection::isEncrypted() const
{
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
-#ifndef CORECONNECTION_H_
-#define CORECONNECTION_H_
+#pragma once
-#include "QPointer"
-#include "QTimer"
+#include <QNetworkConfigurationManager>
+#include <QPointer>
+#include <QTimer>
#ifdef HAVE_SSL
# include <QSslSocket>
# include <QTcpSocket>
#endif
-#ifdef HAVE_KDE
-# include <Solid/Networking>
-#endif
-
#include "coreaccount.h"
#include "remotepeer.h"
#include "types.h"
void reconnectIntervalChanged(const QVariant &interval);
void reconnectTimeout();
-#ifdef HAVE_KDE
- void solidNetworkStatusChanged(Solid::Networking::Status status);
-#endif
+ void onlineStateChanged(bool isOnline);
private:
QPointer<ClientAuthHandler> _authHandler;
CoreAccount _account;
CoreAccountModel *accountModel() const;
+ QPointer<QNetworkConfigurationManager> _qNetworkConfigurationManager;
+
friend class CoreConfigWizard;
};
inline CoreConnection::ConnectionState CoreConnection::state() const { return _state; }
inline bool CoreConnection::isConnected() const { return state() >= Connected; }
inline CoreAccount CoreConnection::currentAccount() const { return _account; }
-
-#endif
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
buffersyncer.cpp
bufferviewconfig.cpp
bufferviewmanager.cpp
- cliparser.cpp
compressor.cpp
ctcpevent.cpp
event.cpp
coreinfo.h
)
+if (USE_QT5)
+ list(APPEND SOURCES qt5cliparser.cpp)
+else()
+ list(APPEND SOURCES cliparser.cpp)
+endif()
-if (QCA2_FOUND)
+if (QCA2_FOUND OR QCA2-QT5_FOUND)
set(SOURCES ${SOURCES} keyevent.cpp)
endif()
add_definitions(-DHAVE_SYSLOG)
endif()
-if(APPLE)
- set(SOURCES ${SOURCES} mac_utils.cpp)
+if (APPLE)
+ set(SOURCES ${SOURCES} mac_utils.cpp)
endif(APPLE)
if (WIN32)
add_library(mod_common STATIC ${SOURCES})
qt_use_modules(mod_common Core Network)
-if(APPLE)
- target_link_libraries(mod_common "-framework CoreServices" "-framework CoreFoundation")
+if (APPLE)
+ target_link_libraries(mod_common "-framework CoreServices" "-framework CoreFoundation")
endif(APPLE)
target_link_libraries(mod_common ${CMAKE_DL_LIBS} ${EXECINFO_LIBRARIES} ${ZLIB_LIBRARIES})
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
}
- inline void addOption(const QString &longName, const char shortName = 0, const QString &help = QString(), const QString &def = QString())
+ inline void addOption(const QString &longName, const char shortName = 0, const QString &help = QString(), const QString &valueName = QString(), const QString &def = QString())
{
- addArgument(longName, CliParserArg(CliParserArg::CliArgOption, shortName, help, def));
+ addArgument(longName, CliParserArg(CliParserArg::CliArgOption, shortName, help, valueName, def));
}
CliArgOption
};
- CliParserArg(const CliArgType _type = CliArgInvalid, const char _shortName = 0, const QString _help = QString(), const QString _def = QString())
- : type(_type),
- shortName(_shortName),
- help(_help),
- def(_def),
- value(QString()),
- boolValue(false) {};
+ CliParserArg(const CliArgType type = CliArgInvalid, const char shortName = 0, const QString &help = QString(), const QString &valueName = QString(), const QString def = QString())
+ : type(type)
+ , shortName(shortName)
+ , help(help)
+ , valueName(valueName)
+ , def(def)
+ {};
CliArgType type;
char shortName;
QString help;
+ QString valueName;
QString def;
QString value;
- bool boolValue;
+ bool boolValue = false;
};
virtual void addArgument(const QString &longName, const CliParserArg &arg) = 0;
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
}
-void CliParser::addArgument(const QString &longName_, const CliParserArg &arg)
+void CliParser::addArgument(const QString &longName, const CliParserArg &arg)
{
- QString longName = longName_;
- longName.remove(QRegExp("\\s*<.*>\\s*")); // KCmdLineArgs takes args of the form "arg <defval>"
if (argsMap.contains(longName)) qWarning() << "Warning: Multiple definition of argument" << longName;
if (arg.shortName != 0 && !lnameOfShortArg(arg.shortName).isNull())
qWarning().nospace() << "Warning: Redefining shortName '" << arg.shortName << "' for " << longName << " previously defined for " << lnameOfShortArg(arg.shortName);
}
else output.append(" ");
lnameField.append(" --").append(arg.key());
- if (arg.value().type == CliParserArg::CliArgOption) {
- lnameField.append("=[").append(arg.key().toUpper()).append("]");
+ if (arg.value().type == CliParserArg::CliArgOption && !arg.value().valueName.isEmpty()) {
+ lnameField.append("=<").append(arg.value().valueName).append(">");
}
output.append(lnameField.leftJustified(lnameFieldSize));
if (!arg.value().help.isEmpty()) {
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <cstdlib>
+#include <QTextCodec>
+
#ifdef BUILD_CORE
# include "coreapplication.h"
#elif defined BUILD_QTUI
+# include "aboutdata.h"
# include "qtuiapplication.h"
#elif defined BUILD_MONO
+# include "aboutdata.h"
# include "monoapplication.h"
#else
#endif
// We don't want quasselcore to depend on KDE
-#if defined HAVE_KDE && defined BUILD_CORE
-# undef HAVE_KDE
+#if defined HAVE_KDE4 && defined BUILD_CORE
+# undef HAVE_KDE4
+#endif
+// We don't want quasselcore to depend on KDE
+#if defined HAVE_KF5 && defined BUILD_CORE
+# undef HAVE_KF5
#endif
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
# include <KAboutData>
# include "kcmdlinewrapper.h"
+#elif defined HAVE_KF5
+# include <KCoreAddons/KAboutData>
+# include "qt5cliparser.h"
+#elif defined HAVE_QT5
+# include "qt5cliparser.h"
+#else
+# include "cliparser.h"
#endif
#if !defined(BUILD_CORE) && defined(STATIC)
Q_IMPORT_PLUGIN(qgif)
#endif
-#include "cliparser.h"
#include "quassel.h"
int main(int argc, char **argv)
{
+#if QT_VERSION < 0x050000
+ // All our source files are in UTF-8, and Qt5 even requires that
+ QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
+ QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
+#endif
+
Quassel::setupBuildInfo();
QCoreApplication::setApplicationName(Quassel::buildInfo().applicationName);
+ QCoreApplication::setApplicationVersion(Quassel::buildInfo().plainVersionString);
QCoreApplication::setOrganizationName(Quassel::buildInfo().organizationName);
QCoreApplication::setOrganizationDomain(Quassel::buildInfo().organizationDomain);
Q_INIT_RESOURCE(sql);
#endif
#ifndef BUILD_CORE
- Q_INIT_RESOURCE(pics); // always in a resource, for now
+ Q_INIT_RESOURCE(pics);
+ Q_INIT_RESOURCE(hicolor);
#endif
#ifdef EMBED_DATA
Q_INIT_RESOURCE(i18n);
# ifndef BUILD_CORE
Q_INIT_RESOURCE(data);
- Q_INIT_RESOURCE(hicolor);
- Q_INIT_RESOURCE(oxygen);
# ifdef WITH_OXYGEN
- Q_INIT_RESOURCE(oxygen_kde);
+ Q_INIT_RESOURCE(oxygen);
# endif
# endif
#endif
AbstractCliParser *cliParser;
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
// We need to init KCmdLineArgs first
- // TODO: build an AboutData compat class to replace our aboutDlg strings
KAboutData aboutData("quassel", "kdelibs4", ki18n("Quassel IRC"), Quassel::buildInfo().plainVersionString.toUtf8(),
ki18n("A modern, distributed IRC client"));
aboutData.addLicense(KAboutData::License_GPL_V2);
KCmdLineArgs::init(argc, argv, &aboutData);
cliParser = new KCmdLineWrapper();
+#elif defined HAVE_QT5
+ cliParser = new Qt5CliParser();
#else
cliParser = new CliParser();
#endif
// Initialize CLI arguments
// NOTE: We can't use tr() at this point, since app is not yet created
+ // TODO: Change this once we get rid of KDE4 and can initialize the parser after creating the app
// put shared client&core arguments here
cliParser->addSwitch("debug", 'd', "Enable debug output");
cliParser->addSwitch("help", 'h', "Display this help and exit");
cliParser->addSwitch("version", 'v', "Display version information");
#ifdef BUILD_QTUI
- cliParser->addOption("configdir <path>", 'c', "Specify the directory holding the client configuration");
+ cliParser->addOption("configdir", 'c', "Specify the directory holding the client configuration", "path");
#else
- cliParser->addOption("configdir <path>", 'c', "Specify the directory holding configuration files, the SQlite database and the SSL certificate");
+ cliParser->addOption("configdir", 'c', "Specify the directory holding configuration files, the SQlite database and the SSL certificate", "path");
#endif
- cliParser->addOption("datadir <path>", 0, "DEPRECATED - Use --configdir instead");
+ cliParser->addOption("datadir", 0, "DEPRECATED - Use --configdir instead", "path");
#ifndef BUILD_CORE
// put client-only arguments here
- cliParser->addOption("qss <file.qss>", 0, "Load a custom application stylesheet");
+ cliParser->addOption("icontheme", 0, "Override the system icon theme ('oxygen' is recommended)", "theme");
+ cliParser->addOption("qss", 0, "Load a custom application stylesheet", "file.qss");
cliParser->addSwitch("debugbufferswitches", 0, "Enables debugging for bufferswitches");
cliParser->addSwitch("debugmodel", 0, "Enables debugging for models");
cliParser->addSwitch("hidewindow", 0, "Start the client minimized to the system tray");
#endif
#ifndef BUILD_QTUI
// put core-only arguments here
- cliParser->addOption("listen <address>[,<address[,...]]>", 0, "The address(es) quasselcore will listen on", "::,0.0.0.0");
- cliParser->addOption("port <port>", 'p', "The port quasselcore will listen at", QString("4242"));
+ cliParser->addOption("listen", 0, "The address(es) quasselcore will listen on", "<address>[,<address>[,...]]", "::,0.0.0.0");
+ cliParser->addOption("port", 'p', "The port quasselcore will listen at", "port", "4242");
cliParser->addSwitch("norestore", 'n', "Don't restore last core's state");
- cliParser->addOption("loglevel <level>", 'L', "Loglevel Debug|Info|Warning|Error", "Info");
+ cliParser->addOption("loglevel", 'L', "Loglevel Debug|Info|Warning|Error", "level", "Info");
#ifdef HAVE_SYSLOG
cliParser->addSwitch("syslog", 0, "Log to syslog");
#endif
- cliParser->addOption("logfile <path>", 'l', "Log to a file");
- cliParser->addOption("select-backend <backendidentifier>", 0, "Switch storage backend (migrating data if possible)");
+ cliParser->addOption("logfile", 'l', "Log to a file", "path");
+ cliParser->addOption("select-backend", 0, "Switch storage backend (migrating data if possible)", "backendidentifier");
cliParser->addSwitch("add-user", 0, "Starts an interactive session to add a new core user");
- cliParser->addOption("change-userpass <username>", 0, "Starts an interactive session to change the password of the user identified by username");
+ cliParser->addOption("change-userpass", 0, "Starts an interactive session to change the password of the user identified by <username>", "username");
cliParser->addSwitch("oidentd", 0, "Enable oidentd integration");
- cliParser->addOption("oidentd-conffile <file>", 0, "Set path to oidentd configuration file");
+ cliParser->addOption("oidentd-conffile", 0, "Set path to oidentd configuration file", "file");
#ifdef HAVE_SSL
cliParser->addSwitch("require-ssl", 0, "Require SSL for client connections");
#endif
cliParser->addSwitch("enable-experimental-dcc", 0, "Enable highly experimental and unfinished support for CTCP DCC (DANGEROUS)");
#endif
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
// the KDE version needs this extra call to parse argc/argv before app is instantiated
if (!cliParser->init()) {
cliParser->usage();
MonolithicApplication app(argc, argv);
# endif
-#ifndef HAVE_KDE
+#ifndef HAVE_KDE4
// the non-KDE version parses after app has been instantiated
if (!cliParser->init(app.arguments())) {
cliParser->usage();
}
#endif
- if (!app.init()) return EXIT_FAILURE;
+ if (!app.init())
+ return EXIT_FAILURE;
+
+#ifdef HAVE_KF5
+ // FIXME: This should be done after loading the translation catalogue, but still in main()
+ AboutData aboutData;
+ AboutData::setQuasselPersons(&aboutData);
+ KAboutData::setApplicationData(aboutData.kAboutData());
+#endif
+
return app.exec();
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
-#ifndef ICON_H_
-#define ICON_H_
+#include "qt5cliparser.h"
-#ifndef HAVE_KDE
+#include <QCoreApplication>
+#include <QDebug>
-#include <QIcon>
+bool Qt5CliParser::init(const QStringList &arguments)
+{
+ _qCliParser.addHelpOption();
+ _qCliParser.addVersionOption();
+ _qCliParser.setApplicationDescription(QCoreApplication::translate("CliParser", "Quassel IRC is a modern, distributed IRC client."));
+
+ _qCliParser.process(arguments);
+ return true; // process() does error handling by itself
+}
-/// A very thin wrapper around QIcon
-/** This wrapper class allows us to load an icon by its theme name rather than its full file name.
- * The overloaded ctor uses IconLoader to locate an icon with this basename in the current theme
- * or in Qt Resources.
- */
-class Icon : public QIcon
+
+bool Qt5CliParser::isSet(const QString &longName)
{
-public:
- Icon();
- explicit Icon(const QString &iconName);
- explicit Icon(const QIcon ©);
- Icon &operator=(const Icon &other);
-};
+ return _qCliParser.isSet(longName);
+}
-#else /* HAVE_KDE */
-#include <KIcon>
-class Icon : public KIcon
+QString Qt5CliParser::value(const QString &longName)
{
-public:
- inline Icon() : KIcon() {};
- inline explicit Icon(const QString &iconName) : KIcon(iconName) {};
- inline explicit Icon(const QIcon ©) : KIcon(copy) {};
-};
+ return _qCliParser.value(longName);
+}
-#endif /* HAVE_KDE */
+void Qt5CliParser::usage()
+{
+ _qCliParser.showHelp();
+}
+
+
+void Qt5CliParser::addArgument(const QString &longName, const AbstractCliParser::CliParserArg &arg)
+{
+ QStringList names(longName);
+ if (arg.shortName != 0)
+ names << QString(arg.shortName);
-#endif
+ switch(arg.type) {
+ case CliParserArg::CliArgSwitch:
+ _qCliParser.addOption(QCommandLineOption(names, arg.help));
+ break;
+ case CliParserArg::CliArgOption:
+ _qCliParser.addOption(QCommandLineOption(names, arg.help, arg.valueName, arg.def));
+ break;
+ default:
+ qWarning() << "Warning: Unrecognized argument:" << longName;
+ }
+}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
-#ifndef HAVE_KDE
+#pragma once
-#include "icon.h"
-#include "iconloader.h"
+#include <QCommandLineParser>
-Icon::Icon() : QIcon()
-{
-}
+#include "abstractcliparser.h"
-Icon::Icon(const QString &name) : QIcon()
+class Qt5CliParser : public AbstractCliParser
{
- addPixmap(IconLoader::global()->loadIcon(name, IconLoader::Desktop));
-}
-
+public:
+ bool init(const QStringList &arguments = QStringList());
-Icon::Icon(const QIcon ©) : QIcon(copy)
-{
-}
+ QString value(const QString &longName);
+ bool isSet(const QString &longName);
+ void usage();
+private:
+ void addArgument(const QString &longName, const CliParserArg &arg);
-Icon &Icon::operator=(const Icon &other)
-{
- if (this != &other) {
- QIcon::operator=(other);
- }
- return *this;
-}
-
+ QCommandLineParser _qCliParser;
-#endif
+};
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
_initialized = true;
qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
+ setupEnvironment();
registerMetaTypes();
Network::setDefaultCodecForServer("ISO-8859-1");
}
+void Quassel::setupEnvironment()
+{
+ // On modern Linux systems, XDG_DATA_DIRS contains a list of directories containing application data. This
+ // is, for example, used by Qt for finding icons and other things. In case Quassel is installed in a non-standard
+ // prefix (or run from the build directory), it makes sense to add this to XDG_DATA_DIRS so we don't have to
+ // hack extra search paths into various places.
+#ifdef Q_OS_UNIX
+ QString xdgDataVar = QFile::decodeName(qgetenv("XDG_DATA_DIRS"));
+ if (xdgDataVar.isEmpty())
+ xdgDataVar = QLatin1String("/usr/local/share:/usr/share"); // sane defaults
+
+ QStringList xdgDirs = xdgDataVar.split(QLatin1Char(':'), QString::SkipEmptyParts);
+
+ // Add our install prefix (if we're not in a bindir, this just adds the current workdir)
+ QString appDir = QCoreApplication::applicationDirPath();
+ int binpos = appDir.lastIndexOf("/bin");
+ if (binpos >= 0) {
+ appDir.replace(binpos, 4, "/share");
+ xdgDirs.append(appDir);
+ // Also append apps/quassel, this is only for QIconLoader to find icons there
+ xdgDirs.append(appDir + "/apps/quassel");
+ } else
+ xdgDirs.append(appDir); // build directory is always the last fallback
+
+ xdgDirs.removeDuplicates();
+
+ qputenv("XDG_DATA_DIRS", QFile::encodeName(xdgDirs.join(":")));
+#endif
+}
+
+
void Quassel::setupBuildInfo()
{
- _buildInfo.applicationName = "Quassel IRC";
+ _buildInfo.applicationName = "quassel";
_buildInfo.coreApplicationName = "quasselcore";
_buildInfo.clientApplicationName = "quasselclient";
_buildInfo.organizationName = "Quassel Project";
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
inline void disableCrashhandler();
private:
+ void setupEnvironment();
void registerMetaTypes();
static void handleSignal(int signal);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
void RemotePeer::handle(const HeartBeatReply &heartBeatReply)
{
_heartBeatCount = 0;
-#if QT_VERSION >= 0x040700
emit lagUpdated(heartBeatReply.timestamp.msecsTo(QDateTime::currentDateTime().toUTC()) / 2);
-#else
- emit lagUpdated(heartBeatReply.timestamp.time().msecsTo(QDateTime::currentDateTime().toUTC().time()) / 2);
-#endif
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
list(APPEND LIBS ${QCA2_LIBRARIES})
endif()
+if (QCA2-QT5_FOUND)
+ add_definitions(-DHAVE_QCA2)
+ include_directories(${QCA2-QT5_INCLUDE_DIR})
+ list(APPEND SOURCES cipher.cpp)
+ list(APPEND LIBS ${QCA2-QT5_LIBRARIES})
+endif()
+
include_directories(${CMAKE_SOURCE_DIR}/src/common)
set(CORE_RCS ${CORE_RCS} ${CMAKE_CURRENT_SOURCE_DIR}/sql.qrc)
add_library(mod_core STATIC ${SOURCES})
qt_use_modules(mod_core Core Network Script Sql)
-add_dependencies(mod_core mod_common)
-
-if (LIBS)
- target_link_libraries(mod_core ${LIBS})
-endif()
+target_link_libraries(mod_core mod_common ${LIBS})
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
}
else
{
+ // ECB Blowfish encodes in blocks of 12 chars, so anything else is malformed input
+ if ((temp.length() % 12) != 0)
+ return cipherText;
+
temp = b64ToByte(temp);
while ((temp.length() % 8) != 0) temp.append('\0');
}
if (!cipher.ok())
return cipherText;
- if (direction)
+ if (direction) {
+ // Sanity check
+ if ((temp2.length() % 8) != 0)
+ return cipherText;
+
temp2 = byteToB64(temp2);
+ }
return temp2;
}
right += v;
for (int i = 0; i < 6; i++) {
- encoded.append(base64.at(right & 0x3F).toAscii());
+ encoded.append(base64.at(right & 0x3F).toLatin1());
right = right >> 6;
}
- //TODO make sure the .toascii doesn't break anything
+ //TODO make sure the .toLatin1 doesn't break anything
for (int i = 0; i < 6; i++) {
- encoded.append(base64.at(left & 0x3F).toAscii());
+ encoded.append(base64.at(left & 0x3F).toLatin1());
left = left >> 6;
}
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
foreach(CoreAuthHandler *handler, _connectingClients) {
handler->deleteLater(); // disconnect non authed clients
}
- qDeleteAll(sessions);
+ qDeleteAll(_sessions);
qDeleteAll(_storageBackends);
}
CoreSettings s;
QVariantMap state;
QVariantList activeSessions;
- foreach(UserId user, instance()->sessions.keys()) activeSessions << QVariant::fromValue<UserId>(user);
+ foreach(UserId user, instance()->_sessions.keys())
+ activeSessions << QVariant::fromValue<UserId>(user);
state["CoreStateVersion"] = 1;
state["ActiveSessions"] = activeSessions;
s.setCoreState(state);
// qWarning() << qPrintable(tr("Cannot restore a state for an unconfigured core!"));
return;
}
- if (instance()->sessions.count()) {
+ if (instance()->_sessions.count()) {
qWarning() << qPrintable(tr("Calling restoreState() even though active sessions exist!"));
return;
}
quInfo() << "Restoring previous core state...";
foreach(QVariant v, activeSessions) {
UserId user = v.value<UserId>();
- instance()->createSession(user, true);
+ instance()->sessionForUser(user, true);
}
}
}
handler->deleteLater();
// Find or create session for validated user
- SessionThread *session;
- if (sessions.contains(uid)) {
- session = sessions[uid];
- }
- else {
- session = createSession(uid);
- if (!session) {
- qWarning() << qPrintable(tr("Could not initialize session for client:")) << qPrintable(peer->description());
- peer->close();
- peer->deleteLater();
- return;
- }
- }
+ sessionForUser(uid);
// as we are currently handling an event triggered by incoming data on this socket
// it is unsafe to directly move the socket to the client thread.
void Core::addClientHelper(RemotePeer *peer, UserId uid)
{
// Find or create session for validated user
- if (!sessions.contains(uid)) {
- qWarning() << qPrintable(tr("Could not find a session for client:")) << qPrintable(peer->description());
- peer->close();
- peer->deleteLater();
- return;
- }
-
- SessionThread *session = sessions[uid];
+ SessionThread *session = sessionForUser(uid);
session->addClient(peer);
}
clientPeer->setPeer(corePeer);
// Find or create session for validated user
- SessionThread *sessionThread;
- if (sessions.contains(uid))
- sessionThread = sessions[uid];
- else
- sessionThread = createSession(uid);
-
+ SessionThread *sessionThread = sessionForUser(uid);
sessionThread->addClient(corePeer);
}
-SessionThread *Core::createSession(UserId uid, bool restore)
+SessionThread *Core::sessionForUser(UserId uid, bool restore)
{
- if (sessions.contains(uid)) {
- qWarning() << "Calling createSession() when a session for the user already exists!";
- return 0;
- }
- SessionThread *sess = new SessionThread(uid, restore, this);
- sessions[uid] = sess;
- sess->start();
- return sess;
+ if (_sessions.contains(uid))
+ return _sessions[uid];
+
+ SessionThread *session = new SessionThread(uid, restore, this);
+ _sessions[uid] = session;
+ session->start();
+ return session;
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
void init();
static Core *instanceptr;
- SessionThread *createSession(UserId userId, bool restoreState = false);
+ SessionThread *sessionForUser(UserId userId, bool restoreState = false);
void addClientHelper(RemotePeer *peer, UserId uid);
//void processCoreSetup(QTcpSocket *socket, QVariantMap &msg);
QString setupCoreForInternalUsage();
private:
QSet<CoreAuthHandler *> _connectingClients;
- QHash<UserId, SessionThread *> sessions;
+ QHash<UserId, SessionThread *> _sessions;
Storage *_storage;
QTimer _storageSyncTimer;
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
_quitReason = reason;
displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Disconnecting. (%1)").arg((!requested && !withReconnect) ? tr("Core Shutdown") : _quitReason));
- switch (socket.state()) {
- case QAbstractSocket::ConnectedState:
- userInputHandler()->issueQuit(_quitReason);
+ if (socket.state() == QAbstractSocket::UnconnectedState) {
+ socketDisconnected();
+ } else {
+ if (socket.state() == QAbstractSocket::ConnectedState) {
+ userInputHandler()->issueQuit(_quitReason);
+ } else {
+ socket.close();
+ }
if (requested || withReconnect) {
// the irc server has 10 seconds to close the socket
_socketCloseTimer.start(10000);
- break;
}
- default:
- socket.close();
- socketDisconnected();
}
}
else if (s.endsWith("\n"))
s.chop(1);
NetworkDataEvent *event = new NetworkDataEvent(EventManager::NetworkIncoming, this, s);
-#if QT_VERSION >= 0x040700
event->setTimestamp(QDateTime::currentDateTimeUtc());
-#else
- event->setTimestamp(QDateTime::currentDateTime().toUTC());
-#endif
emit newEvent(event);
}
}
disconnectFromIrc();
return;
}
-
+
emit socketOpen(identity, localAddress(), localPort(), peerAddress(), peerPort());
-
+
Server server = usedServer();
#ifdef HAVE_SSL
if (server.useSsl && !socket.isEncrypted())
return;
#endif
-#if QT_VERSION >= 0x040600
socket.setSocketOption(QAbstractSocket::KeepAliveOption, true);
-#endif
emit socketInitialized(identity, localAddress(), localPort(), peerAddress(), peerPort());
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
QString verboseMessage = tr("sending CTCP-%1 request to %2").arg(ctcpTag).arg(nick);
if (ctcpTag == "PING") {
-#if QT_VERSION >= 0x040700
message = QString::number(QDateTime::currentMSecsSinceEpoch());
-#else
- message = QString::number(QDateTime::currentDateTime().toTime_t());
-#endif
}
// FIXME make this a proper event
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
if (e->ctcpType() == CtcpEvent::Query)
defaultHandler(e->ctcpCmd(), e);
else {
-#if QT_VERSION >= 0x040700
displayMsg(e, Message::Server, tr("Received CTCP-PING answer from %1 with %2 milliseconds round trip time")
.arg(nickFromMask(e->prefix())).arg(QDateTime::fromMSecsSinceEpoch(e->param().toULongLong()).msecsTo(e->timestamp())));
-#else
- displayMsg(e, Message::Server, tr("Received CTCP-PING answer from %1 with %2 seconds round trip time")
- .arg(nickFromMask(e->prefix())).arg(QDateTime::fromTime_t(e->param().toInt()).secsTo(e->timestamp())));
-#endif
}
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
int PostgreSqlStorage::installedSchemaVersion()
{
- QSqlQuery query = logDb().exec("SELECT value FROM coreinfo WHERE key = 'schemaversion'");
+ QSqlQuery query(logDb());
+ query.prepare("SELECT value FROM coreinfo WHERE key = 'schemaversion'");
+ safeExec(query);
+ watchQuery(query);
if (query.first())
return query.value(0).toInt();
// maybe it's really old... (schema version 0)
- query = logDb().exec("SELECT MAX(version) FROM coreinfo");
+ query.prepare("SELECT MAX(version) FROM coreinfo");
+ safeExec(query);
+ watchQuery(query);
if (query.first())
return query.value(0).toInt();
QSqlQuery query(logDb());
query.prepare("UPDATE coreinfo SET value = :version WHERE key = 'schemaversion'");
query.bindValue(":version", newVersion);
- query.exec();
+ safeExec(query);
bool success = true;
- if (query.lastError().isValid()) {
+ if (!watchQuery(query)) {
qCritical() << "PostgreSqlStorage::updateSchemaVersion(int): Updating schema version failed!";
success = false;
}
QSqlQuery query(logDb());
query.prepare("INSERT INTO coreinfo (key, value) VALUES ('schemaversion', :version)");
query.bindValue(":version", version);
- query.exec();
+ safeExec(query);
bool success = true;
- if (query.lastError().isValid()) {
+ if (!watchQuery(query)) {
qCritical() << "PostgreSqlStorage::setupSchemaVersion(int): Updating schema version failed!";
success = false;
}
query.bindValue(":userid", user.toInt());
query.bindValue(":password", cryptedPassword(password));
safeExec(query);
+ watchQuery(query);
return query.numRowsAffected() != 0;
}
query.bindValue(":userid", user.toInt());
query.bindValue(":username", newName);
safeExec(query);
+ watchQuery(query);
emit userRenamed(user, newName);
}
query.bindValue(":username", user);
query.bindValue(":password", cryptedPassword(password));
safeExec(query);
+ watchQuery(query);
if (query.first()) {
return query.value(0).toInt();
query.prepare(queryString("select_userid"));
query.bindValue(":username", user);
safeExec(query);
+ watchQuery(query);
if (query.first()) {
return query.value(0).toInt();
QSqlQuery query(logDb());
query.prepare(queryString("select_internaluser"));
safeExec(query);
+ watchQuery(query);
if (query.first()) {
return query.value(0).toInt();
void PostgreSqlStorage::delUser(UserId user)
{
QSqlDatabase db = logDb();
- if (!db.transaction()) {
+ if (!beginTransaction(db)) {
qWarning() << "PostgreSqlStorage::delUser(): cannot start transaction!";
return;
}
selectQuery.bindValue(":userid", userId.toInt());
selectQuery.bindValue(":settingname", settingName);
safeExec(selectQuery);
+ watchQuery(selectQuery);
QString setQueryString;
if (!selectQuery.first()) {
setQuery.bindValue(":settingname", settingName);
setQuery.bindValue(":settingvalue", rawData);
safeExec(setQuery);
+ watchQuery(setQuery);
}
query.bindValue(":userid", userId.toInt());
query.bindValue(":settingname", settingName);
safeExec(query);
+ watchQuery(query);
if (query.first()) {
QVariant data;
IdentityId identityId;
QSqlDatabase db = logDb();
- if (!db.transaction()) {
+ if (!beginTransaction(db)) {
qWarning() << "PostgreSqlStorage::createIdentity(): Unable to start Transaction!";
qWarning() << " -" << qPrintable(db.lastError().text());
return identityId;
query.bindValue(":sslkey", QByteArray());
#endif
safeExec(query);
- if (query.lastError().isValid()) {
- watchQuery(query);
+ if (!watchQuery(query)) {
db.rollback();
return IdentityId();
}
identity.setId(identityId);
if (!identityId.isValid()) {
- watchQuery(query);
db.rollback();
return IdentityId();
}
bool PostgreSqlStorage::updateIdentity(UserId user, const CoreIdentity &identity)
{
QSqlDatabase db = logDb();
- if (!db.transaction()) {
+ if (!beginTransaction(db)) {
qWarning() << "PostgreSqlStorage::updateIdentity(): Unable to start Transaction!";
qWarning() << " -" << qPrintable(db.lastError().text());
return false;
checkQuery.bindValue(":identityid", identity.id().toInt());
checkQuery.bindValue(":userid", user.toInt());
safeExec(checkQuery);
+ watchQuery(checkQuery);
// there should be exactly one identity for the given id and user
if (!checkQuery.first() || checkQuery.value(0).toInt() != 1) {
void PostgreSqlStorage::removeIdentity(UserId user, IdentityId identityId)
{
QSqlDatabase db = logDb();
- if (!db.transaction()) {
+ if (!beginTransaction(db)) {
qWarning() << "PostgreSqlStorage::removeIdentity(): Unable to start Transaction!";
qWarning() << " -" << qPrintable(db.lastError().text());
return;
nickQuery.prepare(queryString("select_nicks"));
safeExec(query);
+ watchQuery(query);
while (query.next()) {
CoreIdentity identity(IdentityId(query.value(0).toInt()));
NetworkId networkId;
QSqlDatabase db = logDb();
- if (!db.transaction()) {
+ if (!beginTransaction(db)) {
qWarning() << "PostgreSqlStorage::createNetwork(): failed to begin transaction!";
qWarning() << " -" << qPrintable(db.lastError().text());
return false;
query.bindValue(":userid", user.toInt());
bindNetworkInfo(query, info);
safeExec(query);
- if (query.lastError().isValid()) {
- watchQuery(query);
+ if (!watchQuery(query)) {
db.rollback();
return NetworkId();
}
networkId = query.value(0).toInt();
if (!networkId.isValid()) {
- watchQuery(query);
db.rollback();
return NetworkId();
}
bool PostgreSqlStorage::updateNetwork(UserId user, const NetworkInfo &info)
{
QSqlDatabase db = logDb();
- if (!db.transaction()) {
+ if (!beginTransaction(db)) {
qWarning() << "PostgreSqlStorage::updateNetwork(): failed to begin transaction!";
qWarning() << " -" << qPrintable(db.lastError().text());
return false;
bool PostgreSqlStorage::removeNetwork(UserId user, const NetworkId &networkId)
{
QSqlDatabase db = logDb();
- if (!db.transaction()) {
+ if (!beginTransaction(db)) {
qWarning() << "PostgreSqlStorage::removeNetwork(): cannot start transaction!";
qWarning() << " -" << qPrintable(db.lastError().text());
return false;
BufferInfo PostgreSqlStorage::bufferInfo(UserId user, const NetworkId &networkId, BufferInfo::Type type, const QString &buffer, bool create)
{
QSqlDatabase db = logDb();
- if (!db.transaction()) {
+ if (!beginTransaction(db)) {
qWarning() << "PostgreSqlStorage::bufferInfo(): cannot start read only transaction!";
qWarning() << " -" << qPrintable(db.lastError().text());
return BufferInfo();
query.bindValue(":userid", user.toInt());
query.bindValue(":buffercname", buffer.toLower());
safeExec(query);
+ watchQuery(query);
if (query.first()) {
BufferInfo bufferInfo = BufferInfo(query.value(0).toInt(), networkId, (BufferInfo::Type)query.value(1).toInt(), 0, buffer);
safeExec(createQuery);
- if (createQuery.lastError().isValid()) {
+ if (!watchQuery(createQuery)) {
qWarning() << "PostgreSqlStorage::bufferInfo(): unable to create buffer";
- watchQuery(createQuery);
db.rollback();
return BufferInfo();
}
bool PostgreSqlStorage::removeBuffer(const UserId &user, const BufferId &bufferId)
{
QSqlDatabase db = logDb();
- if (!db.transaction()) {
+ if (!beginTransaction(db)) {
qWarning() << "PostgreSqlStorage::removeBuffer(): cannot start transaction!";
return false;
}
bool PostgreSqlStorage::renameBuffer(const UserId &user, const BufferId &bufferId, const QString &newName)
{
QSqlDatabase db = logDb();
- if (!db.transaction()) {
+ if (!beginTransaction(db)) {
qWarning() << "PostgreSqlStorage::renameBuffer(): cannot start transaction!";
return false;
}
query.bindValue(":userid", user.toInt());
query.bindValue(":bufferid", bufferId.toInt());
safeExec(query);
- if (query.lastError().isValid()) {
- watchQuery(query);
+ if (!watchQuery(query)) {
db.rollback();
return false;
}
bool PostgreSqlStorage::mergeBuffersPermanently(const UserId &user, const BufferId &bufferId1, const BufferId &bufferId2)
{
QSqlDatabase db = logDb();
- if (!db.transaction()) {
+ if (!beginTransaction(db)) {
qWarning() << "PostgreSqlStorage::mergeBuffersPermanently(): cannot start transaction!";
qWarning() << " -" << qPrintable(db.lastError().text());
return false;
bool PostgreSqlStorage::logMessage(Message &msg)
{
QSqlDatabase db = logDb();
- if (!db.transaction()) {
+ if (!beginTransaction(db)) {
qWarning() << "PostgreSqlStorage::logMessage(): cannot start transaction!";
qWarning() << " -" << qPrintable(db.lastError().text());
return false;
if (addSenderQuery.lastError().isValid()) {
rollbackSavePoint("sender_sp1", db);
- getSenderIdQuery = db.exec(getSenderIdQuery.lastQuery());
+ getSenderIdQuery.prepare(getSenderIdQuery.lastQuery());
+ safeExec(getSenderIdQuery);
+ watchQuery(getSenderIdQuery);
getSenderIdQuery.first();
senderId = getSenderIdQuery.value(0).toInt();
}
bool PostgreSqlStorage::logMessages(MessageList &msgs)
{
QSqlDatabase db = logDb();
- if (!db.transaction()) {
+ if (!beginTransaction(db)) {
qWarning() << "PostgreSqlStorage::logMessage(): cannot start transaction!";
qWarning() << " -" << qPrintable(db.lastError().text());
return false;
if (addSenderQuery.lastError().isValid()) {
// seems it was inserted meanwhile... by a different thread
rollbackSavePoint("sender_sp", db);
- selectSenderQuery = db.exec(selectSenderQuery.lastQuery());
+ selectSenderQuery.prepare(selectSenderQuery.lastQuery());
+ safeExec(selectSenderQuery);
+ watchQuery(selectSenderQuery);
selectSenderQuery.first();
senderIdList << selectSenderQuery.value(0).toInt();
senderIds[sender] = selectSenderQuery.value(0).toInt();
// return;
// }
+
+bool PostgreSqlStorage::beginTransaction(QSqlDatabase &db)
+{
+ bool result = db.transaction();
+ if (!db.isOpen()) {
+ db = logDb();
+ result = db.transaction();
+ }
+ return result;
+}
+
bool PostgreSqlStorage::beginReadOnlyTransaction(QSqlDatabase &db)
{
QSqlQuery query = db.exec("BEGIN TRANSACTION READ ONLY");
+ if (!db.isOpen()) {
+ db = logDb();
+ query = db.exec("BEGIN TRANSACTION READ ONLY");
+ }
return !query.lastError().isValid();
}
-QSqlQuery PostgreSqlStorage::prepareAndExecuteQuery(const QString &queryname, const QString ¶mstring, const QSqlDatabase &db)
+QSqlQuery PostgreSqlStorage::prepareAndExecuteQuery(const QString &queryname, const QString ¶mstring, QSqlDatabase &db)
{
// Query preparing is done lazily. That means that instead of always checking if the query is already prepared
// we just EXECUTE and catch the error
query = db.exec(QString("EXECUTE quassel_%1 (%2)").arg(queryname).arg(paramstring));
}
- if (db.lastError().isValid()) {
- // and once again: Qt leaves us without error codes so we either parse (language dependant(!)) strings
+ if (!db.isOpen() || db.lastError().isValid()) {
+ // If the query failed because the DB connection was down, reopen the connection and start a new transaction.
+ if (!db.isOpen()) {
+ db = logDb();
+ if (!beginTransaction(db)) {
+ qWarning() << "PostgreSqlStorage::prepareAndExecuteQuery(): cannot start transaction while recovering from connection loss!";
+ qWarning() << " -" << qPrintable(db.lastError().text());
+ return query;
+ }
+ db.exec("SAVEPOINT quassel_prepare_query");
+ } else {
+ db.exec("ROLLBACK TO SAVEPOINT quassel_prepare_query");
+ }
+
+ // and once again: Qt leaves us without error codes so we either parse (language dependent(!)) strings
// or we just guess the error. As we're only interested in unprepared queries, this will be our guess. :)
- db.exec("ROLLBACK TO SAVEPOINT quassel_prepare_query");
QSqlQuery checkQuery = db.exec(QString("SELECT count(name) FROM pg_prepared_statements WHERE name = 'quassel_%1' AND from_sql = TRUE").arg(queryname.toLower()));
checkQuery.first();
if (checkQuery.value(0).toInt() == 0) {
return QSqlQuery(db);
}
}
- // we alwas execute the query again, even if the query was already prepared.
+ // we always execute the query again, even if the query was already prepared.
// this ensures, that the error is properly propagated to the calling function
// (otherwise the last call would be the testing select to pg_prepared_statements
// which always gives a proper result and the error would be lost)
}
-QSqlQuery PostgreSqlStorage::executePreparedQuery(const QString &queryname, const QVariantList ¶ms, const QSqlDatabase &db)
+QSqlQuery PostgreSqlStorage::executePreparedQuery(const QString &queryname, const QVariantList ¶ms, QSqlDatabase &db)
{
QSqlDriver *driver = db.driver();
}
-QSqlQuery PostgreSqlStorage::executePreparedQuery(const QString &queryname, const QVariant ¶m, const QSqlDatabase &db)
+QSqlQuery PostgreSqlStorage::executePreparedQuery(const QString &queryname, const QVariant ¶m, QSqlDatabase &db)
{
QSqlField field;
field.setType(param.type());
}
+void PostgreSqlStorage::safeExec(QSqlQuery &query)
+{
+ // If the query fails due to the connection being gone, it seems to cause
+ // exec() to return false but no lastError to be set
+ if(!query.exec() && !query.lastError().isValid())
+ {
+ QSqlDatabase db = logDb();
+ QSqlQuery retryQuery(db);
+ retryQuery.prepare(query.lastQuery());
+ QMapIterator<QString, QVariant> i(query.boundValues());
+ while (i.hasNext())
+ {
+ i.next();
+ retryQuery.bindValue(i.key(),i.value());
+ }
+ query = retryQuery;
+ query.exec();
+ }
+}
+
// ========================================
// PostgreSqlMigrationWriter
// ========================================
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
virtual bool setupSchemaVersion(int version);
void safeExec(QSqlQuery &query);
+ bool beginTransaction(QSqlDatabase &db);
bool beginReadOnlyTransaction(QSqlDatabase &db);
- QSqlQuery executePreparedQuery(const QString &queryname, const QVariantList ¶ms, const QSqlDatabase &db);
- QSqlQuery executePreparedQuery(const QString &queryname, const QVariant ¶m, const QSqlDatabase &db);
+ QSqlQuery executePreparedQuery(const QString &queryname, const QVariantList ¶ms, QSqlDatabase &db);
+ QSqlQuery executePreparedQuery(const QString &queryname, const QVariant ¶m, QSqlDatabase &db);
void deallocateQuery(const QString &queryname, const QSqlDatabase &db);
inline void savePoint(const QString &handle, const QSqlDatabase &db) { db.exec(QString("SAVEPOINT %1").arg(handle)); }
private:
void bindNetworkInfo(QSqlQuery &query, const NetworkInfo &info);
void bindServerInfo(QSqlQuery &query, const Network::Server &server);
- QSqlQuery prepareAndExecuteQuery(const QString &queryname, const QString ¶mstring, const QSqlDatabase &db);
- inline QSqlQuery prepareAndExecuteQuery(const QString &queryname, const QSqlDatabase &db) { return prepareAndExecuteQuery(queryname, QString(), db); }
+ QSqlQuery prepareAndExecuteQuery(const QString &queryname, const QString ¶mstring, QSqlDatabase &db);
+ inline QSqlQuery prepareAndExecuteQuery(const QString &queryname, QSqlDatabase &db) { return prepareAndExecuteQuery(queryname, QString(), db); }
QString _hostName;
int _port;
};
-inline void PostgreSqlStorage::safeExec(QSqlQuery &query) { query.exec(); }
-
// ========================================
// PostgreSqlMigration
// ========================================
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
${CMAKE_SOURCE_DIR}/src/qtui
${CMAKE_SOURCE_DIR}/src/qtui/settingspages
${CMAKE_SOURCE_DIR}/src/uisupport
-
)
qt_wrap_ui(UI ${FORMPATH} ${SPFRM})
add_library(mod_qtui STATIC ${SOURCES} ${SPSRC} ${UI})
qt_use_modules(mod_qtui Core Gui Network ${QT_MODULES})
-if (LIBS)
- target_link_libraries(mod_qtui ${LIBS})
-endif()
-
-add_dependencies(mod_qtui mod_common mod_client mod_uisupport)
+target_link_libraries(mod_qtui mod_client mod_common mod_uisupport ${LIBS})
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
+#include "aboutdlg.h"
+
#include <QDateTime>
+#include <QIcon>
-#include "aboutdlg.h"
-#include "icon.h"
-#include "iconloader.h"
+#include "aboutdata.h"
#include "quassel.h"
-AboutDlg::AboutDlg(QWidget *parent) : QDialog(parent)
+AboutDlg::AboutDlg(QWidget *parent)
+ : QDialog(parent)
+ , _aboutData(new AboutData(this))
{
+ AboutData::setQuasselPersons(_aboutData);
+
ui.setupUi(this);
- ui.quasselLogo->setPixmap(DesktopIcon("quassel", IconLoader::SizeHuge));
+ ui.quasselLogo->setPixmap(QIcon(":/icons/quassel-64.png").pixmap(64)); // don't let the icon theme affect our logo here
ui.versionLabel->setText(QString(tr("<b>Version:</b> %1<br><b>Protocol version:</b> %2<br><b>Built:</b> %3"))
.arg(Quassel::buildInfo().fancyVersionString)
ui.contributorTextBrowser->setHtml(contributors());
ui.thanksToTextBrowser->setHtml(thanksTo());
- setWindowIcon(Icon("quassel"));
+ setWindowIcon(QIcon::fromTheme("quassel", QIcon(":/icons/quassel.png")));
}
"Most icons are © by the <a href=\"http://www.oxygen-icons.org\">Oxygen Team</a> and used under the "
"<a href=\"http://www.gnu.org/licenses/lgpl.html\">LGPL</a>.<br><br>"
"Please use <a href=\"http://bugs.quassel-irc.org\">http://bugs.quassel-irc.org</a> to report bugs."
- ).arg("2005-2014");
+ ).arg("2005-2015");
return res;
}
QString AboutDlg::authors() const
{
QString res;
- res = tr("Quassel IRC is mainly developed by:") +
- "<dl>"
- "<dt><b>Manuel \"Sputnick\" Nickschas</b></dt><dd><a href=\"mailto:sput@quassel-irc.org\">sput@quassel-irc.org</a><br>"
- "Project Founder, Lead Developer</dd>"
- "<dt><b>Marcus \"EgS\" Eggenberger</b></dt><dd><a href=\"mailto:egs@quassel-irc.org\">egs@quassel-irc.org</a><br>"
- "Project Motivator, Lead Developer, Mac Maintainer</dd>"
- "<dt><b>Alexander \"phon\" von Renteln</b></dt><dd><a href=\"mailto:phon@quassel-irc.org\">phon@quassel-irc.org</a><br>"
- "Developer, Windows Maintainer</dd>"
- "</dl>";
-
+ res = tr("Quassel IRC is mainly developed by:") + "<dl>";
+ for (const auto &person : _aboutData->authors()) {
+ res.append("<dt><b>" + person.prettyName() + "</b></dt><dd>");
+ if (!person.emailAddress().isEmpty())
+ res.append("<a href=\"mailto:" + person.emailAddress() + "\">" + person.emailAddress() + "</a><br>");
+ res.append(person.task() + "</dd>");
+ }
+ res.append("</dl>");
return res;
}
QString AboutDlg::contributors() const
{
QString res;
- res = tr("We would like to thank the following contributors (in alphabetical order) and everybody we forgot to mention here:")
- + QString::fromUtf8("<br>"
- "<dl>"
- "<dt><b>Daniel \"al\" Albers</b></dt><dd>Master Of Translation, many fixes and enhancements</dd>"
- "<dt><b>Liudas Alisauskas</b></dt><dd>Lithuanian translation</dd>"
- "<dt><b>Terje \"tan\" Andersen</b></dt><dd>Norwegian translation, documentation</dd>"
- "<dt><b>Jens \"amiconn\" Arnold</b></dt><dd>Postgres migration fixes</dd>"
- "<dt><b>Adolfo Jayme Barrientos</b></dt><dd>Spanish translation</dd>"
- "<dt><b>Mattia Basaglia</b></dt><dd>Fixes</dd>"
- "<dt><b>Pete \"elbeardmorez\" Beardmore</b></dt><dd>Linewrap for input line</dd>"
- "<dt><b>Rafael \"EagleScreen\" Belmonte</b></dt><dd>Spanish translation</dd>"
- "<dt><b>Sergiu Bivol</b></dt><dd>Romanian translation</dd>"
- "<dt><b>Bruno Brigras</b></dt><dd>Crash fixes</dd>"
- "<dt><b>Florent Castelli</b></dt><dd>Sanitize topic handling</dd>"
- "<dt><b>Theo \"tampakrap\" Chatzimichos</b></dt><dd>Greek translation</dd>"
- "<dt><b>Yuri Chornoivan</b></dt><dd>Ukrainian translation</dd>"
- "<dt><b>Tomáš \"scarabeus\" Chvátal</b></dt><dd>Czech translation</dd>"
- "<dt><b>\"Condex\"</b></dt><dd>Galician translation</dd>"
- "<dt><b>Joshua \"tvakah\" Corbin</b></dt><dd>Various fixes</dd>"
- "<dt><b>\"cordata\"</b></dt><dd>Esperanto translation</dd>"
- "<dt><b>Matthias \"pennywise\" Coy</b></dt><dd>German translation</dd>"
- "<dt><b>\"derpella\"</b></dt><dd>Polish translation</dd>"
- "<dt><b>\"Dorian\"</b></dt><dd>French translation</dd>"
- "<dt><b>Luke Faraone</b></dt><dd>Doc fixes</dd>"
- "<dt><b>Chris \"stitch\" Fuenty</b></dt><dd>SASL support</dd>"
- "<dt><b>Kevin \"KRF\" Funk</b></dt><dd>German translation</dd>"
- "<dt><b>Fabiano \"elbryan\" Francesconi</b></dt><dd>Italian translation</dd>"
- "<dt><b>Leo Franchi</b></dt><dd>OSX improvements</dd>"
- "<dt><b>Sebastien Fricker</b></dt><dd>Audio backend improvements</dd>"
- "<dt><b>Alf Gaida</b></dt><dd>Language improvements</dd>"
- "<dt><b>Aurélien \"agateau\" Gâteau</b></dt><dd>Message Indicator support</dd>"
- "<dt><b>Marco \"kaffeedoktor\" Genise</b></dt><dd>Ideas, hacking, motivation</dd>"
- "<dt><b>Felix \"debfx\" Geyer</b></dt><dd>Certificate handling improvements</dd>"
- "<dt><b>Volkan Gezer</b></dt><dd>Turkish translation</dd>"
- "<dt><b>Sjors \"dazjorz\" Gielen</b></dt><dd>Fixes</dd>"
- "<dt><b>Sebastian \"seezer\" Goth</b></dt><dd>Many improvements and features</dd>"
- "<dt><b>Michael \"brot\" Groh</b></dt><dd>German translation, fixes</dd>"
- "<dt><b>\"Gryllida\"</b></dt><dd>IRC parser improvements</dd>"
- "<dt><b>H. İbrahim \"igungor\" Güngör</b></dt><dd>Turkish translation</dd>"
- "<dt><b>Jiri Grönroos</b></dt><dd>Finnish translation</dd>"
- "<dt><b>Chris \"Zren\" H</b></dt><dd>Various improvements</dd>"
- "<dt><b>Edward Hades</b></dt><dd>Russian translation</dd>"
- "<dt><b>John \"nox\" Hand</b></dt><dd>Former All-Seeing Eye logo</dd>"
- "<dt><b>Adam \"2kah\" Harwood</b></dt><dd>ChatView improvements</dd>"
- "<dt><b>Jonas \"Dante\" Heese</b></dt><dd>Project founder, various improvements</dd>"
- "<dt><b>Thomas \"Datafreak\" Hogh</b></dt><dd>Windows builder</dd>"
- "<dt><b>Johannes \"j0hu\" Huber</b></dt><dd>Many fixes and features, bug triaging</dd>"
- "<dt><b>Theofilos Intzoglou</b></dt><dd>Greek translation</dd>"
- "<dt><b>Jovan Jojkić</b></dt><dd>Serbian translation</dd>"
- "<dt><b>Allan Jude</b></dt><dd>Documentation improvements</dd>"
- "<dt><b>Michael \"ycros\" Kedzierski</b></dt><dd>Mac fixes</dd>"
- "<dt><b>Scott \"ScottK\" Kitterman<b></dt><dd>Kubuntu nightly packager, (packaging/build system) bughunter</dd>"
- "<dt><b>Paul \"Haudrauf\" Klumpp</b></dt><dd>Initial design and mainwindow layout</dd>"
- "<dt><b>Maia Kozheva</b></dt><dd>Russian translation</dd>"
- "<dt><b>Tae-Hoon Kwon</b></dt><dd>Korean translation</dd>"
- "<dt><b>\"Larso\"</b></dt><dd>Finnish translation</dd>"
- "<dt><b>Patrick \"bonsaikitten\" Lauer</b></dt><dd>Gentoo packaging</dd>"
- "<dt><b>Chris \"Fish-Face\" Le Sueur</b></dt><dd>Various fixes and improvements</dd>"
- "<dt><b>Jerome \"Adys\" Leclanche</b></dt><dd>Context menu fixes</dd>"
- "<dt><b>Hendrik \"nevcairiel\" Leppkes</b></dt><dd>Various features</dd>"
- "<dt><b>Jason Lynch</b></dt><dd>Bugfixes</dd>"
- "<dt><b>Awad \"firesock\" Mackie</b></dt><dd>ChatView improvements</dd>"
- "<dt><b>Michael \"mamarley\" Marley</b></dt><dd>Various fixes and improvements</dd>"
- "<dt><b>Martin \"m4yer\" Mayer</b></dt><dd>German translation</dd>"
- "<dt><b>Daniel \"hydrogen\" Meltzer</b></dt><dd>Various fixes and improvements</dd>"
- "<dt><b>Sebastian Meyer</b></dt><dd>Fixes</dd>"
- "<dt><b>Daniel E. Moctezuma</b></dt><dd>Japanese translation</dd>"
- "<dt><b>Chris \"kode54\" Moeller</b></dt><dd>Various fixes and improvements</dd>"
- "<dt><b>Thomas Müller</b></dt><dd>Fixes, Debian packaging</dd>"
- "<dt><b>Gábor \"ELITE_x\" Németh</b></dt><dd>Hungarian translation</dd>"
- "<dt><b>Per Nielsen</b></dt><dd>Danish translation</dd>"
- "<dt><b>J-P Nurmi</b></dt><dd>Fixes</dd>"
- "<dt><b>Marco \"Quizzlo\" Paolone</b></dt><dd>Italian translation</dd>"
- "<dt><b>Bas \"Tucos\" Pape</b></dt><dd>Many fixes and improvements, bug and patch triaging, tireless community support</dd>"
- "<dt><b>Bruno Patri</b></dt><dd>French translation</dd>"
- "<dt><b>Drew \"LinuxDolt\" Patridge</b></dt><dd>BluesTheme stylesheet</dd>"
- "<dt><b>Celeste \"seele\" Paul</b></dt><dd>Usability Queen</dd>"
- "<dt><b>Vit Pelcak</b></dt><dd>Czech translation</dd>"
- "<dt><b>Regis \"ZRegis\" Perrin</b></dt><dd>French translation</dd>"
- "<dt><b>Diego \"Flameeyes\" Pettenò</b></dt><dd>Gentoo maintainer, build system improvements</dd>"
- "<dt><b>Simon Philips</b></dt><dd>Dutch translation</dd>"
- "<dt><b>Daniel \"billie\" Pielmeier</b></dt><dd>Gentoo maintainer</dd>"
- "<dt><b>Nuno \"pinheiro\" Pinheiro</b></dt><dd>Tons of Oxygen icons including our application icon</dd>"
- "<dt><b>David Planella</b></dt><dd>Translation system fixes</dd>"
- "<dt><b>Jure \"JLP\" Repinc</b></dt><dd>Slovenian translation</dd>"
- "<dt><b>Patrick \"TheOneRing\" von Reth</b></dt><dd>MinGW support, SNORE backend, Windows packager</dd>"
- "<dt><b>Dirk \"MarcLandis\" Rettschlag</b></dt><dd>Various fixes and new features</dd>"
- "<dt><b>Miguel Revilla</b></dt><dd>Spanish translation</dd>"
- "<dt><b>Jaak Ristioja</b></dt><dd>Fixes</dd>"
- "<dt><b>David \"Bombe\" Roden</b></dt><dd>Fixes</dd>"
- "<dt><b>Henning \"honk\" Rohlfs</b></dt><dd>Various fixes</dd>"
- "<dt><b>Stella \"differentreality\" Rouzi</b></dt><dd>Greek translation</dd>"
- "<dt><b>\"salnx\"</b></dt><dd>Highlight configuration improvements</dd>"
- "<dt><b>Martin \"sandsmark\" Sandsmark</b></dt><dd>Core fixes, Quasseldroid</dd>"
- "<dt><b>David Sansome</b></dt><dd>OSX Notification Center support</dd>"
- "<dt><b>Dennis \"DevUrandom\" Schridde</b></dt><dd>D-Bus notifications</dd>"
- "<dt><b>Jussi \"jussi01\" Schultink</b></dt><dd>Tireless tester, {ku|U}buntu tester and lobbyist, liters of delicious Finnish alcohol</dd>"
- "<dt><b>Tim \"xAFFE\" Schumacher</b></dt><dd>Fixes and feedback</dd>"
- "<dt><b>\"sfionov\"</b></dt><dd>Russian translation</dd>"
- "<dt><b>Harald \"apachelogger\" Sitter</b></dt><dd>{ku|U}buntu packager, motivator, promoter</dd>"
- "<dt><b>Ramanathan Sivagurunathan</b></dt><dd>Fixes</dd>"
- "<dt><b>Stefanos Sofroniou</b></dt><dd>Greek translation</dd>"
- "<dt><b>Rüdiger \"ruediger\" Sonderfeld</b></dt><dd>Emacs keybindings</dd>"
- "<dt><b>Alexander Stein</b></dt><dd>Tray icon fix</dd>"
- "<dt><b>Daniel \"son\" Steinmetz</b></dt><dd>Early beta tester and bughunter (on Vista™!)</dd>"
- "<dt><b>Jesper Thomschütz</b></dt><dd>Various fixes</dd>"
- "<dt><b>Arthur \"roentgen\" Titeica</b></dt><dd>Romanian translation</dd>"
- "<dt><b>\"ToBeFree\"</b></dt><dd>German translation</dd>"
- "<dt><b>Edward \"Aides\" Toroshchin</b></dt><dd>Russian translation</dd>"
- "<dt><b>Adam \"adamt\" Tulinius</b></dt><dd>Early beta tester and bughunter, Danish translation</dd>"
- "<dt><b>Deniz Türkoglu</b></dt><dd>Mac fixes</dd>"
- "<dt><b>Frederik M.J. \"freqmod\" Vestre</b></dt><dd>Norwegian translation</dd>"
- "<dt><b>Atte Virtanen</b></dt><dd>Finnish translation</dd>"
- "<dt><b>Pavel \"int\" Volkovitskiy</b></dt><dd>Early beta tester and bughunter</dd>"
- "<dt><b>Roscoe van Wyk</b></dt><dd>Fixes</dd>"
- "<dt><b>Zé</b></dt><dd>Portuguese translation</dd>"
- "<dt><b>Benjamin \"zbenjamin\" Zeller</b></dt><dd>Windows build system fixes</dd>"
- "<dt><b>\"zeugma\"</b></dt><dd>Turkish translation</dd>"
- "</dl><br>"
- "...and anybody else finding and reporting bugs, giving feedback, helping others and being part of the community!");
+ res = tr("We would like to thank the following contributors (in alphabetical order) and everybody we forgot to mention here:") + "<br><dl>";
+ for (const auto &person : _aboutData->credits()) {
+ res.append("<dt><b>" + person.prettyName() + "</b></dt><dd>" + person.task() + "</dd>");
+ }
+ res.append("</dl><br>" + tr("...and anybody else finding and reporting bugs, giving feedback, helping others and being part of the community!"));
return res;
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "ui_aboutdlg.h"
+class AboutData;
+
class AboutDlg : public QDialog
{
Q_OBJECT
QString authors() const;
QString contributors() const;
QString thanksTo() const;
+
+ AboutData *_aboutData;
};
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
+#include <QIcon>
#include <QLayout>
#include <QKeyEvent>
#include <QMenu>
#include "chatviewsearchcontroller.h"
#include "chatviewsettings.h"
#include "client.h"
-#include "iconloader.h"
#include "multilineedit.h"
#include "qtui.h"
#include "settings.h"
Action *zoomInChatview = coll->add<Action>("ZoomInChatView", this, SLOT(zoomIn()));
zoomInChatview->setText(tr("Zoom In"));
- zoomInChatview->setIcon(SmallIcon("zoom-in"));
+ zoomInChatview->setIcon(QIcon::fromTheme("zoom-in"));
zoomInChatview->setShortcut(QKeySequence::ZoomIn);
Action *zoomOutChatview = coll->add<Action>("ZoomOutChatView", this, SLOT(zoomOut()));
- zoomOutChatview->setIcon(SmallIcon("zoom-out"));
+ zoomOutChatview->setIcon(QIcon::fromTheme("zoom-out"));
zoomOutChatview->setText(tr("Zoom Out"));
zoomOutChatview->setShortcut(QKeySequence::ZoomOut);
Action *zoomOriginalChatview = coll->add<Action>("ZoomOriginalChatView", this, SLOT(zoomOriginal()));
- zoomOriginalChatview->setIcon(SmallIcon("zoom-original"));
+ zoomOriginalChatview->setIcon(QIcon::fromTheme("zoom-original"));
zoomOriginalChatview->setText(tr("Actual Size"));
//zoomOriginalChatview->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_0)); // used for RTS switching
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QHeaderView>
#include <QHBoxLayout>
+#include <QIcon>
#include <QSpacerItem>
#include "client.h"
#include "clientirclisthelper.h"
-#include "icon.h"
-#include "iconloader.h"
ChannelListDlg::ChannelListDlg(QWidget *parent)
: QDialog(parent),
_sortFilter.setFilterKeyColumn(-1);
ui.setupUi(this);
- ui.advancedModeLabel->setPixmap(BarIcon("edit-rename"));
+ ui.advancedModeLabel->setPixmap(QIcon::fromTheme("edit-rename").pixmap(22));
ui.channelListView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui.channelListView->setSelectionMode(QAbstractItemView::SingleSelection);
ui.searchChannelsButton->setAutoDefault(false);
- setWindowIcon(Icon("format-list-unordered"));
+ setWindowIcon(QIcon::fromTheme("format-list-unordered"));
connect(ui.advancedModeLabel, SIGNAL(clicked()), this, SLOT(toggleMode()));
connect(ui.searchChannelsButton, SIGNAL(clicked()), this, SLOT(requestSearch()));
delete _simpleModeSpacer;
_simpleModeSpacer = 0;
}
- ui.advancedModeLabel->setPixmap(BarIcon("edit-clear-locationbar-rtl"));
+ ui.advancedModeLabel->setPixmap(QIcon::fromTheme("edit-clear-locationbar-rtl", QIcon::fromTheme("edit-clear")).pixmap(16));
}
else {
if (!_simpleModeSpacer) {
_simpleModeSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
ui.searchLayout->insertSpacerItem(0, _simpleModeSpacer);
}
- ui.advancedModeLabel->setPixmap(BarIcon("edit-rename"));
+ ui.advancedModeLabel->setPixmap(QIcon::fromTheme("edit-rename").pixmap(16));
}
ui.channelNameLineEdit->clear();
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QDesktopServices>
#include <QFontMetrics>
#include <QGraphicsSceneMouseEvent>
+#include <QIcon>
#include <QPainter>
#include <QPalette>
#include <QTextLayout>
#include "chatlinemodel.h"
#include "chatview.h"
#include "contextmenuactionprovider.h"
-#include "iconloader.h"
#include "mainwin.h"
#include "qtui.h"
#include "qtuistyle.h"
switch (click.type()) {
case Clickable::Url:
privateData()->activeClickable = click;
- menu->addAction(SmallIcon("edit-copy"), tr("Copy Link Address"),
+ menu->addAction(QIcon::fromTheme("edit-copy"), tr("Copy Link Address"),
&_actionProxy, SLOT(copyLinkToClipboard()))->setData(QVariant::fromValue<void *>(this));
break;
case Clickable::Channel:
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "chatmonitorview.h"
#include <QAction>
+#include <QIcon>
#include <QMenu>
#include <QContextMenuEvent>
#include "chatitem.h"
#include "chatscene.h"
#include "client.h"
-#include "iconloader.h"
#include "networkmodel.h"
#include "buffermodel.h"
#include "messagemodel.h"
}
menu->addSeparator();
- menu->addAction(SmallIcon("configure"), tr("Configure..."), this, SLOT(showSettingsPage()));
+ menu->addAction(QIcon::fromTheme("configure"), tr("Configure..."), this, SLOT(showSettingsPage()));
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QDesktopServices>
#include <QDrag>
#include <QGraphicsSceneMouseEvent>
+#include <QIcon>
#include <QMenu>
#include <QMenuBar>
#include <QMimeData>
#include <QPersistentModelIndex>
#include <QUrl>
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
# include <KMenuBar>
#else
# include <QMenuBar>
#include "clientbacklogmanager.h"
#include "columnhandleitem.h"
#include "contextmenuactionprovider.h"
-#include "iconloader.h"
#include "mainwin.h"
#include "markerlineitem.h"
#include "messagefilter.h"
// If we have text selected, insert the Copy Selection as first item
if (isPosOverSelection(pos)) {
QAction *sep = menu.insertSeparator(menu.actions().first());
- QAction *act = new Action(SmallIcon("edit-copy"), tr("Copy Selection"), &menu, this,
+ QAction *act = new Action(QIcon::fromTheme("edit-copy"), tr("Copy Selection"), &menu, this,
SLOT(selectionToClipboard()), QKeySequence::Copy);
menu.insertAction(sep, act);
searchSelectionText = searchSelectionText.left(_webSearchSelectionTextMaxVisible).append(QString::fromUtf8("…"));
searchSelectionText = tr("Search '%1'").arg(searchSelectionText);
- menu.addAction(SmallIcon("edit-find"), searchSelectionText, this, SLOT(webSearchOnSelection()));
+ menu.addAction(QIcon::fromTheme("edit-find"), searchSelectionText, this, SLOT(webSearchOnSelection()));
}
if (QtUi::mainWindow()->menuBar()->isHidden())
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "chatviewsearchbar.h"
+#include <QIcon>
+
#include "action.h"
#include "actioncollection.h"
-#include "iconloader.h"
#include "qtui.h"
ChatViewSearchBar::ChatViewSearchBar(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
- ui.hideButton->setIcon(BarIcon("dialog-close"));
- ui.searchUpButton->setIcon(SmallIcon("go-up"));
- ui.searchDownButton->setIcon(SmallIcon("go-down"));
+ ui.hideButton->setIcon(QIcon::fromTheme("dialog-close"));
+ ui.searchUpButton->setIcon(QIcon::fromTheme("go-up"));
+ ui.searchDownButton->setIcon(QIcon::fromTheme("go-down"));
_searchDelayTimer.setSingleShot(true);
layout()->setContentsMargins(0, 0, 0, 0);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#ifndef CHATVIEWSEARCHCONTROLLER_H
#define CHATVIEWSEARCHCONTROLLER_H
-#include <QObject>
+#include <QGraphicsItem>
#include <QHash>
#include <QPointer>
#include <QString>
// Highlight Items
-#include <QGraphicsItem>
-
class SearchHighlightItem : public QObject, public QGraphicsItem
{
Q_OBJECT
-#if QT_VERSION >= 0x040600
Q_INTERFACES(QGraphicsItem)
-#endif
public :
SearchHighlightItem(QRectF wordRect, QGraphicsItem *parent = 0);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QDebug>
#include <QAbstractButton>
#include <QFormLayout>
+#include <QIcon>
#include <QSpinBox>
#include "coreconfigwizard.h"
#include "coreconnection.h"
-#include "iconloader.h"
CoreConfigWizard::CoreConfigWizard(CoreConnection *connection, const QList<QVariant> &backends, QWidget *parent)
: QWizard(parent),
setModal(true);
setWindowTitle(tr("Core Configuration Wizard"));
- setPixmap(QWizard::LogoPixmap, DesktopIcon("quassel"));
+ setPixmap(QWizard::LogoPixmap, QIcon::fromTheme("quassel", QIcon(":/icons/quassel.png")).pixmap(48));
connect(connection, SIGNAL(coreSetupSuccess()), SLOT(coreSetupSuccess()));
connect(connection, SIGNAL(coreSetupFailed(QString)), SLOT(coreSetupFailed(QString)));
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
***************************************************************************/
#include <QDialogButtonBox>
+#include <QIcon>
#include <QVBoxLayout>
#include "coreconnectdlg.h"
-#include "iconloader.h"
#include "clientsettings.h"
#include "coreaccountsettingspage.h"
_settingsPage->setSelectedAccount(lastAccount);
setWindowTitle(tr("Connect to Core"));
- setWindowIcon(SmallIcon("network-disconnect"));
+ setWindowIcon(QIcon::fromTheme("network-disconnect"));
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(_settingsPage);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "coreconnectionstatuswidget.h"
+#include <QIcon>
+
#include "client.h"
-#include "iconloader.h"
#include "signalproxy.h"
CoreConnectionStatusWidget::CoreConnectionStatusWidget(CoreConnection *connection, QWidget *parent)
{
if (state >= CoreConnection::Connected) {
if (coreConnection()->isEncrypted()) {
- ui.sslLabel->setPixmap(SmallIcon("security-high"));
+ ui.sslLabel->setPixmap(QIcon::fromTheme("security-high").pixmap(16));
ui.sslLabel->setToolTip(tr("The connection to your core is encrypted with SSL."));
}
else {
- ui.sslLabel->setPixmap(SmallIcon("security-low"));
+ ui.sslLabel->setPixmap(QIcon::fromTheme("security-low").pixmap(16));
ui.sslLabel->setToolTip(tr("The connection to your core is not encrypted."));
}
ui.sslLabel->show();
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "indicatornotificationbackend.h"
+#include <QIcon>
+#include <QImage>
+
#include <qindicateserver.h>
#include <qindicateindicator.h>
#include "client.h"
#include "clientsettings.h"
-#include "iconloader.h"
#include "mainwin.h"
#include "networkmodel.h"
#include "qtui.h"
QModelIndex index = Client::networkModel()->bufferIndex(bufferId);
QVariant icon = QtUi::style()->bufferViewItemData(index, Qt::DecorationRole);
- if (icon.canConvert<QPixmap>()) {
- QImage image = icon.value<QPixmap>().toImage();
+ if (icon.canConvert<QIcon>()) {
+ QImage image = icon.value<QIcon>().pixmap(16).toImage();
indicator->setIconProperty(image);
}
{
ui.setupUi(this);
// FIXME find proper icon (this one is used by the plasmoid as well)
- ui.enabled->setIcon(SmallIcon("mail-message-new"));
+ ui.enabled->setIcon(QIcon::fromTheme("mail-message-new"));
connect(ui.enabled, SIGNAL(toggled(bool)), SLOT(widgetChanged()));
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "inputwidget.h"
+#include <QIcon>
+
#include "action.h"
#include "actioncollection.h"
#include "bufferview.h"
#include "client.h"
-#include "iconloader.h"
#include "ircuser.h"
#include "networkmodel.h"
#include "qtui.h"
ui.inputEdit->setMode(MultiLineEdit::MultiLine);
ui.inputEdit->setPasteProtectionEnabled(true);
- ui.boldButton->setIcon(SmallIcon("format-text-bold"));
- ui.italicButton->setIcon(SmallIcon("format-text-italic"));
- ui.underlineButton->setIcon(SmallIcon("format-text-underline"));
- ui.textcolorButton->setIcon(SmallIcon("format-text-color"));
- ui.highlightcolorButton->setIcon(SmallIcon("format-fill-color"));
+ ui.boldButton->setIcon(QIcon::fromTheme("format-text-bold"));
+ ui.italicButton->setIcon(QIcon::fromTheme("format-text-italic"));
+ ui.underlineButton->setIcon(QIcon::fromTheme("format-text-underline"));
+ ui.textcolorButton->setIcon(QIcon::fromTheme("format-text-color"));
+ ui.highlightcolorButton->setIcon(QIcon::fromTheme("format-fill-color"));
ui.encryptionIconLabel->hide();
_colorMenu = new QMenu();
ui.ownNick->addItems(nicks);
if (me && me->isAway())
- ui.ownNick->setItemData(nickIdx, SmallIcon("user-away"), Qt::DecorationRole);
+ ui.ownNick->setItemData(nickIdx, QIcon::fromTheme("user-away"), Qt::DecorationRole);
ui.ownNick->setCurrentIndex(nickIdx);
}
mergeFormatOnSelection(fmt);
}
ui.textcolorButton->setDefaultAction(action);
- ui.textcolorButton->setIcon(createColorToolButtonIcon(SmallIcon("format-text-color"), color));
+ ui.textcolorButton->setIcon(createColorToolButtonIcon(QIcon::fromTheme("format-text-color"), color));
}
mergeFormatOnSelection(fmt);
}
ui.highlightcolorButton->setDefaultAction(action);
- ui.highlightcolorButton->setIcon(createColorToolButtonIcon(SmallIcon("format-fill-color"), color));
+ ui.highlightcolorButton->setIcon(createColorToolButtonIcon(QIcon::fromTheme("format-fill-color"), color));
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <KNotification>
#include <KNotifyConfigWidget>
+#include <QIcon>
#include <QTextDocument>
#include <QVBoxLayout>
#include "knotificationbackend.h"
#include "client.h"
-#include "icon.h"
-#include "iconloader.h"
#include "mainwin.h"
#include "networkmodel.h"
#include "qtui.h"
#else
QString message = QString("<b><%1></b> %2").arg(n.sender, n.message.toHtmlEscaped());
#endif
- KNotification *notification = KNotification::event(type, message, DesktopIcon("dialog-information"), QtUi::mainWindow(),
+ KNotification *notification = KNotification::event(type, message, QIcon::fromTheme("dialog-information").pixmap(48), QtUi::mainWindow(),
KNotification::RaiseWidgetOnActivation
|KNotification::CloseWhenWidgetActivated
|KNotification::CloseOnTimeout);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This file is free software; you can redistribute it and/or modify *
_blinkState(false),
_lastMessageId(0)
{
-#ifndef HAVE_KDE
+#ifndef HAVE_KDE4
_trayIcon = new QSystemTrayIcon(associatedWidget());
#else
_trayIcon = new KSystemTrayIcon(associatedWidget());
}
-Icon LegacySystemTray::stateIcon() const
+QIcon LegacySystemTray::stateIcon() const
{
if (mode() == Legacy && state() == NeedsAttention && !_blinkState)
return SystemTray::stateIcon(Active);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This file is free software; you can redistribute it and/or modify *
#ifndef QT_NO_SYSTEMTRAYICON
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
# include <KSystemTrayIcon>
#else
# include <QSystemTrayIcon>
#endif
+#include <QIcon>
#include <QTimer>
#include "systemtray.h"
virtual bool isVisible() const;
virtual inline bool isSystemTrayAvailable() const;
- virtual Icon stateIcon() const; // overriden to care about blinkState
+ virtual QIcon stateIcon() const; // overriden to care about blinkState
public slots:
virtual void setState(State state);
bool _blinkState;
uint _lastMessageId;
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
KSystemTrayIcon *_trayIcon;
#else
QSystemTrayIcon *_trayIcon;
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "mainwin.h"
+#include <QIcon>
#include <QMenuBar>
#include <QMessageBox>
#include <QStatusBar>
#include <QToolBar>
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
# include <KAction>
# include <KActionCollection>
# include <KHelpMenu>
#include "debuglogwidget.h"
#include "debugmessagemodelfilter.h"
#include "flatproxymodel.h"
-#include "iconloader.h"
#include "inputwidget.h"
#include "irclistmodel.h"
#include "ircconnectionwizard.h"
#include "topicwidget.h"
#include "verticaldock.h"
-#ifndef HAVE_KDE
+#ifndef HAVE_KDE4
# ifdef HAVE_PHONON
# include "phononnotificationbackend.h"
# endif
# endif
# include "systraynotificationbackend.h"
# include "taskbarnotificationbackend.h"
-#else /* HAVE_KDE */
+#else /* HAVE_KDE4 */
# include "knotificationbackend.h"
-#endif /* HAVE_KDE */
+#endif /* HAVE_KDE4 */
#ifdef HAVE_SSL
# include "sslinfodlg.h"
#include "settingspages/notificationssettingspage.h"
#include "settingspages/topicwidgetsettingspage.h"
-#ifndef HAVE_KDE
+#ifndef HAVE_KDE4
# include "settingspages/shortcutssettingspage.h"
#endif
MainWin::MainWin(QWidget *parent)
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
: KMainWindow(parent),
_kHelpMenu(new KHelpMenu(this, KGlobal::mainComponent().aboutData())),
#else
setupTitleSetter();
setupHotList();
-#ifndef HAVE_KDE
+#ifndef HAVE_KDE4
# ifdef HAVE_PHONON
QtUi::registerNotificationBackend(new PhononNotificationBackend(this));
# endif
QtUi::registerNotificationBackend(new TaskbarNotificationBackend(this));
-#else /* HAVE_KDE */
+#else /* HAVE_KDE4 */
QtUi::registerNotificationBackend(new KNotificationBackend(this));
-#endif /* HAVE_KDE */
+#endif /* HAVE_KDE4 */
#ifdef HAVE_INDICATEQT
QtUi::registerNotificationBackend(new IndicatorNotificationBackend(this));
setDisconnectedState(); // Disable menus and stuff
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
setAutoSaveSettings();
#endif
if (lastBufId.isValid())
s.setValue("LastUsedBufferId", lastBufId.toInt());
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
saveAutoSaveSettings();
#endif
}
_normalPos = s.value("MainWinPos", pos()).toPoint();
bool maximized = s.value("MainWinMaximized", false).toBool();
-#ifndef HAVE_KDE
+#ifndef HAVE_KDE4
restoreGeometry(s.value("MainWinGeometry").toByteArray());
if (maximized) {
void MainWin::updateIcon()
{
-#ifdef Q_OS_MAC
- const int size = 128;
-#else
- const int size = 48;
-#endif
-
- QPixmap icon;
+ QIcon icon;
if (Client::isConnected())
- icon = DesktopIcon("quassel", size);
+ icon = QIcon::fromTheme("quassel", QIcon(":/icons/quassel-128.png"));
else
- icon = DesktopIcon("quassel-inactive", size);
+ icon = QIcon::fromTheme("quassel-inactive", QIcon(":/icons/quassel-128.png"));
setWindowIcon(icon);
qApp->setWindowIcon(icon);
}
{
ActionCollection *coll = QtUi::actionCollection("General", tr("General"));
// File
- coll->addAction("ConnectCore", new Action(SmallIcon("network-connect"), tr("&Connect to Core..."), coll,
+ coll->addAction("ConnectCore", new Action(QIcon::fromTheme("network-connect"), tr("&Connect to Core..."), coll,
this, SLOT(showCoreConnectionDlg())));
- coll->addAction("DisconnectCore", new Action(SmallIcon("network-disconnect"), tr("&Disconnect from Core"), coll,
+ coll->addAction("DisconnectCore", new Action(QIcon::fromTheme("network-disconnect"), tr("&Disconnect from Core"), coll,
Client::instance(), SLOT(disconnectFromCore())));
- coll->addAction("CoreInfo", new Action(SmallIcon("help-about"), tr("Core &Info..."), coll,
+ coll->addAction("CoreInfo", new Action(QIcon::fromTheme("help-about"), tr("Core &Info..."), coll,
this, SLOT(showCoreInfoDlg())));
- coll->addAction("ConfigureNetworks", new Action(SmallIcon("configure"), tr("Configure &Networks..."), coll,
+ coll->addAction("ConfigureNetworks", new Action(QIcon::fromTheme("configure"), tr("Configure &Networks..."), coll,
this, SLOT(on_actionConfigureNetworks_triggered())));
// FIXME: use QKeySequence::Quit once we depend on Qt 4.6
- coll->addAction("Quit", new Action(SmallIcon("application-exit"), tr("&Quit"), coll,
+ coll->addAction("Quit", new Action(QIcon::fromTheme("application-exit"), tr("&Quit"), coll,
this, SLOT(quit()), Qt::CTRL + Qt::Key_Q));
// View
lockAct->setCheckable(true);
connect(lockAct, SIGNAL(toggled(bool)), SLOT(on_actionLockLayout_toggled(bool)));
- coll->addAction("ToggleSearchBar", new Action(SmallIcon("edit-find"), tr("Show &Search Bar"), coll,
+ coll->addAction("ToggleSearchBar", new Action(QIcon::fromTheme("edit-find"), tr("Show &Search Bar"), coll,
0, 0, QKeySequence::Find))->setCheckable(true);
coll->addAction("ShowAwayLog", new Action(tr("Show Away Log"), coll,
this, SLOT(showAwayLog())));
- coll->addAction("ToggleMenuBar", new Action(SmallIcon("show-menu"), tr("Show &Menubar"), coll,
+ coll->addAction("ToggleMenuBar", new Action(QIcon::fromTheme("show-menu"), tr("Show &Menubar"), coll,
0, 0, QKeySequence(Qt::CTRL + Qt::Key_M)))->setCheckable(true);
coll->addAction("ToggleStatusBar", new Action(tr("Show Status &Bar"), coll,
0, 0))->setCheckable(true);
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
QAction *fullScreenAct = KStandardAction::fullScreen(this, SLOT(onFullScreenToggled()), this, coll);
#else
- QAction *fullScreenAct = new Action(SmallIcon("view-fullscreen"), tr("&Full Screen Mode"), coll,
+ QAction *fullScreenAct = new Action(QIcon::fromTheme("view-fullscreen"), tr("&Full Screen Mode"), coll,
this, SLOT(onFullScreenToggled()), QKeySequence(Qt::Key_F11));
fullScreenAct->setCheckable(true);
#endif
coll->addAction("ToggleFullScreen", fullScreenAct);
// Settings
- QAction *configureShortcutsAct = new Action(SmallIcon("configure-shortcuts"), tr("Configure &Shortcuts..."), coll,
+ QAction *configureShortcutsAct = new Action(QIcon::fromTheme("configure-shortcuts"), tr("Configure &Shortcuts..."), coll,
this, SLOT(showShortcutsDlg()));
configureShortcutsAct->setMenuRole(QAction::NoRole);
coll->addAction("ConfigureShortcuts", configureShortcutsAct);
#ifdef Q_OS_MAC
- QAction *configureQuasselAct = new Action(SmallIcon("configure"), tr("&Configure Quassel..."), coll,
+ QAction *configureQuasselAct = new Action(QIcon::fromTheme("configure"), tr("&Configure Quassel..."), coll,
this, SLOT(showSettingsDlg()));
configureQuasselAct->setMenuRole(QAction::PreferencesRole);
#else
- QAction *configureQuasselAct = new Action(SmallIcon("configure"), tr("&Configure Quassel..."), coll,
+ QAction *configureQuasselAct = new Action(QIcon::fromTheme("configure"), tr("&Configure Quassel..."), coll,
this, SLOT(showSettingsDlg()), QKeySequence(Qt::Key_F7));
#endif
coll->addAction("ConfigureQuassel", configureQuasselAct);
// Help
- QAction *aboutQuasselAct = new Action(SmallIcon("quassel"), tr("&About Quassel"), coll,
+ QAction *aboutQuasselAct = new Action(QIcon(":/icons/quassel.png"), tr("&About Quassel"), coll,
this, SLOT(showAboutDlg()));
aboutQuasselAct->setMenuRole(QAction::AboutRole);
coll->addAction("AboutQuassel", aboutQuasselAct);
qApp, SLOT(aboutQt()));
aboutQtAct->setMenuRole(QAction::AboutQtRole);
coll->addAction("AboutQt", aboutQtAct);
- coll->addAction("DebugNetworkModel", new Action(SmallIcon("tools-report-bug"), tr("Debug &NetworkModel"), coll,
+ coll->addAction("DebugNetworkModel", new Action(QIcon::fromTheme("tools-report-bug"), tr("Debug &NetworkModel"), coll,
this, SLOT(on_actionDebugNetworkModel_triggered())));
- coll->addAction("DebugBufferViewOverlay", new Action(SmallIcon("tools-report-bug"), tr("Debug &BufferViewOverlay"), coll,
+ coll->addAction("DebugBufferViewOverlay", new Action(QIcon::fromTheme("tools-report-bug"), tr("Debug &BufferViewOverlay"), coll,
this, SLOT(on_actionDebugBufferViewOverlay_triggered())));
- coll->addAction("DebugMessageModel", new Action(SmallIcon("tools-report-bug"), tr("Debug &MessageModel"), coll,
+ coll->addAction("DebugMessageModel", new Action(QIcon::fromTheme("tools-report-bug"), tr("Debug &MessageModel"), coll,
this, SLOT(on_actionDebugMessageModel_triggered())));
- coll->addAction("DebugHotList", new Action(SmallIcon("tools-report-bug"), tr("Debug &HotList"), coll,
+ coll->addAction("DebugHotList", new Action(QIcon::fromTheme("tools-report-bug"), tr("Debug &HotList"), coll,
this, SLOT(on_actionDebugHotList_triggered())));
- coll->addAction("DebugLog", new Action(SmallIcon("tools-report-bug"), tr("Debug &Log"), coll,
+ coll->addAction("DebugLog", new Action(QIcon::fromTheme("tools-report-bug"), tr("Debug &Log"), coll,
this, SLOT(on_actionDebugLog_triggered())));
- coll->addAction("ReloadStyle", new Action(SmallIcon("view-refresh"), tr("Reload Stylesheet"), coll,
+ coll->addAction("ReloadStyle", new Action(QIcon::fromTheme("view-refresh"), tr("Reload Stylesheet"), coll,
QtUi::style(), SLOT(reload()), QKeySequence::Refresh));
coll->addAction("HideCurrentBuffer", new Action(tr("Hide Current Buffer"), coll,
QKeySequence(jumpModifier + Qt::Key_9)))->setProperty("Index", 9);
// Buffer navigation
- coll->addAction("NextBufferView", new Action(SmallIcon("go-next-view"), tr("Activate Next Chat List"), coll,
+ coll->addAction("NextBufferView", new Action(QIcon::fromTheme("go-next-view"), tr("Activate Next Chat List"), coll,
this, SLOT(nextBufferView()), QKeySequence(QKeySequence::Forward)));
- coll->addAction("PreviousBufferView", new Action(SmallIcon("go-previous-view"), tr("Activate Previous Chat List"), coll,
+ coll->addAction("PreviousBufferView", new Action(QIcon::fromTheme("go-previous-view"), tr("Activate Previous Chat List"), coll,
this, SLOT(previousBufferView()), QKeySequence::Back));
- coll->addAction("NextBuffer", new Action(SmallIcon("go-down"), tr("Go to Next Chat"), coll,
+ coll->addAction("NextBuffer", new Action(QIcon::fromTheme("go-down"), tr("Go to Next Chat"), coll,
this, SLOT(nextBuffer()), QKeySequence(Qt::ALT + Qt::Key_Down)));
- coll->addAction("PreviousBuffer", new Action(SmallIcon("go-up"), tr("Go to Previous Chat"), coll,
+ coll->addAction("PreviousBuffer", new Action(QIcon::fromTheme("go-up"), tr("Go to Previous Chat"), coll,
this, SLOT(previousBuffer()), QKeySequence(Qt::ALT + Qt::Key_Up)));
}
_viewMenu->addAction(coll->action("LockLayout"));
_settingsMenu = menuBar()->addMenu(tr("&Settings"));
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
_settingsMenu->addAction(KStandardAction::configureNotifications(this, SLOT(showNotificationsDlg()), this));
_settingsMenu->addAction(KStandardAction::keyBindings(this, SLOT(showShortcutsDlg()), this));
#else
_helpMenu = menuBar()->addMenu(tr("&Help"));
_helpMenu->addAction(coll->action("AboutQuassel"));
-#ifndef HAVE_KDE
+#ifndef HAVE_KDE4
_helpMenu->addAction(coll->action("AboutQt"));
#else
_helpMenu->addAction(KStandardAction::aboutKDE(_kHelpMenu, SLOT(aboutKDE()), this));
#endif
_helpMenu->addSeparator();
- _helpDebugMenu = _helpMenu->addMenu(SmallIcon("tools-report-bug"), tr("Debug"));
+ _helpDebugMenu = _helpMenu->addMenu(QIcon::fromTheme("tools-report-bug"), tr("Debug"));
_helpDebugMenu->addAction(coll->action("DebugNetworkModel"));
_helpDebugMenu->addAction(coll->action("DebugBufferViewOverlay"));
_helpDebugMenu->addAction(coll->action("DebugMessageModel"));
setUnifiedTitleAndToolBarOnMac(true);
#endif
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
_mainToolBar = new KToolBar("MainToolBar", this, Qt::TopToolBarArea, false, true, true);
#else
_mainToolBar = new QToolBar(this);
void MainWin::showShortcutsDlg()
{
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
KShortcutsDialog dlg(KShortcutsEditor::AllActions, KShortcutsEditor::LetterShortcutsDisallowed, this);
foreach(KActionCollection *coll, QtUi::actionCollections())
dlg.addCollection(coll, coll->property("Category").toString());
if (!action)
return;
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
KToggleFullScreenAction *kAct = static_cast<KToggleFullScreenAction *>(action);
kAct->setFullScreen(this, kAct->isChecked());
#else
switch (net->connectionState()) {
case Network::Initialized:
- action->setIcon(SmallIcon("network-connect"));
+ action->setIcon(QIcon::fromTheme("network-connect"));
// if we have no currently selected buffer, jump to the first connecting statusbuffer
if (!bufferWidget()->currentBuffer().isValid()) {
QModelIndex idx = Client::networkModel()->networkIndex(net->networkId());
}
break;
case Network::Disconnected:
- action->setIcon(SmallIcon("network-disconnect"));
+ action->setIcon(QIcon::fromTheme("network-disconnect"));
break;
default:
- action->setIcon(SmallIcon("network-wired"));
+ action->setIcon(QIcon::fromTheme("network-wired"));
}
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#ifndef MAINWIN_H_
#define MAINWIN_H_
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
# include <KMainWindow>
#else
# include <QMainWindow>
//!\brief The main window of Quassel's QtUi.
class MainWin
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
: public KMainWindow
{
#else
void disconnectFromCore();
private:
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
KHelpMenu *_kHelpMenu;
#endif
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
_internalInitDone(false)
{
_internal = new CoreApplicationInternal(); // needed for parser options
-#if defined(HAVE_KDE) || defined(Q_OS_MAC)
+#if defined(HAVE_KDE4) || defined(Q_OS_MAC)
disableCrashhandler();
-#endif /* HAVE_KDE || Q_OS_MAC */
+#endif /* HAVE_KDE4 || Q_OS_MAC */
setRunMode(Quassel::Monolithic);
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
***************************************************************************/
#include <QFileDialog>
+#include <QIcon>
#include <QUrl>
#include <phonon/mediaobject.h>
#include "phononnotificationbackend.h"
#include "clientsettings.h"
-#include "iconloader.h"
#include "mainwin.h"
#include "qtui.h"
{
ui.setupUi(this);
_audioAvailable = !Phonon::BackendCapabilities::availableAudioOutputDevices().isEmpty();
- ui.enabled->setIcon(SmallIcon("media-playback-start"));
- ui.play->setIcon(SmallIcon("media-playback-start"));
- ui.open->setIcon(SmallIcon("document-open"));
+ ui.enabled->setIcon(QIcon::fromTheme("media-playback-start"));
+ ui.play->setIcon(QIcon::fromTheme("media-playback-start"));
+ ui.open->setIcon(QIcon::fromTheme("document-open"));
connect(ui.enabled, SIGNAL(toggled(bool)), SLOT(widgetChanged()));
connect(ui.filename, SIGNAL(textChanged(const QString &)), SLOT(widgetChanged()));
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "qtuiapplication.h"
+#include <QIcon>
#include <QStringList>
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
# include <KStandardDirs>
#endif
#include "qtuisettings.h"
QtUiApplication::QtUiApplication(int &argc, char **argv)
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
: KApplication(),
#else
: QApplication(argc, argv),
Quassel(),
_aboutToQuit(false)
{
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
Q_UNUSED(argc); Q_UNUSED(argv);
// We need to setup KDE's data dirs
dataDirs.append(":/data/");
setDataDirPaths(dataDirs);
-#else /* HAVE_KDE */
+#else /* HAVE_KDE4 */
setDataDirPaths(findDataDirPaths());
-#endif /* HAVE_KDE */
+#endif /* HAVE_KDE4 */
-#if defined(HAVE_KDE) || defined(Q_OS_MAC)
+#if defined(HAVE_KDE4) || defined(Q_OS_MAC)
disableCrashhandler();
-#endif /* HAVE_KDE || Q_OS_MAC */
+#endif /* HAVE_KDE4 || Q_OS_MAC */
setRunMode(Quassel::ClientOnly);
#if QT_VERSION < 0x050000
return false;
}
+ // Set the icon theme
+ if (Quassel::isOptionSet("icontheme"))
+ QIcon::setThemeName(Quassel::optionValue("icontheme"));
+ else if (QIcon::themeName().isEmpty())
+ // Some platforms don't set a default icon theme; chances are we can find our bundled Oxygen theme though
+ QIcon::setThemeName("oxygen");
+
// session resume
QtUi *gui = new QtUi();
Client::init(gui);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#ifndef QTUIAPPLICATION_H_
#define QTUIAPPLICATION_H_
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
# include <KApplication>
#else
# include <QApplication>
class QtUi;
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
class QtUiApplication : public KApplication, public Quassel
{
#else
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
+#include <QIcon>
#include <QMessageBox>
#include <QPushButton>
#include "settingsdlg.h"
#include "client.h"
-#include "iconloader.h"
SettingsDlg::SettingsDlg(QWidget *parent)
: QDialog(parent),
ui.setupUi(this);
setModal(true);
setAttribute(Qt::WA_DeleteOnClose, true);
- setWindowIcon(SmallIcon("configure"));
+ setWindowIcon(QIcon::fromTheme("configure"));
updateGeometry();
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
+#include <QIcon>
#include <QMessageBox>
#include <QPushButton>
#include "settingspagedlg.h"
-#include "iconloader.h"
-
SettingsPageDlg::SettingsPageDlg(SettingsPage *page, QWidget *parent)
: QDialog(parent)
{
ui.pageTitle->setText(page->title());
setWindowTitle(tr("Configure %1").arg(page->title()));
- setWindowIcon(SmallIcon("configure"));
+ setWindowIcon(QIcon::fromTheme("configure"));
// make the scrollarea behave sanely
ui.settingsFrame->setWidgetResizable(true);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "aliasessettingspage.h"
#include <QHeaderView>
+#include <QIcon>
#include <QItemSelectionModel>
-#include "iconloader.h"
-
AliasesSettingsPage::AliasesSettingsPage(QWidget *parent)
: SettingsPage(tr("IRC"), tr("Aliases"), parent)
{
ui.setupUi(this);
- ui.newAliasButton->setIcon(SmallIcon("list-add"));
- ui.deleteAliasButton->setIcon(SmallIcon("edit-delete"));
+ ui.newAliasButton->setIcon(QIcon::fromTheme("list-add"));
+ ui.deleteAliasButton->setIcon(QIcon::fromTheme("edit-delete"));
ui.aliasesView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui.aliasesView->setSelectionMode(QAbstractItemView::SingleSelection);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "bufferviewsettingspage.h"
+#include <QIcon>
#include <QMessageBox>
#include "client.h"
-#include "iconloader.h"
#include "network.h"
#include "bufferviewconfig.h"
#include "bufferviewfilter.h"
if (!(Client::coreFeatures() & Quassel::HideInactiveNetworks))
ui.hideInactiveNetworks->hide();
- ui.renameBufferView->setIcon(SmallIcon("edit-rename"));
- ui.addBufferView->setIcon(SmallIcon("list-add"));
- ui.deleteBufferView->setIcon(SmallIcon("edit-delete"));
+ ui.renameBufferView->setIcon(QIcon::fromTheme("edit-rename"));
+ ui.addBufferView->setIcon(QIcon::fromTheme("list-add"));
+ ui.deleteBufferView->setIcon(QIcon::fromTheme("edit-delete"));
reset();
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "chatmonitorsettingspage.h"
+#include <QIcon>
+
#include "client.h"
#include "networkmodel.h"
#include "bufferviewconfig.h"
#include "buffermodel.h"
#include "bufferview.h"
#include "bufferviewfilter.h"
-#include "iconloader.h"
#include "chatviewsettings.h"
#include <QVariant>
{
ui.setupUi(this);
- ui.activateBuffer->setIcon(SmallIcon("go-next"));
- ui.deactivateBuffer->setIcon(SmallIcon("go-previous"));
+ ui.activateBuffer->setIcon(QIcon::fromTheme("go-next"));
+ ui.deactivateBuffer->setIcon(QIcon::fromTheme("go-previous"));
// setup available buffers config (for the bufferview on the left)
_configAvailable = new BufferViewConfig(-667, this);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "coreaccountsettingspage.h"
+#include <QIcon>
+
#include "client.h"
#include "clientsettings.h"
#include "coreaccountmodel.h"
-#include "iconloader.h"
CoreAccountSettingsPage::CoreAccountSettingsPage(QWidget *parent)
: SettingsPage(tr("Remote Cores"), QString(), parent),
{
ui.setupUi(this);
initAutoWidgets();
- ui.addAccountButton->setIcon(SmallIcon("list-add"));
- ui.editAccountButton->setIcon(SmallIcon("document-edit"));
- ui.deleteAccountButton->setIcon(SmallIcon("edit-delete"));
+ ui.addAccountButton->setIcon(QIcon::fromTheme("list-add"));
+ ui.editAccountButton->setIcon(QIcon::fromTheme("document-edit"));
+ ui.deleteAccountButton->setIcon(QIcon::fromTheme("edit-delete"));
_model = new CoreAccountModel(Client::coreAccountModel(), this);
_filteredModel = new FilteredCoreAccountModel(_model, this);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
: SettingsPage(tr("Remote Cores"), tr("Connection"), parent)
{
ui.setupUi(this);
-#ifndef HAVE_KDE
- ui.useSolid->hide();
-#endif
initAutoWidgets();
- connect(ui.useSolid, SIGNAL(toggled(bool)), SLOT(widgetHasChanged()));
+ connect(ui.useQNetworkConfigurationManager, SIGNAL(toggled(bool)), SLOT(widgetHasChanged()));
connect(ui.usePingTimeout, SIGNAL(toggled(bool)), SLOT(widgetHasChanged()));
connect(ui.useNoTimeout, SIGNAL(toggled(bool)), SLOT(widgetHasChanged()));
}
void CoreConnectionSettingsPage::defaults()
{
-#ifdef HAVE_KDE
- setRadioButtons(CoreConnectionSettings::UseSolid);
-#else
- setRadioButtons(CoreConnectionSettings::UsePingTimeout);
-#endif
+ setRadioButtons(CoreConnectionSettings::UseQNetworkConfigurationManager);
SettingsPage::defaults();
}
void CoreConnectionSettingsPage::setRadioButtons(CoreConnectionSettings::NetworkDetectionMode mode)
{
switch (mode) {
-#ifdef HAVE_KDE
- case CoreConnectionSettings::UseSolid:
- ui.useSolid->setChecked(true);
+ case CoreConnectionSettings::UseQNetworkConfigurationManager:
+ ui.useQNetworkConfigurationManager->setChecked(true);
break;
-#endif
case CoreConnectionSettings::UsePingTimeout:
ui.usePingTimeout->setChecked(true);
break;
CoreConnectionSettings::NetworkDetectionMode CoreConnectionSettingsPage::modeFromRadioButtons() const
{
-#ifdef HAVE_KDE
- if (ui.useSolid->isChecked())
- return CoreConnectionSettings::UseSolid;
-#endif
+ if (ui.useQNetworkConfigurationManager->isChecked())
+ return CoreConnectionSettings::UseQNetworkConfigurationManager;
if (ui.usePingTimeout->isChecked())
return CoreConnectionSettings::UsePingTimeout;
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
<rect>
<x>0</x>
<y>0</y>
- <width>446</width>
+ <width>476</width>
<height>465</height>
</rect>
</property>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
- <widget class="QRadioButton" name="useSolid">
+ <widget class="QRadioButton" name="useQNetworkConfigurationManager">
<property name="toolTip">
- <string>Rely on KDE's hardware layer to detect if we're online. Recommended for most KDE users</string>
+ <string>Rely on Qt's network configuration manager to detect if we're online</string>
</property>
<property name="text">
- <string>Use KDE's network status detection (via Solid)</string>
+ <string>Automatic</string>
</property>
<property name="checked">
<bool>false</bool>
<item>
<widget class="QSpinBox" name="reconnectInterval">
<property name="toolTip">
- <string>Actively ping the remote core and disconnect if we didn't get a reply after a certain time</string>
+ <string>Interval between consecutive connection attempts</string>
</property>
<property name="suffix">
<string> seconds</string>
</item>
</layout>
</widget>
+ <tabstops>
+ <tabstop>useQNetworkConfigurationManager</tabstop>
+ <tabstop>usePingTimeout</tabstop>
+ <tabstop>pingTimeout</tabstop>
+ <tabstop>useNoTimeout</tabstop>
+ <tabstop>autoReconnect</tabstop>
+ <tabstop>reconnectInterval</tabstop>
+ </tabstops>
<resources/>
<connections>
<connection>
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
NotificationSettings notificationSettings;
notificationSettings.setHighlightList(highlightList);
- NotificationSettings::HighlightNickType highlightNickType;
- if (ui.highlightNoNick->isChecked())
- highlightNickType = NotificationSettings::NoNick;
+ NotificationSettings::HighlightNickType highlightNickType = NotificationSettings::NoNick;
if (ui.highlightCurrentNick->isChecked())
highlightNickType = NotificationSettings::CurrentNick;
if (ui.highlightAllNicks->isChecked())
{
NotificationSettings notificationSettings;
- NotificationSettings::HighlightNickType highlightNickType;
- if (ui.highlightNoNick->isChecked())
- highlightNickType = NotificationSettings::NoNick;
+ NotificationSettings::HighlightNickType highlightNickType = NotificationSettings::NoNick;
if (ui.highlightCurrentNick->isChecked())
highlightNickType = NotificationSettings::CurrentNick;
if (ui.highlightAllNicks->isChecked())
highlightNickType = NotificationSettings::AllNicks;
- if (notificationSettings.highlightNick() != highlightNickType) return true;
- if (notificationSettings.nicksCaseSensitive() != ui.nicksCaseSensitive->isChecked()) return true;
-
- if (notificationSettings.highlightList() != highlightList) return true;
+ if (notificationSettings.highlightNick() != highlightNickType)
+ return true;
+ if (notificationSettings.nicksCaseSensitive() != ui.nicksCaseSensitive->isChecked())
+ return true;
+ if (notificationSettings.highlightList() != highlightList)
+ return true;
return false;
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "identitiessettingspage.h"
+#include <QIcon>
#include <QInputDialog>
#include <QMessageBox>
#include "client.h"
-#include "iconloader.h"
#include "signalproxy.h"
IdentitiesSettingsPage::IdentitiesSettingsPage(QWidget *parent)
_editSsl(false)
{
ui.setupUi(this);
- ui.renameIdentity->setIcon(BarIcon("edit-rename"));
- ui.addIdentity->setIcon(BarIcon("list-add-user"));
- ui.deleteIdentity->setIcon(BarIcon("list-remove-user"));
+ ui.renameIdentity->setIcon(QIcon::fromTheme("edit-rename"));
+ ui.addIdentity->setIcon(QIcon::fromTheme("list-add-user"));
+ ui.deleteIdentity->setIcon(QIcon::fromTheme("list-remove-user"));
coreConnectionStateChanged(Client::isConnected()); // need a core connection!
connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), this, SLOT(coreConnectionStateChanged(bool)));
: QDialog(parent)
{
ui.setupUi(this);
- ui.abort->setIcon(SmallIcon("dialog-cancel"));
+ ui.abort->setIcon(QIcon::fromTheme("dialog-cancel"));
numevents = toCreate.count() + toUpdate.count() + toRemove.count();
rcvevents = 0;
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QFileDialog>
+#include <QIcon>
#include <QMimeData>
#include <QUrl>
#include <QMessageBox>
#endif
#include "client.h"
-#include "iconloader.h"
IdentityEditWidget::IdentityEditWidget(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
- ui.addNick->setIcon(SmallIcon("list-add"));
- ui.deleteNick->setIcon(SmallIcon("edit-delete"));
- ui.renameNick->setIcon(SmallIcon("edit-rename"));
- ui.nickUp->setIcon(SmallIcon("go-up"));
- ui.nickDown->setIcon(SmallIcon("go-down"));
+ ui.addNick->setIcon(QIcon::fromTheme("list-add"));
+ ui.deleteNick->setIcon(QIcon::fromTheme("edit-delete"));
+ ui.renameNick->setIcon(QIcon::fromTheme("edit-rename"));
+ ui.nickUp->setIcon(QIcon::fromTheme("go-up"));
+ ui.nickDown->setIcon(QIcon::fromTheme("go-down"));
// We need to know whenever the state of input widgets changes...
connect(ui.realName, SIGNAL(textEdited(const QString &)), this, SIGNAL(widgetHasChanged()));
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "ignorelistsettingspage.h"
#include <QHeaderView>
+#include <QIcon>
#include <QItemSelectionModel>
#include <QModelIndex>
#include <QPainter>
#include <QString>
#include <QEvent>
#include <QDebug>
-#include "iconloader.h"
IgnoreListSettingsPage::IgnoreListSettingsPage(QWidget *parent)
: SettingsPage(tr("IRC"), tr("Ignore List"), parent)
{
ui.setupUi(this);
_delegate = new IgnoreListDelegate(ui.ignoreListView);
- ui.newIgnoreRuleButton->setIcon(SmallIcon("list-add"));
- ui.deleteIgnoreRuleButton->setIcon(SmallIcon("edit-delete"));
- ui.editIgnoreRuleButton->setIcon(SmallIcon("configure"));
+ ui.newIgnoreRuleButton->setIcon(QIcon::fromTheme("list-add"));
+ ui.deleteIgnoreRuleButton->setIcon(QIcon::fromTheme("edit-delete"));
+ ui.editIgnoreRuleButton->setIcon(QIcon::fromTheme("configure"));
ui.ignoreListView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui.ignoreListView->setSelectionMode(QAbstractItemView::SingleSelection);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
{
ui.setupUi(this);
-#ifndef HAVE_KDE
+#ifndef HAVE_KDE4
ui.enableSpellCheck->hide();
#endif
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This class has been inspired by KDE's KKeySequenceWidget and uses *
#include <QDebug>
#include <QKeyEvent>
#include <QHBoxLayout>
+#include <QIcon>
#include <QMessageBox>
#include <QToolButton>
#include "action.h"
#include "actioncollection.h"
-#include "iconloader.h"
#include "keysequencewidget.h"
KeySequenceButton::KeySequenceButton(KeySequenceWidget *d_, QWidget *parent)
_keyButton = new KeySequenceButton(this, this);
_keyButton->setFocusPolicy(Qt::StrongFocus);
- _keyButton->setIcon(SmallIcon("configure"));
+ _keyButton->setIcon(QIcon::fromTheme("configure"));
_keyButton->setToolTip(tr("Click on the button, then enter the shortcut like you would in the program.\nExample for Ctrl+a: hold the Ctrl key and press a."));
layout->addWidget(_keyButton);
layout->addWidget(_clearButton);
if (qApp->isLeftToRight())
- _clearButton->setIcon(SmallIcon("edit-clear-locationbar-rtl"));
+ _clearButton->setIcon(QIcon::fromTheme("edit-clear-locationbar-rtl", QIcon::fromTheme("edit-clear")));
else
- _clearButton->setIcon(SmallIcon("edit-clear-locationbar-ltr"));
+ _clearButton->setIcon(QIcon::fromTheme("edit-clear-locationbar-ltr", QIcon::fromTheme("edit-clear")));
setLayout(layout);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This class has been inspired by KDE's KKeySequenceWidget and uses *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
***************************************************************************/
#include <QHeaderView>
+#include <QIcon>
#include <QMessageBox>
#include <QTextCodec>
#include "networkssettingspage.h"
#include "client.h"
-#include "iconloader.h"
#include "identity.h"
#include "network.h"
#include "presetnetworks.h"
#endif
// set up icons
- ui.renameNetwork->setIcon(SmallIcon("edit-rename"));
- ui.addNetwork->setIcon(SmallIcon("list-add"));
- ui.deleteNetwork->setIcon(SmallIcon("edit-delete"));
- ui.addServer->setIcon(SmallIcon("list-add"));
- ui.deleteServer->setIcon(SmallIcon("edit-delete"));
- ui.editServer->setIcon(SmallIcon("configure"));
- ui.upServer->setIcon(SmallIcon("go-up"));
- ui.downServer->setIcon(SmallIcon("go-down"));
- ui.editIdentities->setIcon(SmallIcon("configure"));
+ ui.renameNetwork->setIcon(QIcon::fromTheme("edit-rename"));
+ ui.addNetwork->setIcon(QIcon::fromTheme("list-add"));
+ ui.deleteNetwork->setIcon(QIcon::fromTheme("edit-delete"));
+ ui.addServer->setIcon(QIcon::fromTheme("list-add"));
+ ui.deleteServer->setIcon(QIcon::fromTheme("edit-delete"));
+ ui.editServer->setIcon(QIcon::fromTheme("configure"));
+ ui.upServer->setIcon(QIcon::fromTheme("go-up"));
+ ui.downServer->setIcon(QIcon::fromTheme("go-down"));
+ ui.editIdentities->setIcon(QIcon::fromTheme("configure"));
_ignoreWidgetChanges = false;
- connectedIcon = SmallIcon("network-connect");
- connectingIcon = SmallIcon("network-wired"); // FIXME network-connecting
- disconnectedIcon = SmallIcon("network-disconnect");
+ connectedIcon = QIcon::fromTheme("network-connect");
+ connectingIcon = QIcon::fromTheme("network-wired"); // FIXME network-connecting
+ disconnectedIcon = QIcon::fromTheme("network-disconnect");
foreach(int mib, QTextCodec::availableMibs()) {
QByteArray codec = QTextCodec::codecForMib(mib)->name();
foreach(Network::Server server, info.serverList) {
QListWidgetItem *item = new QListWidgetItem(QString("%1:%2").arg(server.host).arg(server.port));
if (server.useSsl)
- item->setIcon(SmallIcon("document-encrypt"));
+ item->setIcon(QIcon::fromTheme("document-encrypt"));
ui.serverList->addItem(item);
}
//setItemState(id);
NetworkAddDlg::NetworkAddDlg(const QStringList &exist, QWidget *parent) : QDialog(parent), existing(exist)
{
ui.setupUi(this);
- ui.useSSL->setIcon(SmallIcon("document-encrypt"));
+ ui.useSSL->setIcon(QIcon::fromTheme("document-encrypt"));
// read preset networks
QStringList networks = PresetNetworks::names();
ServerEditDlg::ServerEditDlg(const Network::Server &server, QWidget *parent) : QDialog(parent)
{
ui.setupUi(this);
- ui.useSSL->setIcon(SmallIcon("document-encrypt"));
+ ui.useSSL->setIcon(QIcon::fromTheme("document-encrypt"));
ui.host->setText(server.host);
ui.host->setFocus();
ui.port->setValue(server.port);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#ifndef NETWORKSSETTINGSPAGE_H
#define NETWORKSSETTINGSPAGE_H
-#include <QPixmap>
+#include <QIcon>
#include "network.h"
#include "settingspage.h"
CertIdentity *_cid;
#endif
- QPixmap connectedIcon, connectingIcon, disconnectedIcon;
+ QIcon connectedIcon, connectingIcon, disconnectedIcon;
void reset();
bool testHasChanged();
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "simplenetworkeditor.h"
-#include "iconloader.h"
+#include <QIcon>
#include "networkssettingspage.h"
{
ui.setupUi(this);
- ui.addServer->setIcon(SmallIcon("list-add"));
- ui.deleteServer->setIcon(SmallIcon("edit-delete"));
- ui.editServer->setIcon(SmallIcon("configure"));
- ui.upServer->setIcon(SmallIcon("go-up"));
- ui.downServer->setIcon(SmallIcon("go-down"));
+ ui.addServer->setIcon(QIcon::fromTheme("list-add"));
+ ui.deleteServer->setIcon(QIcon::fromTheme("edit-delete"));
+ ui.editServer->setIcon(QIcon::fromTheme("configure"));
+ ui.upServer->setIcon(QIcon::fromTheme("go-up"));
+ ui.downServer->setIcon(QIcon::fromTheme("go-down"));
connect(ui.networkNameEdit, SIGNAL(textEdited(const QString &)), this, SIGNAL(widgetHasChanged()));
connect(ui.channelList, SIGNAL(textChanged()), this, SIGNAL(widgetHasChanged()));
foreach(Network::Server server, _networkInfo.serverList) {
QListWidgetItem *item = new QListWidgetItem(QString("%1:%2").arg(server.host).arg(server.port));
if (server.useSsl)
- item->setIcon(SmallIcon("document-encrypt"));
+ item->setIcon(QIcon::fromTheme("document-encrypt"));
ui.serverList->addItem(item);
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QtGlobal>
#include "client.h"
-#include "iconloader.h"
#include "networkmodel.h"
#include "systraynotificationbackend.h"
#include "qtui.h"
//TODO: try to get an instance of the tray icon to be able to show popups
m_snore = new Snore::SnoreCore();
m_snore->loadPlugins(Snore::SnorePlugin::BACKEND);
- m_icon = Snore::Icon(DesktopIcon("quassel").toImage());
+ m_icon = Snore::Icon(QIcon::fromTheme("quassel", QIcon(":/icons/quassel.png")).pixmap(48).toImage());
m_application = Snore::Application("Quassel", m_icon);
m_application.hints().setValue("WINDOWS_APP_ID","QuasselProject.QuasselIRC");
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This contains code from KStatusNotifierItem, part of the KDE libs *
protected:
virtual QString iconNameForAction(QAction *action) // TODO Qt 4.7: fixme when we have converted our iconloader
{
- Icon icon(action->icon());
-#if QT_VERSION >= 0x040701
- // QIcon::name() is in the 4.7 git branch, but it is not in 4.7 TP.
- // If you get a build error here, you need to update your pre-release
- // of Qt 4.7.
+ QIcon icon(action->icon());
return icon.isNull() ? QString() : icon.name();
-#else
- return QString();
-#endif
}
};
{
if (mode() == StatusNotifier) {
//FIXME: ugly ugly workaround to weird QMenu's focus problems
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
if (watched == trayMenu() &&
(event->type() == QEvent::WindowDeactivate || (event->type() == QEvent::MouseButtonRelease && static_cast<QMouseEvent *>(event)->button() == Qt::LeftButton))) {
// put at the back of event queue to let the action activate anyways
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This contains code from KStatusNotifierItem, part of the KDE libs *
#include <QMenu>
#include <QMovie>
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
# include <KWindowInfo>
# include <KWindowSystem>
#endif
//TODO: nicer placement, possible?
if (!m_statusNotifierItem->trayMenu()->isVisible()) {
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
m_statusNotifierItem->trayMenu()->setWindowFlags(Qt::Window|Qt::FramelessWindowHint);
#endif
m_statusNotifierItem->trayMenu()->popup(QPoint(x, y));
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
KWindowSystem::setState(m_statusNotifierItem->trayMenu()->winId(), NET::SkipTaskbar|NET::SkipPager|NET::KeepAbove);
KWindowSystem::setType(m_statusNotifierItem->trayMenu()->winId(), NET::PopupMenu);
KWindowSystem::forceActiveWindow(m_statusNotifierItem->trayMenu()->winId());
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This file is free software; you can redistribute it and/or modify *
#include "action.h"
#include "actioncollection.h"
#include "client.h"
-#include "iconloader.h"
#include "qtui.h"
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
# include <KMenu>
# include <KWindowInfo>
# include <KWindowSystem>
_mode(Invalid),
_state(Passive),
_shouldBeVisible(true),
- _passiveIcon(DesktopIcon("quassel-inactive")),
- _activeIcon(DesktopIcon("quassel")),
- _needsAttentionIcon(DesktopIcon("quassel-message")),
+ _passiveIcon(QIcon::fromTheme("quassel-inactive", QIcon(":/icons/quassel-inactive.png"))),
+ _activeIcon(QIcon::fromTheme("quassel", QIcon(":/icons/quassel.png"))),
+ _needsAttentionIcon(QIcon::fromTheme("quassel-message", QIcon(":/icons/quassel-message.png"))),
_trayMenu(0),
_associatedWidget(parent)
{
ActionCollection *coll = QtUi::actionCollection("General");
_minimizeRestoreAction = new Action(tr("&Minimize"), this, this, SLOT(minimizeRestore()));
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
KMenu *kmenu;
_trayMenu = kmenu = new KMenu();
kmenu->addTitle(_activeIcon, "Quassel IRC");
_trayMenu->setTitle("Quassel IRC");
-#ifndef HAVE_KDE
+#ifndef HAVE_KDE4
_trayMenu->setAttribute(Qt::WA_Hover);
#endif
{
if (mode_ != _mode) {
_mode = mode_;
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
if (_trayMenu) {
if (_mode == Legacy) {
_trayMenu->setWindowFlags(Qt::Popup);
}
-Icon SystemTray::stateIcon() const
+QIcon SystemTray::stateIcon() const
{
return stateIcon(state());
}
-Icon SystemTray::stateIcon(State state) const
+QIcon SystemTray::stateIcon(State state) const
{
switch (state) {
case Passive:
case NeedsAttention:
return _needsAttentionIcon;
}
- return Icon();
+ return QIcon();
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This file is free software; you can redistribute it and/or modify *
#ifndef SYSTEMTRAY_H_
#define SYSTEMTRAY_H_
-#include "icon.h"
+#include <QIcon>
class Action;
class QMenu;
signals:
void activated(SystemTray::ActivationReason);
- void iconChanged(const Icon &);
+ void iconChanged(const QIcon &icon);
void animationEnabledChanged(bool);
void toolTipChanged(const QString &title, const QString &subtitle);
void messageClicked(uint notificationId);
virtual void setMode(Mode mode);
inline bool shouldBeVisible() const;
- virtual Icon stateIcon() const;
- Icon stateIcon(State state) const;
+ virtual QIcon stateIcon() const;
+ QIcon stateIcon(State state) const;
inline QString toolTipTitle() const;
inline QString toolTipSubTitle() const;
inline QMenu *trayMenu() const;
bool _shouldBeVisible;
QString _toolTipTitle, _toolTipSubTitle;
- Icon _passiveIcon, _activeIcon, _needsAttentionIcon;
+ QIcon _passiveIcon, _activeIcon, _needsAttentionIcon;
bool _animationEnabled;
QMenu *_trayMenu;
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QApplication>
#include <QCheckBox>
#include <QGroupBox>
+#include <QIcon>
#include <QHBoxLayout>
#include "systraynotificationbackend.h"
#include "client.h"
#include "clientsettings.h"
-#include "icon.h"
-#include "iconloader.h"
#include "mainwin.h"
#include "networkmodel.h"
#include "qtui.h"
SystrayNotificationBackend::ConfigWidget::ConfigWidget(QWidget *parent) : SettingsPage("Internal", "SystrayNotification", parent)
{
_showBubbleBox = new QCheckBox(tr("Show a message in a popup"));
- _showBubbleBox->setIcon(SmallIcon("dialog-information"));
+ _showBubbleBox->setIcon(QIcon::fromTheme("dialog-information"));
connect(_showBubbleBox, SIGNAL(toggled(bool)), this, SLOT(widgetChanged()));
QHBoxLayout *layout = new QHBoxLayout(this);
layout->addWidget(_showBubbleBox);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QApplication>
#include <QCheckBox>
#include <QHBoxLayout>
+#include <QIcon>
#include <QSpinBox>
#include "taskbarnotificationbackend.h"
#include "clientsettings.h"
-#include "iconloader.h"
#include "mainwin.h"
#include "qtui.h"
#else
layout->addWidget(enabledBox = new QCheckBox(tr("Mark taskbar entry, timeout:"), this));
#endif
- enabledBox->setIcon(SmallIcon("flag-blue"));
+ enabledBox->setIcon(QIcon::fromTheme("flag-blue"));
enabledBox->setEnabled(true);
timeoutBox = new QSpinBox(this);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "topicwidget.h"
+#include <QIcon>
+
#include "client.h"
-#include "iconloader.h"
#include "networkmodel.h"
#include "uisettings.h"
#include "graphicalui.h"
: AbstractItemView(parent)
{
ui.setupUi(this);
- ui.topicEditButton->setIcon(SmallIcon("edit-rename"));
+ ui.topicEditButton->setIcon(QIcon::fromTheme("edit-rename"));
ui.topicLineEdit->setLineWrapEnabled(true);
ui.topicLineEdit->installEventFilter(this);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
# Builds the uisupport module
set(SOURCES
+ aboutdata.cpp
abstractbuffercontainer.cpp
abstractitemview.cpp
action.cpp
flatproxymodel.cpp
fontselector.cpp
graphicalui.cpp
- icon.cpp
- iconloader.cpp
multilineedit.cpp
networkmodelcontroller.cpp
nickview.cpp
abstractnotificationbackend.h
)
-if (KDE4_FOUND)
+if (WITH_KDE4)
include_directories(${KDE4_INCLUDES})
add_definitions(-DHAVE_KDE ${KDE4_DEFINITIONS})
set(SOURCES ${SOURCES} kcmdlinewrapper.cpp)
add_library(mod_uisupport STATIC ${SOURCES})
qt_use_modules(mod_uisupport Core Gui Network ${qt_modules})
-if (KDE4_FOUND)
+target_link_libraries(mod_uisupport mod_client mod_common)
+
+if (WITH_KDE4)
target_link_libraries(mod_uisupport ${KDE4_KDECORE_LIBS} ${KDE4_KDEUI_LIBRARY})
endif()
-add_dependencies(mod_uisupport mod_common mod_client)
+if (WITH_KF5)
+ target_link_libraries(mod_uisupport KF5::CoreAddons KF5::TextWidgets)
+endif()
--- /dev/null
+/***************************************************************************
+ * Copyright (C) 2005-2015 by the Quassel Project *
+ * devel@quassel-irc.org *
+ * *
+ * 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. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include "aboutdata.h"
+
+#include <QImage>
+
+#include "quassel.h"
+
+
+AboutPerson::AboutPerson(const QString &name, const QString &nick, const QString &task, const QString &emailAddress, QLocale::Language translatedLanguage)
+ : _name(name)
+ , _nick(nick)
+ , _task(task)
+ , _emailAddress(emailAddress)
+ , _language(translatedLanguage)
+{
+
+}
+
+
+QString AboutPerson::name() const
+{
+ return _name;
+}
+
+
+QString AboutPerson::nick() const
+{
+ return _nick;
+}
+
+
+QString AboutPerson::task() const
+{
+ return _task;
+}
+
+
+QString AboutPerson::emailAddress() const
+{
+ return _emailAddress;
+}
+
+
+QLocale::Language AboutPerson::translatedLanguage() const
+{
+ return _language;
+}
+
+
+QString AboutPerson::prettyName() const
+{
+ if (!name().isEmpty() && !nick().isEmpty())
+ return name() + " (" + nick() + ')';
+
+ if (name().isEmpty() && !nick().isEmpty())
+ return nick();
+
+ return name();
+}
+
+
+/**************************************************************************************************/
+
+
+AboutData::AboutData(QObject *parent)
+ : QObject(parent)
+{
+
+}
+
+
+QList<AboutPerson> AboutData::authors() const
+{
+ return _authors;
+}
+
+
+QList< AboutPerson > AboutData::credits() const
+{
+ return _credits;
+}
+
+
+AboutData &AboutData::addAuthor(const AboutPerson &author)
+{
+ _authors.append(author);
+ return *this;
+}
+
+
+AboutData &AboutData::addAuthors(std::initializer_list<AboutPerson> authors)
+{
+ _authors.append(authors);
+ return *this;
+}
+
+
+AboutData &AboutData::addCredit(const AboutPerson &credit)
+{
+ _credits.append(credit);
+ return *this;
+}
+
+
+AboutData &AboutData::addCredits(std::initializer_list<AboutPerson> credits)
+{
+ _credits.append(credits);
+ return *this;
+}
+
+#ifdef HAVE_KF5
+
+KAboutData AboutData::kAboutData() const
+{
+ KAboutData aboutData(
+ Quassel::buildInfo().applicationName,
+ tr("Quassel IRC"),
+ Quassel::buildInfo().plainVersionString
+ );
+ aboutData.addLicense(KAboutLicense::GPL_V2);
+ aboutData.addLicense(KAboutLicense::GPL_V3);
+ aboutData.setShortDescription(tr("A modern, distributed IRC client"));
+ aboutData.setProgramLogo(QVariant::fromValue(QImage(":/pics/quassel-logo.png")));
+ aboutData.setBugAddress("http://bugs.quassel-irc.org/projects/quassel-irc/issues/new");
+ aboutData.setOrganizationDomain(Quassel::buildInfo().organizationDomain.toUtf8());
+
+ for (const auto &person : authors()) {
+ aboutData.addAuthor(person.prettyName(), person.task(), person.emailAddress());
+ }
+
+ for (const auto &person : credits()) {
+ aboutData.addCredit(person.prettyName(), person.task(), person.emailAddress());
+ }
+
+ return aboutData;
+}
+
+#endif
+
+
+/**************************************************************************************************/
+
+/*
+ * NOTE: The list of contributors was retrieved from the Git history, but sometimes things fall
+ * through the cracks... especially for translations, we don't have an easy way to track
+ * contributors' names.
+ * If you find wrong data for yourself, want your nickname and/or mail addresses added or
+ * removed, or feel left out or unfairly credited, please don't hesitate to let us know! We
+ * do want to credit everyone who has contributed to Quassel development.
+ */
+
+void AboutData::setQuasselPersons(AboutData *aboutData)
+{
+ aboutData->addAuthors({
+ { "Manuel Nickschas", "Sputnick", tr("Project Founder, Lead Developer"), "sputnick@quassel-irc.org" },
+ { "Marcus Eggenberger", "EgS", tr("Project Motivator, Lead Developer"), "egs@quassel-irc.org" },
+ { "Alexander von Renteln", "phon", tr("Former Lead Developer"), "phon@quassel-irc.org" },
+ { "Daniel Albers", "al", tr("Master of Translation, many fixes and enhancements") },
+ { "Sebastian Goth", "seezer", tr("Many features, fixes and improvements") },
+ { "Bas Pape", "Tucos", tr("Many fixes and improvements, bug and patch triaging, community support") },
+ });
+
+ aboutData->addCredits({
+ { "Adam Harwood", "2kah", tr("Chatview improvements") },
+ { "Adam Tulinius", "adamt", tr("Early beta tester and bughunter, Danish translation"), "", QLocale::Danish },
+ { "Adolfo Jayme Barrientos", "", tr("Spanish translation"), "", QLocale::Spanish },
+ { "Alexander Stein", "", tr("Tray icon fix") },
+ { "Alf Gaida", "agaida", tr("Language improvements") },
+ { "Allan Jude", "", tr("Documentation improvements") },
+ { "Arthur Titeica", "roentgen", tr("Romanian translation"), "", QLocale::Romanian },
+ { "Atte Virtanen", "", tr("Finnish translation"), "", QLocale::Finnish },
+ { "Aurélien Gâteau", "agateau", tr("Message indicator support") },
+ { "Awad Mackie", "firesock", tr("Chatview improvements") },
+ { "Benjamin Zeller", "zbenjamin", tr("Windows build system fixes") },
+ { "Bruno Brigras", "", tr("Crash fixes") },
+ { "Bruno Patri", "", tr("French translation"), "", QLocale::French },
+ { "Celeste Paul", "seele", tr("Usability review") },
+ { "Chris Fuenty", "stitch", tr("SASL support") },
+ { "Chris H", "Zren", tr("Various improvements") },
+ { "Chris Le Sueur", "Fish-Face", tr("Various fixes and improvements") },
+ { "Chris Moeller", "kode54", tr("Various fixes and improvements") },
+ { "", "Condex", tr("Galician translation"), "", QLocale::Galician },
+ { "", "cordata", tr("Esperanto translation"), "", QLocale::Esperanto },
+ { "Daniel E. Moctezuma", "", tr("Japanese translation"), "", QLocale::Japanese },
+ { "Daniel Meltzer", "hydrogen", tr("Various fixes and improvements") },
+ { "Daniel Pielmeier", "billie", tr("Gentoo maintainer") },
+ { "Daniel Steinmetz", "son", tr("Early beta tester and bughunter (on Vista™!)") },
+ { "David Planella", "", tr("Translation system fixes") },
+ { "David Sansome", "", tr("OSX Notification Center support") },
+ { "David Roden", "Bombe", tr("Fixes") },
+ { "Deniz Türkoglu", "", tr("Mac fixes") },
+ { "Dennis Schridde", "devurandom", tr("D-Bus notifications") },
+ { "", "derpella", tr("Polish translation"), "", QLocale::Polish },
+ { "Diego Pettenò", "Flameeyes", tr("Build system improvements") },
+ { "Dirk Rettschlag", "MarcLandis", tr("Formatting support and other input line improvements, many other fixes") },
+ { "", "Dorian", tr("French translation"), "", QLocale::French },
+ { "Drew Patridge", "LinuxDolt", tr("BluesTheme stylesheet") },
+ { "Edward Hades", "", tr("Russian translation"), "", QLocale::Russian },
+ { "Fabiano Francesconi", "elbryan", tr("Italian translation"), "", QLocale::Italian },
+ { "Felix Geyer", "debfx", tr("Certificate handling improvements") },
+ { "Florent Castelli", "", tr("Sanitize topic handling") },
+ { "Frederik M.J. Vestre", "freqmod", tr("Norwegian translation"), "", QLocale::Norwegian },
+ { "Gábor Németh", "ELITE_x", tr("Hungarian translation"), "", QLocale::Hungarian },
+ { "Gryllida A", "gry", tr("IRC parser improvements") },
+ { "H. İbrahim Güngör", "igungor", tr("Turkish translation"), "", QLocale::Turkish },
+ { "Harald Fernengel", "harryF", tr("Initial Qt5 support") },
+ { "Harald Sitter", "apachelogger", tr("{Ku|U}buntu packager, motivator, promoter") },
+ { "Hendrik Leppkes", "nevcairiel", tr("Various features") },
+ { "Henning Rohlfs", "honk", tr("Various fixes") },
+ { "J-P Nurmi", "", tr("Various fixes") },
+ { "Jaak Ristioja", "", tr("Bugfixes") },
+ { "Jason Lynch", "", tr("Bugfixes") },
+ { "Jens Arnold", "amiconn", tr("Postgres migration fixes") },
+ { "Jerome Leclanche", "Adys", tr("Context menu fixes") },
+ { "Jesper Thomschütz", "", tr("Various fixes") },
+ { "Jiri Grönroos", "", tr("Finnish translation"), "", QLocale::Finnish },
+ { "Johannes Huber", "johu", tr("Many fixes and improvements, bug triaging") },
+ { "John Hand", "nox", tr("Original \"All-Seeing Eye\" logo") },
+ { "Jonas Heese", "Dante", tr("Project founder, various improvements") },
+ { "Joshua T Corbin", "tvakah", tr("Various fixes") },
+ { "Jovan Jojkić", "", tr("Serbian translation"), "", QLocale::Serbian },
+ { "Jure Repinc", "JLP", tr("Slovenian translation"), "", QLocale::Slovenian },
+ { "Jussi Schultink", "jussi01", tr("Tireless tester, {Ku|U}buntu tester and lobbyist, liters of delicious Finnish alcohol") },
+ { "K. Ernest Lee", "iFire", tr("Qt5 porting help, Travis CI setup") },
+ { "Kevin Funk", "KRF", tr("German translation"), "", QLocale::German },
+ { "", "Larso", tr("Finnish translation"), "", QLocale::Finnish },
+ { "Lasse Liehu", "", tr("Finnish translation"), "", QLocale::Finnish },
+ { "Leo Franchi", "", tr("OSX improvements") },
+ { "Liudas Alisauskas", "", tr("Lithuanian translation"), "", QLocale::Lithuanian },
+ { "Luke Faraone", "", tr("Documentation fixes") },
+ { "Maia Kozheva", "", tr("Russian translation"), "", QLocale::Russian },
+ { "Marco Genise", "kaffeedoktor", tr("Ideas, hacking, initial motivation") },
+ { "Marco Paolone", "Quizzlo", tr("Italian translation"), "", QLocale::Italian },
+ { "Martin Mayer", "m4yer", tr("German translation"), "", QLocale::German },
+ { "Martin Sandsmark", "sandsmark", tr("Core and other fixes, QuasselDroid") },
+ { "Matthias Coy", "pennywise", tr("German translation"), "", QLocale::German },
+ { "Mattia Basaglia", "", tr("Fixes") },
+ { "Michael Groh", "brot", tr("German translation, fixes"), "", QLocale::German },
+ { "Michael Kedzierski", "ycros", tr("Mac fixes") },
+ { "Michael Marley", "mamarley", tr("Many fixes and improvements; Ubuntu live packages") },
+ { "Miguel Revilla", "", tr("Spanish translation"), "", QLocale::Spanish },
+ { "Nuno Pinheiro", "", tr("Tons of Oxygen icons including the Quassel logo") },
+ { "Patrick Lauer", "bonsaikitten", tr("Gentoo maintainer") },
+ { "Patrick von Reth", "TheOneRing", tr("MinGW support, SNORE backend, Windows packaging") },
+ { "Paul Klumpp", "Haudrauf", tr("Initial design and main window layout") },
+ { "Pavel Volkovitskiy", "int", tr("Early beta tester and bughunter") },
+ { "Per Nielsen", "", tr("Danish translation"), "", QLocale::Danish },
+ { "Pete Beardmore", "elbeardmorez", tr("Linewrap for input line") },
+ { "Ramanathan Sivagurunathan", "", tr("Bugfixes") },
+ { "Regis Perrin", "ZRegis", tr("French translation"), "", QLocale::French },
+ { "Rolf Eike Beer", "", tr("Build system fixes") },
+ { "Roscoe van Wyk", "", tr("Bugfixes") },
+ { "Rüdiger Sonderfeld", "ruediger", tr("Emacs keybindings") },
+ { "", "salnx", tr("Highlight configuration improvements") },
+ { "Scott Kitterman", "ScottK", tr("Kubuntu packager, (packaging/build system) bughunter") },
+ { "Sebastian Meyer", "", tr("Bugfixes") },
+ { "Sebastien Fricker", "", tr("Audio backend improvements") },
+ { "", "sfionov", tr("Russian translation"), "", QLocale::Russian },
+ { "Simon Philips", "", tr("Dutch translation"), "", QLocale::Dutch },
+ { "Sjors Gielen", "dazjorz", tr("Bugfixes") },
+ { "Stefanos Sofroniou", "", tr("Greek translation"), "", QLocale::Greek },
+ { "Stella Rouzi", "differentreality", tr("Greek translation"), "", QLocale::Greek },
+ { "Rafael Belmonte", "EagleScreen", tr("Spanish translation"), "", QLocale::Spanish },
+ { "Sergiu Bivol", "", tr("Romanian translation"), "", QLocale::Romanian },
+ { "Tae-Hoon Kwon", "", tr("Korean translation"), "", QLocale::Korean },
+ { "Terje Andersen", "tan", tr("Norwegian translation, documentation") },
+ { "Theo Chatzimichos", "tampakrap", tr("Greek translation"), "", QLocale::Greek },
+ { "Theofilos Intzoglou", "", tr("Greek translation"), "", QLocale::Greek },
+ { "Thomas Hogh", "Datafreak", tr("Former Windows builder") },
+ { "Thomas Müller", "", tr("Fixes, Debian packaging") },
+ { "Tim Schumacher", "xAFFE", tr("Fixes and feedback") },
+ { "", "ToBeFree", tr("German translation"), "", QLocale::German },
+ { "Tomáš Chvátal", "scarabeus", tr("Czech translation"), "", QLocale::Czech },
+ { "Vit Pelcak", "", tr("Czech translation"), "", QLocale::Czech },
+ { "Volkan Gezer", "", tr("Turkish translation"), "", QLocale::Turkish },
+ { "Yaohan Chen", "hagabaka", tr("Network detection improvements") },
+ { "Yuri Chornoivan", "", tr("Ukrainian translation"), "", QLocale::Ukrainian },
+ { "Zé", "", tr("Portuguese translation"), "", QLocale::Portuguese },
+ { "", "zeugma", tr("Turkish translation"), "", QLocale::Turkish }
+ });
+}
--- /dev/null
+/***************************************************************************
+ * Copyright (C) 2005-2015 by the Quassel Project *
+ * devel@quassel-irc.org *
+ * *
+ * 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. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#pragma once
+
+#include <QLocale>
+
+#ifdef HAVE_KF5
+# include <KCoreAddons/KAboutData>
+#endif
+
+
+/**
+ * Represents a contributor or author for Quassel.
+ *
+ * This is used to show a list of contributors in the About Quassel dialog.
+ */
+class AboutPerson
+{
+public:
+ /**
+ * Constructor.
+ *
+ * @param[in] name The person's name (in the form "Firstname Surname")
+ * @param[in] nick The person's nickname, if applicable
+ * @param[in] task Things the person does or has done for the project
+ * @param[in] emailAddress The person's email address, if applicable
+ * @param[in] translatedLanguage The language the person helped translate (only applicable for translators)
+ */
+ AboutPerson(const QString &name, const QString &nick, const QString &task, const QString &emailAddress = QString(), QLocale::Language translatedLanguage = QLocale::C);
+
+ /**
+ * Gets the person's name.
+ *
+ * @returns The person's name
+ */
+ QString name() const;
+
+ /**
+ * Gets the person's nick.
+ *
+ * @returns The person's nick
+ */
+ QString nick() const;
+
+ /**
+ * Gets the person's task.
+ *
+ * @returns The person's task
+ */
+ QString task() const;
+
+ /**
+ * Gets the person's e-mail address.
+ *
+ * @returns The person's e-mail address
+ */
+ QString emailAddress() const;
+
+ /**
+ * Gets the language this person helped translate.
+ *
+ * @returns The language this person helped translate
+ */
+ QLocale::Language translatedLanguage() const;
+
+ /**
+ * Gets the person's formatted name and nick.
+ *
+ * @returns The person's name and nick formatted for combined output
+ */
+ QString prettyName() const;
+
+private:
+ QString _name; ///< The person's name
+ QString _nick; ///< The person's nick
+ QString _task; ///< The person's task
+ QString _emailAddress; ///< The person's email address
+ QLocale::Language _language; ///< The language the person helps translate
+};
+
+
+/**
+ * Holds a list of authors, contributors and translators.
+ *
+ * This class is meant to hold the list of people who contributed to Quassel, used for displaying
+ * the About Quassel dialog. Additionally, this class can provide a KAboutData object to be shown
+ * if KDE integration is enabled.
+ */
+class AboutData : public QObject
+{
+ Q_OBJECT
+public:
+ /**
+ * Default constructor.
+ *
+ * @param[in] parent The parent object, if applicable
+ */
+ AboutData(QObject *parent = nullptr);
+
+ /**
+ * Adds an author to the list of contributors.
+ *
+ * Authors are people who contributed a significant amount of code to Quassel.
+ *
+ * @param[in] author The author to add
+ * @returns A reference to this AboutData instance
+ */
+ AboutData &addAuthor(const AboutPerson &author);
+
+ /**
+ * Adds a list of authors to the list of contributors.
+ *
+ * This method allows the use of a brace initializer in order to easily add a long list of
+ * people.
+ *
+ * @param[in] authors A list of authors to add
+ * @returns A reference to this AboutData instance
+ */
+ AboutData &addAuthors(std::initializer_list<AboutPerson> authors);
+
+ /**
+ * Adds a contributor.
+ *
+ * @param[in] author The contributor to add
+ * @returns A reference to this AboutData instance
+ */
+ AboutData &addCredit(const AboutPerson &credit);
+
+ /**
+ * Adds a list of contributors.
+ *
+ * This method allows the use of brace initializers in order to easily add a long list of
+ * people.
+ *
+ * @param[in] authors A list of contributors to add
+ * @returns A reference to this AboutData instance
+ */
+ AboutData &addCredits(std::initializer_list<AboutPerson> credits);
+
+ /**
+ * Gets the list of authors stored in this AboutData instance.
+ *
+ * @returns A list of authors
+ */
+ QList<AboutPerson> authors() const;
+
+ /**
+ * Gets the list of non-author contributors stored in this AboutData instance.
+ *
+ * @returns A list of contributors
+ */
+ QList<AboutPerson> credits() const;
+
+#ifdef HAVE_KF5
+ /**
+ * Creates a KAboutData instance based on the contents of this AboutData instance.
+ *
+ * @returns A KAboutData instance holding the list of contributors as well as any additional
+ * data required for KAboutDialog and friends
+ */
+ KAboutData kAboutData() const;
+#endif
+
+ /**
+ * Fills the given AboutData instance with data relevant for Quassel itself.
+ *
+ * This method adds a (hardcoded) list of contributors to the given AboutData instance.
+ *
+ * @param[in,out] aboutData An existing AboutData instance to add Quassel's contributors to
+ */
+ static void setQuasselPersons(AboutData *aboutData);
+
+private:
+ QList<AboutPerson> _authors; ///< The list of authors
+ QList<AboutPerson> _credits; ///< The list of other contributors
+};
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QApplication>
Action::Action(QObject *parent)
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
: KAction(parent)
#else
: QWidgetAction(parent)
Action::Action(const QString &text, QObject *parent, const QObject *receiver, const char *slot, const QKeySequence &shortcut)
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
: KAction(parent)
#else
: QWidgetAction(parent)
Action::Action(const QIcon &icon, const QString &text, QObject *parent, const QObject *receiver, const char *slot, const QKeySequence &shortcut)
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
: KAction(parent)
#else
: QWidgetAction(parent)
}
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
void Action::init() {}
#else
void Action::init()
}
-#endif /* HAVE_KDE */
+#endif /* HAVE_KDE4 */
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#ifndef ACTION_H_
#define ACTION_H_
-#ifndef HAVE_KDE
+#ifndef HAVE_KDE4
#include <QShortcut>
#include <QWidgetAction>
Q_DECLARE_OPERATORS_FOR_FLAGS(Action::ShortcutTypes)
-#else /* HAVE_KDE */
+#else /* HAVE_KDE4 */
#include <KAction>
class Action : public KAction
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* Parts of this implementation are based on KDE's KActionCollection. *
***************************************************************************/
-#ifndef HAVE_KDE
+#ifndef HAVE_KDE4
#include <QAction>
#include <QDebug>
}
-#endif /* HAVE_KDE */
+#endif /* HAVE_KDE4 */
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#ifndef ACTIONCOLLECTION_H_
#define ACTIONCOLLECTION_H_
-#ifndef HAVE_KDE
+#ifndef HAVE_KDE4
#include <QDebug>
#include <QList>
int ActionCollection::count() const { return actions().count(); }
bool ActionCollection::isEmpty() const { return actions().count(); }
-#else /* HAVE_KDE */
+#else /* HAVE_KDE4 */
#include <KActionCollection>
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "client.h"
#include "clientbufferviewconfig.h"
#include "graphicalui.h"
-#include "iconloader.h"
#include "networkmodel.h"
#include "uistyle.h"
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "clearablelineedit.h"
+#include <QIcon>
#include <QToolButton>
#include <QStyle>
-#include "iconloader.h"
-
ClearableLineEdit::ClearableLineEdit(QWidget *parent)
: QLineEdit(parent)
{
clearButton = new QToolButton(this);
- clearButton->setIcon(SmallIcon("edit-clear-locationbar-rtl"));
+ clearButton->setIcon(QIcon::fromTheme("edit-clear-locationbar-rtl", QIcon::fromTheme("edit-clear")));
#ifndef Q_WS_QWS
clearButton->setCursor(Qt::ArrowCursor);
#endif
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QStyle>
#include <QStyleOptionFrame>
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
# include <KColorDialog>
#else
# include <QColorDialog>
void ColorButton::chooseColor()
{
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
QColor c = color();
KColorDialog::getColor(c, this);
#else
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
+#include <QIcon>
#include <QInputDialog>
#include <QMenu>
#include <QMessageBox>
#include "buffermodel.h"
#include "buffersettings.h"
-#include "iconloader.h"
#include "clientidentity.h"
#include "network.h"
#include "util.h"
ContextMenuActionProvider::ContextMenuActionProvider(QObject *parent) : NetworkModelController(parent)
{
- registerAction(NetworkConnect, SmallIcon("network-connect"), tr("Connect"));
- registerAction(NetworkDisconnect, SmallIcon("network-disconnect"), tr("Disconnect"));
+ registerAction(NetworkConnect, QIcon::fromTheme("network-connect"), tr("Connect"));
+ registerAction(NetworkDisconnect, QIcon::fromTheme("network-disconnect"), tr("Disconnect"));
- registerAction(BufferJoin, SmallIcon("irc-join-channel"), tr("Join"));
- registerAction(BufferPart, SmallIcon("irc-close-channel"), tr("Part"));
+ registerAction(BufferJoin, QIcon::fromTheme("irc-join-channel"), tr("Join"));
+ registerAction(BufferPart, QIcon::fromTheme("irc-close-channel"), tr("Part"));
registerAction(BufferRemove, tr("Delete Chat(s)..."));
registerAction(BufferSwitchTo, tr("Go to Chat"));
registerAction(HideApplyToAll, tr("Set as Default..."));
registerAction(HideUseDefaults, tr("Use Defaults..."));
- registerAction(JoinChannel, SmallIcon("irc-join-channel"), tr("Join Channel..."));
+ registerAction(JoinChannel, QIcon::fromTheme("irc-join-channel"), tr("Join Channel..."));
registerAction(NickQuery, tr("Start Query"));
registerAction(NickSwitchTo, tr("Show Query"));
registerAction(NickIgnoreToggleEnabled3, "Enable", true);
registerAction(NickIgnoreToggleEnabled4, "Enable", true);
- registerAction(NickOp, SmallIcon("irc-operator"), tr("Give Operator Status"));
- registerAction(NickDeop, SmallIcon("irc-remove-operator"), tr("Take Operator Status"));
- registerAction(NickHalfop, SmallIcon("irc-voice"), tr("Give Half-Operator Status"));
- registerAction(NickDehalfop, SmallIcon("irc-unvoice"), tr("Take Half-Operator Status"));
- registerAction(NickVoice, SmallIcon("irc-voice"), tr("Give Voice"));
- registerAction(NickDevoice, SmallIcon("irc-unvoice"), tr("Take Voice"));
- registerAction(NickKick, SmallIcon("im-kick-user"), tr("Kick From Channel"));
- registerAction(NickBan, SmallIcon("im-ban-user"), tr("Ban From Channel"));
- registerAction(NickKickBan, SmallIcon("im-ban-kick-user"), tr("Kick && Ban"));
+ registerAction(NickOp, QIcon::fromTheme("irc-operator"), tr("Give Operator Status"));
+ registerAction(NickDeop, QIcon::fromTheme("irc-remove-operator"), tr("Take Operator Status"));
+ registerAction(NickHalfop, QIcon::fromTheme("irc-voice"), tr("Give Half-Operator Status"));
+ registerAction(NickDehalfop, QIcon::fromTheme("irc-unvoice"), tr("Take Half-Operator Status"));
+ registerAction(NickVoice, QIcon::fromTheme("irc-voice"), tr("Give Voice"));
+ registerAction(NickDevoice, QIcon::fromTheme("irc-unvoice"), tr("Take Voice"));
+ registerAction(NickKick, QIcon::fromTheme("im-kick-user"), tr("Kick From Channel"));
+ registerAction(NickBan, QIcon::fromTheme("im-ban-user"), tr("Ban From Channel"));
+ registerAction(NickKickBan, QIcon::fromTheme("im-ban-kick-user"), tr("Kick && Ban"));
registerAction(HideBufferTemporarily, tr("Hide Chat(s) Temporarily"));
registerAction(HideBufferPermanently, tr("Hide Chat(s) Permanently"));
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
row++;
}
- Q_ASSERT(topLeftItem && bottomRightItem); // there should be one range left.
- sourceSelection << QItemSelectionRange(mapToSource(createIndex(topLeftItem->pos(), left, topLeftItem)), mapToSource(createIndex(bottomRightItem->pos(), right, bottomRightItem)));
+ if (topLeftItem && bottomRightItem) { // there should be one range left.
+ sourceSelection << QItemSelectionRange(mapToSource(createIndex(topLeftItem->pos(), left, topLeftItem)), mapToSource(createIndex(bottomRightItem->pos(), right, bottomRightItem)));
+ }
}
return sourceSelection;
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This contains code from KStatusNotifierItem, part of the KDE libs *
#ifdef Q_WS_X11
# include <QX11Info>
#endif
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
# include <KWindowInfo>
# include <KWindowSystem>
#endif
return true;
}
-#elif defined(HAVE_KDE) && defined(Q_WS_X11)
+#elif defined(HAVE_KDE4) && defined(Q_WS_X11)
KWindowInfo info1 = KWindowSystem::windowInfo(mainWidget()->winId(), NET::XAWMState | NET::WMState | NET::WMDesktop);
// mapped = visible (but possibly obscured)
bool mapped = (info1.mappingState() == NET::Visible) && !info1.isMinimized();
void GraphicalUi::activateMainWidget()
{
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
# ifdef Q_WS_X11
KWindowInfo info = KWindowSystem::windowInfo(mainWidget()->winId(), NET::WMDesktop | NET::WMFrameExtents);
if (_onAllDesktops) {
KWindowSystem::forceActiveWindow(mainWidget()->winId());
# endif
-#else /* HAVE_KDE */
+#else /* HAVE_KDE4 */
#ifdef Q_WS_X11
// Bypass focus stealing prevention
mainWidget()->raise();
mainWidget()->activateWindow();
-#endif /* HAVE_KDE */
+#endif /* HAVE_KDE4 */
}
void GraphicalUi::hideMainWidget()
{
-#if defined(HAVE_KDE) && defined(Q_WS_X11)
+#if defined(HAVE_KDE4) && defined(Q_WS_X11)
KWindowInfo info = KWindowSystem::windowInfo(mainWidget()->winId(), NET::WMDesktop | NET::WMFrameExtents);
_onAllDesktops = info.onAllDesktops();
#endif
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
+++ /dev/null
-/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
- * devel@quassel-irc.org *
- * *
- * 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. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-
-#ifndef HAVE_KDE
-
-#include <QCoreApplication>
-#include <QDebug>
-#include <QDir>
-#include <QFile>
-
-#include "iconloader.h"
-#include "quassel.h"
-#include "util.h"
-
-IconLoader IconLoader::_iconLoader;
-int IconLoader::_groupSize[] = { 48, 22, 22, 16, 32, 22 }; // default sizes taken from Oxygen
-
-IconLoader *IconLoader::global()
-{
- // Workaround: the static _iconLoader might be initialized before the resources it needs
- // This way, first call to global() will init it by setting the theme
- if (_iconLoader.theme().isEmpty())
- _iconLoader.setTheme("oxygen");
- return &_iconLoader;
-}
-
-
-IconLoader::IconLoader(QObject *parent) : QObject(parent)
-{
- // setTheme("oxygen");
-}
-
-
-IconLoader::~IconLoader()
-{
-}
-
-
-void IconLoader::setTheme(const QString &theme)
-{
- _theme = theme;
- // check which dirs could contain themed icons
- _themedIconDirNames.clear();
- _plainIconDirNames.clear();
-
- // First, look for a system theme
- // This is supposed to only work on Unix, though other platforms might set $XDG_DATA_DIRS if they please.
- QStringList iconDirNames = QString(qgetenv("XDG_DATA_DIRS")).split(':', QString::SkipEmptyParts);
- if (!iconDirNames.isEmpty()) {
- for (int i = 0; i < iconDirNames.count(); i++)
- iconDirNames[i].append(QString("/icons/"));
- }
-#ifdef Q_OS_UNIX
- else {
- // Provide a fallback
- iconDirNames << "/usr/share/icons/";
- }
- // Add our prefix too
- QString appDir = QCoreApplication::applicationDirPath();
- int binpos = appDir.lastIndexOf("/bin");
- if (binpos >= 0) {
- appDir.replace(binpos, 4, "/share");
- appDir.append("/icons/");
- if (!iconDirNames.contains(appDir))
- iconDirNames.append(appDir);
- }
-#endif
-
- // Now look for an icons/ subdir in our data paths
- foreach(const QString &dir, Quassel::dataDirPaths())
- iconDirNames << dir + "icons/";
-
- // Add our resource path too
- iconDirNames << ":/icons/";
-
- // Ready do add theme names
- foreach(const QString &dir, iconDirNames) {
- QString path = dir + theme + '/';
- if (QFile::exists(path))
- _themedIconDirNames << path;
- }
- foreach(const QString &dir, iconDirNames) {
- QString path = dir + "hicolor/";
- if (QFile::exists(path))
- _themedIconDirNames << path;
- }
-
- // We ship some plain (non-themed) icons in $data/pics
- foreach(const QString &dir, Quassel::dataDirPaths()) {
- QString path = dir + "pics/";
- if (QFile::exists(path))
- _plainIconDirNames << path;
- }
- // And of course, our resource path
- if (QFile::exists(":/pics"))
- _plainIconDirNames << ":/pics";
-}
-
-
-// TODO: optionally implement cache (speed/memory tradeoff?)
-QPixmap IconLoader::loadIcon(const QString &name, IconLoader::Group group, int size)
-{
- if (group < 0 || group >= LastGroup) {
- qWarning() << "Invalid icon group!";
- return QPixmap();
- }
- if (size == 0)
- size = _groupSize[group];
-
- QString path = findIconPath(name, size);
- if (path.isEmpty()) return QPixmap();
-
- // load the icon
- return QPixmap(path);
-}
-
-
-QString IconLoader::findIconPath(const QString &name, int size)
-{
- QString fname = QString("%1.png").arg(name); // we only support PNG so far
- // First, look for a themed icon... we don't do anything fancy here, only exact match for both name and size
- foreach(QString basedir, _themedIconDirNames) {
- QDir sizedir(QString("%1/%2x%2").arg(basedir).arg(QString::number(size)));
- if (sizedir.exists()) {
- // ignore context, i.e. scan all subdirs
- QStringList contextdirs = sizedir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
- foreach(QString dir, contextdirs) {
- QString path = QString("%1/%2/%3").arg(sizedir.absolutePath(), dir, fname);
- if (QFile::exists(path)) return path;
- }
- }
- }
- // Now check the plain dirs
- foreach(QString dir, _plainIconDirNames) {
- QString path = QString("%1/%2").arg(dir, name);
- if (QFile::exists(path)) return path;
- }
-
- qWarning() << "Icon not found:" << name << size;
- return QString();
-}
-
-
-// Convenience constructors
-
-QPixmap DesktopIcon(const QString &name, int force_size)
-{
- IconLoader *loader = IconLoader::global();
- return loader->loadIcon(name, IconLoader::Desktop, force_size);
-}
-
-
-QPixmap BarIcon(const QString &name, int force_size)
-{
- IconLoader *loader = IconLoader::global();
- return loader->loadIcon(name, IconLoader::Toolbar, force_size);
-}
-
-
-QPixmap MainBarIcon(const QString &name, int force_size)
-{
- IconLoader *loader = IconLoader::global();
- return loader->loadIcon(name, IconLoader::MainToolbar, force_size);
-}
-
-
-QPixmap SmallIcon(const QString &name, int force_size)
-{
- IconLoader *loader = IconLoader::global();
- return loader->loadIcon(name, IconLoader::Small, force_size);
-}
-
-
-#endif
+++ /dev/null
-/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
- * devel@quassel-irc.org *
- * *
- * Based in part on KDE's kiconloader.h *
- * This declares a subset of that API. *
- * *
- * 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. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-
-#ifndef ICONLOADER_H_
-#define ICONLOADER_H_
-
-#ifndef HAVE_KDE
-
-#include <QPixmap>
-
-/// Provides basic facilities to load icons from standard locations or resources
-/** This implements a (very) basic subset of KIconLoader's API, such that we can use those classes
- * interchangeably in Quassel.
- *
- * We currently (unless somebody does a more fancy implementation ;-)) assume the Oxygen icon theme
- * to be used. In particular, this means that we do assume its directory layout and existing icons to
- * be present. Though it should be easy to switch to a different theme name, we don't currently support
- * any fallback mechanism if this other theme misses an icon for a given size. Also, we only support PNG.
- *
- * Since we do support integrating the required part of Oxygen into the binary via Qt Resources, this
- * should work for everyone for now.
- *
- * - $XDG_DATA_DIRS/icons/$theme (in order)
- * - :/icons/$theme (fallback in case we use Qt Resources)
- * - $XDG_DATA_DIRS/apps/quassel/icons/hicolor (our own unthemed icons)
- * - :/icons/hicolor
- * - $XDG_DATA_DIRS/apps/quassel/pics
- * - :/pics
- *
- * We don't search for size/context dirs in /pics, i.e. for a given $name, we expect pics/$name.png.
- */
-class IconLoader : public QObject
-{
- Q_OBJECT
-
-public:
- enum Group {
- NoGroup = -1, ///< No group
- Desktop = 0, ///< Desktop icons
- Toolbar, ///< Toolbar icons
- MainToolbar, ///< Main toolbar icons
- Small, ///< Small icons, e.g. for buttons
- Panel, ///< Panel icons
- Dialog, ///< Icons for use in dialog title etc.
- LastGroup
- };
-
- /// Standard icon sizes
- enum StdSizes {
- SizeSmall = 16, ///< Small icons for menu entries
- SizeSmallMedium = 22, ///< Slightly larger small icons for toolbars, panels, etc
- SizeMedium = 32, ///< Medium-sized icons for the desktop
- SizeLarge = 48, ///< Large icons for the panel
- SizeHuge = 64, ///< Huge icons for iconviews
- SizeEnormous = 128 ///< Enormous icons for iconviews
- };
-
- explicit IconLoader(QObject *parent = 0);
- ~IconLoader();
-
- static IconLoader *global();
-
- /// Load a pixmap for the given name and group
- QPixmap loadIcon(const QString &name, IconLoader::Group group, int size = 0);
-
- inline QString theme() const;
- void setTheme(const QString &name);
-
-private:
- QString findIconPath(const QString &name, int size);
-
- static IconLoader _iconLoader;
- QString _theme;
- QStringList _themedIconDirNames;
- QStringList _plainIconDirNames;
- static int _groupSize[];
-};
-
-
-// convenience
-QPixmap DesktopIcon(const QString &name, int size = 0);
-QPixmap BarIcon(const QString &name, int size = 0);
-QPixmap MainBarIcon(const QString &name, int size = 0);
-QPixmap SmallIcon(const QString &name, int size = 0);
-//QPixmap SmallMediumIcon(const QString &name, int size = 0); // not part of KIconLoader
-
-QString IconLoader::theme() const { return _theme; }
-
-#else /* HAVE_KDE */
-
-#include <KIconLoader>
-class IconLoader : public KIconLoader
-{
- Q_OBJECT
-};
-
-
-#endif /* HAVE_KDE */
-
-#endif
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
}
-void KCmdLineWrapper::addArgument(const QString &longName, const CliParserArg &arg)
+void KCmdLineWrapper::addArgument(const QString &longName_, const CliParserArg &arg)
{
+ QString longName = longName_;
+ if (arg.type == CliParserArg::CliArgOption && !arg.valueName.isEmpty())
+ longName += " <" + arg.valueName + ">";
+
if (arg.shortName != 0) {
- _cmdLineOptions.add(QByteArray().append(arg.shortName));
+ _cmdLineOptions.add(QByteArray(1, arg.shortName));
}
+
_cmdLineOptions.add(longName.toUtf8(), ki18n(arg.help.toUtf8()), arg.def.toUtf8());
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
_emacsMode(false),
_lastDocumentHeight(-1)
{
-#if QT_VERSION >= 0x040500
- document()->setDocumentMargin(0); // new in Qt 4.5 and we really don't want it here
-#endif
+ document()->setDocumentMargin(0);
setAcceptRichText(false);
#ifdef HAVE_KDE
void MultiLineEdit::keyPressEvent(QKeyEvent *event)
{
- // Workaround the fact that Qt < 4.5 doesn't know InsertLineSeparator yet
-#if QT_VERSION >= 0x040500
if (event == QKeySequence::InsertLineSeparator) {
-#else
-
-# ifdef Q_OS_MAC
- if ((event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) && event->modifiers() & Qt::META) {
-# else
- if ((event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) && event->modifiers() & Qt::SHIFT) {
-# endif
-#endif
-
if (_mode == SingleLine) {
event->accept();
on_returnPressed();
cursor.clearSelection();
}
- if (color) {
- color = false;
+
+ if (color)
mircText.append('\x03');
- }
- if (underline) {
- underline = false;
+
+ if (underline)
mircText.append('\x1f');
- }
- if (italic) {
- italic = false;
+
+ if (italic)
mircText.append('\x1d');
- }
- if (bold) {
- bold = false;
+
+ if (bold)
mircText.append('\x02');
- }
return mircText;
}
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QKeyEvent>
#include <QHash>
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
# include <KDE/KTextEdit>
# define MultiLineEditParent KTextEdit
+#elif defined HAVE_KF5
+# include <KTextWidgets/KTextEdit>
+# define MultiLineEditParent KTextEdit
#else
# include <QTextEdit>
# define MultiLineEditParent QTextEdit
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QComboBox>
#include <QDialogButtonBox>
#include <QGridLayout>
+#include <QIcon>
#include <QLabel>
#include <QLineEdit>
#include <QInputDialog>
#include "buffermodel.h"
#include "buffersettings.h"
-#include "iconloader.h"
#include "clientidentity.h"
#include "network.h"
#include "util.h"
}
-Action *NetworkModelController::registerAction(ActionType type, const QPixmap &icon, const QString &text, bool checkable)
+Action *NetworkModelController::registerAction(ActionType type, const QIcon &icon, const QString &text, bool checkable)
{
Action *act;
if (icon.isNull())
NetworkModelController::JoinDlg::JoinDlg(const QModelIndex &index, QWidget *parent) : QDialog(parent)
{
- setWindowIcon(SmallIcon("irc-join-channel"));
+ setWindowIcon(QIcon::fromTheme("irc-join-channel"));
setWindowTitle(tr("Join Channel"));
QGridLayout *layout = new QGridLayout(this);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
void setSlot(QObject *receiver, const char *method);
Action *registerAction(ActionType type, const QString &text, bool checkable = false);
- Action *registerAction(ActionType type, const QPixmap &icon, const QString &text, bool checkable = false);
+ Action *registerAction(NetworkModelController::ActionType type, const QIcon &icon, const QString &text, bool checkable = false);
bool checkRequirements(const QModelIndex &index, ItemActiveStates requiredActiveState = QFlags<ItemActiveState>(ActiveState | InactiveState));
QString nickName(const QModelIndex &index) const;
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "buffersettings.h"
#include "graphicalui.h"
-#include "iconloader.h"
#include "networkmodel.h"
#include "uistyle.h"
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
+#include <QIcon>
#include <QMenu>
#include <QToolBar>
#include "toolbaractionprovider.h"
-#include "iconloader.h"
-
ToolBarActionProvider::ToolBarActionProvider(QObject *parent)
: NetworkModelController(parent)
{
- registerAction(NetworkConnectAll, DesktopIcon("network-connect"), tr("Connect"))->setToolTip(tr("Connect to IRC"));
- registerAction(NetworkDisconnectAll, DesktopIcon("network-disconnect"), tr("Disconnect"))->setToolTip(tr("Disconnect from IRC"));
-
- registerAction(BufferPart, DesktopIcon("irc-close-channel"), tr("Part"))->setToolTip(tr("Leave currently selected channel"));
- registerAction(JoinChannel, DesktopIcon("irc-join-channel"), tr("Join"))->setToolTip(tr("Join a channel"));
-
- registerAction(NickQuery, DesktopIcon("mail-message-new"), tr("Query"))->setToolTip(tr("Start a private conversation")); // fix icon
- registerAction(NickWhois, DesktopIcon("im-user"), tr("Whois"))->setToolTip(tr("Request user information")); // fix icon
-
- registerAction(NickOp, DesktopIcon("irc-operator"), tr("Op"))->setToolTip(tr("Give operator privileges to user"));
- registerAction(NickDeop, DesktopIcon("irc-remove-operator"), tr("Deop"))->setToolTip(tr("Take operator privileges from user"));
- registerAction(NickVoice, DesktopIcon("irc-voice"), tr("Voice"))->setToolTip(tr("Give voice to user"));
- registerAction(NickDevoice, DesktopIcon("irc-unvoice"), tr("Devoice"))->setToolTip(tr("Take voice from user"));
- registerAction(NickKick, DesktopIcon("im-kick-user"), tr("Kick"))->setToolTip(tr("Remove user from channel"));
- registerAction(NickBan, DesktopIcon("im-ban-user"), tr("Ban"))->setToolTip(tr("Ban user from channel"));
- registerAction(NickKickBan, DesktopIcon("im-ban-kick-user"), tr("Kick/Ban"))->setToolTip(tr("Remove and ban user from channel"));
+ registerAction(NetworkConnectAll, QIcon::fromTheme("network-connect"), tr("Connect"))->setToolTip(tr("Connect to IRC"));
+ registerAction(NetworkDisconnectAll, QIcon::fromTheme("network-disconnect"), tr("Disconnect"))->setToolTip(tr("Disconnect from IRC"));
+
+ registerAction(BufferPart, QIcon::fromTheme("irc-close-channel"), tr("Part"))->setToolTip(tr("Leave currently selected channel"));
+ registerAction(JoinChannel, QIcon::fromTheme("irc-join-channel"), tr("Join"))->setToolTip(tr("Join a channel"));
+
+ registerAction(NickQuery, QIcon::fromTheme("mail-message-new"), tr("Query"))->setToolTip(tr("Start a private conversation")); // fix icon
+ registerAction(NickWhois, QIcon::fromTheme("im-user"), tr("Whois"))->setToolTip(tr("Request user information")); // fix icon
+
+ registerAction(NickOp, QIcon::fromTheme("irc-operator"), tr("Op"))->setToolTip(tr("Give operator privileges to user"));
+ registerAction(NickDeop, QIcon::fromTheme("irc-remove-operator"), tr("Deop"))->setToolTip(tr("Take operator privileges from user"));
+ registerAction(NickVoice, QIcon::fromTheme("irc-voice"), tr("Voice"))->setToolTip(tr("Give voice to user"));
+ registerAction(NickDevoice, QIcon::fromTheme("irc-unvoice"), tr("Devoice"))->setToolTip(tr("Take voice from user"));
+ registerAction(NickKick, QIcon::fromTheme("im-kick-user"), tr("Kick"))->setToolTip(tr("Remove user from channel"));
+ registerAction(NickBan, QIcon::fromTheme("im-ban-user"), tr("Ban"))->setToolTip(tr("Ban user from channel"));
+ registerAction(NickKickBan, QIcon::fromTheme("im-ban-kick-user"), tr("Kick/Ban"))->setToolTip(tr("Remove and ban user from channel"));
_networksConnectMenu = new QMenu();
_networksConnectMenu->setSeparatorsCollapsible(false);
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
***************************************************************************/
#include <QApplication>
+#include <QIcon>
#include "buffersettings.h"
-#include "iconloader.h"
#include "qssparser.h"
#include "quassel.h"
#include "uistyle.h"
UiStyle::UiStyle(QObject *parent)
: QObject(parent),
- _channelJoinedIcon(SmallIcon("irc-channel-active")),
- _channelPartedIcon(SmallIcon("irc-channel-inactive")),
- _userOfflineIcon(SmallIcon("im-user-offline")),
- _userOnlineIcon(SmallIcon("im-user")),
- _userAwayIcon(SmallIcon("im-user-away")),
- _categoryOpIcon(SmallIcon("irc-operator")),
- _categoryVoiceIcon(SmallIcon("irc-voice")),
+ _channelJoinedIcon(QIcon::fromTheme("irc-channel-joined", QIcon(":/icons/irc-channel-joined.png"))),
+ _channelPartedIcon(QIcon::fromTheme("irc-channel-parted", QIcon(":/icons/irc-channel-parted.png"))),
+ _userOfflineIcon(QIcon::fromTheme("im-user-offline", QIcon::fromTheme("user-offline", QIcon(":/icons/im-user-offline.png")))),
+ _userOnlineIcon(QIcon::fromTheme("im-user", QIcon::fromTheme("user-available", QIcon(":/icons/im-user.png")))), // im-user-* are non-standard oxygen extensions
+ _userAwayIcon(QIcon::fromTheme("im-user-away", QIcon::fromTheme("user-away", QIcon(":/icons/im-user-away.png")))),
+ _categoryOpIcon(QIcon::fromTheme("irc-operator")),
+ _categoryVoiceIcon(QIcon::fromTheme("irc-voice")),
_opIconLimit(UserCategoryItem::categoryFromModes("o")),
_voiceIconLimit(UserCategoryItem::categoryFromModes("v"))
{
/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QDataStream>
#include <QFontMetricsF>
#include <QHash>
+#include <QIcon>
#include <QTextCharFormat>
#include <QTextLayout>
#include <QPalette>
static QHash<QString, FormatType> _formatCodes;
static QString _timestampFormatString;
- QPixmap _channelJoinedIcon;
- QPixmap _channelPartedIcon;
- QPixmap _userOfflineIcon;
- QPixmap _userOnlineIcon;
- QPixmap _userAwayIcon;
- QPixmap _categoryOpIcon;
- QPixmap _categoryVoiceIcon;
+ QIcon _channelJoinedIcon;
+ QIcon _channelPartedIcon;
+ QIcon _userOfflineIcon;
+ QIcon _userOnlineIcon;
+ QIcon _userAwayIcon;
+ QIcon _categoryOpIcon;
+ QIcon _categoryVoiceIcon;
int _opIconLimit;
int _voiceIconLimit;
bool _showNickViewIcons;