Coder Social home page Coder Social logo

tagberry's Introduction

Tagberry

Tagberry Qt5 desktop app

Features

Work in progress!

Tagberry is a tag-oriented Qt5 desktop calendar, task manager, and todo list.

Available features:

  • create and edit tasks with tags on the calendar
  • markdown highlighting
  • SQLite3 database

Planned features:

  • create and edit subtasks
  • organize tasks in lists
  • manage tag properties
  • various UI improvements

Screenshot

Screenshot

Supported platforms

The code is written in a cross-platform manner, but only Linux was tested so far.

Dependencies

  • C++17 compiler
  • CMake >= 3.0
  • qmake from Qt5 (for dependencies)
  • Qt5 >= 5.9
  • SQLite3
  • QMarkdownTextEdit (shipped as a submodule)
  • QSqlMigrator (shipped as a submodule)

Instructions

Install dependencies

sudo apt install qt5-default cmake

Clone repo

git clone --recurse-submodules https://github.com/tagberry/tagberry-qt.git
cd tagberry-qt

Build

mkdir build
cd build
cmake ..
make -j4
cd ..

Run locally

./bin/tagberry-qt

Install system-wide

cd build
sudo make install
cd ..

Format code

./scripts/format.sh

Code structure

The codebase is divided into four parts:

  • widgets - A collection of application-specific widgets, supplementing standard Qt widgets. Widgets don't know anything about models and business-logic.

  • models - A collection of data objects to be displayed and manipulated by user. Models don't know anything about widgets and UI.

  • storage - Classes to read and write models from a persistent storage.

  • presenters - Classes that put all these things together. Presenters create the UI using widgets and interconnect models with widgets and storage.

Code Structure

Authors

See here.

License

GPLv2+

tagberry's People

Contributors

gavv avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

lzhice

tagberry's Issues

Record list improvements

  • Allow to reorder records. The order should be stored in DB.
  • Allow to easily move record to another day.
  • Allow to unbind record from calendar (clear record date).

Can't compile

Hi @gavv,

I tried to build the project but got the following errors:

home/dshil/dev/tagberry-qt/src/widgets/CalendarCell.cpp:77:41: error: ‘static QString QDate::shortMonthName(int, QDate::MonthNameType)’ is deprecated: Use QLocale::monthName or QLocale::standaloneMonthName [-Werror=deprecated-declarations]
   77 |     m_month.setText(month >= 1 ? QDate::shortMonthName(month) : "");
      |                                         ^~~~~~~~~~~~~~
In file included from /usr/include/qt/QtCore/QDate:1,
                 from /home/dshil/dev/tagberry-qt/src/widgets/CalendarCell.cpp:13:
/usr/include/qt/QtCore/qdatetime.h:86:24: note: declared here
   86 |         static QString shortMonthName(int month, MonthNameType type = DateFormat);
      |                        ^~~~~~~~~~~~~~
/home/dshil/dev/tagberry-qt/src/widgets/CalendarCell.cpp:77:61: error: ‘static QString QDate::shortMonthName(int, QDate::MonthNameType)’ is deprecated: Use QLocale::monthName or QLocale::standaloneMonthName [-Werror=deprecated-declarations]
   77 |     m_month.setText(month >= 1 ? QDate::shortMonthName(month) : "");
      |                                                             ^
In file included from /usr/include/qt/QtCore/QDate:1,
                 from /home/dshil/dev/tagberry-qt/src/widgets/CalendarCell.cpp:13:
/usr/include/qt/QtCore/qdatetime.h:86:24: note: declared here
   86 |         static QString shortMonthName(int month, MonthNameType type = DateFormat);
      |                        ^~~~~~~~~~~~~~
/home/dshil/dev/tagberry-qt/src/widgets/CalendarCell.cpp:77:61: error: ‘static QString QDate::shortMonthName(int, QDate::MonthNameType)’ is deprecated: Use QLocale::monthName or QLocale::standaloneMonthName [-Werror=deprecated-declarations]
   77 |     m_month.setText(month >= 1 ? QDate::shortMonthName(month) : "");
      |                                                             ^
In file included from /usr/include/qt/QtCore/QDate:1,
                 from /home/dshil/dev/tagberry-qt/src/widgets/CalendarCell.cpp:13:
/usr/include/qt/QtCore/qdatetime.h:86:24: note: declared here
   86 |         static QString shortMonthName(int month, MonthNameType type = DateFormat);
      |                        ^~~~~~~~~~~~~~
/home/dshil/dev/tagberry-qt/src/widgets/CalendarSwitch.cpp: In function ‘int tagberry::widgets::{anonymous}::editWidth(int)’:
/home/dshil/dev/tagberry-qt/src/widgets/CalendarSwitch.cpp:30:27: error: ‘int QFontMetrics::width(const QString&, int) const’ is deprecated: Use QFontMetrics::horizontalAdvance [-Werror=deprecated-declarations]
   30 |     return metrics.width(s);
      |                           ^
