Compare commits
1 Commits
main
..
ae3d2b20d0
| Author | SHA1 | Date | |
|---|---|---|---|
| ae3d2b20d0 |
@@ -1,3 +1,2 @@
|
|||||||
/build/
|
/build/
|
||||||
imgui.ini
|
imgui.ini
|
||||||
*.wcl
|
|
||||||
@@ -32,7 +32,6 @@ target_include_directories(imgui PUBLIC
|
|||||||
add_subdirectory(libs/libhydrogen EXCLUDE_FROM_ALL)
|
add_subdirectory(libs/libhydrogen EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
add_executable(work-calendar
|
add_executable(work-calendar
|
||||||
src/localization.c
|
|
||||||
$<$<PLATFORM_ID:Windows>:src/main_win32.cpp>
|
$<$<PLATFORM_ID:Windows>:src/main_win32.cpp>
|
||||||
$<$<PLATFORM_ID:Linux>:src/main_linux.cpp>
|
$<$<PLATFORM_ID:Linux>:src/main_linux.cpp>
|
||||||
)
|
)
|
||||||
@@ -47,8 +46,3 @@ target_link_libraries(work-calendar
|
|||||||
glfw
|
glfw
|
||||||
>
|
>
|
||||||
)
|
)
|
||||||
|
|
||||||
target_compile_definitions(work-calendar
|
|
||||||
PRIVATE
|
|
||||||
$<$<PLATFORM_ID:Windows>:_CRT_SECURE_NO_WARNINGS=1>
|
|
||||||
)
|
|
||||||
|
|||||||
Binary file not shown.
@@ -0,0 +1,2 @@
|
|||||||
|
ŠCl.H¾ÇUn".ŒT¡Ô„Ÿ9¨M]$w‚‰Á#æÆ€ûê-‰�Ðx¶5©2¥Êm®B*–dqúË7UF‘·7Ò»í‡äeÝ{…6¡Q2ý= ˆò<kè^÷âP0¯eþv¡8ø6ÉÊ3Öy.ê/Å0!˜E~éÿ6ƒxI¶g6qŸèEª ÄgID‚D¹ú5ìÃáILœ-Ê)HjMµí}ëÌê.²,)Úäã¾A
|
||||||
|
á†TR�¼Ž?úµlÂE8+¥É¢+ßêøqRaUƒ:‚Ó‡�0Õ:c+×Á¤Ñ˜ë§î¾:'´þš3
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,295 +0,0 @@
|
|||||||
static const char *licenses = R"LICENSE(DearImgui
|
|
||||||
|
|
||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2014-2026 Omar Cornut
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
STB
|
|
||||||
|
|
||||||
ALTERNATIVE A - MIT License
|
|
||||||
Copyright (c) 2017 Sean Barrett
|
|
||||||
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.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Inter Font Family
|
|
||||||
|
|
||||||
Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter)
|
|
||||||
|
|
||||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
||||||
This license is copied below, and is also available with a FAQ at:
|
|
||||||
http://scripts.sil.org/OFL
|
|
||||||
|
|
||||||
-----------------------------------------------------------
|
|
||||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
||||||
-----------------------------------------------------------
|
|
||||||
|
|
||||||
PREAMBLE
|
|
||||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
||||||
development of collaborative font projects, to support the font creation
|
|
||||||
efforts of academic and linguistic communities, and to provide a free and
|
|
||||||
open framework in which fonts may be shared and improved in partnership
|
|
||||||
with others.
|
|
||||||
|
|
||||||
The OFL allows the licensed fonts to be used, studied, modified and
|
|
||||||
redistributed freely as long as they are not sold by themselves. The
|
|
||||||
fonts, including any derivative works, can be bundled, embedded,
|
|
||||||
redistributed and/or sold with any software provided that any reserved
|
|
||||||
names are not used by derivative works. The fonts and derivatives,
|
|
||||||
however, cannot be released under any other type of license. The
|
|
||||||
requirement for fonts to remain under this license does not apply
|
|
||||||
to any document created using the fonts or their derivatives.
|
|
||||||
|
|
||||||
DEFINITIONS
|
|
||||||
"Font Software" refers to the set of files released by the Copyright
|
|
||||||
Holder(s) under this license and clearly marked as such. This may
|
|
||||||
include source files, build scripts and documentation.
|
|
||||||
|
|
||||||
"Reserved Font Name" refers to any names specified as such after the
|
|
||||||
copyright statement(s).
|
|
||||||
|
|
||||||
"Original Version" refers to the collection of Font Software components as
|
|
||||||
distributed by the Copyright Holder(s).
|
|
||||||
|
|
||||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
||||||
or substituting -- in part or in whole -- any of the components of the
|
|
||||||
Original Version, by changing formats or by porting the Font Software to a
|
|
||||||
new environment.
|
|
||||||
|
|
||||||
"Author" refers to any designer, engineer, programmer, technical
|
|
||||||
writer or other person who contributed to the Font Software.
|
|
||||||
|
|
||||||
PERMISSION AND CONDITIONS
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
||||||
redistribute, and sell modified and unmodified copies of the Font
|
|
||||||
Software, subject to the following conditions:
|
|
||||||
|
|
||||||
1) Neither the Font Software nor any of its individual components,
|
|
||||||
in Original or Modified Versions, may be sold by itself.
|
|
||||||
|
|
||||||
2) Original or Modified Versions of the Font Software may be bundled,
|
|
||||||
redistributed and/or sold with any software, provided that each copy
|
|
||||||
contains the above copyright notice and this license. These can be
|
|
||||||
included either as stand-alone text files, human-readable headers or
|
|
||||||
in the appropriate machine-readable metadata fields within text or
|
|
||||||
binary files as long as those fields can be easily viewed by the user.
|
|
||||||
|
|
||||||
3) No Modified Version of the Font Software may use the Reserved Font
|
|
||||||
Name(s) unless explicit written permission is granted by the corresponding
|
|
||||||
Copyright Holder. This restriction only applies to the primary font name as
|
|
||||||
presented to the users.
|
|
||||||
|
|
||||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
||||||
Software shall not be used to promote, endorse or advertise any
|
|
||||||
Modified Version, except to acknowledge the contribution(s) of the
|
|
||||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
||||||
permission.
|
|
||||||
|
|
||||||
5) The Font Software, modified or unmodified, in part or in whole,
|
|
||||||
must be distributed entirely under this license, and must not be
|
|
||||||
distributed under any other license. The requirement for fonts to
|
|
||||||
remain under this license does not apply to any document created
|
|
||||||
using the Font Software.
|
|
||||||
|
|
||||||
TERMINATION
|
|
||||||
This license becomes null and void if any of the above conditions are
|
|
||||||
not met.
|
|
||||||
|
|
||||||
DISCLAIMER
|
|
||||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
||||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
||||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
||||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
||||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Font-Awesome Font Family
|
|
||||||
|
|
||||||
In the Font Awesome Free download, the SIL OFL license applies to all icons
|
|
||||||
packaged as web and desktop font files.
|
|
||||||
|
|
||||||
Copyright (c) 2026 Fonticons, Inc. (https://fontawesome.com)
|
|
||||||
with Reserved Font Name: "Font Awesome".
|
|
||||||
|
|
||||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
||||||
This license is copied below, and is also available with a FAQ at:
|
|
||||||
http://scripts.sil.org/OFL
|
|
||||||
|
|
||||||
SIL OPEN FONT LICENSE
|
|
||||||
Version 1.1 - 26 February 2007
|
|
||||||
|
|
||||||
PREAMBLE
|
|
||||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
||||||
development of collaborative font projects, to support the font creation
|
|
||||||
efforts of academic and linguistic communities, and to provide a free and
|
|
||||||
open framework in which fonts may be shared and improved in partnership
|
|
||||||
with others.
|
|
||||||
|
|
||||||
The OFL allows the licensed fonts to be used, studied, modified and
|
|
||||||
redistributed freely as long as they are not sold by themselves. The
|
|
||||||
fonts, including any derivative works, can be bundled, embedded,
|
|
||||||
redistributed and/or sold with any software provided that any reserved
|
|
||||||
names are not used by derivative works. The fonts and derivatives,
|
|
||||||
however, cannot be released under any other type of license. The
|
|
||||||
requirement for fonts to remain under this license does not apply
|
|
||||||
to any document created using the fonts or their derivatives.
|
|
||||||
|
|
||||||
DEFINITIONS
|
|
||||||
"Font Software" refers to the set of files released by the Copyright
|
|
||||||
Holder(s) under this license and clearly marked as such. This may
|
|
||||||
include source files, build scripts and documentation.
|
|
||||||
|
|
||||||
"Reserved Font Name" refers to any names specified as such after the
|
|
||||||
copyright statement(s).
|
|
||||||
|
|
||||||
"Original Version" refers to the collection of Font Software components as
|
|
||||||
distributed by the Copyright Holder(s).
|
|
||||||
|
|
||||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
||||||
or substituting — in part or in whole — any of the components of the
|
|
||||||
Original Version, by changing formats or by porting the Font Software to a
|
|
||||||
new environment.
|
|
||||||
|
|
||||||
"Author" refers to any designer, engineer, programmer, technical
|
|
||||||
writer or other person who contributed to the Font Software.
|
|
||||||
|
|
||||||
PERMISSION & CONDITIONS
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
||||||
redistribute, and sell modified and unmodified copies of the Font
|
|
||||||
Software, subject to the following conditions:
|
|
||||||
|
|
||||||
1) Neither the Font Software nor any of its individual components,
|
|
||||||
in Original or Modified Versions, may be sold by itself.
|
|
||||||
|
|
||||||
2) Original or Modified Versions of the Font Software may be bundled,
|
|
||||||
redistributed and/or sold with any software, provided that each copy
|
|
||||||
contains the above copyright notice and this license. These can be
|
|
||||||
included either as stand-alone text files, human-readable headers or
|
|
||||||
in the appropriate machine-readable metadata fields within text or
|
|
||||||
binary files as long as those fields can be easily viewed by the user.
|
|
||||||
|
|
||||||
3) No Modified Version of the Font Software may use the Reserved Font
|
|
||||||
Name(s) unless explicit written permission is granted by the corresponding
|
|
||||||
Copyright Holder. This restriction only applies to the primary font name as
|
|
||||||
presented to the users.
|
|
||||||
|
|
||||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
||||||
Software shall not be used to promote, endorse or advertise any
|
|
||||||
Modified Version, except to acknowledge the contribution(s) of the
|
|
||||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
||||||
permission.
|
|
||||||
|
|
||||||
5) The Font Software, modified or unmodified, in part or in whole,
|
|
||||||
must be distributed entirely under this license, and must not be
|
|
||||||
distributed under any other license. The requirement for fonts to
|
|
||||||
remain under this license does not apply to any document created
|
|
||||||
using the Font Software.
|
|
||||||
|
|
||||||
TERMINATION
|
|
||||||
This license becomes null and void if any of the above conditions are
|
|
||||||
not met.
|
|
||||||
|
|
||||||
DISCLAIMER
|
|
||||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
||||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
||||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
||||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
||||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
GLFW
|
|
||||||
|
|
||||||
Copyright (c) 2002-2006 Marcus Geelnard
|
|
||||||
|
|
||||||
Copyright (c) 2006-2019 Camilla Löwy
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
|
||||||
warranty. In no event will the authors be held liable for any damages
|
|
||||||
arising from the use of this software.
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any purpose,
|
|
||||||
including commercial applications, and to alter it and redistribute it
|
|
||||||
freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must not
|
|
||||||
claim that you wrote the original software. If you use this software
|
|
||||||
in a product, an acknowledgment in the product documentation would
|
|
||||||
be appreciated but is not required.
|
|
||||||
|
|
||||||
2. Altered source versions must be plainly marked as such, and must not
|
|
||||||
be misrepresented as being the original software.
|
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source
|
|
||||||
distribution.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Volk
|
|
||||||
|
|
||||||
Copyright (c) 2018-2026 Arseny Kapoulkine
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
)LICENSE";
|
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
#include "localization.h"
|
|
||||||
|
|
||||||
const char *localized_strings_storage[LANGUAGE_COUNT][LOCALIZED_STRING_COUNT] = {
|
|
||||||
[L_GERMAN] = {
|
|
||||||
[LS_LANGUAGE_NAME] = "Deutsch",
|
|
||||||
[LS_JANUARY] = "Januar",
|
|
||||||
[LS_FEBRUARY] = "Februar",
|
|
||||||
[LS_MARCH] = "März",
|
|
||||||
[LS_APRIL] = "April",
|
|
||||||
[LS_MAY] = "Mai",
|
|
||||||
[LS_JUNE] = "Juni",
|
|
||||||
[LS_JULY] = "Juli",
|
|
||||||
[LS_AUGUST] = "August",
|
|
||||||
[LS_SEPTEMBER] = "September",
|
|
||||||
[LS_OCTOBER] = "Oktober",
|
|
||||||
[LS_NOVEMBER] = "November",
|
|
||||||
[LS_DECEMBER] = "Dezember",
|
|
||||||
[LS_FILE] = "Datei",
|
|
||||||
[LS_OPEN] = "Öffnen",
|
|
||||||
[LS_SAVE] = "Speichern",
|
|
||||||
[LS_SAVE_AS] = "Speichern unter",
|
|
||||||
[LS_CLOSE_CALENDAR] = "Kalender schließen###CloseCalendar",
|
|
||||||
[LS_CLOSE_AND_LOAD_CALENDAR] = "Kalender schließen und laden###CloseLoadCalendar",
|
|
||||||
[LS_EXIT] = "Beenden###Close",
|
|
||||||
[LS_VIEW] = "Ansicht",
|
|
||||||
[LS_LEGEND] = "Legende",
|
|
||||||
[LS_LANGUAGE] = "Sprache",
|
|
||||||
[LS_HELP] = "Hilfe",
|
|
||||||
[LS_DEMO] = "Demo",
|
|
||||||
[LS_WIKI] = "Wiki",
|
|
||||||
[LS_ABOUT] = "Über###About",
|
|
||||||
[LS_CALENDAR_WEEK_SHORT] = "KW",
|
|
||||||
[LS_MONDAY_SHORT] = "Mo",
|
|
||||||
[LS_TUESDAY_SHORT] = "Di",
|
|
||||||
[LS_WEDNESDAY_SHORT] = "Mi",
|
|
||||||
[LS_THURSDAY_SHORT] = "Do",
|
|
||||||
[LS_FRIDAY_SHORT] = "Fr",
|
|
||||||
[LS_SATURDAY_SHORT] = "Sa",
|
|
||||||
[LS_SUNDAY_SHORT] = "So",
|
|
||||||
[LS_TITLE_ENTER_PASSWORD] = "Passwort eingeben###Save",
|
|
||||||
[LS_PASSWORD] = "Passwort",
|
|
||||||
[LS_CONFIRM_PASSWORD] = "Passwort bestätigen",
|
|
||||||
[LS_OK] = "Ok",
|
|
||||||
[LS_CANCEL] = "Abbrechen",
|
|
||||||
[LS_TITLE_OPEN_PASSWORD] = "Passwort eingeben###Open",
|
|
||||||
[LS_QUESTION_DO_YOU_REALLY_WANT_TO_QUIT] = "Es gibt noch offene Änderungen.\nMöchten Sie wirklich beenden?",
|
|
||||||
[LS_QUESTION_DO_YOU_REALLY_WANT_TO_CLOSE_THE_CALENDAR] = "Es gibt noch offene Änderungen.\nMöchten Sie wirklich den Kalender schließen?",
|
|
||||||
[LS_YES] = "Ja",
|
|
||||||
[LS_NO] = "Nein",
|
|
||||||
[LS_CLOSE] = "Schließen",
|
|
||||||
},
|
|
||||||
[L_ENGLISH] = {
|
|
||||||
[LS_LANGUAGE_NAME] = "English",
|
|
||||||
[LS_JANUARY] = "January",
|
|
||||||
[LS_FEBRUARY] = "February",
|
|
||||||
[LS_MARCH] = "March",
|
|
||||||
[LS_APRIL] = "April",
|
|
||||||
[LS_MAY] = "May",
|
|
||||||
[LS_JUNE] = "June",
|
|
||||||
[LS_JULY] = "July",
|
|
||||||
[LS_AUGUST] = "August",
|
|
||||||
[LS_SEPTEMBER] = "September",
|
|
||||||
[LS_OCTOBER] = "October",
|
|
||||||
[LS_NOVEMBER] = "November",
|
|
||||||
[LS_DECEMBER] = "December",
|
|
||||||
[LS_FILE] = "File",
|
|
||||||
[LS_OPEN] = "Open",
|
|
||||||
[LS_SAVE] = "Save",
|
|
||||||
[LS_SAVE_AS] = "Save as",
|
|
||||||
[LS_CLOSE_CALENDAR] = "Close Calendar###CloseCalendar",
|
|
||||||
[LS_CLOSE_AND_LOAD_CALENDAR] = "Close and Load Calendar###CloseLoadCalendar",
|
|
||||||
[LS_EXIT] = "Exit",
|
|
||||||
[LS_VIEW] = "View",
|
|
||||||
[LS_LEGEND] = "Legend",
|
|
||||||
[LS_LANGUAGE] = "Language",
|
|
||||||
[LS_HELP] = "Help",
|
|
||||||
[LS_DEMO] = "Demo",
|
|
||||||
[LS_WIKI] = "Wiki",
|
|
||||||
[LS_ABOUT] = "About###About",
|
|
||||||
[LS_CALENDAR_WEEK_SHORT] = "No.",
|
|
||||||
[LS_MONDAY_SHORT] = "Mo",
|
|
||||||
[LS_TUESDAY_SHORT] = "Tu",
|
|
||||||
[LS_WEDNESDAY_SHORT] = "We",
|
|
||||||
[LS_THURSDAY_SHORT] = "Th",
|
|
||||||
[LS_FRIDAY_SHORT] = "Fr",
|
|
||||||
[LS_SATURDAY_SHORT] = "Sa",
|
|
||||||
[LS_SUNDAY_SHORT] = "Su",
|
|
||||||
[LS_TITLE_ENTER_PASSWORD] = "Enter Password###Save",
|
|
||||||
[LS_PASSWORD] = "Password",
|
|
||||||
[LS_CONFIRM_PASSWORD] = "Confirm Password",
|
|
||||||
[LS_OK] = "Ok",
|
|
||||||
[LS_CANCEL] = "Cancel",
|
|
||||||
[LS_TITLE_OPEN_PASSWORD] = "Enter Password###Open",
|
|
||||||
[LS_QUESTION_DO_YOU_REALLY_WANT_TO_QUIT] = "There are unsaved changes.\nDo you really want to quit?",
|
|
||||||
[LS_QUESTION_DO_YOU_REALLY_WANT_TO_CLOSE_THE_CALENDAR] = "There are unsaved changes.\nDo you really want to close the calendar?",
|
|
||||||
[LS_YES] = "Yes",
|
|
||||||
[LS_NO] = "No",
|
|
||||||
[LS_CLOSE] = "Close",
|
|
||||||
},
|
|
||||||
[L_FRENCH] = {
|
|
||||||
[LS_LANGUAGE_NAME] = "Français",
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
enum Localized_String {
|
|
||||||
LS_JANUARY,
|
|
||||||
LS_FEBRUARY,
|
|
||||||
LS_MARCH,
|
|
||||||
LS_APRIL,
|
|
||||||
LS_MAY,
|
|
||||||
LS_JUNE,
|
|
||||||
LS_JULY,
|
|
||||||
LS_AUGUST,
|
|
||||||
LS_SEPTEMBER,
|
|
||||||
LS_OCTOBER,
|
|
||||||
LS_NOVEMBER,
|
|
||||||
LS_DECEMBER,
|
|
||||||
LS_LANGUAGE_NAME,
|
|
||||||
LS_FILE,
|
|
||||||
LS_OPEN,
|
|
||||||
LS_SAVE,
|
|
||||||
LS_SAVE_AS,
|
|
||||||
LS_CLOSE_CALENDAR,
|
|
||||||
LS_CLOSE_AND_LOAD_CALENDAR,
|
|
||||||
LS_EXIT,
|
|
||||||
LS_VIEW,
|
|
||||||
LS_LEGEND,
|
|
||||||
LS_LANGUAGE,
|
|
||||||
LS_HELP,
|
|
||||||
LS_DEMO,
|
|
||||||
LS_WIKI,
|
|
||||||
LS_ABOUT,
|
|
||||||
LS_CALENDAR_WEEK_SHORT,
|
|
||||||
LS_MONDAY_SHORT,
|
|
||||||
LS_TUESDAY_SHORT,
|
|
||||||
LS_WEDNESDAY_SHORT,
|
|
||||||
LS_THURSDAY_SHORT,
|
|
||||||
LS_FRIDAY_SHORT,
|
|
||||||
LS_SATURDAY_SHORT,
|
|
||||||
LS_SUNDAY_SHORT,
|
|
||||||
LS_TITLE_ENTER_PASSWORD,
|
|
||||||
LS_PASSWORD,
|
|
||||||
LS_CONFIRM_PASSWORD,
|
|
||||||
LS_OK,
|
|
||||||
LS_CANCEL,
|
|
||||||
LS_TITLE_OPEN_PASSWORD,
|
|
||||||
//Questions
|
|
||||||
LS_QUESTION_DO_YOU_REALLY_WANT_TO_QUIT,
|
|
||||||
LS_QUESTION_DO_YOU_REALLY_WANT_TO_CLOSE_THE_CALENDAR,
|
|
||||||
LS_YES,
|
|
||||||
LS_NO,
|
|
||||||
LS_CLOSE,
|
|
||||||
LOCALIZED_STRING_COUNT
|
|
||||||
};
|
|
||||||
|
|
||||||
enum Language {
|
|
||||||
L_GERMAN,
|
|
||||||
L_ENGLISH,
|
|
||||||
L_FRENCH,
|
|
||||||
LANGUAGE_COUNT
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern const char *localized_strings_storage[LANGUAGE_COUNT][LOCALIZED_STRING_COUNT];
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
+94
-291
@@ -4,28 +4,25 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <hydrogen.h>
|
#include <hydrogen.h>
|
||||||
|
#include <inttypes.h>
|
||||||
#include "localization.h"
|
|
||||||
|
|
||||||
#include "inter.h"
|
#include "inter.h"
|
||||||
#include "inter-bold.h"
|
#include "inter-bold.h"
|
||||||
#include "font-awesome-solid.h"
|
|
||||||
#include "licenses.cpp"
|
|
||||||
|
|
||||||
extern bool should_exit;
|
extern bool should_exit;
|
||||||
extern bool show_demo_window;
|
extern bool show_demo_window;
|
||||||
|
|
||||||
//standard year
|
//standard year
|
||||||
static int year;
|
static int year = 2025;
|
||||||
|
|
||||||
static int current_year;
|
static int current_year = 2025;
|
||||||
static int current_month;
|
static int current_month = 1;
|
||||||
static int current_day;
|
static int current_day = 1;
|
||||||
|
|
||||||
//fonts
|
//fonts
|
||||||
static ImFont *inter_regular;
|
static ImFont *inter_regular;
|
||||||
static ImFont *inter_bold;
|
static ImFont *inter_bold;
|
||||||
static ImFont *font_awesome;
|
|
||||||
|
|
||||||
char *open_file_dialog();
|
char *open_file_dialog();
|
||||||
char *save_file_dialog();
|
char *save_file_dialog();
|
||||||
@@ -81,60 +78,19 @@ static uint8_t derived_key[hydro_secretbox_KEYBYTES];
|
|||||||
static char password_input_buffer[256];
|
static char password_input_buffer[256];
|
||||||
static char password_confirmation_input_buffer[256];
|
static char password_confirmation_input_buffer[256];
|
||||||
|
|
||||||
static Language current_language = L_GERMAN;
|
|
||||||
static Language selected_language = L_GERMAN;
|
|
||||||
|
|
||||||
const char *get_localized_string(Localized_String localized_string) {
|
|
||||||
if(localized_strings_storage[current_language][localized_string]) {
|
|
||||||
return localized_strings_storage[current_language][localized_string];
|
|
||||||
}
|
|
||||||
|
|
||||||
return localized_strings_storage[L_ENGLISH][localized_string];
|
|
||||||
}
|
|
||||||
|
|
||||||
static Localized_String month_names[] = { LS_JANUARY, LS_FEBRUARY, LS_MARCH, LS_APRIL, LS_MAY, LS_JUNE, LS_JULY, LS_AUGUST, LS_SEPTEMBER, LS_OCTOBER, LS_NOVEMBER, LS_DECEMBER };
|
|
||||||
|
|
||||||
static char *save_file_path = NULL;
|
|
||||||
static const char *wiki_url = "https://gitea.ammerhai.com/Ammerhai/work-calendar/wiki";
|
|
||||||
|
|
||||||
static ImGuiID close_popup;
|
|
||||||
static ImGuiID close_calendar_popup;
|
|
||||||
static ImGuiID close_and_load_calendar_popup;
|
|
||||||
static ImGuiID save_password_popup;
|
|
||||||
static ImGuiID open_password_popup;
|
|
||||||
static ImGuiID about_popup;
|
|
||||||
|
|
||||||
void init() {
|
void init() {
|
||||||
hydro_init();
|
hydro_init();
|
||||||
ImGuiIO &io = ImGui::GetIO();
|
ImGuiIO &io = ImGui::GetIO();
|
||||||
inter_regular = io.Fonts->AddFontFromMemoryCompressedTTF(inter_compressed_data, inter_compressed_size);
|
inter_regular = io.Fonts->AddFontFromMemoryCompressedTTF(inter_compressed_data, inter_compressed_size);
|
||||||
inter_bold = io.Fonts->AddFontFromMemoryCompressedTTF(inter_bold_compressed_data, inter_bold_compressed_size);
|
inter_bold = io.Fonts->AddFontFromMemoryCompressedTTF(inter_bold_compressed_data, inter_bold_compressed_size);
|
||||||
font_awesome = io.Fonts->AddFontFromMemoryCompressedTTF(font_awesome_solid_compressed_data, font_awesome_solid_compressed_size, 16.0f);
|
|
||||||
|
|
||||||
year = get_current_year();
|
year = get_current_year();
|
||||||
save_file_path = (char *)calloc(1, 1);
|
|
||||||
|
|
||||||
ImGuiSettingsHandler settings_handler = {};
|
|
||||||
settings_handler.TypeName = "Calendar";
|
|
||||||
settings_handler.TypeHash = ImHashStr("Calendar");
|
|
||||||
settings_handler.ReadOpenFn = [](ImGuiContext *context, ImGuiSettingsHandler *handler, const char *name) -> void * {
|
|
||||||
return (void *)-1;
|
|
||||||
};
|
|
||||||
settings_handler.ReadLineFn = [](ImGuiContext *context, ImGuiSettingsHandler *handler, void *entry, const char *line) {
|
|
||||||
if (strncmp(line, "language", sizeof("language") - 1) == 0) {
|
|
||||||
for (int i = 0; i < LANGUAGE_COUNT; i++) {
|
|
||||||
if (strncmp(line + sizeof("language"), localized_strings_storage[i][LS_LANGUAGE_NAME], strlen(localized_strings_storage[i][LS_LANGUAGE_NAME])) == 0)
|
|
||||||
selected_language = (Language)i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
settings_handler.WriteAllFn = [](ImGuiContext *context, ImGuiSettingsHandler *handler, ImGuiTextBuffer *buffer) {
|
|
||||||
buffer->append("[Calendar][Settings]\n");
|
|
||||||
buffer->appendf("language=%s\n\n", get_localized_string(LS_LANGUAGE_NAME));
|
|
||||||
};
|
|
||||||
ImGui::AddSettingsHandler(&settings_handler);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *save_file_path = NULL;
|
||||||
|
static const char *wiki_url = "https://gitea.ammerhai.com/Ammerhai/work-calendar/wiki";
|
||||||
|
|
||||||
|
static const char *month_names[] = {"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"};
|
||||||
|
|
||||||
typedef struct Category {
|
typedef struct Category {
|
||||||
bool editing;
|
bool editing;
|
||||||
ImColor color;
|
ImColor color;
|
||||||
@@ -169,12 +125,6 @@ static ImVec4 table_hover_color = ImVec4(0.0f, 0.3f, 0.6f, 0.2f);
|
|||||||
static char plaintext_buffer[2 * 1024 * 1024] = {};
|
static char plaintext_buffer[2 * 1024 * 1024] = {};
|
||||||
static char encrypted_buffer[hydro_secretbox_HEADERBYTES + sizeof(plaintext_buffer)];
|
static char encrypted_buffer[hydro_secretbox_HEADERBYTES + sizeof(plaintext_buffer)];
|
||||||
|
|
||||||
static bool unsaved_changes;
|
|
||||||
static bool last_frame_unsaved_changes;
|
|
||||||
static char *category_name_before_editing = NULL;
|
|
||||||
|
|
||||||
static bool about_open;
|
|
||||||
|
|
||||||
void save(){
|
void save(){
|
||||||
if (!save_file_path) return;
|
if (!save_file_path) return;
|
||||||
|
|
||||||
@@ -216,20 +166,10 @@ void save(){
|
|||||||
|
|
||||||
set_window_title(title);
|
set_window_title(title);
|
||||||
free(title);
|
free(title);
|
||||||
|
|
||||||
unsaved_changes = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void interaction_save_as(){
|
|
||||||
char *new_save_file_path = save_file_dialog();
|
|
||||||
if (new_save_file_path) {
|
|
||||||
if (save_file_path) free(save_file_path);
|
|
||||||
save_file_path = new_save_file_path;
|
|
||||||
ImGui::OpenPopup(save_password_popup);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void load(){
|
void load(){
|
||||||
|
|
||||||
FILE *save_file = fopen(save_file_path, "rb");
|
FILE *save_file = fopen(save_file_path, "rb");
|
||||||
size_t num_bytes = fread(encrypted_buffer, 1, sizeof(encrypted_buffer), save_file);
|
size_t num_bytes = fread(encrypted_buffer, 1, sizeof(encrypted_buffer), save_file);
|
||||||
fclose (save_file);
|
fclose (save_file);
|
||||||
@@ -280,84 +220,9 @@ void load(){
|
|||||||
|
|
||||||
set_window_title(title);
|
set_window_title(title);
|
||||||
free(title);
|
free(title);
|
||||||
|
|
||||||
unsaved_changes = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void interaction_open(){
|
|
||||||
if(unsaved_changes) {
|
|
||||||
ImGui::OpenPopup(close_and_load_calendar_popup);
|
|
||||||
} else {
|
|
||||||
char *new_save_file_path = open_file_dialog();
|
|
||||||
if (new_save_file_path) {
|
|
||||||
if (save_file_path) free(save_file_path);
|
|
||||||
save_file_path = new_save_file_path;
|
|
||||||
ImGui::OpenPopup(open_password_popup);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void close_calendar(){
|
|
||||||
if (save_file_path) free(save_file_path);
|
|
||||||
save_file_path = (char *)calloc(1, 1);
|
|
||||||
num_categories = 0;
|
|
||||||
num_categorized_days = 0;
|
|
||||||
hydro_memzero(categories, sizeof(categories));
|
|
||||||
hydro_memzero(categorized_days, sizeof(categorized_days));
|
|
||||||
hydro_memzero(derived_key, sizeof(derived_key));
|
|
||||||
set_window_title("Work Calendar");
|
|
||||||
unsaved_changes = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void interaction_close_calendar() {
|
|
||||||
if(unsaved_changes) {
|
|
||||||
ImGui::OpenPopup(close_calendar_popup);
|
|
||||||
} else {
|
|
||||||
close_calendar();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void per_frame(){
|
void per_frame(){
|
||||||
current_language = selected_language;
|
|
||||||
|
|
||||||
close_popup = ImGui::GetID("###Close");
|
|
||||||
close_calendar_popup = ImGui::GetID("###CloseCalendar");
|
|
||||||
close_and_load_calendar_popup = ImGui::GetID("###CloseLoadCalendar");
|
|
||||||
save_password_popup = ImGui::GetID("###Save");
|
|
||||||
open_password_popup = ImGui::GetID("###Open");
|
|
||||||
about_popup = ImGui::GetID("###About");
|
|
||||||
|
|
||||||
if (ImGui::IsKeyDown(ImGuiMod_Ctrl) && ImGui::IsKeyPressed(ImGuiKey_S, false)) {
|
|
||||||
if (ImGui::IsKeyDown(ImGuiMod_Shift)) {
|
|
||||||
interaction_save_as();
|
|
||||||
} else if (strlen(save_file_path)) {
|
|
||||||
save();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::IsKeyDown(ImGuiMod_Ctrl) && ImGui::IsKeyPressed(ImGuiKey_O, false)) {
|
|
||||||
interaction_open();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::IsKeyDown(ImGuiMod_Ctrl) && ImGui::IsKeyPressed(ImGuiKey_X, false)) {
|
|
||||||
interaction_close_calendar();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (last_frame_unsaved_changes != unsaved_changes) {
|
|
||||||
char *title = (char *)calloc(1, strlen("Work Calendar - ") + strlen(save_file_path) + 2);
|
|
||||||
memcpy(title, "Work Calendar - ", strlen("Work Calendar - "));
|
|
||||||
memcpy(title + strlen(title), save_file_path, strlen(save_file_path));
|
|
||||||
if(unsaved_changes)
|
|
||||||
memcpy(title + strlen(title), "*", 1);
|
|
||||||
|
|
||||||
set_window_title(title);
|
|
||||||
free(title);
|
|
||||||
|
|
||||||
last_frame_unsaved_changes = unsaved_changes;
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGuiStyle &style = ImGui::GetStyle();
|
ImGuiStyle &style = ImGui::GetStyle();
|
||||||
ImVec2 center = ImGui::GetMainViewport()->GetCenter();
|
ImVec2 center = ImGui::GetMainViewport()->GetCenter();
|
||||||
|
|
||||||
@@ -377,83 +242,92 @@ void per_frame(){
|
|||||||
}
|
}
|
||||||
ImGui::DockSpaceOverViewport(main_viewport_dock, ImGui::GetMainViewport(), ImGuiDockNodeFlags_NoTabBar);
|
ImGui::DockSpaceOverViewport(main_viewport_dock, ImGui::GetMainViewport(), ImGuiDockNodeFlags_NoTabBar);
|
||||||
|
|
||||||
if (ImGui::BeginMainMenuBar()) {
|
ImGuiID close_popup = ImGui::GetID("Close");
|
||||||
if (ImGui::BeginMenu(get_localized_string(LS_FILE))) {
|
ImGuiID save_password_popup = ImGui::GetID("Passwort eingeben##Save");
|
||||||
if (ImGui::MenuItem(get_localized_string(LS_OPEN), "Ctrl + O")) {
|
ImGuiID open_password_popup = ImGui::GetID("Passwort eingeben##Open");
|
||||||
interaction_open();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::MenuItem(get_localized_string(LS_SAVE), "Ctrl + S", false, strlen(save_file_path))) {
|
if (ImGui::BeginMainMenuBar()) {
|
||||||
|
if (ImGui::BeginMenu("Datei")) {
|
||||||
|
if (ImGui::MenuItem("Öffnen", "Ctrl + O")) {
|
||||||
|
char *new_save_file_path = open_file_dialog();
|
||||||
|
if (new_save_file_path) {
|
||||||
|
if (save_file_path) free(save_file_path);
|
||||||
|
save_file_path = new_save_file_path;
|
||||||
|
ImGui::OpenPopup(open_password_popup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ImGui::MenuItem("Speichern", "Ctrl + S", false, !!save_file_path)) {
|
||||||
save();
|
save();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ImGui::MenuItem(get_localized_string(LS_SAVE_AS), "Ctrl + Shift + S")) {
|
if (ImGui::MenuItem("Speichern unter", "Ctrl + Shift + S")) {
|
||||||
interaction_save_as();
|
char *new_save_file_path = save_file_dialog();
|
||||||
|
if (new_save_file_path) {
|
||||||
|
if (save_file_path) free(save_file_path);
|
||||||
|
save_file_path = new_save_file_path;
|
||||||
|
ImGui::OpenPopup(save_password_popup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO
|
||||||
|
ImGui::Separator();
|
||||||
|
if (ImGui::MenuItem("Kalender Schließen", "Ctrl + X")) {
|
||||||
|
//TODO if calendar is opened warning
|
||||||
|
|
||||||
|
if (save_file_path) free(save_file_path);
|
||||||
|
save_file_path = NULL;
|
||||||
|
num_categories = 0;
|
||||||
|
num_categorized_days = 0;
|
||||||
|
hydro_memzero(categories, sizeof(categories));
|
||||||
|
hydro_memzero(categorized_days, sizeof(categorized_days));
|
||||||
|
hydro_memzero(derived_key, sizeof(derived_key));
|
||||||
|
set_window_title("Work Calendar");
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
if (ImGui::MenuItem(get_localized_string(LS_CLOSE_CALENDAR), "Ctrl + X")) {
|
if (ImGui::MenuItem("Beenden", NULL)) {
|
||||||
interaction_close_calendar();
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::Separator();
|
|
||||||
if (ImGui::MenuItem(get_localized_string(LS_EXIT), NULL)) {
|
|
||||||
if(unsaved_changes) {
|
|
||||||
ImGui::OpenPopup(close_popup);
|
ImGui::OpenPopup(close_popup);
|
||||||
} else {
|
|
||||||
should_exit = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ImGui::EndMenu();
|
ImGui::EndMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ImGui::BeginMenu(get_localized_string(LS_VIEW))) {
|
if (ImGui::BeginMenu("Ansicht")) {
|
||||||
ImGui::MenuItem(get_localized_string(LS_LEGEND), NULL, &legend_visible);
|
ImGui::MenuItem("Legende", NULL, &legend_visible);
|
||||||
if (ImGui::BeginMenu(get_localized_string(LS_LANGUAGE))) {
|
|
||||||
for (int language = 0; language < LANGUAGE_COUNT; language++) {
|
|
||||||
if (ImGui::MenuItem(localized_strings_storage[language][LS_LANGUAGE_NAME], NULL, current_language == language))
|
|
||||||
selected_language = (Language) language;
|
|
||||||
}
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
ImGui::EndMenu();
|
ImGui::EndMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ImGui::BeginMenu(get_localized_string(LS_HELP))) {
|
if (ImGui::BeginMenu("Hilfe")) {
|
||||||
ImGui::MenuItem(get_localized_string(LS_DEMO), NULL, &show_demo_window);
|
ImGui::MenuItem("Demo", NULL, &show_demo_window);
|
||||||
if (ImGui::MenuItem(get_localized_string(LS_WIKI), NULL)) {
|
if (ImGui::MenuItem("Wiki", NULL)) {
|
||||||
ImGui::GetPlatformIO().Platform_OpenInShellFn(ImGui::GetCurrentContext(), wiki_url);
|
ImGui::GetPlatformIO().Platform_OpenInShellFn(ImGui::GetCurrentContext(), wiki_url);
|
||||||
}
|
}
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
if (ImGui::MenuItem(get_localized_string(LS_ABOUT), NULL)) {
|
ImGui::MenuItem("Über", NULL); //TODO
|
||||||
ImGui::OpenPopup(about_popup); about_open = true;
|
|
||||||
}
|
|
||||||
ImGui::EndMenu();
|
ImGui::EndMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::EndMainMenuBar();
|
ImGui::EndMainMenuBar();
|
||||||
}
|
}
|
||||||
|
|
||||||
// save calendar file with password modal dialogue
|
|
||||||
ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
|
ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
|
||||||
if (ImGui::BeginPopupModal(get_localized_string(LS_TITLE_ENTER_PASSWORD), NULL, ImGuiWindowFlags_AlwaysAutoResize)) {
|
if (ImGui::BeginPopupModal("Passwort eingeben##Save", NULL, ImGuiWindowFlags_AlwaysAutoResize)) {
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f);
|
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f);
|
||||||
|
|
||||||
ImGui::AlignTextToFramePadding();
|
ImGui::AlignTextToFramePadding();
|
||||||
ImGui::Text("%s", get_localized_string(LS_PASSWORD));
|
ImGui::Text("Passwort");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::SetNextItemWidth(-1);
|
ImGui::SetNextItemWidth(-1);
|
||||||
ImGui::InputText("##Password", password_input_buffer, sizeof(password_input_buffer), ImGuiInputTextFlags_Password);
|
ImGui::InputText("##Passwort", password_input_buffer, sizeof(password_input_buffer), ImGuiInputTextFlags_Password);
|
||||||
|
|
||||||
ImGui::AlignTextToFramePadding();
|
ImGui::AlignTextToFramePadding();
|
||||||
ImGui::Text("%s", get_localized_string(LS_CONFIRM_PASSWORD));
|
ImGui::Text("Passwort bestätigen");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::SetNextItemWidth(-1);
|
ImGui::SetNextItemWidth(-1);
|
||||||
ImGui::InputText("##Confirm_Password", password_confirmation_input_buffer, sizeof(password_confirmation_input_buffer), ImGuiInputTextFlags_Password);
|
ImGui::InputText("##Passwort bestätigen", password_confirmation_input_buffer, sizeof(password_confirmation_input_buffer), ImGuiInputTextFlags_Password);
|
||||||
|
|
||||||
ImGui::PopStyleVar();
|
ImGui::PopStyleVar();
|
||||||
|
|
||||||
if (ImGui::Button(get_localized_string(LS_OK), ImVec2(120, 0))) {
|
if (ImGui::Button("OK", ImVec2(120, 0))) {
|
||||||
if (hydro_compare((uint8_t *)password_input_buffer, (uint8_t *) password_confirmation_input_buffer, sizeof(password_input_buffer)) == 0) {
|
if (hydro_compare((uint8_t *)password_input_buffer, (uint8_t *) password_confirmation_input_buffer, sizeof(password_input_buffer)) == 0) {
|
||||||
hydro_pwhash_deterministic(derived_key, sizeof derived_key, password_input_buffer, strlen(password_input_buffer), HYDROGEN_CONTEXT,
|
hydro_pwhash_deterministic(derived_key, sizeof derived_key, password_input_buffer, strlen(password_input_buffer), HYDROGEN_CONTEXT,
|
||||||
master_key, HYDROGEN_OPSLIMIT, HYDROGEN_MEMLIMIT, HYDROGEN_THREADS);
|
master_key, HYDROGEN_OPSLIMIT, HYDROGEN_MEMLIMIT, HYDROGEN_THREADS);
|
||||||
@@ -466,7 +340,7 @@ void per_frame(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button(get_localized_string(LS_CANCEL), ImVec2(120, 0))) {
|
if (ImGui::Button("Abbrechen", ImVec2(120, 0))) {
|
||||||
ImGui::CloseCurrentPopup();
|
ImGui::CloseCurrentPopup();
|
||||||
hydro_memzero(password_input_buffer, sizeof(password_input_buffer));
|
hydro_memzero(password_input_buffer, sizeof(password_input_buffer));
|
||||||
hydro_memzero(password_confirmation_input_buffer, sizeof(password_confirmation_input_buffer));
|
hydro_memzero(password_confirmation_input_buffer, sizeof(password_confirmation_input_buffer));
|
||||||
@@ -475,20 +349,19 @@ void per_frame(){
|
|||||||
ImGui::EndPopup();
|
ImGui::EndPopup();
|
||||||
}
|
}
|
||||||
|
|
||||||
// open calendar file with password modal dialogue
|
|
||||||
ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
|
ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
|
||||||
if (ImGui::BeginPopupModal(get_localized_string(LS_TITLE_OPEN_PASSWORD), NULL, ImGuiWindowFlags_AlwaysAutoResize)) {
|
if (ImGui::BeginPopupModal("Passwort eingeben##Open", NULL, ImGuiWindowFlags_AlwaysAutoResize)) {
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f);
|
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f);
|
||||||
|
|
||||||
ImGui::AlignTextToFramePadding();
|
ImGui::AlignTextToFramePadding();
|
||||||
ImGui::Text("%s", get_localized_string(LS_PASSWORD));
|
ImGui::Text("Passwort");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::SetNextItemWidth(-1);
|
ImGui::SetNextItemWidth(-1);
|
||||||
ImGui::InputText("##Passwort", password_input_buffer, sizeof(password_input_buffer), ImGuiInputTextFlags_Password);
|
ImGui::InputText("##Passwort", password_input_buffer, sizeof(password_input_buffer), ImGuiInputTextFlags_Password);
|
||||||
|
|
||||||
ImGui::PopStyleVar();
|
ImGui::PopStyleVar();
|
||||||
|
|
||||||
if (ImGui::Button(get_localized_string(LS_OK), ImVec2(120, 0))) {
|
if (ImGui::Button("OK", ImVec2(120, 0))) {
|
||||||
hydro_pwhash_deterministic(derived_key, sizeof derived_key, password_input_buffer, strlen(password_input_buffer), HYDROGEN_CONTEXT,
|
hydro_pwhash_deterministic(derived_key, sizeof derived_key, password_input_buffer, strlen(password_input_buffer), HYDROGEN_CONTEXT,
|
||||||
master_key, HYDROGEN_OPSLIMIT, HYDROGEN_MEMLIMIT, HYDROGEN_THREADS);
|
master_key, HYDROGEN_OPSLIMIT, HYDROGEN_MEMLIMIT, HYDROGEN_THREADS);
|
||||||
hydro_memzero(password_input_buffer, sizeof(password_input_buffer));
|
hydro_memzero(password_input_buffer, sizeof(password_input_buffer));
|
||||||
@@ -498,8 +371,9 @@ void per_frame(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button(get_localized_string(LS_CANCEL), ImVec2(120, 0))) {
|
if (ImGui::Button("Abbrechen", ImVec2(120, 0))) {
|
||||||
close_calendar();
|
if (save_file_path) free(save_file_path);
|
||||||
|
save_file_path = NULL;
|
||||||
ImGui::CloseCurrentPopup();
|
ImGui::CloseCurrentPopup();
|
||||||
hydro_memzero(password_input_buffer, sizeof(password_input_buffer));
|
hydro_memzero(password_input_buffer, sizeof(password_input_buffer));
|
||||||
}
|
}
|
||||||
@@ -507,79 +381,24 @@ void per_frame(){
|
|||||||
ImGui::EndPopup();
|
ImGui::EndPopup();
|
||||||
}
|
}
|
||||||
|
|
||||||
// close and load calendar modal dialogue
|
|
||||||
ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
|
ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
|
||||||
if (ImGui::BeginPopupModal(get_localized_string(LS_CLOSE_AND_LOAD_CALENDAR), NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_AlwaysAutoResize)) {
|
if (ImGui::BeginPopupModal("Close", NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_AlwaysAutoResize)) {
|
||||||
ImGui::Text("%s", get_localized_string(LS_QUESTION_DO_YOU_REALLY_WANT_TO_CLOSE_THE_CALENDAR));
|
ImGui::Text("Möchten Sie wirklich beenden?");
|
||||||
|
|
||||||
ImGui::SetItemDefaultFocus();
|
ImGui::SetItemDefaultFocus();
|
||||||
if (ImGui::Button(get_localized_string(LS_YES), ImVec2(120, 0))) {
|
if (ImGui::Button("Ja", ImVec2(120, 0))) {
|
||||||
ImGui::CloseCurrentPopup();
|
|
||||||
close_calendar();
|
|
||||||
|
|
||||||
char *new_save_file_path = open_file_dialog();
|
|
||||||
if (new_save_file_path) {
|
|
||||||
if (save_file_path) free(save_file_path);
|
|
||||||
save_file_path = new_save_file_path;
|
|
||||||
ImGui::OpenPopup(open_password_popup);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::SameLine();
|
|
||||||
if (ImGui::Button(get_localized_string(LS_NO), ImVec2(120, 0))) {
|
|
||||||
ImGui::CloseCurrentPopup();
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::EndPopup();
|
|
||||||
}
|
|
||||||
|
|
||||||
// close calendar modal dialogue
|
|
||||||
ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
|
|
||||||
if (ImGui::BeginPopupModal(get_localized_string(LS_CLOSE_CALENDAR), NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_AlwaysAutoResize)) {
|
|
||||||
ImGui::Text("%s", get_localized_string(LS_QUESTION_DO_YOU_REALLY_WANT_TO_CLOSE_THE_CALENDAR));
|
|
||||||
|
|
||||||
ImGui::SetItemDefaultFocus();
|
|
||||||
if (ImGui::Button(get_localized_string(LS_YES), ImVec2(120, 0))) {
|
|
||||||
close_calendar();
|
|
||||||
ImGui::CloseCurrentPopup();
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::SameLine();
|
|
||||||
if (ImGui::Button(get_localized_string(LS_NO), ImVec2(120, 0))) {
|
|
||||||
ImGui::CloseCurrentPopup();
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::EndPopup();
|
|
||||||
}
|
|
||||||
|
|
||||||
// close application modal dialogue
|
|
||||||
ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
|
|
||||||
if (ImGui::BeginPopupModal(get_localized_string(LS_EXIT), NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_AlwaysAutoResize)) {
|
|
||||||
ImGui::Text("%s", get_localized_string(LS_QUESTION_DO_YOU_REALLY_WANT_TO_QUIT));
|
|
||||||
|
|
||||||
ImGui::SetItemDefaultFocus();
|
|
||||||
if (ImGui::Button(get_localized_string(LS_YES), ImVec2(120, 0))) {
|
|
||||||
should_exit = true;
|
should_exit = true;
|
||||||
ImGui::CloseCurrentPopup();
|
ImGui::CloseCurrentPopup();
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::Button(get_localized_string(LS_NO), ImVec2(120, 0))) {
|
if (ImGui::Button("Nein", ImVec2(120, 0))) {
|
||||||
ImGui::CloseCurrentPopup();
|
ImGui::CloseCurrentPopup();
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::EndPopup();
|
ImGui::EndPopup();
|
||||||
}
|
}
|
||||||
|
|
||||||
// about modal dialogue
|
|
||||||
ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
|
|
||||||
ImGui::SetNextWindowSize(ImVec2(640.0f, 480.0f), ImGuiCond_Appearing);
|
|
||||||
if (ImGui::BeginPopupModal(get_localized_string(LS_ABOUT), &about_open)) {
|
|
||||||
ImGui::TextWrapped("%s", licenses);
|
|
||||||
|
|
||||||
ImGui::EndPopup();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::Begin("Work Calendar", 0)) {
|
if (ImGui::Begin("Work Calendar", 0)) {
|
||||||
ImGui::PushStyleColor(ImGuiCol_TableHeaderBg, {0,0,0,0});
|
ImGui::PushStyleColor(ImGuiCol_TableHeaderBg, {0,0,0,0});
|
||||||
ImGui::PushStyleColor(ImGuiCol_HeaderHovered, {0,0,0,0});
|
ImGui::PushStyleColor(ImGuiCol_HeaderHovered, {0,0,0,0});
|
||||||
@@ -619,7 +438,7 @@ void per_frame(){
|
|||||||
if (ImGui::BeginTable("Month", 1, ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_NoHostExtendX)) {
|
if (ImGui::BeginTable("Month", 1, ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_NoHostExtendX)) {
|
||||||
ImGui::TableNextRow();
|
ImGui::TableNextRow();
|
||||||
ImGui::TableSetColumnIndex(0);
|
ImGui::TableSetColumnIndex(0);
|
||||||
ImGui::TextAligned(0.5, -FLT_MIN, get_localized_string(month_names[month - 1]));
|
ImGui::TextAligned(0.5, -FLT_MIN, month_names[month - 1]);
|
||||||
|
|
||||||
ImGui::TableNextRow();
|
ImGui::TableNextRow();
|
||||||
ImGui::TableSetColumnIndex(0);
|
ImGui::TableSetColumnIndex(0);
|
||||||
@@ -628,7 +447,7 @@ void per_frame(){
|
|||||||
if (ImGui::BeginTable("CalendarWeek", 1, ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_NoHostExtendX | ImGuiTableFlags_Borders)){
|
if (ImGui::BeginTable("CalendarWeek", 1, ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_NoHostExtendX | ImGuiTableFlags_Borders)){
|
||||||
ImGui::TableNextRow();
|
ImGui::TableNextRow();
|
||||||
ImGui::TableSetColumnIndex(0);
|
ImGui::TableSetColumnIndex(0);
|
||||||
ImGui::TextAligned(0.5, -FLT_MIN, get_localized_string(LS_CALENDAR_WEEK_SHORT));
|
ImGui::TextAligned(0.5, -FLT_MIN, "KW");
|
||||||
|
|
||||||
for (int day = 1; day <= days_per_month(year, month); day++) {
|
for (int day = 1; day <= days_per_month(year, month); day++) {
|
||||||
int weekday = weekday_from_day(year, month, day);
|
int weekday = weekday_from_day(year, month, day);
|
||||||
@@ -638,11 +457,11 @@ void per_frame(){
|
|||||||
ImGui::TableSetColumnIndex(0);
|
ImGui::TableSetColumnIndex(0);
|
||||||
|
|
||||||
//if first week has 3 or less days, last week from previous year
|
//if first week has 3 or less days, last week from previous year
|
||||||
int calendar_week = calendar_week_from_day(year, month, day);
|
int calender_week = calendar_week_from_day(year, month, day);
|
||||||
if (calendar_week == 0) {
|
if (calender_week == 0) {
|
||||||
ImGui::TextAligned(0.5, -FLT_MIN, "%d", 53);
|
ImGui::TextAligned(0.5, -FLT_MIN, "%d", 53);
|
||||||
} else {
|
} else {
|
||||||
ImGui::TextAligned(0.5, -FLT_MIN, "%d", calendar_week);
|
ImGui::TextAligned(0.5, -FLT_MIN, "%d", calender_week);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -656,13 +475,13 @@ void per_frame(){
|
|||||||
|
|
||||||
if (ImGui::BeginTable("Weekdays", 7, ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_NoHostExtendX | ImGuiTableFlags_Borders)){
|
if (ImGui::BeginTable("Weekdays", 7, ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_NoHostExtendX | ImGuiTableFlags_Borders)){
|
||||||
|
|
||||||
ImGui::TableSetupColumn(get_localized_string(LS_MONDAY_SHORT));
|
ImGui::TableSetupColumn("Mo");
|
||||||
ImGui::TableSetupColumn(get_localized_string(LS_TUESDAY_SHORT));
|
ImGui::TableSetupColumn("Di");
|
||||||
ImGui::TableSetupColumn(get_localized_string(LS_WEDNESDAY_SHORT));
|
ImGui::TableSetupColumn("Mi");
|
||||||
ImGui::TableSetupColumn(get_localized_string(LS_THURSDAY_SHORT));
|
ImGui::TableSetupColumn("Do");
|
||||||
ImGui::TableSetupColumn(get_localized_string(LS_FRIDAY_SHORT));
|
ImGui::TableSetupColumn("Fr");
|
||||||
ImGui::TableSetupColumn(get_localized_string(LS_SATURDAY_SHORT));
|
ImGui::TableSetupColumn("Sa");
|
||||||
ImGui::TableSetupColumn(get_localized_string(LS_SUNDAY_SHORT));
|
ImGui::TableSetupColumn("So");
|
||||||
ImGui::TableHeadersRow();
|
ImGui::TableHeadersRow();
|
||||||
|
|
||||||
ImGui::EndTable();
|
ImGui::EndTable();
|
||||||
@@ -676,7 +495,7 @@ void per_frame(){
|
|||||||
if (ImGui::BeginTable("Weekdays", 7, ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_NoHostExtendX | ImGuiTableFlags_Borders)) {
|
if (ImGui::BeginTable("Weekdays", 7, ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_NoHostExtendX | ImGuiTableFlags_Borders)) {
|
||||||
int offset = weekday_from_day(year, month, 1);
|
int offset = weekday_from_day(year, month, 1);
|
||||||
|
|
||||||
for (int day = 1; day <= days_per_month(year, month); day++) {
|
for (int day = 1; day <= days_per_month(2025, month); day++) {
|
||||||
int weekday = weekday_from_day(year, month, day);
|
int weekday = weekday_from_day(year, month, day);
|
||||||
|
|
||||||
if (weekday == 0 || day == 1){
|
if (weekday == 0 || day == 1){
|
||||||
@@ -736,7 +555,6 @@ void per_frame(){
|
|||||||
|
|
||||||
//apply selected color to field
|
//apply selected color to field
|
||||||
if (selected_category != -1 && ImGui::IsItemClicked()) {
|
if (selected_category != -1 && ImGui::IsItemClicked()) {
|
||||||
unsaved_changes = true;
|
|
||||||
for (int i = 0; i < num_categorized_days; i++) {
|
for (int i = 0; i < num_categorized_days; i++) {
|
||||||
if (categorized_days[i].year != year) continue;
|
if (categorized_days[i].year != year) continue;
|
||||||
if (categorized_days[i].month != month) continue;
|
if (categorized_days[i].month != month) continue;
|
||||||
@@ -815,34 +633,24 @@ void per_frame(){
|
|||||||
if (category.editing) {
|
if (category.editing) {
|
||||||
ImGui::SetNextItemWidth(-1);
|
ImGui::SetNextItemWidth(-1);
|
||||||
if (ImGui::InputText("##name", category.name, IM_ARRAYSIZE(category.name), ImGuiInputTextFlags_EnterReturnsTrue)) {
|
if (ImGui::InputText("##name", category.name, IM_ARRAYSIZE(category.name), ImGuiInputTextFlags_EnterReturnsTrue)) {
|
||||||
if (strcmp(category_name_before_editing, category.name) != 0) {
|
|
||||||
unsaved_changes = true;
|
|
||||||
}
|
|
||||||
free(category_name_before_editing);
|
|
||||||
category.editing = false;
|
category.editing = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ImGui::Text("%s", category.name);
|
uint64_t num_days_this_year = 0;
|
||||||
|
for (size_t j = 0; j < num_categorized_days; j++) {
|
||||||
|
if (categorized_days[j].category == i && categorized_days[j].year == year) {
|
||||||
|
num_days_this_year++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::Text("%s (%" PRIu64 ")", category.name, num_days_this_year);
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::TableSetColumnIndex(2);
|
ImGui::TableSetColumnIndex(2);
|
||||||
ImGui::PushFont(font_awesome);
|
if (ImGui::Button("e"))
|
||||||
if (ImGui::Button("\uf304")) {
|
|
||||||
if(!category.editing) {
|
|
||||||
category_name_before_editing = _strdup(category.name);
|
|
||||||
} else {
|
|
||||||
if (strcmp(category_name_before_editing, category.name) != 0) {
|
|
||||||
unsaved_changes = true;
|
|
||||||
}
|
|
||||||
free(category_name_before_editing);
|
|
||||||
}
|
|
||||||
category.editing = !category.editing;
|
category.editing = !category.editing;
|
||||||
}
|
|
||||||
ImGui::PopFont();
|
|
||||||
|
|
||||||
ImGui::TableSetColumnIndex(3);
|
ImGui::TableSetColumnIndex(3);
|
||||||
ImGui::PushFont(font_awesome);
|
if (ImGui::Button("d")) {
|
||||||
if (ImGui::Button("\uf1f8")) {
|
|
||||||
for (size_t j = 0; j < num_categorized_days; j++) {
|
for (size_t j = 0; j < num_categorized_days; j++) {
|
||||||
// Remove categorized days that have the to be deleted category
|
// Remove categorized days that have the to be deleted category
|
||||||
if (categorized_days[j].category == i) {
|
if (categorized_days[j].category == i) {
|
||||||
@@ -856,22 +664,17 @@ void per_frame(){
|
|||||||
// Remove the category
|
// Remove the category
|
||||||
for (size_t j = i; j < num_categories - 1; j++) categories[j] = categories[j + 1];
|
for (size_t j = i; j < num_categories - 1; j++) categories[j] = categories[j + 1];
|
||||||
num_categories--;
|
num_categories--;
|
||||||
unsaved_changes = true;
|
|
||||||
}
|
}
|
||||||
ImGui::PopFont();
|
|
||||||
|
|
||||||
ImGui::PopID();
|
ImGui::PopID();
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::TableNextRow();
|
ImGui::TableNextRow();
|
||||||
ImGui::TableSetColumnIndex(0);
|
ImGui::TableSetColumnIndex(0);
|
||||||
ImGui::PushFont(font_awesome);
|
|
||||||
if (ImGui::Button("+")) {
|
if (ImGui::Button("+")) {
|
||||||
categories[num_categories] = {};
|
categories[num_categories] = {};
|
||||||
num_categories++;
|
num_categories++;
|
||||||
unsaved_changes = true;
|
|
||||||
}
|
}
|
||||||
ImGui::PopFont();
|
|
||||||
|
|
||||||
ImGui::EndTable();
|
ImGui::EndTable();
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user