From 2fd5f1736a6dfe230cae0c0f784fcad4b5f74473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Sun, 16 Jun 2013 14:06:16 +0200 Subject: [PATCH] WebPositive: Now that it lives in the tree, get rid of the copied shared code. --- src/apps/webpositive/BrowserApp.cpp | 1 - src/apps/webpositive/BrowserWindow.cpp | 8 +- src/apps/webpositive/BrowserWindow.h | 15 +- src/apps/webpositive/Jamfile | 13 +- src/apps/webpositive/support/AutoLocker.h | 178 -- src/apps/webpositive/support/DateTime.cpp | 1473 ----------------- src/apps/webpositive/support/DateTime.h | 225 --- src/apps/webpositive/support/HashMap.h | 481 ------ src/apps/webpositive/support/HashSet.h | 342 ---- src/apps/webpositive/support/IconButton.cpp | 929 ----------- src/apps/webpositive/support/IconButton.h | 134 -- src/apps/webpositive/support/IconUtils.h | 80 - src/apps/webpositive/support/NavMenu.h | 168 -- src/apps/webpositive/support/OpenHashTable.h | 514 ------ src/apps/webpositive/support/SlowMenu.h | 76 - .../webpositive/support/StringForSize.cpp | 43 - src/apps/webpositive/support/StringForSize.h | 23 - src/apps/webpositive/svn_revision.cpp | 10 - src/apps/webpositive/svn_revision.h | 15 - 19 files changed, 18 insertions(+), 4710 deletions(-) delete mode 100644 src/apps/webpositive/support/AutoLocker.h delete mode 100644 src/apps/webpositive/support/DateTime.cpp delete mode 100644 src/apps/webpositive/support/DateTime.h delete mode 100644 src/apps/webpositive/support/HashMap.h delete mode 100644 src/apps/webpositive/support/HashSet.h delete mode 100644 src/apps/webpositive/support/IconButton.cpp delete mode 100644 src/apps/webpositive/support/IconButton.h delete mode 100644 src/apps/webpositive/support/IconUtils.h delete mode 100644 src/apps/webpositive/support/NavMenu.h delete mode 100644 src/apps/webpositive/support/OpenHashTable.h delete mode 100644 src/apps/webpositive/support/SlowMenu.h delete mode 100644 src/apps/webpositive/support/StringForSize.cpp delete mode 100644 src/apps/webpositive/support/StringForSize.h delete mode 100644 src/apps/webpositive/svn_revision.cpp delete mode 100644 src/apps/webpositive/svn_revision.h diff --git a/src/apps/webpositive/BrowserApp.cpp b/src/apps/webpositive/BrowserApp.cpp index 131952d1fb..5b17b6cde9 100644 --- a/src/apps/webpositive/BrowserApp.cpp +++ b/src/apps/webpositive/BrowserApp.cpp @@ -47,7 +47,6 @@ #include "DownloadWindow.h" #include "SettingsMessage.h" #include "SettingsWindow.h" -#include "svn_revision.h" #include "NetworkCookieJar.h" #include "WebKitInfo.h" #include "WebPage.h" diff --git a/src/apps/webpositive/BrowserWindow.cpp b/src/apps/webpositive/BrowserWindow.cpp index 7785796913..b833da0c50 100644 --- a/src/apps/webpositive/BrowserWindow.cpp +++ b/src/apps/webpositive/BrowserWindow.cpp @@ -462,19 +462,19 @@ BrowserWindow::BrowserWindow(BRect frame, SettingsMessage* appSettings, } // Back, Forward, Stop & Home buttons - fBackButton = new IconButton("Back", 0, NULL, new BMessage(GO_BACK)); + fBackButton = new BIconButton("Back", NULL, new BMessage(GO_BACK)); fBackButton->SetIcon(201); fBackButton->TrimIcon(); - fForwardButton = new IconButton("Forward", 0, NULL, new BMessage(GO_FORWARD)); + fForwardButton = new BIconButton("Forward", NULL, new BMessage(GO_FORWARD)); fForwardButton->SetIcon(202); fForwardButton->TrimIcon(); - fStopButton = new IconButton("Stop", 0, NULL, new BMessage(STOP)); + fStopButton = new BIconButton("Stop", NULL, new BMessage(STOP)); fStopButton->SetIcon(204); fStopButton->TrimIcon(); - fHomeButton = new IconButton("Home", 0, NULL, new BMessage(HOME)); + fHomeButton = new BIconButton("Home", NULL, new BMessage(HOME)); fHomeButton->SetIcon(206); fHomeButton->TrimIcon(); if (!fAppSettings->GetValue(kSettingsKeyShowHomeButton, true)) diff --git a/src/apps/webpositive/BrowserWindow.h b/src/apps/webpositive/BrowserWindow.h index bf80d75396..5b87aa3a4c 100644 --- a/src/apps/webpositive/BrowserWindow.h +++ b/src/apps/webpositive/BrowserWindow.h @@ -47,11 +47,16 @@ class BStatusBar; class BStringView; class BTextControl; class BWebView; -class IconButton; class SettingsMessage; class TabManager; class URLInputGroup; +namespace BPrivate { + class BIconButton; +} + +using BPrivate::BIconButton; + enum { INTERFACE_ELEMENT_MENU = 1 << 0, INTERFACE_ELEMENT_TABS = 1 << 1, @@ -214,10 +219,10 @@ private: BMenuItem* fBackMenuItem; BMenuItem* fForwardMenuItem; - IconButton* fBackButton; - IconButton* fForwardButton; - IconButton* fStopButton; - IconButton* fHomeButton; + BIconButton* fBackButton; + BIconButton* fForwardButton; + BIconButton* fStopButton; + BIconButton* fHomeButton; URLInputGroup* fURLInputGroup; BStringView* fStatusText; BStatusBar* fLoadingProgressBar; diff --git a/src/apps/webpositive/Jamfile b/src/apps/webpositive/Jamfile index a287626480..584d37794d 100644 --- a/src/apps/webpositive/Jamfile +++ b/src/apps/webpositive/Jamfile @@ -26,11 +26,8 @@ local sources = # support BaseURL.cpp BitmapButton.cpp - DateTime.cpp FontSelectionView.cpp - IconButton.cpp SettingsMessage.cpp - StringForSize.cpp # tabview TabContainerView.cpp @@ -46,7 +43,6 @@ local sources = DownloadWindow.cpp SettingsKeys.cpp SettingsWindow.cpp - svn_revision.cpp URLInputGroup.cpp ; @@ -54,12 +50,11 @@ Includes [ FGristFiles $(sources) ] : $(HAIKU_WEBKIT_HEADERS_DEPENDENCY) ; # Dependency needed to trigger downloading/unzipping the package before # compiling the files. -# SVN revision -#local svnRevisionFile = [ FGristFiles svn_revision ] ; -#MakeLocate $(svnRevisionFile) : $(LOCATE_TARGET) ; -#CreateSVNRevisionFile $(svnRevisionFile) ; +# private OS headers +UseLibraryHeaders icon ; +UsePrivateHeaders shared tracker ; +SubDirHdrs $(HAIKU_TOP) src kits tracker ; -UsePrivateHeaders shared ; Application WebPositive : $(sources) diff --git a/src/apps/webpositive/support/AutoLocker.h b/src/apps/webpositive/support/AutoLocker.h deleted file mode 100644 index 9baa7aa7a5..0000000000 --- a/src/apps/webpositive/support/AutoLocker.h +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright 2005-2007, Ingo Weinhold, bonefish@users.sf.net. - * All rights reserved. Distributed under the terms of the MIT License. - */ -#ifndef _AUTO_LOCKER_H -#define _AUTO_LOCKER_H - - -#include - - -namespace BPrivate { - -// AutoLockerStandardLocking -template -class AutoLockerStandardLocking { -public: - inline bool Lock(Lockable* lockable) - { - return lockable->Lock(); - } - - inline void Unlock(Lockable* lockable) - { - lockable->Unlock(); - } -}; - -// AutoLockerReadLocking -template -class AutoLockerReadLocking { -public: - inline bool Lock(Lockable* lockable) - { - return lockable->ReadLock(); - } - - inline void Unlock(Lockable* lockable) - { - lockable->ReadUnlock(); - } -}; - -// AutoLockerWriteLocking -template -class AutoLockerWriteLocking { -public: - inline bool Lock(Lockable* lockable) - { - return lockable->WriteLock(); - } - - inline void Unlock(Lockable* lockable) - { - lockable->WriteUnlock(); - } -}; - -// AutoLocker -template > -class AutoLocker { -private: - typedef AutoLocker ThisClass; -public: - inline AutoLocker() - : - fLockable(NULL), - fLocked(false) - { - } - - inline AutoLocker(const Locking& locking) - : - fLockable(NULL), - fLocking(locking), - fLocked(false) - { - } - - inline AutoLocker(Lockable* lockable, bool alreadyLocked = false, - bool lockIfNotLocked = true) - : - fLockable(lockable), - fLocked(fLockable && alreadyLocked) - { - if (!alreadyLocked && lockIfNotLocked) - Lock(); - } - - inline AutoLocker(Lockable& lockable, bool alreadyLocked = false, - bool lockIfNotLocked = true) - : - fLockable(&lockable), - fLocked(fLockable && alreadyLocked) - { - if (!alreadyLocked && lockIfNotLocked) - Lock(); - } - - inline ~AutoLocker() - { - Unlock(); - } - - inline void SetTo(Lockable* lockable, bool alreadyLocked, - bool lockIfNotLocked = true) - { - Unlock(); - fLockable = lockable; - fLocked = (lockable && alreadyLocked); - if (!alreadyLocked && lockIfNotLocked) - Lock(); - } - - inline void SetTo(Lockable& lockable, bool alreadyLocked, - bool lockIfNotLocked = true) - { - SetTo(&lockable, alreadyLocked, lockIfNotLocked); - } - - inline void Unset() - { - Unlock(); - Detach(); - } - - inline bool Lock() - { - if (fLockable && !fLocked) - fLocked = fLocking.Lock(fLockable); - return fLocked; - } - - inline void Unlock() - { - if (fLockable && fLocked) { - fLocking.Unlock(fLockable); - fLocked = false; - } - } - - inline void Detach() - { - fLockable = NULL; - fLocked = false; - } - - inline AutoLocker& operator=(Lockable* lockable) - { - SetTo(lockable); - return *this; - } - - inline AutoLocker& operator=(Lockable& lockable) - { - SetTo(&lockable); - return *this; - } - - inline bool IsLocked() const { return fLocked; } - - inline operator bool() const { return fLocked; } - -protected: - Lockable* fLockable; - Locking fLocking; - bool fLocked; -}; - - -} // namespace BPrivate - -using BPrivate::AutoLocker; -using BPrivate::AutoLockerReadLocking; -using BPrivate::AutoLockerWriteLocking; - -#endif // _AUTO_LOCKER_H diff --git a/src/apps/webpositive/support/DateTime.cpp b/src/apps/webpositive/support/DateTime.cpp deleted file mode 100644 index 19030db00a..0000000000 --- a/src/apps/webpositive/support/DateTime.cpp +++ /dev/null @@ -1,1473 +0,0 @@ -/* - * Copyright 2007-2010, Haiku, Inc. All Rights Reserved. - * Distributed under the terms of the MIT License. - * - * Authors: - * Julun - * Stephan Aßmus - */ - -#include "DateTime.h" - - -#include -#include - -#include - - -namespace BPrivate { - - -const int32 kSecondsPerMinute = 60; - -const int32 kHoursPerDay = 24; -const int32 kMinutesPerDay = 1440; -const int32 kSecondsPerDay = 86400; -const int32 kMillisecondsPerDay = 86400000; - -const bigtime_t kMicrosecondsPerSecond = 1000000LL; -const bigtime_t kMicrosecondsPerMinute = 60000000LL; -const bigtime_t kMicrosecondsPerHour = 3600000000LL; -const bigtime_t kMicrosecondsPerDay = 86400000000LL; - - -/*! - Constructs a new BTime object. Asked for its time representation, it will - return 0 for Hour(), Minute(), Second() etc. This can represent midnight, - but be aware IsValid() will return false. -*/ -BTime::BTime() - : - fMicroseconds(-1) -{ -} - - -/*! - Constructs a new BTime object as a copy of \c other. -*/ -BTime::BTime(const BTime& other) - : - fMicroseconds(other.fMicroseconds) -{ -} - - -/*! - Constructs a BTime object with \c hour \c minute, \c second, \c microsecond. - - \c hour must be between 0 and 23, \c minute and \c second must be between - 0 and 59 and \c microsecond should be in the range of 0 and 999999. If the - specified time is invalid, the time is not set and IsValid() returns false. -*/ -BTime::BTime(int32 hour, int32 minute, int32 second, int32 microsecond) - : - fMicroseconds(-1) -{ - _SetTime(hour, minute, second, microsecond); -} - - -/*! - Constructs a new BTime object from the provided BMessage archive. -*/ -BTime::BTime(const BMessage* archive) - : - fMicroseconds(-1) -{ - if (archive == NULL) - return; - archive->FindInt64("mircoseconds", &fMicroseconds); -} - - -/*! - Empty destructor. -*/ -BTime::~BTime() -{ -} - - -/*! - Archives the BTime object into the provided BMessage object. - @returns \c B_OK if all went well. - \c B_BAD_VALUE, if the message is \c NULL. - \c other error codes, depending on failure to append - fields to the message. -*/ -status_t -BTime::Archive(BMessage* into) const -{ - if (into == NULL) - return B_BAD_VALUE; - return into->AddInt64("mircoseconds", fMicroseconds); -} - - -/*! - Returns true if the time is valid, otherwise false. A valid time can be - BTime(23, 59, 59, 999999) while BTime(24, 00, 01) would be invalid. -*/ -bool -BTime::IsValid() const -{ - return fMicroseconds > -1 && fMicroseconds < kMicrosecondsPerDay; -} - - -/*! - This is an overloaded member function, provided for convenience. -*/ -bool -BTime::IsValid(const BTime& time) const -{ - return time.fMicroseconds > -1 && time.fMicroseconds < kMicrosecondsPerDay; -} - - -/*! - This is an overloaded member function, provided for convenience. -*/ -bool -BTime::IsValid(int32 hour, int32 minute, int32 second, int32 microsecond) const -{ - return BTime(hour, minute, second, microsecond).IsValid(); -} - - -/*! - Returns the current time as reported by the system depending on the given - time_type \c type. -*/ -BTime -BTime::CurrentTime(time_type type) -{ - struct timeval tv; - if (gettimeofday(&tv, NULL) != 0) { - // gettimeofday failed? - time(&tv.tv_sec); - } - - struct tm result; - struct tm* timeinfo; - if (type == B_GMT_TIME) - timeinfo = gmtime_r(&tv.tv_sec, &result); - else - timeinfo = localtime_r(&tv.tv_sec, &result); - - int32 sec = timeinfo->tm_sec; - return BTime(timeinfo->tm_hour, timeinfo->tm_min, (sec > 59) ? 59 : sec, - tv.tv_usec); -} - - -/*! - Returns a copy of the current BTime object. -*/ -BTime -BTime::Time() const -{ - return *this; -} - - -/*! - This is an overloaded member function, provided for convenience. Set the - current BTime object to the passed BTime \c time object. -*/ -bool -BTime::SetTime(const BTime& time) -{ - fMicroseconds = time.fMicroseconds; - return IsValid(); -} - - -/*! - Set the time to \c hour \c minute, \c second and \c microsecond. - - \c hour must be between 0 and 23, \c minute and \c second must be between - 0 and 59 and \c microsecond should be in the range of 0 and 999999. Returns - true if the time is valid; otherwise false. If the specified time is - invalid, the time is not set and the function returns false. -*/ -bool -BTime::SetTime(int32 hour, int32 minute, int32 second, int32 microsecond) -{ - return _SetTime(hour, minute, second, microsecond); -} - - - -/*! - Adds \c hours to the current time. If the passed value is negativ it will - become earlier. Note: The time will wrap if it passes midnight. -*/ -BTime& -BTime::AddHours(int32 hours) -{ - return _AddMicroseconds(bigtime_t(hours % kHoursPerDay) - * kMicrosecondsPerHour); -} - - -/*! - Adds \c minutes to the current time. If the passed value is negativ it will - become earlier. Note: The time will wrap if it passes midnight. -*/ -BTime& -BTime::AddMinutes(int32 minutes) -{ - return _AddMicroseconds(bigtime_t(minutes % kMinutesPerDay) - * kMicrosecondsPerMinute); -} - - -/*! - Adds \c seconds to the current time. If the passed value is negativ it will - become earlier. Note: The time will wrap if it passes midnight. -*/ -BTime& -BTime::AddSeconds(int32 seconds) -{ - return _AddMicroseconds(bigtime_t(seconds % kSecondsPerDay) - * kMicrosecondsPerSecond); -} - - -/*! - Adds \c milliseconds to the current time. If the passed value is negativ it - will become earlier. Note: The time will wrap if it passes midnight. -*/ -BTime& -BTime::AddMilliseconds(int32 milliseconds) -{ - return _AddMicroseconds(bigtime_t(milliseconds % kMillisecondsPerDay) - * 1000); -} - - -/*! - Adds \c microseconds to the current time. If the passed value is negativ it - will become earlier. Note: The time will wrap if it passes midnight. -*/ -BTime& -BTime::AddMicroseconds(int32 microseconds) -{ - return _AddMicroseconds(microseconds); -} - - -/*! - Returns the hour fragment of the time. -*/ -int32 -BTime::Hour() const -{ - return int32(_Microseconds() / kMicrosecondsPerHour); -} - - -/*! - Returns the minute fragment of the time. -*/ -int32 -BTime::Minute() const -{ - return int32(((_Microseconds() % kMicrosecondsPerHour)) / kMicrosecondsPerMinute); -} - - -/*! - Returns the second fragment of the time. -*/ -int32 -BTime::Second() const -{ - return int32(_Microseconds() / kMicrosecondsPerSecond) % kSecondsPerMinute; -} - - -/*! - Returns the millisecond fragment of the time. -*/ -int32 -BTime::Millisecond() const -{ - - return Microsecond() / 1000; -} - - -/*! - Returns the microsecond fragment of the time. -*/ -int32 -BTime::Microsecond() const -{ - return int32(_Microseconds() % 1000000); -} - - -bigtime_t -BTime::_Microseconds() const -{ - return fMicroseconds == -1 ? 0 : fMicroseconds; -} - - -/*! - Returns the difference between this time and the given BTime \c time based - on the passed diff_type \c type. If \c time is earlier the return value will - be negativ. - - The return value then can be hours, minutes, seconds, milliseconds or - microseconds while its range will always be between -86400000000 and - 86400000000 depending on diff_type \c type. -*/ -bigtime_t -BTime::Difference(const BTime& time, diff_type type) const -{ - bigtime_t diff = time._Microseconds() - _Microseconds(); - switch (type) { - case B_HOURS_DIFF: { - diff /= kMicrosecondsPerHour; - } break; - case B_MINUTES_DIFF: { - diff /= kMicrosecondsPerMinute; - } break; - case B_SECONDS_DIFF: { - diff /= kMicrosecondsPerSecond; - } break; - case B_MILLISECONDS_DIFF: { - diff /= 1000; - } break; - case B_MICROSECONDS_DIFF: - default: break; - } - return diff; -} - - -/*! - Returns true if this time is different from \c time, otherwise false. -*/ -bool -BTime::operator!=(const BTime& time) const -{ - return fMicroseconds != time.fMicroseconds; -} - - -/*! - Returns true if this time is equal to \c time, otherwise false. -*/ -bool -BTime::operator==(const BTime& time) const -{ - return fMicroseconds == time.fMicroseconds; -} - - -/*! - Returns true if this time is earlier than \c time, otherwise false. -*/ -bool -BTime::operator<(const BTime& time) const -{ - return fMicroseconds < time.fMicroseconds; -} - - -/*! - Returns true if this time is earlier than or equal to \c time, otherwise false. -*/ -bool -BTime::operator<=(const BTime& time) const -{ - return fMicroseconds <= time.fMicroseconds; -} - - -/*! - Returns true if this time is later than \c time, otherwise false. -*/ -bool -BTime::operator>(const BTime& time) const -{ - return fMicroseconds > time.fMicroseconds; -} - - -/*! - Returns true if this time is later than or equal to \c time, otherwise false. -*/ -bool -BTime::operator>=(const BTime& time) const -{ - return fMicroseconds >= time.fMicroseconds; -} - - -BTime& -BTime::_AddMicroseconds(bigtime_t microseconds) -{ - bigtime_t count = 0; - if (microseconds < 0) { - count = ((kMicrosecondsPerDay - microseconds) / kMicrosecondsPerDay) * - kMicrosecondsPerDay; - } - fMicroseconds = (_Microseconds() + microseconds + count) % kMicrosecondsPerDay; - return *this; -} - - -bool -BTime::_SetTime(bigtime_t hour, bigtime_t minute, bigtime_t second, - bigtime_t microsecond) -{ - fMicroseconds = hour * kMicrosecondsPerHour + - minute * kMicrosecondsPerMinute + - second * kMicrosecondsPerSecond + - microsecond; - - bool isValid = IsValid(); - if (!isValid) - fMicroseconds = -1; - - return isValid; -} - - -// #pragma mark - BDate - - -/*! - Constructs a new BDate object. IsValid() will return false. -*/ -BDate::BDate() - : - fDay(-1), - fYear(0), - fMonth(-1) -{ -} - - -/*! - Constructs a new BDate object as a copy of \c other. -*/ -BDate::BDate(const BDate& other) - : - fDay(other.fDay), - fYear(other.fYear), - fMonth(other.fMonth) -{ -} - - -/*! - Constructs a BDate object with \c year \c month and \c day. - - Please note that a date before 1.1.4713 BC, a date with year 0 and a date - between 4.10.1582 and 15.10.1582 are considered invalid. If the specified - date is invalid, the date is not set and IsValid() returns false. Also note - that every passed year will be interpreted as is. - -*/ -BDate::BDate(int32 year, int32 month, int32 day) -{ - _SetDate(year, month, day); -} - - -/*! - Constructs a new BDate object from the provided archive. -*/ -BDate::BDate(const BMessage* archive) - : - fDay(-1), - fYear(0), - fMonth(-1) -{ - if (archive == NULL) - return; - archive->FindInt32("day", &fDay); - archive->FindInt32("year", &fYear); - archive->FindInt32("month", &fMonth); -} - - -/*! - Empty destructor. -*/ -BDate::~BDate() -{ -} - - -/*! - Archives the BDate object into the provided BMessage object. - @returns \c B_OK if all went well. - \c B_BAD_VALUE, if the message is \c NULL. - \c other error codes, depending on failure to append - fields to the message. -*/ -status_t -BDate::Archive(BMessage* into) const -{ - if (into == NULL) - return B_BAD_VALUE; - status_t ret = into->AddInt32("day", fDay); - if (ret == B_OK) - ret = into->AddInt32("year", fYear); - if (ret == B_OK) - ret = into->AddInt32("month", fMonth); - return ret; -} - - -/*! - Returns true if the date is valid, otherwise false. - - Please note that a date before 1.1.4713 BC, a date with year 0 and a date - between 4.10.1582 and 15.10.1582 are considered invalid. -*/ -bool -BDate::IsValid() const -{ - return IsValid(fYear, fMonth, fDay); -} - - -/*! - This is an overloaded member function, provided for convenience. -*/ -bool -BDate::IsValid(const BDate& date) const -{ - return IsValid(date.fYear, date.fMonth, date.fDay); -} - - -/*! - This is an overloaded member function, provided for convenience. -*/ -bool -BDate::IsValid(int32 year, int32 month, int32 day) const -{ - // no year 0 in Julian and nothing before 1.1.4713 BC - if (year == 0 || year < -4713) - return false; - - if (month < 1 || month > 12) - return false; - - if (day < 1 || day > _DaysInMonth(year, month)) - return false; - - // 'missing' days between switch julian - gregorian - if (year == 1582 && month == 10 && day > 4 && day < 15) - return false; - - return true; -} - - -/*! - Returns the current date as reported by the system depending on the given - time_type \c type. -*/ -BDate -BDate::CurrentDate(time_type type) -{ - time_t timer; - struct tm result; - struct tm* timeinfo; - - time(&timer); - - if (type == B_GMT_TIME) - timeinfo = gmtime_r(&timer, &result); - else - timeinfo = localtime_r(&timer, &result); - - return BDate(timeinfo->tm_year + 1900, timeinfo->tm_mon +1, timeinfo->tm_mday); -} - - -/*! - Returns a copy of the current BTime object. -*/ -BDate -BDate::Date() const -{ - return *this; -} - - -/*! - This is an overloaded member function, provided for convenience. -*/ -bool -BDate::SetDate(const BDate& date) -{ - return _SetDate(date.fYear, date.fMonth, date.fDay); -} - - -/*! - Set the date to \c year \c month and \c day. - - Returns true if the date is valid; otherwise false. If the specified date is - invalid, the date is not set and the function returns false. -*/ -bool -BDate::SetDate(int32 year, int32 month, int32 day) -{ - return _SetDate(year, month, day); -} - - -/*! - This function sets the given \c year, \c month and \c day to the - representative values of this date. The pointers can be NULL. If the date is - invalid, the values will be set to -1 for \c month and \c day, the \c year - will be set to 0. -*/ -void -BDate::GetDate(int32* year, int32* month, int32* day) -{ - if (year) - *year = fYear; - - if (month) - *month = fMonth; - - if (day) - *day = fDay; -} - - -/*! - Adds \c days to the current date. If the passed value is negativ it will - become earlier. If the current date is invalid, the \c days are not added. -*/ -void -BDate::AddDays(int32 days) -{ - if (IsValid()) - *this = JulianDayToDate(DateToJulianDay() + days); -} - - -/*! - Adds \c years to the current date. If the passed value is negativ it will - become earlier. If the current date is invalid, the \c years are not added. - The day/ month combination will be adjusted if it does not exist in the - resulting year, so this function will then return the latest valid date. -*/ -void -BDate::AddYears(int32 years) -{ - if (IsValid()) { - const int32 tmp = fYear; - fYear += years; - - if ((tmp > 0 && fYear <= 0) || (tmp < 0 && fYear >= 0)) - fYear += (years > 0) ? +1 : -1; - - fDay = min_c(fDay, _DaysInMonth(fYear, fMonth)); - } -} - - -/*! - Adds \c months to the current date. If the passed value is negativ it will - become earlier. If the current date is invalid, the \c months are not added. - The day/ month combination will be adjusted if it does not exist in the - resulting year, so this function will then return the latest valid date. -*/ -void -BDate::AddMonths(int32 months) -{ - if (IsValid()) { - const int32 tmp = fYear; - fYear += months / 12; - fMonth += months % 12; - - if (fMonth > 12) { - fYear++; - fMonth -= 12; - } else if (fMonth < 1) { - fYear--; - fMonth += 12; - } - - if ((tmp > 0 && fYear <= 0) || (tmp < 0 && fYear >= 0)) - fYear += (months > 0) ? +1 : -1; - - // 'missing' days between switch julian - gregorian - if (fYear == 1582 && fMonth == 10 && fDay > 4 && fDay < 15) - fDay = (months > 0) ? 15 : 4; - - fDay = min_c(fDay, DaysInMonth()); - } -} - - -/*! - Returns the day fragment of the date. The return value will be in the range - of 1 to 31, in case the date is invalid it will be -1. -*/ -int32 -BDate::Day() const -{ - return fDay; -} - - -/*! - Returns the year fragment of the date. If the date is invalid, the function - returns 0. -*/ -int32 -BDate::Year() const -{ - return fYear; -} - - -/*! - Returns the month fragment of the date. The return value will be in the - range of 1 to 12, in case the date is invalid it will be -1. -*/ -int32 -BDate::Month() const -{ - return fMonth; -} - - -/*! - Returns the difference in days between this date and the given BDate \c date. - If \c date is earlier the return value will be negativ. If the calculation - is done with an invalid date, the result is undefined. -*/ -int32 -BDate::Difference(const BDate& date) const -{ - return date.DateToJulianDay() - DateToJulianDay(); -} - - -/*! - Returns the week number of the date, if the date is invalid it will return - B_ERROR. Please note that this function does only work within the Gregorian - calendar, thus a date before 15.10.1582 will return B_ERROR. -*/ -int32 -BDate::WeekNumber() const -{ - /* - This algorithm is taken from: - Frequently Asked Questions about Calendars - Version 2.8 Claus Tøndering 15 December 2005 - - Note: it will work only within the Gregorian Calendar - */ - - if (!IsValid() || fYear < 1582 - || (fYear == 1582 && fMonth < 10) - || (fYear == 1582 && fMonth == 10 && fDay < 15)) - return int32(B_ERROR); - - int32 a; - int32 b; - int32 s; - int32 e; - int32 f; - - if (fMonth > 0 && fMonth < 3) { - a = fYear - 1; - b = (a / 4) - (a / 100) + (a / 400); - int32 c = ((a - 1) / 4) - ((a - 1) / 100) + ((a -1) / 400); - s = b - c; - e = 0; - f = fDay - 1 + 31 * (fMonth - 1); - } else if (fMonth >= 3 && fMonth <= 12) { - a = fYear; - b = (a / 4) - (a / 100) + (a / 400); - int32 c = ((a - 1) / 4) - ((a - 1) / 100) + ((a -1) / 400); - s = b - c; - e = s + 1; - f = fDay + ((153 * (fMonth - 3) + 2) / 5) + 58 + s; - } else - return int32(B_ERROR); - - int32 g = (a + b) % 7; - int32 d = (f + g - e) % 7; - int32 n = f + 3 - d; - - int32 weekNumber; - if (n < 0) - weekNumber = 53 - (g -s) / 5; - else if (n > 364 + s) - weekNumber = 1; - else - weekNumber = n / 7 + 1; - - return weekNumber; -} - - -/*! - Returns the day of the week in the range of 1 to 7, while 1 stands for - monday. If the date is invalid, the function will return B_ERROR. -*/ -int32 -BDate::DayOfWeek() const -{ - // http://en.wikipedia.org/wiki/Julian_day#Calculation - return IsValid() ? (DateToJulianDay() % 7) + 1 : int32(B_ERROR); -} - - -/*! - Returns the day of the year in the range of 1 to 365 (366 in leap years). If - the date is invalid, the function will return B_ERROR. -*/ -int32 -BDate::DayOfYear() const -{ - if (!IsValid()) - return int32(B_ERROR); - - return DateToJulianDay() - _DateToJulianDay(fYear, 1, 1) + 1; -} - - -/*! - Returns true if the passed \c year is a leap year, otherwise false. If the - \c year passed is before 4713 BC, the result is undefined. -*/ -bool -BDate::IsLeapYear(int32 year) const -{ - if (year < 1582) { - if (year < 0) - year++; - return (year % 4) == 0; - } - return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0); -} - - -/*! - Returns the number of days in the year of the current date. If the date is - valid it will return 365 or 366, otherwise B_ERROR; -*/ -int32 -BDate::DaysInYear() const -{ - if (!IsValid()) - return int32(B_ERROR); - - return IsLeapYear(fYear) ? 366 : 365; -} - - -/*! - Returns the number of days in the month of the current date. If the date is - valid it will return 28 up to 31, otherwise B_ERROR; -*/ -int32 -BDate::DaysInMonth() const -{ - if (!IsValid()) - return int32(B_ERROR); - - return _DaysInMonth(fYear, fMonth); -} - - -/*! - Returns the short day name of this object. -*/ -BString -BDate::ShortDayName() const -{ - return ShortDayName(DayOfWeek()); -} - - -/*! - Returns the short day name in case of an valid day, otherwise an empty - string. The passed \c day must be in the range of 1 to 7 while 1 stands for - monday. -*/ -/*static*/ BString -BDate::ShortDayName(int32 day) -{ - if (day < 1 || day > 7) - return BString(); - - tm tm_struct; - memset(&tm_struct, 0, sizeof(tm)); - tm_struct.tm_wday = day == 7 ? 0 : day; - - char buffer[256]; - strftime(buffer, sizeof(buffer), "%a", &tm_struct); - - return BString(buffer); -} - - -/*! - Returns the short month name of this object. -*/ -BString -BDate::ShortMonthName() const -{ - return ShortMonthName(Month()); -} - - -/*! - Returns the short month name in case of an valid month, otherwise an empty - string. The passed \c month must be in the range of 1 to 12. -*/ -/*static*/ BString -BDate::ShortMonthName(int32 month) -{ - if (month < 1 || month > 12) - return BString(); - - tm tm_struct; - memset(&tm_struct, 0, sizeof(tm)); - tm_struct.tm_mon = month - 1; - - char buffer[256]; - strftime(buffer, sizeof(buffer), "%b", &tm_struct); - - return BString(buffer); -} - - -/*! - Returns the long day name of this object's week day. -*/ -BString -BDate::LongDayName() const -{ - return LongDayName(DayOfWeek()); -} - - -/*! - Returns the long day name in case of an valid day, otherwise an empty - string. The passed \c day must be in the range of 1 to 7 while 1 stands for - monday. -*/ -/*static*/ BString -BDate::LongDayName(int32 day) -{ - if (day < 1 || day > 7) - return BString(); - - tm tm_struct; - memset(&tm_struct, 0, sizeof(tm)); - tm_struct.tm_wday = day == 7 ? 0 : day; - - char buffer[256]; - strftime(buffer, sizeof(buffer), "%A", &tm_struct); - - return BString(buffer); -} - - -/*! - Returns the long month name of this object's month. -*/ -BString -BDate::LongMonthName() const -{ - return LongMonthName(Month()); -} - - -/*! - Returns the long month name in case of an valid month, otherwise an empty - string. The passed \c month must be in the range of 1 to 12. -*/ -/*static*/ BString -BDate::LongMonthName(int32 month) -{ - if (month < 1 || month > 12) - return BString(); - - tm tm_struct; - memset(&tm_struct, 0, sizeof(tm)); - tm_struct.tm_mon = month - 1; - - char buffer[256]; - strftime(buffer, sizeof(buffer), "%B", &tm_struct); - - return BString(buffer); -} - - -/*! - Converts the date to Julian day. If your date is invalid, the function will - return B_ERROR. -*/ -int32 -BDate::DateToJulianDay() const -{ - return _DateToJulianDay(fYear, fMonth, fDay); -} - - -/* - Converts the passed \c julianDay to an BDate. If the \c julianDay is negativ, - the function will return an invalid date. Because of the switch from Julian - calendar to Gregorian calendar the 4.10.1582 is followed by the 15.10.1582. -*/ -BDate -BDate::JulianDayToDate(int32 julianDay) -{ - BDate date; - const int32 kGregorianCalendarStart = 2299161; - if (julianDay >= kGregorianCalendarStart) { - // http://en.wikipedia.org/wiki/Julian_day#Gregorian_calendar_from_Julian_day_number - int32 j = julianDay + 32044; - int32 dg = j % 146097; - int32 c = (dg / 36524 + 1) * 3 / 4; - int32 dc = dg - c * 36524; - int32 db = dc % 1461; - int32 a = (db / 365 + 1) * 3 / 4; - int32 da = db - a * 365; - int32 m = (da * 5 + 308) / 153 - 2; - date.fYear = ((j / 146097) * 400 + c * 100 + (dc / 1461) * 4 + a) - 4800 + - (m + 2) / 12; - date.fMonth = (m + 2) % 12 + 1; - date.fDay = int32((da - (m + 4) * 153 / 5 + 122) + 1.5); - } else if (julianDay >= 0) { - // http://en.wikipedia.org/wiki/Julian_day#Calculation - julianDay += 32082; - int32 d = (4 * julianDay + 3) / 1461; - int32 e = julianDay - (1461 * d) / 4; - int32 m = ((5 * e) + 2) / 153; - date.fDay = e - (153 * m + 2) / 5 + 1; - date.fMonth = m + 3 - 12 * (m / 10); - int32 year = d - 4800 + (m / 10); - if (year <= 0) - year--; - date.fYear = year; - } - return date; -} - - -/*! - Returns true if this date is different from \c date, otherwise false. -*/ -bool -BDate::operator!=(const BDate& date) const -{ - return DateToJulianDay() != date.DateToJulianDay(); -} - - -/*! - Returns true if this date is equal to \c date, otherwise false. -*/ -bool -BDate::operator==(const BDate& date) const -{ - return DateToJulianDay() == date.DateToJulianDay(); -} - - -/*! - Returns true if this date is earlier than \c date, otherwise false. -*/ -bool -BDate::operator<(const BDate& date) const -{ - return DateToJulianDay() < date.DateToJulianDay(); -} - - -/*! - Returns true if this date is earlier than or equal to \c date, otherwise false. -*/ -bool -BDate::operator<=(const BDate& date) const -{ - return DateToJulianDay() <= date.DateToJulianDay(); -} - - -/*! - Returns true if this date is later than \c date, otherwise false. -*/ -bool -BDate::operator>(const BDate& date) const -{ - return DateToJulianDay() > date.DateToJulianDay(); -} - - -/*! - Returns true if this date is later than or equal to \c date, otherwise false. -*/ -bool -BDate::operator>=(const BDate& date) const -{ - return DateToJulianDay() >= date.DateToJulianDay(); -} - - -bool -BDate::_SetDate(int32 year, int32 month, int32 day) -{ - fDay = -1; - fYear = 0; - fMonth = -1; - - bool valid = IsValid(year, month, day); - if (valid) { - fDay = day; - fYear = year; - fMonth = month; - } - - return valid; -} - - -int32 -BDate::_DaysInMonth(int32 year, int32 month) const -{ - if (month == 2 && IsLeapYear(year)) - return 29; - - const int32 daysInMonth[12] = - {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; - - return daysInMonth[month -1]; -} - - -int32 -BDate::_DateToJulianDay(int32 _year, int32 month, int32 day) const -{ - if (IsValid(_year, month, day)) { - int32 year = _year; - if (year < 0) year++; - - int32 a = (14 - month) / 12; - int32 y = year + 4800 - a; - int32 m = month + (12 * a) - 3; - - // http://en.wikipedia.org/wiki/Julian_day#Calculation - if (year > 1582 - || (year == 1582 && month > 10) - || (year == 1582 && month == 10 && day >= 15)) { - return day + (((153 * m) + 2) / 5) + (365 * y) + (y / 4) - - (y / 100) + (y / 400) - 32045; - } else if (year < 1582 - || (year == 1582 && month < 10) - || (year == 1582 && month == 10 && day <= 4)) { - return day + (((153 * m) + 2) / 5) + (365 * y) + (y / 4) - 32083; - } - } - - // http://en.wikipedia.org/wiki/Gregorian_calendar: - // The last day of the Julian calendar was Thursday October 4, 1582 - // and this was followed by the first day of the Gregorian calendar, - // Friday October 15, 1582 (the cycle of weekdays was not affected). - return int32(B_ERROR); -} - - -// #pragma mark - BDateTime - - -/*! - Constructs a new BDateTime object. IsValid() will return false. -*/ -BDateTime::BDateTime() - : fDate(), - fTime() -{ -} - - -/*! - Constructs a BDateTime object with \c date and \c time. The return value - of IsValid() depends on the validity of the passed objects. -*/ -BDateTime::BDateTime(const BDate& date, const BTime& time) - : fDate(date), - fTime(time) -{ -} - - -/*! - Constructs a new BDateTime object. IsValid() will return false. -*/ -BDateTime::BDateTime(const BMessage* archive) - : fDate(archive), - fTime(archive) -{ -} - - -/*! - Empty destructor. -*/ -BDateTime::~BDateTime() -{ -} - - -/*! - Archives the BDateTime object into the provided BMessage object. - @returns \c B_OK if all went well. - \c B_BAD_VALUE, if the message is \c NULL. - \c other error codes, depending on failure to append - fields to the message. -*/ -status_t -BDateTime::Archive(BMessage* into) const -{ - status_t ret = fDate.Archive(into); - if (ret == B_OK) - ret = fTime.Archive(into); - return ret; -} - - -/*! - Returns true if the date time is valid, otherwise false. -*/ -bool -BDateTime::IsValid() const -{ - return fDate.IsValid() && fTime.IsValid(); -} - - -/*! - Returns the current date and time as reported by the system depending on the - given time_type \c type. -*/ -BDateTime -BDateTime::CurrentDateTime(time_type type) -{ - return BDateTime(BDate::CurrentDate(type), BTime::CurrentTime(type)); -} - - -/*! - Sets the current date and time of this object to \c date and \c time. -*/ -void -BDateTime::SetDateTime(const BDate& date, const BTime& time) -{ - fDate = date; - fTime = time; -} - - -/*! - Returns the current date of this object. -*/ -BDate& -BDateTime::Date() -{ - return fDate; -} - - -/*! - Returns the current date of this object. -*/ -const BDate& -BDateTime::Date() const -{ - return fDate; -} - - -/*! - Set the current date of this object to \c date. -*/ -void -BDateTime::SetDate(const BDate& date) -{ - fDate = date; -} - - -/*! - Returns the current time of this object. -*/ -BTime& -BDateTime::Time() -{ - return fTime; -} - - -/*! - Returns the current time of this object. -*/ -const BTime& -BDateTime::Time() const -{ - return fTime; -} - - -/*! - Sets the current time of this object to \c time. -*/ -void -BDateTime::SetTime(const BTime& time) -{ - fTime = time; -} - - -/*! - Returns the current date and time converted to seconds since - 1.1.1970 - 00:00:00. If the current date is before 1.1.1970 the function - returns -1; -*/ -int32 -BDateTime::Time_t() const -{ - BDate date(1970, 1, 1); - if (date.Difference(fDate) < 0) - return -1; - - tm tm_struct; - - tm_struct.tm_hour = fTime.Hour(); - tm_struct.tm_min = fTime.Minute(); - tm_struct.tm_sec = fTime.Second(); - - tm_struct.tm_year = fDate.Year() - 1900; - tm_struct.tm_mon = fDate.Month() - 1; - tm_struct.tm_mday = fDate.Day(); - - // set less 0 as we wan't use it - tm_struct.tm_isdst = -1; - - // return secs_since_jan1_1970 or -1 on error - return int32(mktime(&tm_struct)); -} - - -/*! - Sets the current date and time converted from seconds since - 1.1.1970 - 00:00:00. -*/ -void -BDateTime::SetTime_t(uint32 seconds) -{ - BTime time; - time.AddSeconds(seconds % kSecondsPerDay); - fTime.SetTime(time); - - BDate date(1970, 1, 1); - date.AddDays(seconds / kSecondsPerDay); - fDate.SetDate(date); -} - - -/*! - Returns true if this datetime is different from \c dateTime, otherwise false. -*/ -bool -BDateTime::operator!=(const BDateTime& dateTime) const -{ - return fTime != dateTime.fTime && fDate != dateTime.fDate; -} - - -/*! - Returns true if this datetime is equal to \c dateTime, otherwise false. -*/ -bool -BDateTime::operator==(const BDateTime& dateTime) const -{ - return fTime == dateTime.fTime && fDate == dateTime.fDate; -} - - -/*! - Returns true if this datetime is earlier than \c dateTime, otherwise false. -*/ -bool -BDateTime::operator<(const BDateTime& dateTime) const -{ - if (fDate < dateTime.fDate) - return true; - if (fDate == dateTime.fDate) - return fTime < dateTime.fTime; - return false; -} - - -/*! - Returns true if this datetime is earlier than or equal to \c dateTime, - otherwise false. -*/ -bool -BDateTime::operator<=(const BDateTime& dateTime) const -{ - if (fDate < dateTime.fDate) - return true; - if (fDate == dateTime.fDate) - return fTime <= dateTime.fTime; - return false; -} - - -/*! - Returns true if this datetime is later than \c dateTime, otherwise false. -*/ -bool -BDateTime::operator>(const BDateTime& dateTime) const -{ - if (fDate > dateTime.fDate) - return true; - if (fDate == dateTime.fDate) - return fTime > dateTime.fTime; - return false; -} - - -/*! - Returns true if this datetime is later than or equal to \c dateTime, - otherwise false. -*/ -bool -BDateTime::operator>=(const BDateTime& dateTime) const -{ - if (fDate > dateTime.fDate) - return true; - if (fDate == dateTime.fDate) - return fTime >= dateTime.fTime; - return false; -} - - -} //namespace BPrivate diff --git a/src/apps/webpositive/support/DateTime.h b/src/apps/webpositive/support/DateTime.h deleted file mode 100644 index 93f76399d6..0000000000 --- a/src/apps/webpositive/support/DateTime.h +++ /dev/null @@ -1,225 +0,0 @@ -/* - * Copyright 2007-2010, Haiku, Inc. All Rights Reserved. - * Distributed under the terms of the MIT License. - */ -#ifndef _DATE_TIME_H_ -#define _DATE_TIME_H_ - - -#include - - -class BMessage; - - -namespace BPrivate { - - -enum time_type { - B_GMT_TIME, - B_LOCAL_TIME -}; - - -enum diff_type { - B_HOURS_DIFF, - B_MINUTES_DIFF, - B_SECONDS_DIFF, - B_MILLISECONDS_DIFF, - B_MICROSECONDS_DIFF -}; - - -class BTime { -public: - BTime(); - BTime(const BTime& other); - BTime(int32 hour, int32 minute, int32 second, - int32 microsecond = 0); - BTime(const BMessage* archive); - ~BTime(); - - status_t Archive(BMessage* into) const; - - bool IsValid() const; - bool IsValid(const BTime& time) const; - bool IsValid(int32 hour, int32 minute, int32 second, - int32 microsecond = 0) const; - - static BTime CurrentTime(time_type type); - - BTime Time() const; - bool SetTime(const BTime& time); - bool SetTime(int32 hour, int32 minute, int32 second, - int32 microsecond = 0); - - BTime& AddHours(int32 hours); - BTime& AddMinutes(int32 minutes); - BTime& AddSeconds(int32 seconds); - BTime& AddMilliseconds(int32 milliseconds); - BTime& AddMicroseconds(int32 microseconds); - - int32 Hour() const; - int32 Minute() const; - int32 Second() const; - int32 Millisecond() const; - int32 Microsecond() const; - bigtime_t Difference(const BTime& time, - diff_type type) const; - - bool operator!=(const BTime& time) const; - bool operator==(const BTime& time) const; - - bool operator<(const BTime& time) const; - bool operator<=(const BTime& time) const; - - bool operator>(const BTime& time) const; - bool operator>=(const BTime& time) const; - -private: - bigtime_t _Microseconds() const; - BTime& _AddMicroseconds(bigtime_t microseconds); - bool _SetTime(bigtime_t hour, bigtime_t minute, - bigtime_t second, bigtime_t microsecond); - -private: - bigtime_t fMicroseconds; -}; - - -class BDate { -public: - BDate(); - BDate(const BDate& other); - BDate(int32 year, int32 month, int32 day); - BDate(const BMessage* archive); - ~BDate(); - - status_t Archive(BMessage* into) const; - - bool IsValid() const; - bool IsValid(const BDate& date) const; - bool IsValid(int32 year, int32 month, - int32 day) const; - - static BDate CurrentDate(time_type type); - - BDate Date() const; - bool SetDate(const BDate& date); - - bool SetDate(int32 year, int32 month, int32 day); - void GetDate(int32* year, int32* month, int32* day); - - void AddDays(int32 days); - void AddYears(int32 years); - void AddMonths(int32 months); - - int32 Day() const; - int32 Year() const; - int32 Month() const; - int32 Difference(const BDate& date) const; - - int32 DayOfWeek() const; - int32 DayOfYear() const; - - int32 WeekNumber() const; - bool IsLeapYear(int32 year) const; - - int32 DaysInYear() const; - int32 DaysInMonth() const; - - BString ShortDayName() const; - static BString ShortDayName(int32 day); - - BString ShortMonthName() const; - static BString ShortMonthName(int32 month); - - BString LongDayName() const; - static BString LongDayName(int32 day); - - BString LongMonthName() const; - static BString LongMonthName(int32 month); - - int32 DateToJulianDay() const; - static BDate JulianDayToDate(int32 julianDay); - - bool operator!=(const BDate& date) const; - bool operator==(const BDate& date) const; - - bool operator<(const BDate& date) const; - bool operator<=(const BDate& date) const; - - bool operator>(const BDate& date) const; - bool operator>=(const BDate& date) const; - -private: - int32 _DaysInMonth(int32 year, int32 month) const; - bool _SetDate(int32 year, int32 month, int32 day); - int32 _DateToJulianDay(int32 year, int32 month, - int32 day) const; - -private: - int32 fDay; - int32 fYear; - int32 fMonth; -}; - - -class BDateTime { -public: - BDateTime(); - BDateTime(const BDate &date, const BTime &time); - BDateTime(const BMessage* archive); - ~BDateTime(); - - status_t Archive(BMessage* into) const; - - bool IsValid() const; - - static BDateTime CurrentDateTime(time_type type); - void SetDateTime(const BDate &date, const BTime &time); - - BDate& Date(); - const BDate& Date() const; - void SetDate(const BDate &date); - - BTime& Time(); - const BTime& Time() const; - void SetTime(const BTime &time); - - int32 Time_t() const; - void SetTime_t(uint32 seconds); - - bool operator!=(const BDateTime& dateTime) const; - bool operator==(const BDateTime& dateTime) const; - - bool operator<(const BDateTime& dateTime) const; - bool operator<=(const BDateTime& dateTime) const; - - bool operator>(const BDateTime& dateTime) const; - bool operator>=(const BDateTime& dateTime) const; - -private: - BDate fDate; - BTime fTime; -}; - - -} // namespace BPrivate - - -using BPrivate::time_type; -using BPrivate::B_GMT_TIME; -using BPrivate::B_LOCAL_TIME; -using BPrivate::diff_type; -using BPrivate::B_HOURS_DIFF; -using BPrivate::B_MINUTES_DIFF; -using BPrivate::B_SECONDS_DIFF; -using BPrivate::B_MILLISECONDS_DIFF; -using BPrivate::B_MICROSECONDS_DIFF; -using BPrivate::BTime; -using BPrivate::BDate; -using BPrivate::BDateTime; - - -#endif // _DATE_TIME_H_ diff --git a/src/apps/webpositive/support/HashMap.h b/src/apps/webpositive/support/HashMap.h deleted file mode 100644 index 36b321f2b8..0000000000 --- a/src/apps/webpositive/support/HashMap.h +++ /dev/null @@ -1,481 +0,0 @@ -// HashMap.h -// -// Copyright (c) 2004-2007, Ingo Weinhold (bonefish@cs.tu-berlin.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. -// -// Except as contained in this notice, the name of a copyright holder shall -// not be used in advertising or otherwise to promote the sale, use or other -// dealings in this Software without prior written authorization of the -// copyright holder. - -#ifndef HASH_MAP_H -#define HASH_MAP_H - - -#include - -#include "AutoLocker.h" -#include "OpenHashTable.h" - - -namespace BPrivate { - -// HashMapElement -template -class HashMapElement : public OpenHashElement { -private: - typedef HashMapElement Element; -public: - - HashMapElement() : OpenHashElement(), fKey(), fValue() - { - fNext = -1; - } - - inline uint32 Hash() const - { - return fKey.GetHashCode(); - } - - inline bool operator==(const OpenHashElement &_element) const - { - const Element &element = static_cast(_element); - return (fKey == element.fKey); - } - - inline void Adopt(Element &element) - { - fKey = element.fKey; - fValue = element.fValue; - } - - Key fKey; - Value fValue; -}; - -// HashMap -template -class HashMap { -public: - class Entry { - public: - Entry() {} - Entry(const Key& key, Value value) : key(key), value(value) {} - - Key key; - Value value; - }; - - class Iterator { - private: - typedef HashMapElement Element; - public: - Iterator(const Iterator& other) - : - fMap(other.fMap), - fIndex(other.fIndex), - fElement(other.fElement), - fLastElement(other.fElement) - { - } - - bool HasNext() const - { - return fElement; - } - - Entry Next() - { - if (!fElement) - return Entry(); - Entry result(fElement->fKey, fElement->fValue); - _FindNext(); - return result; - } - - Value* NextValue() - { - if (fElement == NULL) - return NULL; - - Value* value = &fElement->fValue; - _FindNext(); - return value; - } - - Entry Remove() - { - if (!fLastElement) - return Entry(); - Entry result(fLastElement->fKey, fLastElement->fValue); - fMap->fTable.Remove(fLastElement, true); - fLastElement = NULL; - return result; - } - - Iterator& operator=(const Iterator& other) - { - fMap = other.fMap; - fIndex = other.fIndex; - fElement = other.fElement; - fLastElement = other.fLastElement; - return *this; - } - - private: - Iterator(const HashMap* map) - : - fMap(const_cast*>(map)), - fIndex(0), - fElement(NULL), - fLastElement(NULL) - { - // find first - _FindNext(); - } - - void _FindNext() - { - fLastElement = fElement; - if (fElement && fElement->fNext >= 0) { - fElement = fMap->fTable.ElementAt(fElement->fNext); - return; - } - fElement = NULL; - int32 arraySize = fMap->fTable.ArraySize(); - for (; !fElement && fIndex < arraySize; fIndex++) - fElement = fMap->fTable.FindFirst(fIndex); - } - - private: - friend class HashMap; - - HashMap* fMap; - int32 fIndex; - Element* fElement; - Element* fLastElement; - }; - - HashMap(); - ~HashMap(); - - status_t InitCheck() const; - - status_t Put(const Key& key, Value value); - Value Remove(const Key& key); - void Clear(); - Value Get(const Key& key) const; - bool Get(const Key& key, Value*& _value) const; - - bool ContainsKey(const Key& key) const; - - int32 Size() const; - - Iterator GetIterator() const; - -protected: - typedef HashMapElement Element; - friend class Iterator; - -private: - Element *_FindElement(const Key& key) const; - -protected: - OpenHashElementArray fElementArray; - OpenHashTable > fTable; -}; - -// SynchronizedHashMap -template -class SynchronizedHashMap : public BLocker { -public: - typedef struct HashMap::Entry Entry; - typedef struct HashMap::Iterator Iterator; - - SynchronizedHashMap() : BLocker("synchronized hash map") {} - ~SynchronizedHashMap() { Lock(); } - - status_t InitCheck() const - { - return fMap.InitCheck(); - } - - status_t Put(const Key& key, Value value) - { - MapLocker locker(this); - if (!locker.IsLocked()) - return B_ERROR; - return fMap.Put(key, value); - } - - Value Remove(const Key& key) - { - MapLocker locker(this); - if (!locker.IsLocked()) - return Value(); - return fMap.Remove(key); - } - - void Clear() - { - MapLocker locker(this); - return fMap.Clear(); - } - - Value Get(const Key& key) const - { - const BLocker* lock = this; - MapLocker locker(const_cast(lock)); - if (!locker.IsLocked()) - return Value(); - return fMap.Get(key); - } - - bool ContainsKey(const Key& key) const - { - const BLocker* lock = this; - MapLocker locker(const_cast(lock)); - if (!locker.IsLocked()) - return false; - return fMap.ContainsKey(key); - } - - int32 Size() const - { - const BLocker* lock = this; - MapLocker locker(const_cast(lock)); - return fMap.Size(); - } - - Iterator GetIterator() - { - return fMap.GetIterator(); - } - - // for debugging only - const HashMap& GetUnsynchronizedMap() const { return fMap; } - HashMap& GetUnsynchronizedMap() { return fMap; } - -protected: - typedef AutoLocker MapLocker; - - HashMap fMap; -}; - -// HashKey32 -template -struct HashKey32 { - HashKey32() {} - HashKey32(const Value& value) : value(value) {} - - uint32 GetHashCode() const - { - return (uint32)value; - } - - HashKey32 operator=(const HashKey32& other) - { - value = other.value; - return *this; - } - - bool operator==(const HashKey32& other) const - { - return (value == other.value); - } - - bool operator!=(const HashKey32& other) const - { - return (value != other.value); - } - - Value value; -}; - - -// HashKey64 -template -struct HashKey64 { - HashKey64() {} - HashKey64(const Value& value) : value(value) {} - - uint32 GetHashCode() const - { - uint64 v = (uint64)value; - return (uint32)(v >> 32) ^ (uint32)v; - } - - HashKey64 operator=(const HashKey64& other) - { - value = other.value; - return *this; - } - - bool operator==(const HashKey64& other) const - { - return (value == other.value); - } - - bool operator!=(const HashKey64& other) const - { - return (value != other.value); - } - - Value value; -}; - - -// HashMap - -// constructor -template -HashMap::HashMap() - : - fElementArray(1000), - fTable(1000, &fElementArray) -{ -} - -// destructor -template -HashMap::~HashMap() -{ -} - -// InitCheck -template -status_t -HashMap::InitCheck() const -{ - return (fTable.InitCheck() && fElementArray.InitCheck() - ? B_OK : B_NO_MEMORY); -} - -// Put -template -status_t -HashMap::Put(const Key& key, Value value) -{ - Element* element = _FindElement(key); - if (element) { - // already contains the key: just set the new value - element->fValue = value; - return B_OK; - } - // does not contain the key yet: add an element - element = fTable.Add(key.GetHashCode()); - if (!element) - return B_NO_MEMORY; - element->fKey = key; - element->fValue = value; - return B_OK; -} - -// Remove -template -Value -HashMap::Remove(const Key& key) -{ - Value value = Value(); - if (Element* element = _FindElement(key)) { - value = element->fValue; - fTable.Remove(element); - } - return value; -} - -// Clear -template -void -HashMap::Clear() -{ - fTable.RemoveAll(); -} - -// Get -template -Value -HashMap::Get(const Key& key) const -{ - if (Element* element = _FindElement(key)) - return element->fValue; - return Value(); -} - -// Get -template -bool -HashMap::Get(const Key& key, Value*& _value) const -{ - if (Element* element = _FindElement(key)) { - _value = &element->fValue; - return true; - } - - return false; -} - -// ContainsKey -template -bool -HashMap::ContainsKey(const Key& key) const -{ - return _FindElement(key); -} - -// Size -template -int32 -HashMap::Size() const -{ - return fTable.CountElements(); -} - -// GetIterator -template -struct HashMap::Iterator -HashMap::GetIterator() const -{ - return Iterator(this); -} - -// _FindElement -template -struct HashMap::Element * -HashMap::_FindElement(const Key& key) const -{ - Element* element = fTable.FindFirst(key.GetHashCode()); - while (element && element->fKey != key) { - if (element->fNext >= 0) - element = fTable.ElementAt(element->fNext); - else - element = NULL; - } - return element; -} - -} // namespace BPrivate - -using BPrivate::HashMap; -using BPrivate::HashKey32; -using BPrivate::HashKey64; -using BPrivate::SynchronizedHashMap; - -#endif // HASH_MAP_H diff --git a/src/apps/webpositive/support/HashSet.h b/src/apps/webpositive/support/HashSet.h deleted file mode 100644 index ee7be71288..0000000000 --- a/src/apps/webpositive/support/HashSet.h +++ /dev/null @@ -1,342 +0,0 @@ -// HashSet.h -// -// Copyright (c) 2004, Ingo Weinhold (bonefish@cs.tu-berlin.de) -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. -// -// Except as contained in this notice, the name of a copyright holder shall -// not be used in advertising or otherwise to promote the sale, use or other -// dealings in this Software without prior written authorization of the -// copyright holder. - -#ifndef HASH_SET_H -#define HASH_SET_H - -#include - -#include "AutoLocker.h" -#include "OpenHashTable.h" - - -namespace BPrivate { - -// HashSetElement -template -class HashSetElement : public OpenHashElement { -private: - typedef HashSetElement Element; -public: - - HashSetElement() : OpenHashElement(), fKey() - { - fNext = -1; - } - - inline uint32 Hash() const - { - return fKey.GetHashCode(); - } - - inline bool operator==(const OpenHashElement &_element) const - { - const Element &element = static_cast(_element); - return (fKey == element.fKey); - } - - inline void Adopt(Element &element) - { - fKey = element.fKey; - } - - Key fKey; -}; - -// HashSet -template -class HashSet { -public: - class Iterator { - private: - typedef HashSetElement Element; - public: - Iterator(const Iterator& other) - : fSet(other.fSet), - fIndex(other.fIndex), - fElement(other.fElement), - fLastElement(other.fElement) - { - } - - bool HasNext() const - { - return fElement; - } - - Key Next() - { - if (!fElement) - return Key(); - Key result(fElement->fKey); - _FindNext(); - return result; - } - - bool Remove() - { - if (!fLastElement) - return false; - fSet->fTable.Remove(fLastElement); - fLastElement = NULL; - return true; - } - - Iterator& operator=(const Iterator& other) - { - fSet = other.fSet; - fIndex = other.fIndex; - fElement = other.fElement; - fLastElement = other.fLastElement; - return *this; - } - - private: - Iterator(HashSet* map) - : fSet(map), - fIndex(0), - fElement(NULL), - fLastElement(NULL) - { - // find first - _FindNext(); - } - - void _FindNext() - { - fLastElement = fElement; - if (fElement && fElement->fNext >= 0) { - fElement = fSet->fTable.ElementAt(fElement->fNext); - return; - } - fElement = NULL; - int32 arraySize = fSet->fTable.ArraySize(); - for (; !fElement && fIndex < arraySize; fIndex++) - fElement = fSet->fTable.FindFirst(fIndex); - } - - private: - friend class HashSet; - - HashSet* fSet; - int32 fIndex; - Element* fElement; - Element* fLastElement; - }; - - HashSet(); - ~HashSet(); - - status_t InitCheck() const; - - status_t Add(const Key& key); - bool Remove(const Key& key); - void Clear(); - bool Contains(const Key& key) const; - - int32 Size() const; - bool IsEmpty() const { return Size() == 0; } - - Iterator GetIterator(); - -protected: - typedef HashSetElement Element; - friend class Iterator; - -private: - Element *_FindElement(const Key& key) const; - -protected: - OpenHashElementArray fElementArray; - OpenHashTable > fTable; -}; - -// SynchronizedHashSet -template -class SynchronizedHashSet : public BLocker { -public: - typedef struct HashSet::Iterator Iterator; - - SynchronizedHashSet() : BLocker("synchronized hash set") {} - ~SynchronizedHashSet() { Lock(); } - - status_t InitCheck() const - { - return fSet.InitCheck(); - } - - status_t Add(const Key& key) - { - MapLocker locker(this); - if (!locker.IsLocked()) - return B_ERROR; - return fSet.Add(key); - } - - bool Remove(const Key& key) - { - MapLocker locker(this); - if (!locker.IsLocked()) - return false; - return fSet.Remove(key); - } - - bool Contains(const Key& key) const - { - const BLocker* lock = this; - MapLocker locker(const_cast(lock)); - if (!locker.IsLocked()) - return false; - return fSet.Contains(key); - } - - int32 Size() const - { - const BLocker* lock = this; - MapLocker locker(const_cast(lock)); - return fSet.Size(); - } - - Iterator GetIterator() - { - return fSet.GetIterator(); - } - - // for debugging only - const HashSet& GetUnsynchronizedSet() const { return fSet; } - HashSet& GetUnsynchronizedSet() { return fSet; } - -protected: - typedef AutoLocker MapLocker; - - HashSet fSet; -}; - -// HashSet - -// constructor -template -HashSet::HashSet() - : fElementArray(1000), - fTable(1000, &fElementArray) -{ -} - -// destructor -template -HashSet::~HashSet() -{ -} - -// InitCheck -template -status_t -HashSet::InitCheck() const -{ - return (fTable.InitCheck() && fElementArray.InitCheck() - ? B_OK : B_NO_MEMORY); -} - -// Add -template -status_t -HashSet::Add(const Key& key) -{ - if (Contains(key)) - return B_OK; - Element* element = fTable.Add(key.GetHashCode()); - if (!element) - return B_NO_MEMORY; - element->fKey = key; - return B_OK; -} - -// Remove -template -bool -HashSet::Remove(const Key& key) -{ - if (Element* element = _FindElement(key)) { - fTable.Remove(element); - return true; - } - return false; -} - -// Clear -template -void -HashSet::Clear() -{ - fTable.RemoveAll(); -} - -// Contains -template -bool -HashSet::Contains(const Key& key) const -{ - return _FindElement(key); -} - -// Size -template -int32 -HashSet::Size() const -{ - return fTable.CountElements(); -} - -// GetIterator -template -struct HashSet::Iterator -HashSet::GetIterator() -{ - return Iterator(this); -} - -// _FindElement -template -struct HashSet::Element * -HashSet::_FindElement(const Key& key) const -{ - Element* element = fTable.FindFirst(key.GetHashCode()); - while (element && element->fKey != key) { - if (element->fNext >= 0) - element = fTable.ElementAt(element->fNext); - else - element = NULL; - } - return element; -} - -} // namespace BPrivate - -using BPrivate::HashSet; -using BPrivate::SynchronizedHashSet; - -#endif // HASH_SET_H diff --git a/src/apps/webpositive/support/IconButton.cpp b/src/apps/webpositive/support/IconButton.cpp deleted file mode 100644 index 5cd2ede604..0000000000 --- a/src/apps/webpositive/support/IconButton.cpp +++ /dev/null @@ -1,929 +0,0 @@ -/* - * Copyright 2006-2010, Haiku. - * Distributed under the terms of the MIT License. - * - * Authors: - * Stephan Aßmus - */ - -// NOTE: this file is a duplicate of the version in Icon-O-Matic/generic -// it should be placed into a common folder for generic useful stuff - -#include "IconButton.h" - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "IconUtils.h" - -using std::nothrow; - -// constructor -IconButton::IconButton(const char* name, uint32 id, const char* label, - BMessage* message, BHandler* target) - : BView(name, B_WILL_DRAW), - BInvoker(message, target), - fButtonState(STATE_ENABLED), - fID(id), - fNormalBitmap(NULL), - fDisabledBitmap(NULL), - fClickedBitmap(NULL), - fDisabledClickedBitmap(NULL), - fLabel(label), - fTargetCache(target) -{ - SetLowColor(ui_color(B_PANEL_BACKGROUND_COLOR)); - SetViewColor(B_TRANSPARENT_32_BIT); -} - -// destructor -IconButton::~IconButton() -{ - _DeleteBitmaps(); -} - -// MessageReceived -void -IconButton::MessageReceived(BMessage* message) -{ - switch (message->what) { - default: - BView::MessageReceived(message); - break; - } -} - -// AttachedToWindow -void -IconButton::AttachedToWindow() -{ - rgb_color background = B_TRANSPARENT_COLOR; - if (BView* parent = Parent()) { - background = parent->ViewColor(); - if (background == B_TRANSPARENT_COLOR) - background = parent->LowColor(); - } - if (background == B_TRANSPARENT_COLOR) - background = ui_color(B_PANEL_BACKGROUND_COLOR); - SetLowColor(background); - - SetTarget(fTargetCache); - if (!Target()) - SetTarget(Window()); -} - -// Draw -void -IconButton::Draw(BRect area) -{ - rgb_color background = LowColor(); - - BRect r(Bounds()); - - if (be_control_look != NULL) { - uint32 flags = 0; - BBitmap* bitmap = fNormalBitmap; - if (!IsEnabled()) { - flags |= BControlLook::B_DISABLED; - bitmap = fDisabledBitmap; - } - if (_HasFlags(STATE_PRESSED) || _HasFlags(STATE_FORCE_PRESSED)) - flags |= BControlLook::B_ACTIVATED; - - if (DrawBorder()) { - be_control_look->DrawButtonFrame(this, r, area, background, - background, flags); - be_control_look->DrawButtonBackground(this, r, area, background, - flags); - } else { - SetHighColor(background); - FillRect(r); - } - - if (bitmap && bitmap->IsValid()) { - float x = r.left + floorf((r.Width() - - bitmap->Bounds().Width()) / 2.0 + 0.5); - float y = r.top + floorf((r.Height() - - bitmap->Bounds().Height()) / 2.0 + 0.5); - BPoint point(x, y); - if (_HasFlags(STATE_PRESSED) || _HasFlags(STATE_FORCE_PRESSED)) - point += BPoint(1.0, 1.0); - if (bitmap->ColorSpace() == B_RGBA32 - || bitmap->ColorSpace() == B_RGBA32_BIG) { - SetDrawingMode(B_OP_ALPHA); - SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY); - } - DrawBitmap(bitmap, point); - } - return; - } - - rgb_color lightShadow, shadow, darkShadow, light; - BBitmap* bitmap = fNormalBitmap; - // adjust colors and bitmap according to flags - if (IsEnabled()) { - lightShadow = tint_color(background, B_DARKEN_1_TINT); - shadow = tint_color(background, B_DARKEN_2_TINT); - darkShadow = tint_color(background, B_DARKEN_4_TINT); - light = tint_color(background, B_LIGHTEN_MAX_TINT); - SetHighColor(0, 0, 0, 255); - } else { - lightShadow = tint_color(background, 1.11); - shadow = tint_color(background, B_DARKEN_1_TINT); - darkShadow = tint_color(background, B_DARKEN_2_TINT); - light = tint_color(background, B_LIGHTEN_2_TINT); - bitmap = fDisabledBitmap; - SetHighColor(tint_color(background, B_DISABLED_LABEL_TINT)); - } - if (_HasFlags(STATE_PRESSED) || _HasFlags(STATE_FORCE_PRESSED)) { - if (IsEnabled()) { -// background = tint_color(background, B_DARKEN_2_TINT); -// background = tint_color(background, B_LIGHTEN_1_TINT); - background = tint_color(background, B_DARKEN_1_TINT); - bitmap = fClickedBitmap; - } else { -// background = tint_color(background, B_DARKEN_1_TINT); -// background = tint_color(background, (B_NO_TINT + B_LIGHTEN_1_TINT) / 2.0); - background = tint_color(background, (B_NO_TINT + B_DARKEN_1_TINT) / 2.0); - bitmap = fDisabledClickedBitmap; - } - // background - SetLowColor(background); - r.InsetBy(2.0, 2.0); - StrokeLine(r.LeftBottom(), r.LeftTop(), B_SOLID_LOW); - StrokeLine(r.LeftTop(), r.RightTop(), B_SOLID_LOW); - r.InsetBy(-2.0, -2.0); - } - // draw frame only if tracking - if (DrawBorder()) { - if (_HasFlags(STATE_PRESSED) || _HasFlags(STATE_FORCE_PRESSED)) - DrawPressedBorder(r, background, shadow, darkShadow, lightShadow, light); - else - DrawNormalBorder(r, background, shadow, darkShadow, lightShadow, light); - r.InsetBy(2.0, 2.0); - } else - _DrawFrame(r, background, background, background, background); - float width = Bounds().Width(); - float height = Bounds().Height(); - // bitmap - BRegion originalClippingRegion; - if (bitmap && bitmap->IsValid()) { - float x = floorf((width - bitmap->Bounds().Width()) / 2.0 + 0.5); - float y = floorf((height - bitmap->Bounds().Height()) / 2.0 + 0.5); - BPoint point(x, y); - if (_HasFlags(STATE_PRESSED) || _HasFlags(STATE_FORCE_PRESSED)) - point += BPoint(1.0, 1.0); - if (bitmap->ColorSpace() == B_RGBA32 || bitmap->ColorSpace() == B_RGBA32_BIG) { - FillRect(r, B_SOLID_LOW); - SetDrawingMode(B_OP_ALPHA); - SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY); - } - DrawBitmap(bitmap, point); - // constrain clipping region - BRegion region= originalClippingRegion; - GetClippingRegion(®ion); - region.Exclude(bitmap->Bounds().OffsetByCopy(point)); - ConstrainClippingRegion(®ion); - } - // background - SetDrawingMode(B_OP_COPY); - FillRect(r, B_SOLID_LOW); - ConstrainClippingRegion(NULL); - // label - if (fLabel.CountChars() > 0) { - SetDrawingMode(B_OP_COPY); - font_height fh; - GetFontHeight(&fh); - float y = Bounds().bottom - 4.0; - y -= fh.descent; - float x = (width - StringWidth(fLabel.String())) / 2.0; - DrawString(fLabel.String(), BPoint(x, y)); - } -} - -// MouseDown -void -IconButton::MouseDown(BPoint where) -{ - if (!IsValid()) - return; - - if (_HasFlags(STATE_ENABLED)/* && !_HasFlags(STATE_FORCE_PRESSED)*/) { - if (Bounds().Contains(where)) { - SetMouseEventMask(B_POINTER_EVENTS, B_LOCK_WINDOW_FOCUS); - _AddFlags(STATE_PRESSED | STATE_TRACKING); - } else { - _ClearFlags(STATE_PRESSED | STATE_TRACKING); - } - } -} - -// MouseUp -void -IconButton::MouseUp(BPoint where) -{ - if (!IsValid()) - return; - -// if (!_HasFlags(STATE_FORCE_PRESSED)) { - if (_HasFlags(STATE_ENABLED) && _HasFlags(STATE_PRESSED) && Bounds().Contains(where)) - Invoke(); - else if (Bounds().Contains(where)) - _AddFlags(STATE_INSIDE); - _ClearFlags(STATE_PRESSED | STATE_TRACKING); -// } -} - -// MouseMoved -void -IconButton::MouseMoved(BPoint where, uint32 transit, const BMessage* message) -{ - if (!IsValid()) - return; - - uint32 buttons = 0; - Window()->CurrentMessage()->FindInt32("buttons", (int32*)&buttons); - // catch a mouse up event that we might have missed - if (!buttons && _HasFlags(STATE_PRESSED)) { - MouseUp(where); - return; - } - if (buttons && !_HasFlags(STATE_TRACKING)) - return; - if ((transit == B_INSIDE_VIEW || transit == B_ENTERED_VIEW) - && _HasFlags(STATE_ENABLED)) - _AddFlags(STATE_INSIDE); - else - _ClearFlags(STATE_INSIDE); - if (_HasFlags(STATE_TRACKING)) { - if (Bounds().Contains(where)) - _AddFlags(STATE_PRESSED); - else - _ClearFlags(STATE_PRESSED); - } -} - -#define MIN_SPACE 15.0 - -// GetPreferredSize -void -IconButton::GetPreferredSize(float* width, float* height) -{ - float minWidth = 0.0; - float minHeight = 0.0; - if (IsValid()) { - minWidth += fNormalBitmap->Bounds().IntegerWidth() + 1.0; - minHeight += fNormalBitmap->Bounds().IntegerHeight() + 1.0; - } - if (minWidth < MIN_SPACE) - minWidth = MIN_SPACE; - if (minHeight < MIN_SPACE) - minHeight = MIN_SPACE; - - float hPadding = max_c(6.0, ceilf(minHeight / 4.0)); - float vPadding = max_c(6.0, ceilf(minWidth / 4.0)); - - if (fLabel.CountChars() > 0) { - font_height fh; - GetFontHeight(&fh); - minHeight += ceilf(fh.ascent + fh.descent) + vPadding; - minWidth += StringWidth(fLabel.String()) + vPadding; - } - - if (width) - *width = minWidth + hPadding; - if (height) - *height = minHeight + vPadding; -} - -// MinSize -BSize -IconButton::MinSize() -{ - BSize size; - GetPreferredSize(&size.width, &size.height); - return size; -} - -// MaxSize -BSize -IconButton::MaxSize() -{ - return MinSize(); -} - -// Invoke -status_t -IconButton::Invoke(BMessage* message) -{ - if (!message) - message = Message(); - if (message) { - BMessage clone(*message); - clone.AddInt64("be:when", system_time()); - clone.AddPointer("be:source", (BView*)this); - clone.AddInt32("be:value", Value()); - clone.AddInt32("id", ID()); - return BInvoker::Invoke(&clone); - } - return BInvoker::Invoke(message); -} - -// SetPressed -void -IconButton::SetPressed(bool pressed) -{ - if (pressed) - _AddFlags(STATE_FORCE_PRESSED); - else - _ClearFlags(STATE_FORCE_PRESSED); -} - -// IsPressed -bool -IconButton::IsPressed() const -{ - return _HasFlags(STATE_FORCE_PRESSED); -} - -status_t -IconButton::SetIcon(int32 resourceID) -{ - app_info info; - status_t status = be_app->GetAppInfo(&info); - if (status != B_OK) - return status; - - BResources resources(&info.ref); - status = resources.InitCheck(); - if (status != B_OK) - return status; - - size_t size; - const void* data = resources.LoadResource(B_VECTOR_ICON_TYPE, resourceID, - &size); - if (data != NULL) { - BBitmap bitmap(BRect(0, 0, 31, 31), B_BITMAP_NO_SERVER_LINK, B_RGBA32); - status = bitmap.InitCheck(); - if (status != B_OK) - return status; - status = BIconUtils::GetVectorIcon(reinterpret_cast(data), - size, &bitmap); - if (status != B_OK) - return status; - return SetIcon(&bitmap); - } -// const void* data = resources.LoadResource(B_BITMAP_TYPE, resourceID, &size); - return B_ERROR; -} - -// SetIcon -status_t -IconButton::SetIcon(const char* pathToBitmap) -{ - if (pathToBitmap == NULL) - return B_BAD_VALUE; - - status_t status = B_BAD_VALUE; - BBitmap* fileBitmap = NULL; - // try to load bitmap from either relative or absolute path - BEntry entry(pathToBitmap, true); - if (!entry.Exists()) { - app_info info; - status = be_app->GetAppInfo(&info); - if (status == B_OK) { - BEntry app_entry(&info.ref, true); - BPath path; - app_entry.GetPath(&path); - status = path.InitCheck(); - if (status == B_OK) { - status = path.GetParent(&path); - if (status == B_OK) { - status = path.Append(pathToBitmap, true); - if (status == B_OK) - fileBitmap = BTranslationUtils::GetBitmap(path.Path()); - else - printf("IconButton::SetIcon() - path.Append() failed: %s\n", strerror(status)); - } else - printf("IconButton::SetIcon() - path.GetParent() failed: %s\n", strerror(status)); - } else - printf("IconButton::SetIcon() - path.InitCheck() failed: %s\n", strerror(status)); - } else - printf("IconButton::SetIcon() - be_app->GetAppInfo() failed: %s\n", strerror(status)); - } else - fileBitmap = BTranslationUtils::GetBitmap(pathToBitmap); - if (fileBitmap) { - status = _MakeBitmaps(fileBitmap); - delete fileBitmap; - } else - status = B_ERROR; - return status; -} - -// SetIcon -status_t -IconButton::SetIcon(const BBitmap* bitmap) -{ - if (bitmap && bitmap->ColorSpace() == B_CMAP8) { - status_t status = bitmap->InitCheck(); - if (status >= B_OK) { - if (BBitmap* rgb32Bitmap = _ConvertToRGB32(bitmap)) { - status = _MakeBitmaps(rgb32Bitmap); - delete rgb32Bitmap; - } else - status = B_NO_MEMORY; - } - return status; - } else - return _MakeBitmaps(bitmap); -} - -// SetIcon -status_t -IconButton::SetIcon(const BMimeType* fileType, bool small) -{ - status_t status = fileType ? fileType->InitCheck() : B_BAD_VALUE; - if (status >= B_OK) { - BBitmap* mimeBitmap = new(nothrow) BBitmap(BRect(0.0, 0.0, 15.0, 15.0), B_CMAP8); - if (mimeBitmap && mimeBitmap->IsValid()) { - status = fileType->GetIcon(mimeBitmap, small ? B_MINI_ICON : B_LARGE_ICON); - if (status >= B_OK) { - if (BBitmap* bitmap = _ConvertToRGB32(mimeBitmap)) { - status = _MakeBitmaps(bitmap); - delete bitmap; - } else - printf("IconButton::SetIcon() - B_RGB32 bitmap is not valid\n"); - } else - printf("IconButton::SetIcon() - fileType->GetIcon() failed: %s\n", strerror(status)); - } else - printf("IconButton::SetIcon() - B_CMAP8 bitmap is not valid\n"); - delete mimeBitmap; - } else - printf("IconButton::SetIcon() - fileType is not valid: %s\n", strerror(status)); - return status; -} - -// SetIcon -status_t -IconButton::SetIcon(const unsigned char* bitsFromQuickRes, - uint32 width, uint32 height, color_space format, bool convertToBW) -{ - status_t status = B_BAD_VALUE; - if (bitsFromQuickRes && width > 0 && height > 0) { - BBitmap* quickResBitmap = new(nothrow) BBitmap(BRect(0.0, 0.0, width - 1.0, height - 1.0), format); - status = quickResBitmap ? quickResBitmap->InitCheck() : B_ERROR; - if (status >= B_OK) { - // It doesn't look right to copy BitsLength() bytes, but bitmaps - // exported from QuickRes still contain their padding, so it is alright. - memcpy(quickResBitmap->Bits(), bitsFromQuickRes, quickResBitmap->BitsLength()); - if (format != B_RGB32 && format != B_RGBA32 && format != B_RGB32_BIG && format != B_RGBA32_BIG) { - // colorspace needs conversion - BBitmap* bitmap = new(nothrow) BBitmap(quickResBitmap->Bounds(), B_RGB32, true); - if (bitmap && bitmap->IsValid()) { - BView* helper = new BView(bitmap->Bounds(), "helper", - B_FOLLOW_NONE, B_WILL_DRAW); - if (bitmap->Lock()) { - bitmap->AddChild(helper); - helper->SetHighColor(ui_color(B_PANEL_BACKGROUND_COLOR)); - helper->FillRect(helper->Bounds()); - helper->SetDrawingMode(B_OP_OVER); - helper->DrawBitmap(quickResBitmap, BPoint(0.0, 0.0)); - helper->Sync(); - bitmap->Unlock(); - } - status = _MakeBitmaps(bitmap); - } else - printf("IconButton::SetIcon() - B_RGB32 bitmap is not valid\n"); - delete bitmap; - } else { - // native colorspace (32 bits) - if (convertToBW) { - // convert to gray scale icon - uint8* bits = (uint8*)quickResBitmap->Bits(); - uint32 bpr = quickResBitmap->BytesPerRow(); - for (uint32 y = 0; y < height; y++) { - uint8* handle = bits; - uint8 gray; - for (uint32 x = 0; x < width; x++) { - gray = uint8((116 * handle[0] + 600 * handle[1] + 308 * handle[2]) / 1024); - handle[0] = gray; - handle[1] = gray; - handle[2] = gray; - handle += 4; - } - bits += bpr; - } - } - status = _MakeBitmaps(quickResBitmap); - } - } else - printf("IconButton::SetIcon() - error allocating bitmap: %s\n", strerror(status)); - delete quickResBitmap; - } - return status; -} - -// ClearIcon -void -IconButton::ClearIcon() -{ - _DeleteBitmaps(); - _Update(); -} - -void -IconButton::TrimIcon(bool keepAspect) -{ - if (fNormalBitmap == NULL) - return; - - uint8* bits = (uint8*)fNormalBitmap->Bits(); - uint32 bpr = fNormalBitmap->BytesPerRow(); - uint32 width = fNormalBitmap->Bounds().IntegerWidth() + 1; - uint32 height = fNormalBitmap->Bounds().IntegerHeight() + 1; - BRect trimmed(LONG_MAX, LONG_MAX, LONG_MIN, LONG_MIN); - for (uint32 y = 0; y < height; y++) { - uint8* b = bits + 3; - bool rowHasAlpha = false; - for (uint32 x = 0; x < width; x++) { - if (*b) { - rowHasAlpha = true; - if (x < trimmed.left) - trimmed.left = x; - if (x > trimmed.right) - trimmed.right = x; - } - b += 4; - } - if (rowHasAlpha) { - if (y < trimmed.top) - trimmed.top = y; - if (y > trimmed.bottom) - trimmed.bottom = y; - } - bits += bpr; - } - if (!trimmed.IsValid()) - return; - if (keepAspect) { - float minInset = trimmed.left; - minInset = min_c(minInset, trimmed.top); - minInset = min_c(minInset, fNormalBitmap->Bounds().right - trimmed.right); - minInset = min_c(minInset, fNormalBitmap->Bounds().bottom - trimmed.bottom); - trimmed = fNormalBitmap->Bounds().InsetByCopy(minInset, minInset); - } - trimmed = trimmed & fNormalBitmap->Bounds(); - BBitmap trimmedBitmap(trimmed.OffsetToCopy(B_ORIGIN), - B_BITMAP_NO_SERVER_LINK, B_RGBA32); - bits = (uint8*)fNormalBitmap->Bits(); - bits += 4 * (int32)trimmed.left + bpr * (int32)trimmed.top; - uint8* dst = (uint8*)trimmedBitmap.Bits(); - uint32 trimmedWidth = trimmedBitmap.Bounds().IntegerWidth() + 1; - uint32 trimmedHeight = trimmedBitmap.Bounds().IntegerHeight() + 1; - uint32 trimmedBPR = trimmedBitmap.BytesPerRow(); - for (uint32 y = 0; y < trimmedHeight; y++) { - memcpy(dst, bits, trimmedWidth * 4); - dst += trimmedBPR; - bits += bpr; - } - SetIcon(&trimmedBitmap); -} - -// Bitmap -BBitmap* -IconButton::Bitmap() const -{ - BBitmap* bitmap = NULL; - if (fNormalBitmap && fNormalBitmap->IsValid()) { - bitmap = new(nothrow) BBitmap(fNormalBitmap); - if (bitmap->IsValid()) { - // TODO: remove this functionality when we use real transparent bitmaps - uint8* bits = (uint8*)bitmap->Bits(); - uint32 bpr = bitmap->BytesPerRow(); - uint32 width = bitmap->Bounds().IntegerWidth() + 1; - uint32 height = bitmap->Bounds().IntegerHeight() + 1; - color_space format = bitmap->ColorSpace(); - if (format == B_CMAP8) { - // replace gray with magic transparent index - } else if (format == B_RGB32) { - for (uint32 y = 0; y < height; y++) { - uint8* bitsHandle = bits; - for (uint32 x = 0; x < width; x++) { - if (bitsHandle[0] == 216 - && bitsHandle[1] == 216 - && bitsHandle[2] == 216) { - bitsHandle[3] = 0; // make this pixel completely transparent - } - bitsHandle += 4; - } - bits += bpr; - } - } - } else { - delete bitmap; - bitmap = NULL; - } - } - return bitmap; -} - -// DrawBorder -bool -IconButton::DrawBorder() const -{ - return ((IsEnabled() && (_HasFlags(STATE_INSIDE) - || _HasFlags(STATE_TRACKING))) || _HasFlags(STATE_FORCE_PRESSED)); -} - -// DrawNormalBorder -void -IconButton::DrawNormalBorder(BRect r, rgb_color background, - rgb_color shadow, rgb_color darkShadow, - rgb_color lightShadow, rgb_color light) -{ - _DrawFrame(r, shadow, darkShadow, light, lightShadow); -} - -// DrawPressedBorder -void -IconButton::DrawPressedBorder(BRect r, rgb_color background, - rgb_color shadow, rgb_color darkShadow, - rgb_color lightShadow, rgb_color light) -{ - _DrawFrame(r, shadow, light, darkShadow, background); -} - -// IsValid -bool -IconButton::IsValid() const -{ - return (fNormalBitmap && fDisabledBitmap && fClickedBitmap - && fDisabledClickedBitmap - && fNormalBitmap->IsValid() - && fDisabledBitmap->IsValid() - && fClickedBitmap->IsValid() - && fDisabledClickedBitmap->IsValid()); -} - -// Value -int32 -IconButton::Value() const -{ - return _HasFlags(STATE_PRESSED) ? B_CONTROL_ON : B_CONTROL_OFF; -} - -// SetValue -void -IconButton::SetValue(int32 value) -{ - if (value) - _AddFlags(STATE_PRESSED); - else - _ClearFlags(STATE_PRESSED); -} - -// IsEnabled -bool -IconButton::IsEnabled() const -{ - return _HasFlags(STATE_ENABLED) ? B_CONTROL_ON : B_CONTROL_OFF; -} - -// SetEnabled -void -IconButton::SetEnabled(bool enabled) -{ - if (enabled) - _AddFlags(STATE_ENABLED); - else - _ClearFlags(STATE_ENABLED | STATE_TRACKING | STATE_INSIDE); -} - -// _ConvertToRGB32 -BBitmap* -IconButton::_ConvertToRGB32(const BBitmap* bitmap) const -{ - BBitmap* convertedBitmap = new(nothrow) BBitmap(bitmap->Bounds(), - B_BITMAP_ACCEPTS_VIEWS, B_RGBA32); - if (convertedBitmap && convertedBitmap->IsValid()) { - memset(convertedBitmap->Bits(), 0, convertedBitmap->BitsLength()); - BView* helper = new BView(bitmap->Bounds(), "helper", - B_FOLLOW_NONE, B_WILL_DRAW); - if (convertedBitmap->Lock()) { - convertedBitmap->AddChild(helper); - helper->SetDrawingMode(B_OP_OVER); - helper->DrawBitmap(bitmap, BPoint(0.0, 0.0)); - helper->Sync(); - convertedBitmap->Unlock(); - } - } else { - delete convertedBitmap; - convertedBitmap = NULL; - } - return convertedBitmap; -} - -// _MakeBitmaps -status_t -IconButton::_MakeBitmaps(const BBitmap* bitmap) -{ - status_t status = bitmap ? bitmap->InitCheck() : B_BAD_VALUE; - if (status >= B_OK) { - // make our own versions of the bitmap - BRect b(bitmap->Bounds()); - _DeleteBitmaps(); - color_space format = bitmap->ColorSpace(); - fNormalBitmap = new(nothrow) BBitmap(b, format); - fDisabledBitmap = new(nothrow) BBitmap(b, format); - fClickedBitmap = new(nothrow) BBitmap(b, format); - fDisabledClickedBitmap = new(nothrow) BBitmap(b, format); - if (IsValid()) { - // copy bitmaps from file bitmap - uint8* nBits = (uint8*)fNormalBitmap->Bits(); - uint8* dBits = (uint8*)fDisabledBitmap->Bits(); - uint8* cBits = (uint8*)fClickedBitmap->Bits(); - uint8* dcBits = (uint8*)fDisabledClickedBitmap->Bits(); - uint8* fBits = (uint8*)bitmap->Bits(); - int32 nbpr = fNormalBitmap->BytesPerRow(); - int32 fbpr = bitmap->BytesPerRow(); - int32 pixels = b.IntegerWidth() + 1; - int32 lines = b.IntegerHeight() + 1; - // nontransparent version: - if (format == B_RGB32 || format == B_RGB32_BIG) { - // iterate over color components - for (int32 y = 0; y < lines; y++) { - for (int32 x = 0; x < pixels; x++) { - int32 nOffset = 4 * x; - int32 fOffset = 4 * x; - nBits[nOffset + 0] = fBits[fOffset + 0]; - nBits[nOffset + 1] = fBits[fOffset + 1]; - nBits[nOffset + 2] = fBits[fOffset + 2]; - nBits[nOffset + 3] = 255; - // clicked bits are darker (lame method...) - cBits[nOffset + 0] = (uint8)((float)nBits[nOffset + 0] * 0.8); - cBits[nOffset + 1] = (uint8)((float)nBits[nOffset + 1] * 0.8); - cBits[nOffset + 2] = (uint8)((float)nBits[nOffset + 2] * 0.8); - cBits[nOffset + 3] = 255; - // disabled bits have less contrast (lame method...) - uint8 grey = 216; - float dist = (nBits[nOffset + 0] - grey) * 0.4; - dBits[nOffset + 0] = (uint8)(grey + dist); - dist = (nBits[nOffset + 1] - grey) * 0.4; - dBits[nOffset + 1] = (uint8)(grey + dist); - dist = (nBits[nOffset + 2] - grey) * 0.4; - dBits[nOffset + 2] = (uint8)(grey + dist); - dBits[nOffset + 3] = 255; - // disabled bits have less contrast (lame method...) - grey = 188; - dist = (nBits[nOffset + 0] - grey) * 0.4; - dcBits[nOffset + 0] = (uint8)(grey + dist); - dist = (nBits[nOffset + 1] - grey) * 0.4; - dcBits[nOffset + 1] = (uint8)(grey + dist); - dist = (nBits[nOffset + 2] - grey) * 0.4; - dcBits[nOffset + 2] = (uint8)(grey + dist); - dcBits[nOffset + 3] = 255; - } - nBits += nbpr; - dBits += nbpr; - cBits += nbpr; - dcBits += nbpr; - fBits += fbpr; - } - // transparent version: - } else if (format == B_RGBA32 || format == B_RGBA32_BIG) { - // iterate over color components - for (int32 y = 0; y < lines; y++) { - for (int32 x = 0; x < pixels; x++) { - int32 nOffset = 4 * x; - int32 fOffset = 4 * x; - nBits[nOffset + 0] = fBits[fOffset + 0]; - nBits[nOffset + 1] = fBits[fOffset + 1]; - nBits[nOffset + 2] = fBits[fOffset + 2]; - nBits[nOffset + 3] = fBits[fOffset + 3]; - // clicked bits are darker (lame method...) - cBits[nOffset + 0] = (uint8)(nBits[nOffset + 0] * 0.8); - cBits[nOffset + 1] = (uint8)(nBits[nOffset + 1] * 0.8); - cBits[nOffset + 2] = (uint8)(nBits[nOffset + 2] * 0.8); - cBits[nOffset + 3] = fBits[fOffset + 3]; - // disabled bits have less opacity - - uint8 grey = ((uint16)nBits[nOffset + 0] * 10 - + nBits[nOffset + 1] * 60 - + nBits[nOffset + 2] * 30) / 100; - float dist = (nBits[nOffset + 0] - grey) * 0.3; - dBits[nOffset + 0] = (uint8)(grey + dist); - dist = (nBits[nOffset + 1] - grey) * 0.3; - dBits[nOffset + 1] = (uint8)(grey + dist); - dist = (nBits[nOffset + 2] - grey) * 0.3; - dBits[nOffset + 2] = (uint8)(grey + dist); - dBits[nOffset + 3] = (uint8)(fBits[fOffset + 3] * 0.3); - // disabled bits have less contrast (lame method...) - dcBits[nOffset + 0] = (uint8)(dBits[nOffset + 0] * 0.8); - dcBits[nOffset + 1] = (uint8)(dBits[nOffset + 1] * 0.8); - dcBits[nOffset + 2] = (uint8)(dBits[nOffset + 2] * 0.8); - dcBits[nOffset + 3] = (uint8)(fBits[fOffset + 3] * 0.3); - } - nBits += nbpr; - dBits += nbpr; - cBits += nbpr; - dcBits += nbpr; - fBits += fbpr; - } - // unsupported format - } else { - printf("IconButton::_MakeBitmaps() - bitmap has unsupported colorspace\n"); - status = B_MISMATCHED_VALUES; - _DeleteBitmaps(); - } - } else { - printf("IconButton::_MakeBitmaps() - error allocating local bitmaps\n"); - status = B_NO_MEMORY; - _DeleteBitmaps(); - } - } else - printf("IconButton::_MakeBitmaps() - bitmap is not valid\n"); - return status; -} - -// _DeleteBitmaps -void -IconButton::_DeleteBitmaps() -{ - delete fNormalBitmap; - fNormalBitmap = NULL; - delete fDisabledBitmap; - fDisabledBitmap = NULL; - delete fClickedBitmap; - fClickedBitmap = NULL; - delete fDisabledClickedBitmap; - fDisabledClickedBitmap = NULL; -} - -// _Update -void -IconButton::_Update() -{ - if (LockLooper()) { - Invalidate(); - UnlockLooper(); - } -} - -// _AddFlags -void -IconButton::_AddFlags(uint32 flags) -{ - if (!(fButtonState & flags)) { - fButtonState |= flags; - _Update(); - } -} - -// _ClearFlags -void -IconButton::_ClearFlags(uint32 flags) -{ - if (fButtonState & flags) { - fButtonState &= ~flags; - _Update(); - } -} - -// _HasFlags -bool -IconButton::_HasFlags(uint32 flags) const -{ - return (fButtonState & flags); -} - -// _DrawFrame -void -IconButton::_DrawFrame(BRect r, rgb_color col1, rgb_color col2, - rgb_color col3, rgb_color col4) -{ - BeginLineArray(8); - AddLine(BPoint(r.left, r.bottom), BPoint(r.left, r.top), col1); - AddLine(BPoint(r.left + 1.0, r.top), BPoint(r.right, r.top), col1); - AddLine(BPoint(r.right, r.top + 1.0), BPoint(r.right, r.bottom), col2); - AddLine(BPoint(r.right - 1.0, r.bottom), BPoint(r.left + 1.0, r.bottom), col2); - r.InsetBy(1.0, 1.0); - AddLine(BPoint(r.left, r.bottom), BPoint(r.left, r.top), col3); - AddLine(BPoint(r.left + 1.0, r.top), BPoint(r.right, r.top), col3); - AddLine(BPoint(r.right, r.top + 1.0), BPoint(r.right, r.bottom), col4); - AddLine(BPoint(r.right - 1.0, r.bottom), BPoint(r.left + 1.0, r.bottom), col4); - EndLineArray(); -} diff --git a/src/apps/webpositive/support/IconButton.h b/src/apps/webpositive/support/IconButton.h deleted file mode 100644 index 2876dd8cfd..0000000000 --- a/src/apps/webpositive/support/IconButton.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright 2006-2010, Haiku. - * Distributed under the terms of the MIT License. - * - * Authors: - * Stephan Aßmus - */ - -/** gui class that loads an image from disk and shows it - as clickable button */ - -// TODO: inherit from BControl? - -// NOTE: this file is a duplicate of the version in Icon-O-Matic/generic -// it should be placed into a common folder for generic useful stuff - -#ifndef ICON_BUTTON_H -#define ICON_BUTTON_H - -#include -#include -#include - -class BBitmap; -class BMimeType; - -class IconButton : public BView, public BInvoker { -public: - IconButton(const char* name, - uint32 id, - const char* label = NULL, - BMessage* message = NULL, - BHandler* target = NULL); - virtual ~IconButton(); - - // BView interface - virtual void MessageReceived(BMessage* message); - virtual void AttachedToWindow(); - virtual void Draw(BRect updateRect); - virtual void MouseDown(BPoint where); - virtual void MouseUp(BPoint where); - virtual void MouseMoved(BPoint where, uint32 transit, - const BMessage* message); - virtual void GetPreferredSize(float* width, - float* height); - virtual BSize MinSize(); - virtual BSize MaxSize(); - - - // BInvoker interface - virtual status_t Invoke(BMessage* message = NULL); - - // IconButton - bool IsValid() const; - - virtual int32 Value() const; - virtual void SetValue(int32 value); - - bool IsEnabled() const; - void SetEnabled(bool enable); - - void SetPressed(bool pressed); - bool IsPressed() const; - uint32 ID() const - { return fID; } - - status_t SetIcon(int32 resourceID); - status_t SetIcon(const char* pathToBitmap); - status_t SetIcon(const BBitmap* bitmap); - status_t SetIcon(const BMimeType* fileType, - bool small = true); - status_t SetIcon(const unsigned char* bitsFromQuickRes, - uint32 width, uint32 height, - color_space format, - bool convertToBW = false); - void ClearIcon(); - void TrimIcon(bool keepAspect = true); - - BBitmap* Bitmap() const; - // caller has to delete the returned bitmap - - virtual bool DrawBorder() const; - virtual void DrawNormalBorder(BRect r, - rgb_color background, - rgb_color shadow, - rgb_color darkShadow, - rgb_color lightShadow, - rgb_color light); - virtual void DrawPressedBorder(BRect r, - rgb_color background, - rgb_color shadow, - rgb_color darkShadow, - rgb_color lightShadow, - rgb_color light); - -protected: - enum { - STATE_NONE = 0x0000, - STATE_TRACKING = 0x0001, - STATE_PRESSED = 0x0002, - STATE_ENABLED = 0x0004, - STATE_INSIDE = 0x0008, - STATE_FORCE_PRESSED = 0x0010, - }; - - void _AddFlags(uint32 flags); - void _ClearFlags(uint32 flags); - bool _HasFlags(uint32 flags) const; - - void _DrawFrame(BRect frame, - rgb_color col1, - rgb_color col2, - rgb_color col3, - rgb_color col4); - -// private: - BBitmap* _ConvertToRGB32(const BBitmap* bitmap) const; - status_t _MakeBitmaps(const BBitmap* bitmap); - void _DeleteBitmaps(); - void _SendMessage() const; - void _Update(); - - uint32 fButtonState; - int32 fID; - BBitmap* fNormalBitmap; - BBitmap* fDisabledBitmap; - BBitmap* fClickedBitmap; - BBitmap* fDisabledClickedBitmap; - BString fLabel; - - BHandler* fTargetCache; -}; - -#endif // ICON_BUTTON_H diff --git a/src/apps/webpositive/support/IconUtils.h b/src/apps/webpositive/support/IconUtils.h deleted file mode 100644 index fdcfbd946f..0000000000 --- a/src/apps/webpositive/support/IconUtils.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2006-2008, Haiku. All rights reserved. - * Distributed under the terms of the MIT License. - */ -#ifndef _ICON_UTILS_H -#define _ICON_UTILS_H - - -#include - -class BBitmap; -class BNode; - - -// This class is a little different from many other classes. -// You don't create an instance of it; you just call its various -// static member functions for utility-like operations. -class BIconUtils { - BIconUtils(); - ~BIconUtils(); - BIconUtils(const BIconUtils&); - BIconUtils& operator=(const BIconUtils&); - -public: - - // Utility function to import an icon from the node that - // has either of the provided attribute names. Which icon type - // is preferred (vector, small or large B_CMAP8 icon) depends - // on the colorspace of the provided bitmap. If the colorspace - // is B_CMAP8, B_CMAP8 icons are preferred. In that case, the - // bitmap size must also match the provided icon_size "size"! - static status_t GetIcon(BNode* node, - const char* vectorIconAttrName, - const char* smallIconAttrName, - const char* largeIconAttrName, - icon_size size, BBitmap* result); - - // Utility functions to import a vector icon in "flat icon" - // format from a BNode attribute or from a flat buffer in - // memory into the preallocated BBitmap "result". - // The colorspace of result needs to be B_RGBA32 or at - // least B_RGB32 (though that makes less sense). The icon - // will be scaled from it's "native" size of 64x64 to the - // size of the bitmap, the scale is derived from the bitmap - // width, the bitmap should have square dimension, or the - // icon will be cut off at the bottom (or have room left). - static status_t GetVectorIcon(BNode* node, - const char* attrName, BBitmap* result); - - static status_t GetVectorIcon(const uint8* buffer, - size_t size, BBitmap* result); - - // Utility function to import an "old" BeOS icon in B_CMAP8 - // colorspace from either the small icon attribute or the - // large icon attribute as given in "smallIconAttrName" and - // "largeIconAttrName". Which icon is loaded depends on - // the given "size". - static status_t GetCMAP8Icon(BNode* node, - const char* smallIconAttrName, - const char* largeIconAttrName, - icon_size size, BBitmap* icon); - - // Utility functions to convert from old icon colorspace - // into colorspace of BBitmap "result" (should be B_RGBA32 - // to make any sense). - static status_t ConvertFromCMAP8(BBitmap* source, - BBitmap* result); - static status_t ConvertToCMAP8(BBitmap* source, - BBitmap* result); - - static status_t ConvertFromCMAP8(const uint8* data, - uint32 width, uint32 height, - uint32 bytesPerRow, BBitmap* result); - - static status_t ConvertToCMAP8(const uint8* data, - uint32 width, uint32 height, - uint32 bytesPerRow, BBitmap* result); -}; - -#endif // _ICON_UTILS_H diff --git a/src/apps/webpositive/support/NavMenu.h b/src/apps/webpositive/support/NavMenu.h deleted file mode 100644 index 127d94f255..0000000000 --- a/src/apps/webpositive/support/NavMenu.h +++ /dev/null @@ -1,168 +0,0 @@ -/* -Open Tracker License - -Terms and Conditions - -Copyright (c) 1991-2000, Be Incorporated. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice applies to all licensees -and shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of Be Incorporated shall not be -used in advertising or otherwise to promote the sale, use or other dealings in -this Software without prior written authorization from Be Incorporated. - -Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks -of Be Incorporated in the United States and other countries. Other brand product -names are registered trademarks or trademarks of their respective holders. -All rights reserved. -*/ - -// NavMenu is a hierarchical menu of volumes, folders, files and queries -// displays icons, uses the SlowMenu API for full interruptability - -#ifndef NAV_MENU_H -#define NAV_MENU_H - - -#include -#include -#include - -#include "SlowMenu.h" - - -template class BObjectList; -class BMenuItem; - -namespace BPrivate { - -class Model; -class BContainerWindow; -class ModelMenuItem; -class EntryListBase; - - -class TrackingHookData { - public: - TrackingHookData() - : - fTrackingHook(NULL), - fDragMessage(NULL) - { - } - - bool (*fTrackingHook)(BMenu *, void *); - BMessenger fTarget; - const BMessage *fDragMessage; -}; - - -class BNavMenu : public BSlowMenu { - public: - BNavMenu(const char* title, uint32 message, const BHandler *, - BWindow *parentWindow = NULL, const BObjectList *list = NULL); - BNavMenu(const char* title, uint32 message, const BMessenger &, - BWindow *parentWindow = NULL, const BObjectList *list = NULL); - // parentWindow, if specified, will be closed if nav menu item invoked - // with option held down - - virtual ~BNavMenu(); - - virtual void AttachedToWindow(); - virtual void DetachedFromWindow(); - - void SetNavDir(const entry_ref *); - void ForceRebuild(); - bool NeedsToRebuild() const; - // will cause menu to get rebuilt next time it is shown - - virtual void ResetTargets(); - void SetTarget(const BMessenger &); - BMessenger Target(); - - void SetTypesList(const BObjectList *list); - const BObjectList *TypesList() const; - - void AddNavDir(const Model *model, uint32 what, BHandler *target, - bool populateSubmenu); - - void AddNavParentDir(const char *name, const Model *model, uint32 what, BHandler *target); - void AddNavParentDir(const Model *model, uint32 what, BHandler *target); - void SetShowParent(bool show); - - static int32 GetMaxMenuWidth(); - - static int CompareFolderNamesFirstOne(const BMenuItem *, const BMenuItem *); - static int CompareOne(const BMenuItem *, const BMenuItem *); - - static ModelMenuItem *NewModelItem(Model *, const BMessage *, const BMessenger &, - bool suppressFolderHierarchy=false, BContainerWindow * = NULL, - const BObjectList *typeslist = NULL, - TrackingHookData *hook = NULL); - - TrackingHookData *InitTrackingHook(bool (*hookfunction)(BMenu *, void *), - const BMessenger *target, const BMessage *dragMessage); - - protected: - virtual bool StartBuildingItemList(); - virtual bool AddNextItem(); - virtual void DoneBuildingItemList(); - virtual void ClearMenuBuildingState(); - - void BuildVolumeMenu(); - - void AddOneItem(Model *); - void AddRootItemsIfNeeded(); - void AddTrashItem(); - static void SetTrackingHookDeep(BMenu *, bool (*)(BMenu *, void *), void *); - - entry_ref fNavDir; - BMessage fMessage; - BMessenger fMessenger; - BWindow *fParentWindow; - - // menu building state - uint8 fFlags; - BObjectList *fItemList; - EntryListBase *fContainer; - bool fIteratingDesktop; - - const BObjectList *fTypesList; - - TrackingHookData fTrackingHook; -}; - -// Spring Loaded Folder convenience routines -// used in both Tracker and Deskbar -#ifndef _IMPEXP_TRACKER -# define _IMPEXP_TRACKER -#endif -_IMPEXP_TRACKER bool SpringLoadedFolderCompareMessages(const BMessage *incoming, - const BMessage *dragmessage); -_IMPEXP_TRACKER void SpringLoadedFolderSetMenuStates(const BMenu *menu, - const BObjectList *typeslist); -_IMPEXP_TRACKER void SpringLoadedFolderAddUniqueTypeToList(entry_ref *ref, - BObjectList *typeslist); -_IMPEXP_TRACKER void SpringLoadedFolderCacheDragData(const BMessage *incoming, - BMessage **, BObjectList **typeslist); - -} // namespace BPrivate - -using namespace BPrivate; - -#endif // NAV_MENU_H diff --git a/src/apps/webpositive/support/OpenHashTable.h b/src/apps/webpositive/support/OpenHashTable.h deleted file mode 100644 index 437fbed170..0000000000 --- a/src/apps/webpositive/support/OpenHashTable.h +++ /dev/null @@ -1,514 +0,0 @@ -/* -Open Tracker License - -Terms and Conditions - -Copyright (c) 1991-2000, Be Incorporated. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice applies to all licensees -and shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of Be Incorporated shall not be -used in advertising or otherwise to promote the sale, use or other dealings in -this Software without prior written authorization from Be Incorporated. - -Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks -of Be Incorporated in the United States and other countries. Other brand product -names are registered trademarks or trademarks of their respective holders. -All rights reserved. -*/ - -// bonefish: -// * removed need for exceptions -// * fixed warnings -// * implemented rehashing -// * added RemoveAll() -// TODO: -// * shrinking of element vectors - -// Hash table with open addresssing - -#ifndef __OPEN_HASH_TABLE__ -#define __OPEN_HASH_TABLE__ - -#include -#include - -// don't include -#ifndef ASSERT -# define ASSERT(E) (void)0 -#endif -#ifndef TRESPASS -# define TRESPASS() (void)0 -#endif - -namespace BPrivate { - -template -class ElementVector { - // element vector for OpenHashTable needs to implement this - // interface -public: - Element &At(int32 index); - Element *Add(); - int32 IndexOf(const Element &) const; - void Remove(int32 index); -}; - -class OpenHashElement { -public: - uint32 Hash() const; - bool operator==(const OpenHashElement &) const; - void Adopt(OpenHashElement &); - // low overhead copy, original element is in undefined state - // after call (calls Adopt on BString members, etc.) - int32 fNext; -}; - -const uint32 kPrimes [] = { - 509, 1021, 2039, 4093, 8191, 16381, 32749, 65521, 131071, 262139, - 524287, 1048573, 2097143, 4194301, 8388593, 16777213, 33554393, 67108859, - 134217689, 268435399, 536870909, 1073741789, 2147483647, 0 -}; - -template > -class OpenHashTable { -public: - OpenHashTable(int32 minSize, ElementVec *elementVector = 0, - float maxLoadFactor = 0.8); - // it is up to the subclass of OpenHashTable to supply - // elementVector - ~OpenHashTable(); - - bool InitCheck() const; - - void SetElementVector(ElementVec *elementVector); - - Element *FindFirst(uint32 elementHash) const; - Element *Add(uint32 elementHash); - - void Remove(Element *element, bool dontRehash = false); - void RemoveAll(); - - // when calling Add, any outstanding element pointer may become - // invalid; to deal with this, get the element index and restore - // it after the add - int32 ElementIndex(const Element *) const; - Element *ElementAt(int32 index) const; - - int32 ArraySize() const; - int32 VectorSize() const; - int32 CountElements() const; - -protected: - static int32 OptimalSize(int32 minSize); - -private: - bool _RehashIfNeeded(); - bool _Rehash(); - - int32 fArraySize; - int32 fInitialSize; - int32 fElementCount; - int32 *fHashArray; - ElementVec *fElementVector; - float fMaxLoadFactor; -}; - -template -class OpenHashElementArray : public ElementVector { - // this is a straightforward implementation of an element vector - // deleting is handled by linking deleted elements into a free list - // the vector never shrinks -public: - OpenHashElementArray(int32 initialSize); - ~OpenHashElementArray(); - - bool InitCheck() const; - - Element &At(int32 index); - const Element &At(int32 index) const; - Element *Add(const Element &); - Element *Add(); - void Remove(int32 index); - int32 IndexOf(const Element &) const; - int32 Size() const; - -private: - Element *fData; - int32 fSize; - int32 fNextFree; - int32 fNextDeleted; -}; - - -//----------------------------------- - -template -OpenHashTable::OpenHashTable(int32 minSize, - ElementVec *elementVector, float maxLoadFactor) - : fArraySize(OptimalSize(minSize)), - fInitialSize(fArraySize), - fElementCount(0), - fElementVector(elementVector), - fMaxLoadFactor(maxLoadFactor) -{ - // sanity check the maximal load factor - if (fMaxLoadFactor < 0.5) - fMaxLoadFactor = 0.5; - // allocate and init the array - fHashArray = (int32*)calloc(fArraySize, sizeof(int32)); - if (fHashArray) { - for (int32 index = 0; index < fArraySize; index++) - fHashArray[index] = -1; - } -} - -template -OpenHashTable::~OpenHashTable() -{ - RemoveAll(); - free(fHashArray); -} - -template -bool -OpenHashTable::InitCheck() const -{ - return (fHashArray && fElementVector); -} - -template -int32 -OpenHashTable::OptimalSize(int32 minSize) -{ - for (int32 index = 0; ; index++) - if (!kPrimes[index] || kPrimes[index] >= (uint32)minSize) - return (int32)kPrimes[index]; - - return 0; -} - -template -Element * -OpenHashTable::FindFirst(uint32 hash) const -{ - ASSERT(fElementVector); - hash %= fArraySize; - if (fHashArray[hash] < 0) - return 0; - - return &fElementVector->At(fHashArray[hash]); -} - -template -int32 -OpenHashTable::ElementIndex(const Element *element) const -{ - return fElementVector->IndexOf(*element); -} - -template -Element * -OpenHashTable::ElementAt(int32 index) const -{ - return &fElementVector->At(index); -} - -template -int32 -OpenHashTable::ArraySize() const -{ - return fArraySize; -} - -template -int32 -OpenHashTable::VectorSize() const -{ - return fElementVector->Size(); -} - -template -int32 -OpenHashTable::CountElements() const -{ - return fElementCount; -} - - -template -Element * -OpenHashTable::Add(uint32 hash) -{ - ASSERT(fElementVector); - _RehashIfNeeded(); - hash %= fArraySize; - Element *result = fElementVector->Add(); - if (result) { - result->fNext = fHashArray[hash]; - fHashArray[hash] = fElementVector->IndexOf(*result); - fElementCount++; - } - return result; -} - -template -void -OpenHashTable::Remove(Element *element, bool dontRehash) -{ - if (!dontRehash) - _RehashIfNeeded(); - uint32 hash = element->Hash() % fArraySize; - int32 next = fHashArray[hash]; - ASSERT(next >= 0); - - if (&fElementVector->At(next) == element) { - fHashArray[hash] = element->fNext; - fElementVector->Remove(next); - fElementCount--; - return; - } - - for (int32 index = next; index >= 0; ) { - // look for an existing match in table - next = fElementVector->At(index).fNext; - if (next < 0) { - TRESPASS(); - return; - } - - if (&fElementVector->At(next) == element) { - fElementVector->At(index).fNext = element->fNext; - fElementVector->Remove(next); - fElementCount--; - return; - } - index = next; - } -} - -template -void -OpenHashTable::RemoveAll() -{ - for (int32 i = 0; fElementCount > 0 && i < fArraySize; i++) { - int32 index = fHashArray[i]; - while (index >= 0) { - Element* element = &fElementVector->At(index); - int32 next = element->fNext; - fElementVector->Remove(index); - fElementCount--; - index = next; - } - fHashArray[i] = -1; - } - _RehashIfNeeded(); -} - -template -void -OpenHashTable::SetElementVector(ElementVec *elementVector) -{ - fElementVector = elementVector; -} - -// _RehashIfNeeded -template -bool -OpenHashTable::_RehashIfNeeded() -{ - // The load factor range [fMaxLoadFactor / 3, fMaxLoadFactor] is fine, - // I think. After rehashing the load factor will be about - // fMaxLoadFactor * 2 / 3, respectively fMaxLoadFactor / 2. - float loadFactor = (float)fElementCount / (float)fArraySize; - if (loadFactor > fMaxLoadFactor - || (fArraySize > fInitialSize && loadFactor < fMaxLoadFactor / 3)) { - return _Rehash(); - } - return true; -} - -// _Rehash -template -bool -OpenHashTable::_Rehash() -{ - bool result = true; - int32 newSize = int32(fElementCount * 1.73 * fMaxLoadFactor); - newSize = (fInitialSize > newSize ? fInitialSize : newSize); - if (newSize != fArraySize) { - // allocate a new array - int32 *newHashArray = (int32*)calloc(newSize, sizeof(int32)); - if (newHashArray) { - // init the new hash array - for (int32 index = 0; index < newSize; index++) - newHashArray[index] = -1; - // iterate through all elements and put them into the new - // hash array - for (int i = 0; i < fArraySize; i++) { - int32 index = fHashArray[i]; - while (index >= 0) { - // insert the element in the new array - Element &element = fElementVector->At(index); - int32 next = element.fNext; - uint32 hash = (element.Hash() % newSize); - element.fNext = newHashArray[hash]; - newHashArray[hash] = index; - // next element in old list - index = next; - } - } - // delete the old array and set the new one - free(fHashArray); - fHashArray = newHashArray; - fArraySize = newSize; - } else - result = false; - } - return result; -} - - -template -OpenHashElementArray::OpenHashElementArray(int32 initialSize) - : fSize(initialSize), - fNextFree(0), - fNextDeleted(-1) -{ - fData = (Element*)calloc((size_t)initialSize, sizeof(Element)); -} - -template -OpenHashElementArray::~OpenHashElementArray() -{ - free(fData); -} - -template -bool -OpenHashElementArray::InitCheck() const -{ - return fData; -} - -template -Element & -OpenHashElementArray::At(int32 index) -{ - ASSERT(index < fSize); - return fData[index]; -} - -template -const Element & -OpenHashElementArray::At(int32 index) const -{ - ASSERT(index < fSize); - return fData[index]; -} - -template -int32 -OpenHashElementArray::IndexOf(const Element &element) const -{ - int32 result = &element - fData; - if (result < 0 || result > fSize) - return -1; - - return result; -} - -template -int32 -OpenHashElementArray::Size() const -{ - return fSize; -} - - -template -Element * -OpenHashElementArray::Add(const Element &newElement) -{ - Element *element = Add(); - if (element) - element.Adopt(newElement); - return element; -} - -#if DEBUG -const int32 kGrowChunk = 10; -#else -const int32 kGrowChunk = 1024; -#endif - -template -Element * -OpenHashElementArray::Add() -{ - int32 index = fNextFree; - if (fNextDeleted >= 0) { - index = fNextDeleted; - fNextDeleted = At(index).fNext; - } else if (fNextFree >= fSize - 1) { - int32 newSize = fSize + kGrowChunk; -/* - Element *newData = (Element *)calloc((size_t)newSize , sizeof(Element)); - if (!newData) - return NULL; - memcpy(newData, fData, fSize * sizeof(Element)); - free(fData); -*/ - Element *newData = (Element*)realloc(fData, - (size_t)newSize * sizeof(Element)); - if (!newData) - return NULL; - - fData = newData; - fSize = newSize; - index = fNextFree; - fNextFree++; - } else - fNextFree++; - - new (&At(index)) Element; - // call placement new to initialize the element properly - ASSERT(At(index).fNext == -1); - - return &At(index); -} - -template -void -OpenHashElementArray::Remove(int32 index) -{ - // delete by chaining empty elements in a single linked - // list, reusing the next field - ASSERT(index < fSize); - At(index).~Element(); - // call the destructor explicitly to destroy the element - // properly - At(index).fNext = fNextDeleted; - fNextDeleted = index; -} - -} // namespace BPrivate - -using BPrivate::OpenHashTable; - -#endif // __OPEN_HASH_TABLE__ diff --git a/src/apps/webpositive/support/SlowMenu.h b/src/apps/webpositive/support/SlowMenu.h deleted file mode 100644 index 62e9156b07..0000000000 --- a/src/apps/webpositive/support/SlowMenu.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -Open Tracker License - -Terms and Conditions - -Copyright (c) 1991-2000, Be Incorporated. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice applies to all licensees -and shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of Be Incorporated shall not be -used in advertising or otherwise to promote the sale, use or other dealings in -this Software without prior written authorization from Be Incorporated. - -Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks -of Be Incorporated in the United States and other countries. Other brand product -names are registered trademarks or trademarks of their respective holders. -All rights reserved. -*/ - -#ifndef __SLOW_MENU__ -#define __SLOW_MENU__ - -#include -#include -#include - -// SlowMenu is a convenience class that makes it easier to -// use the AddDynamicItem callback to implement a menu that can -// checks periodically between creating new items and quits -// early if needed - -namespace BPrivate { - -class BSlowMenu : public BMenu { - public: - BSlowMenu(const char *title, menu_layout layout = B_ITEMS_IN_COLUMN); - - protected: - virtual bool StartBuildingItemList(); - // set up state to start building the item list - // returns false if setup failed - virtual bool AddNextItem() = 0; - // returns false if done - virtual void DoneBuildingItemList() = 0; - // default version adds items from itemList to menu and deletes - // the list; override to sort items first, etc. - - virtual void ClearMenuBuildingState() = 0; - - protected: - virtual bool AddDynamicItem(add_state state); - // this is the callback from BMenu, you shouldn't need to override this - - bool fMenuBuilt; -}; - -} // namespace BPrivate - -using namespace BPrivate; - -#endif /* __SLOW_MENU__ */ diff --git a/src/apps/webpositive/support/StringForSize.cpp b/src/apps/webpositive/support/StringForSize.cpp deleted file mode 100644 index ae7831e397..0000000000 --- a/src/apps/webpositive/support/StringForSize.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2010 Haiku Inc. All rights reserved. - * Distributed under the terms of the MIT License. - */ - -#include "StringForSize.h" - -#include - - -namespace BPrivate { - - -const char* -string_for_size(double size, char* string, size_t stringSize) -{ - double kib = size / 1024.0; - if (kib < 1.0) { - snprintf(string, stringSize, "%d bytes", (int)size); - return string; - } - double mib = kib / 1024.0; - if (mib < 1.0) { - snprintf(string, stringSize, "%3.2f KiB", kib); - return string; - } - double gib = mib / 1024.0; - if (gib < 1.0) { - snprintf(string, stringSize, "%3.2f MiB", mib); - return string; - } - double tib = gib / 1024.0; - if (tib < 1.0) { - snprintf(string, stringSize, "%3.2f GiB", gib); - return string; - } - snprintf(string, stringSize, "%.2f TiB", tib); - return string; -} - - -} // namespace BPrivate - diff --git a/src/apps/webpositive/support/StringForSize.h b/src/apps/webpositive/support/StringForSize.h deleted file mode 100644 index fa3e13b115..0000000000 --- a/src/apps/webpositive/support/StringForSize.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2010 Haiku Inc. All rights reserved. - * Distributed under the terms of the MIT License. - */ -#ifndef STRING_FOR_SIZE_H -#define STRING_FOR_SIZE_H - -#include - - -namespace BPrivate { - - -const char* string_for_size(double size, char* string, size_t stringSize); - - -} // namespace BPrivate - - -using BPrivate::string_for_size; - - -#endif // COLOR_QUANTIZER_H diff --git a/src/apps/webpositive/svn_revision.cpp b/src/apps/webpositive/svn_revision.cpp deleted file mode 100644 index 9e415b5262..0000000000 --- a/src/apps/webpositive/svn_revision.cpp +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2006-2009, Ingo Weinhold - * All rights reserved. Distributed under the terms of the MIT License. - */ - -#include "svn_revision.h" - -const int32 kSVNRevision = 0; -// #include "svn_revision" -; diff --git a/src/apps/webpositive/svn_revision.h b/src/apps/webpositive/svn_revision.h deleted file mode 100644 index fff9e9b122..0000000000 --- a/src/apps/webpositive/svn_revision.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright 2006-2009, Ingo Weinhold - * All rights reserved. Distributed under the terms of the MIT License. - */ - -#ifndef SVN_REVISION_H -#define SVN_REVISION_H - -#include - - -extern const int32 kSVNRevision; - - -#endif // SVN_REVISION_H