In file included from /usr/include/qt/QtWidgets/qwidget.h:50,
                 from /usr/include/qt/QtWidgets/qframe.h:44,
                 from /usr/include/qt/QtWidgets/qlineedit.h:44,
                 from /usr/include/qt/QtWidgets/QLineEdit:1,
                 from /home/dshil/dev/tagberry-qt/src/widgets/CalendarSwitch.hpp:13,
                 from /home/dshil/dev/tagberry-qt/src/widgets/CalendarSwitch.cpp:10:
/usr/include/qt/QtGui/qfontmetrics.h:108:9: note: declared here
  108 |     int width(const QString &, int len = -1) const;
      |         ^~~~~
/home/dshil/dev/tagberry-qt/src/widgets/CalendarSwitch.cpp: In function ‘QStringList tagberry::widgets::{anonymous}::monthNames()’:
/home/dshil/dev/tagberry-qt/src/widgets/CalendarSwitch.cpp:52:27: error: ‘static QString QDate::longMonthName(int, QDate::MonthNameType)’ is deprecated: Use QLocale::monthName or QLocale::standaloneMonthName [-Werror=deprecated-declarations]
   52 |         ret.append(QDate::longMonthName(month));
      |                           ^~~~~~~~~~~~~
In file included from /usr/include/qt/QtCore/QDate:1,
                 from /home/dshil/dev/tagberry-qt/src/widgets/CalendarSwitch.cpp:13:
/usr/include/qt/QtCore/qdatetime.h:90:24: note: declared here
   90 |         static QString longMonthName(int month, MonthNameType type = DateFormat);
      |                        ^~~~~~~~~~~~~
/home/dshil/dev/tagberry-qt/src/widgets/CalendarSwitch.cpp:52:46: error: ‘static QString QDate::longMonthName(int, QDate::MonthNameType)’ is deprecated: Use QLocale::monthName or QLocale::standaloneMonthName [-Werror=deprecated-declarations]
   52 |         ret.append(QDate::longMonthName(month));
      |                                              ^
In file included from /usr/include/qt/QtCore/QDate:1,
                 from /home/dshil/dev/tagberry-qt/src/widgets/CalendarSwitch.cpp:13:
/usr/include/qt/QtCore/qdatetime.h:90:24: note: declared here
   90 |         static QString longMonthName(int month, MonthNameType type = DateFormat);
      |                        ^~~~~~~~~~~~~
/home/dshil/dev/tagberry-qt/src/widgets/CalendarSwitch.cpp:52:46: error: ‘static QString QDate::longMonthName(int, QDate::MonthNameType)’ is deprecated: Use QLocale::monthName or QLocale::standaloneMonthName [-Werror=deprecated-declarations]
   52 |         ret.append(QDate::longMonthName(month));
      |                                              ^
In file included from /usr/include/qt/QtCore/QDate:1,
                 from /home/dshil/dev/tagberry-qt/src/widgets/CalendarSwitch.cpp:13:
/usr/include/qt/QtCore/qdatetime.h:90:24: note: declared here
   90 |         static QString longMonthName(int month, MonthNameType type = DateFormat);
      |                        ^~~~~~~~~~~~~
/home/dshil/dev/tagberry-qt/src/widgets/Calendar.cpp: In member function ‘void tagberry::widgets::Calendar::setWeekStart(Qt::DayOfWeek)’:
/home/dshil/dev/tagberry-qt/src/widgets/Calendar.cpp:95:37: error: ‘static QString QDate::shortDayName(int, QDate::MonthNameType)’ is deprecated: Use QLocale::dayName or QLocale::standaloneDayName [-Werror=deprecated-declarations]
   95 |         m_days[col]->setText(QDate::shortDayName((day + col - 1) % NumDays + 1));
      |                                     ^~~~~~~~~~~~
In file included from /usr/include/qt/QtCore/QDate:1,
                 from /home/dshil/dev/tagberry-qt/src/widgets/Calendar.hpp:16,
                 from /home/dshil/dev/tagberry-qt/src/widgets/Calendar.cpp:10:
/usr/include/qt/QtCore/qdatetime.h:88:24: note: declared here
   88 |         static QString shortDayName(int weekday, MonthNameType type = DateFormat);
      |                        ^~~~~~~~~~~~
/home/dshil/dev/tagberry-qt/src/widgets/Calendar.cpp:95:79: error: ‘static QString QDate::shortDayName(int, QDate::MonthNameType)’ is deprecated: Use QLocale::dayName or QLocale::standaloneDayName [-Werror=deprecated-declarations]
   95 |         m_days[col]->setText(QDate::shortDayName((day + col - 1) % NumDays + 1));
      |                                                                               ^
In file included from /usr/include/qt/QtCore/QDate:1,
                 from /home/dshil/dev/tagberry-qt/src/widgets/Calendar.hpp:16,
                 from /home/dshil/dev/tagberry-qt/src/widgets/Calendar.cpp:10:
/usr/include/qt/QtCore/qdatetime.h:88:24: note: declared here
   88 |         static QString shortDayName(int weekday, MonthNameType type = DateFormat);
      |                        ^~~~~~~~~~~~
/home/dshil/dev/tagberry-qt/src/widgets/Calendar.cpp:95:79: error: ‘static QString QDate::shortDayName(int, QDate::MonthNameType)’ is deprecated: Use QLocale::dayName or QLocale::standaloneDayName [-Werror=deprecated-declarations]
   95 |         m_days[col]->setText(QDate::shortDayName((day + col - 1) % NumDays + 1));
      |                                                                               ^
In file included from /usr/include/qt/QtCore/QDate:1,
                 from /home/dshil/dev/tagberry-qt/src/widgets/Calendar.hpp:16,
                 from /home/dshil/dev/tagberry-qt/src/widgets/Calendar.cpp:10:
/usr/include/qt/QtCore/qdatetime.h:88:24: note: declared here
   88 |         static QString shortDayName(int weekday, MonthNameType type = DateFormat);
      |                        ^~~~~~~~~~~~
/home/dshil/dev/tagberry-qt/src/widgets/TagLabel.cpp: In member function ‘void tagberry::widgets::TagLabel::updateSizes()’:
/home/dshil/dev/tagberry-qt/src/widgets/TagLabel.cpp:174:39: error: ‘int QFontMetrics::width(const QString&, int) const’ is deprecated: Use QFontMetrics::horizontalAdvance [-Werror=deprecated-declarations]
  174 |     m_indicatorWidth = metrics.width(s);
      |                                       ^
In file included from /usr/include/qt/QtWidgets/qwidget.h:50,
                 from /usr/include/qt/QtWidgets/qframe.h:44,
                 from /usr/include/qt/QtWidgets/qlineedit.h:44,
                 from /usr/include/qt/QtWidgets/QLineEdit:1,
                 from /home/dshil/dev/tagberry-qt/src/widgets/TagLabel.hpp:14,
                 from /home/dshil/dev/tagberry-qt/src/widgets/TagLabel.cpp:10:
/usr/include/qt/QtGui/qfontmetrics.h:108:9: note: declared here
  108 |     int width(const QString &, int len = -1) const;
      |         ^~~~~
/home/dshil/dev/tagberry-qt/src/widgets/TagLabel.cpp:176:40: error: ‘int QFontMetrics::width(const QString&, int) const’ is deprecated: Use QFontMetrics::horizontalAdvance [-Werror=deprecated-declarations]
  176 |     const int lw = metrics.width(m_text) + 2 * m_hPad + m_hMargin + m_cursorWidth;

OS: Arch
CC: clang-8
Qt: Qt 5.13.1 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 9.1.0) on "xcb"

Record title color

Record title color is set only when typing. It is resetting after day switch or app restart.

Limit widgets sizes

  • Limit maximum length of TagLabel. Set it from RecordCell and TagCalendar. Truncate tag name if the length is exceeded.

  • Limit maximum size of CalendarCell. Show a placeholder if its content does not fit the cell. Ensure that all cells always have the same size.

Dark theme support

Is it possible to configure colors somehow? For the default KDE theme it is impossible to read the title of the task.

image

Record subtasks and progress

  • Render checkboxes in markdown
  • Track progress and store in model and db
  • Render progress in record and calendar

Handle DB length limits

Automatically trim strings in models (e.g. record title) when saving them to DB, according to DB schema limits (e.g. NVARCHAR(1000)).

Tags tab

  • "Tags" tab

  • Display all tags.

  • Rename tags.

  • Remove tags.

  • Manually assign colors to tags.

Add the possibility to export data

Hi @gavv!

I am looking for a very simple feature. I want to be able to use tagberry on multiple machines by syncing the database files. Currently there is no option/configuration withing which I can setup the folder where to put storage files.

Migrations

Use migrations to initialize tables instead of creating tables by hand. Probably make a backup before applying migrations.

Automatically remove dangling tags

  • Maintain record count for every tag (in memory).
  • When it's decremented and becomes zero, and the tag is not customized, automatically remove tag from memory and DB.

Handle DB errors

  • Do not ignore errors returned from read and write functions. Display them to user.
  • When DB can't be opened, report the error using UI instead of printing it to stderr.
  • Handle migration errors gracefully.

Install target

  • Add desktop file.

  • Add "install" target that installs the binary, desktop file, and icon to the appropriate system directories.

Day change

Automatically switch current date / current page on day change (00:00).

Record cell fixes

  • Edit title -> leave it empty -> switch to another day -> return -> title is restored, but should be empty instead.

  • Don't limit title height. Title should not become scrollable inside cell.

Lists tab

  • "Lists" tab.

  • Create/remove/rename lists.

  • Configure list tag.

  • Browse list records.

  • "All" and "Default" lists.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.