Add Windows specific code

This commit is contained in:
Grégory Soutadé 2011-02-05 21:02:03 +01:00
parent bd4809042b
commit 0c344a0273
13 changed files with 185 additions and 143 deletions

View File

@ -3,8 +3,13 @@ CXXFLAGS+=-I./lib/wxsqlite3-1.9.9/include
CXXFLAGS+=-I./lib/freechart/include CXXFLAGS+=-I./lib/freechart/include
LDFLAGS+=`wx-config --libs` LDFLAGS+=`wx-config --libs`
ifdef WIN32
LDFLAGS+=-L./lib/wxsqlite3-1.9.9/lib/ -lwxcode_msw_wxsqlite3-2.8
LDFLAGS+=-L./lib/freechart/lib -lwxcode_msw_freechart-2.8
else
LDFLAGS+=-L./lib/wxsqlite3-1.9.9/lib/ -lwxcode_gtk2u_wxsqlite3-2.8 LDFLAGS+=-L./lib/wxsqlite3-1.9.9/lib/ -lwxcode_gtk2u_wxsqlite3-2.8
LDFLAGS+=-L./lib/freechart/lib -lwxcode_gtk2u_freechart-2.8 LDFLAGS+=-L./lib/freechart/lib -lwxcode_gtk2u_freechart-2.8
endif
CXX=$(PREFIX)g++ CXX=$(PREFIX)g++
@ -37,5 +42,10 @@ kc: $(OBJS)
generate_locales: generate_locales:
./tools/generate_locales.sh ./tools/generate_locales.sh
ifdef WIN32
package:
./tools/package_win32.sh
else
package: package:
./tools/package.sh ./tools/package.sh
endif

0
init.sql Normal file → Executable file
View File

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-01-26 11:41+0100\n" "POT-Creation-Date: 2011-02-05 20:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -16,17 +16,17 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: src/view/StatsPanel.cpp:339 src/view/PreferencesPanel.cpp:790 #: src/view/StatsPanel.cpp:358 src/view/PreferencesPanel.cpp:799
msgid " - " msgid " - "
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:470 src/view/PreferencesPanel.cpp:490 #: src/view/PreferencesPanel.cpp:474 src/view/PreferencesPanel.cpp:494
#: src/view/PreferencesPanel.cpp:692 src/view/PreferencesPanel.cpp:711 #: src/view/PreferencesPanel.cpp:696 src/view/PreferencesPanel.cpp:715
#: src/view/PreferencesPanel.cpp:748 src/view/UsersDialog.cpp:120 #: src/view/PreferencesPanel.cpp:757 src/view/UsersDialog.cpp:120
msgid " already exists" msgid " already exists"
msgstr "" msgstr ""
#: src/view/SearchPanel.cpp:242 #: src/view/SearchPanel.cpp:243
msgid " entries found" msgid " entries found"
msgstr "" msgstr ""
@ -38,7 +38,7 @@ msgstr ""
msgid " operations ?" msgid " operations ?"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:797 #: src/view/PreferencesPanel.cpp:806
msgid " profil ?" msgid " profil ?"
msgstr "" msgstr ""
@ -46,19 +46,19 @@ msgstr ""
msgid "!! Warning !! If there was a bug, the old database will be suppressed !" msgid "!! Warning !! If there was a bug, the old database will be suppressed !"
msgstr "" msgstr ""
#: src/view/SearchPanel.cpp:244 #: src/view/SearchPanel.cpp:245
msgid "1 entry found" msgid "1 entry found"
msgstr "" msgstr ""
#: src/view/SearchPanel.cpp:90 src/view/grid/GridAccount.cpp:64 #: src/view/SearchPanel.cpp:90 src/view/grid/GridAccount.cpp:67
msgid "Account" msgid "Account"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:470 src/view/PreferencesPanel.cpp:490 #: src/view/PreferencesPanel.cpp:474 src/view/PreferencesPanel.cpp:494
msgid "Account " msgid "Account "
msgstr "" msgstr ""
#: src/controller/KissCount.cpp:343 #: src/controller/KissCount.cpp:350
msgid "Account 1" msgid "Account 1"
msgstr "" msgstr ""
@ -70,7 +70,7 @@ msgstr ""
msgid "Account number" msgid "Account number"
msgstr "" msgstr ""
#: src/view/StatsPanel.cpp:304 src/view/PreferencesPanel.cpp:59 #: src/view/StatsPanel.cpp:323 src/view/PreferencesPanel.cpp:60
msgid "Accounts" msgid "Accounts"
msgstr "" msgstr ""
@ -82,57 +82,57 @@ msgstr ""
msgid "Amount to" msgid "Amount to"
msgstr "" msgstr ""
#: src/view/AccountPanel.cpp:752 src/view/PreferencesPanel.cpp:422 #: src/view/AccountPanel.cpp:752 src/view/PreferencesPanel.cpp:426
#: src/view/PreferencesPanel.cpp:797 #: src/view/PreferencesPanel.cpp:806
msgid "Are you sure want to delete " msgid "Are you sure want to delete "
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:672 src/view/grid/GridAccount.cpp:825 #: src/view/PreferencesPanel.cpp:676 src/view/grid/GridAccount.cpp:829
msgid "Are you sure want to delete : \n" msgid "Are you sure want to delete : \n"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:357 #: src/view/PreferencesPanel.cpp:361
msgid "Ascending" msgid "Ascending"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:281 #: src/view/PreferencesPanel.cpp:285
msgid "Background color" msgid "Background color"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:195 #: src/view/PreferencesPanel.cpp:199
msgid "Blocked" msgid "Blocked"
msgstr "" msgstr ""
#: src/view/GenerateDialog.cpp:60 src/view/PasswordDialog.cpp:56 #: src/view/GenerateDialog.cpp:61 src/view/PasswordDialog.cpp:56
#: src/view/UsersDialog.cpp:52 #: src/view/UsersDialog.cpp:52
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: src/view/grid/GridAccount.cpp:1256 src/view/grid/GridAccount.cpp:1263 #: src/view/grid/GridAccount.cpp:1260 src/view/grid/GridAccount.cpp:1267
msgid "Cannot group these operations" msgid "Cannot group these operations"
msgstr "" msgstr ""
#: src/view/grid/GridAccount.cpp:1382 src/view/grid/GridAccount.cpp:1388 #: src/view/grid/GridAccount.cpp:1386 src/view/grid/GridAccount.cpp:1392
msgid "Cannot ungroup these operations" msgid "Cannot ungroup these operations"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:60 #: src/view/PreferencesPanel.cpp:61
msgid "Categories" msgid "Categories"
msgstr "" msgstr ""
#: src/view/SearchPanel.cpp:88 src/view/grid/GridAccount.cpp:64 #: src/view/SearchPanel.cpp:88 src/view/grid/GridAccount.cpp:67
msgid "Category" msgid "Category"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:692 src/view/PreferencesPanel.cpp:711 #: src/view/PreferencesPanel.cpp:696 src/view/PreferencesPanel.cpp:715
msgid "Category " msgid "Category "
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:77 #: src/view/PreferencesPanel.cpp:78
msgid "Change Name" msgid "Change Name"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:78 #: src/view/PreferencesPanel.cpp:79
msgid "Change Password" msgid "Change Password"
msgstr "" msgstr ""
@ -156,7 +156,7 @@ msgstr ""
msgid "Cost repartition" msgid "Cost repartition"
msgstr "" msgstr ""
#: src/view/grid/GridAccount.cpp:64 #: src/view/grid/GridAccount.cpp:67
msgid "Credit" msgid "Credit"
msgstr "" msgstr ""
@ -172,7 +172,7 @@ msgstr ""
msgid "Current value" msgid "Current value"
msgstr "" msgstr ""
#: src/view/grid/GridAccount.cpp:64 #: src/view/grid/GridAccount.cpp:67
msgid "Date" msgid "Date"
msgstr "" msgstr ""
@ -184,24 +184,24 @@ msgstr ""
msgid "Date to" msgid "Date to"
msgstr "" msgstr ""
#: src/view/grid/GridAccount.cpp:64 #: src/view/grid/GridAccount.cpp:67
msgid "Debit" msgid "Debit"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:194 #: src/view/PreferencesPanel.cpp:198
msgid "Default" msgid "Default"
msgstr "" msgstr ""
#: src/view/AccountPanel.cpp:611 src/view/PreferencesPanel.cpp:196 #: src/view/AccountPanel.cpp:611 src/view/PreferencesPanel.cpp:200
#: src/view/PreferencesPanel.cpp:284 #: src/view/PreferencesPanel.cpp:288
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:358 #: src/view/PreferencesPanel.cpp:362
msgid "Descending" msgid "Descending"
msgstr "" msgstr ""
#: src/view/SearchPanel.cpp:85 src/view/grid/GridAccount.cpp:64 #: src/view/SearchPanel.cpp:85 src/view/grid/GridAccount.cpp:67
msgid "Description" msgid "Description"
msgstr "" msgstr ""
@ -210,15 +210,15 @@ msgstr ""
#: src/model/Database.cpp:120 src/model/Database.cpp:147 #: src/model/Database.cpp:120 src/model/Database.cpp:147
#: src/model/Database.cpp:155 src/model/Database.cpp:176 #: src/model/Database.cpp:155 src/model/Database.cpp:176
#: src/view/AccountPanel.cpp:748 src/view/PasswordDialog.cpp:72 #: src/view/AccountPanel.cpp:748 src/view/PasswordDialog.cpp:72
#: src/view/PasswordDialog.cpp:78 src/view/PreferencesPanel.cpp:418 #: src/view/PasswordDialog.cpp:78 src/view/PreferencesPanel.cpp:422
#: src/view/PreferencesPanel.cpp:470 src/view/PreferencesPanel.cpp:490 #: src/view/PreferencesPanel.cpp:474 src/view/PreferencesPanel.cpp:494
#: src/view/PreferencesPanel.cpp:692 src/view/PreferencesPanel.cpp:711 #: src/view/PreferencesPanel.cpp:696 src/view/PreferencesPanel.cpp:715
#: src/view/PreferencesPanel.cpp:742 src/view/PreferencesPanel.cpp:748 #: src/view/PreferencesPanel.cpp:751 src/view/PreferencesPanel.cpp:757
#: src/view/SearchPanel.cpp:157 src/view/SearchPanel.cpp:167 #: src/view/SearchPanel.cpp:158 src/view/SearchPanel.cpp:168
#: src/view/SearchPanel.cpp:181 src/view/SearchPanel.cpp:192 #: src/view/SearchPanel.cpp:182 src/view/SearchPanel.cpp:193
#: src/view/UsersDialog.cpp:90 src/view/UsersDialog.cpp:120 #: src/view/UsersDialog.cpp:90 src/view/UsersDialog.cpp:120
#: src/view/grid/GridAccount.cpp:1256 src/view/grid/GridAccount.cpp:1263 #: src/view/grid/GridAccount.cpp:1260 src/view/grid/GridAccount.cpp:1267
#: src/view/grid/GridAccount.cpp:1382 src/view/grid/GridAccount.cpp:1388 #: src/view/grid/GridAccount.cpp:1386 src/view/grid/GridAccount.cpp:1392
#: src/view/grid/wxGridCellFormulaEditor.cpp:69 #: src/view/grid/wxGridCellFormulaEditor.cpp:69
msgid "Error" msgid "Error"
msgstr "" msgstr ""
@ -231,16 +231,16 @@ msgstr ""
msgid "Final value" msgid "Final value"
msgstr "" msgstr ""
#: src/controller/KissCount.cpp:359 src/model/Database.cpp:331 #: src/controller/KissCount.cpp:366 src/model/Database.cpp:331
#: src/view/SearchPanel.cpp:76 src/view/grid/GridAccount.cpp:323 #: src/view/SearchPanel.cpp:76 src/view/grid/GridAccount.cpp:326
msgid "Fix" msgid "Fix"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:283 #: src/view/PreferencesPanel.cpp:287
msgid "Font" msgid "Font"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:282 #: src/view/PreferencesPanel.cpp:286
msgid "Foreground color" msgid "Foreground color"
msgstr "" msgstr ""
@ -248,7 +248,7 @@ msgstr ""
msgid "From" msgid "From"
msgstr "" msgstr ""
#: src/view/GenerateDialog.cpp:45 #: src/view/GenerateDialog.cpp:46
msgid "From " msgid "From "
msgstr "" msgstr ""
@ -256,7 +256,7 @@ msgstr ""
msgid "Generate month" msgid "Generate month"
msgstr "" msgstr ""
#: src/controller/KissCount.cpp:361 #: src/controller/KissCount.cpp:368
msgid "Groceries" msgid "Groceries"
msgstr "" msgstr ""
@ -264,7 +264,7 @@ msgstr ""
msgid "Group" msgid "Group"
msgstr "" msgstr ""
#: src/controller/KissCount.cpp:363 #: src/controller/KissCount.cpp:370
msgid "Hobbies" msgid "Hobbies"
msgstr "" msgstr ""
@ -272,19 +272,19 @@ msgstr ""
msgid "Initial value" msgid "Initial value"
msgstr "" msgstr ""
#: src/view/SearchPanel.cpp:167 #: src/view/SearchPanel.cpp:168
msgid "Invalid amount from" msgid "Invalid amount from"
msgstr "" msgstr ""
#: src/view/SearchPanel.cpp:192 #: src/view/SearchPanel.cpp:193
msgid "Invalid amount range" msgid "Invalid amount range"
msgstr "" msgstr ""
#: src/view/SearchPanel.cpp:181 #: src/view/SearchPanel.cpp:182
msgid "Invalid amount to" msgid "Invalid amount to"
msgstr "" msgstr ""
#: src/view/SearchPanel.cpp:157 #: src/view/SearchPanel.cpp:158
msgid "Invalid date range" msgid "Invalid date range"
msgstr "" msgstr ""
@ -292,7 +292,7 @@ msgstr ""
msgid "Invalid formula !" msgid "Invalid formula !"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:742 #: src/view/PreferencesPanel.cpp:751
msgid "Invalid name" msgid "Invalid name"
msgstr "" msgstr ""
@ -304,11 +304,11 @@ msgstr ""
msgid "Invalid password" msgid "Invalid password"
msgstr "" msgstr ""
#: src/view/StatsPanel.cpp:358 #: src/view/StatsPanel.cpp:377
msgid "Invalide date range" msgid "Invalide date range"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:418 #: src/view/PreferencesPanel.cpp:422
msgid "It must be at least one account !" msgid "It must be at least one account !"
msgstr "" msgstr ""
@ -316,33 +316,33 @@ msgstr ""
msgid "It must be at least one month !" msgid "It must be at least one month !"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:79 #: src/view/PreferencesPanel.cpp:80
msgid "Kill me" msgid "Kill me"
msgstr "" msgstr ""
#: src/view/StatsPanel.cpp:358 src/view/PreferencesPanel.cpp:782 #: src/view/StatsPanel.cpp:377 src/view/PreferencesPanel.cpp:791
#: src/view/PreferencesPanel.cpp:785 #: src/view/PreferencesPanel.cpp:794
msgid "KissCount" msgid "KissCount"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:61 #: src/view/PreferencesPanel.cpp:62
msgid "Language" msgid "Language"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:785 #: src/view/PreferencesPanel.cpp:794
msgid "Language not changed" msgid "Language not changed"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:782 #: src/view/PreferencesPanel.cpp:791
msgid "Language successfully changed, please go to another panel" msgid "Language successfully changed, please go to another panel"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:71 src/view/PreferencesPanel.cpp:192 #: src/view/PreferencesPanel.cpp:72 src/view/PreferencesPanel.cpp:196
#: src/view/PreferencesPanel.cpp:280 #: src/view/PreferencesPanel.cpp:284
msgid "Name" msgid "Name"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:754 #: src/view/PreferencesPanel.cpp:763
msgid "Name changed" msgid "Name changed"
msgstr "" msgstr ""
@ -360,7 +360,7 @@ msgid ""
"\n" "\n"
msgstr "" msgstr ""
#: src/view/SearchPanel.cpp:247 #: src/view/SearchPanel.cpp:248
msgid "No entry found" msgid "No entry found"
msgstr "" msgstr ""
@ -372,11 +372,11 @@ msgstr ""
msgid "Not checked" msgid "Not checked"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:193 #: src/view/PreferencesPanel.cpp:197
msgid "Number" msgid "Number"
msgstr "" msgstr ""
#: src/view/GenerateDialog.cpp:59 src/view/PasswordDialog.cpp:55 #: src/view/GenerateDialog.cpp:60 src/view/PasswordDialog.cpp:55
#: src/view/UsersDialog.cpp:51 #: src/view/UsersDialog.cpp:51
msgid "OK" msgid "OK"
msgstr "" msgstr ""
@ -385,11 +385,11 @@ msgstr ""
msgid "Old password " msgid "Old password "
msgstr "" msgstr ""
#: src/controller/KissCount.cpp:365 #: src/controller/KissCount.cpp:372
msgid "Operating exepense" msgid "Operating exepense"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:62 #: src/view/PreferencesPanel.cpp:63
msgid "Operation order" msgid "Operation order"
msgstr "" msgstr ""
@ -397,7 +397,7 @@ msgstr ""
msgid "Operations" msgid "Operations"
msgstr "" msgstr ""
#: src/controller/KissCount.cpp:369 #: src/controller/KissCount.cpp:376
msgid "Other" msgid "Other"
msgstr "" msgstr ""
@ -409,7 +409,7 @@ msgstr ""
msgid "Password changed" msgid "Password changed"
msgstr "" msgstr ""
#: src/view/wxUI.cpp:243 #: src/view/wxUI.cpp:245
msgid "" msgid ""
"Personal accounting software\n" "Personal accounting software\n"
"\n" "\n"
@ -417,15 +417,15 @@ msgid ""
"\n" "\n"
"Licenced under GNU GPL v3\n" "Licenced under GNU GPL v3\n"
"\n" "\n"
"Copyright (C) 2010 Grégory Soutadé" "Copyright (C) 2010-2011 Grégory Soutadé"
msgstr "" msgstr ""
#: src/view/PasswordDialog.cpp:78 #: src/view/PasswordDialog.cpp:78
msgid "Please retype new password" msgid "Please retype new password"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:180 src/view/PreferencesPanel.cpp:756 #: src/view/PreferencesPanel.cpp:184 src/view/PreferencesPanel.cpp:765
#: src/view/PreferencesPanel.cpp:790 #: src/view/PreferencesPanel.cpp:799
msgid "Preferences" msgid "Preferences"
msgstr "" msgstr ""
@ -433,7 +433,7 @@ msgstr ""
msgid "Query failed !\n" msgid "Query failed !\n"
msgstr "" msgstr ""
#: src/view/wxUI.cpp:250 #: src/view/wxUI.cpp:252
msgid "Quit KissCount ?" msgid "Quit KissCount ?"
msgstr "" msgstr ""
@ -441,8 +441,8 @@ msgstr ""
msgid "Remains" msgid "Remains"
msgstr "" msgstr ""
#: src/view/SearchPanel.cpp:83 src/view/SearchPanel.cpp:142 #: src/view/SearchPanel.cpp:83 src/view/SearchPanel.cpp:143
#: src/view/SearchPanel.cpp:258 #: src/view/SearchPanel.cpp:259
msgid "Search" msgid "Search"
msgstr "" msgstr ""
@ -450,11 +450,11 @@ msgstr ""
msgid "Serie 1" msgid "Serie 1"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:63 #: src/view/PreferencesPanel.cpp:64
msgid "Shared with" msgid "Shared with"
msgstr "" msgstr ""
#: src/view/StatsPanel.cpp:160 src/view/StatsPanel.cpp:339 #: src/view/StatsPanel.cpp:160 src/view/StatsPanel.cpp:358
msgid "Statistics" msgid "Statistics"
msgstr "" msgstr ""
@ -462,7 +462,7 @@ msgstr ""
msgid "To" msgid "To"
msgstr "" msgstr ""
#: src/view/GenerateDialog.cpp:52 #: src/view/GenerateDialog.cpp:53
msgid "To " msgid "To "
msgstr "" msgstr ""
@ -483,7 +483,7 @@ msgstr ""
msgid "Unable to open Database" msgid "Unable to open Database"
msgstr "" msgstr ""
#: src/controller/KissCount.cpp:367 #: src/controller/KissCount.cpp:374
msgid "Unexpected" msgid "Unexpected"
msgstr "" msgstr ""
@ -495,11 +495,11 @@ msgstr ""
msgid "Update failed !\n" msgid "Update failed !\n"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:58 #: src/view/PreferencesPanel.cpp:59
msgid "User" msgid "User"
msgstr "" msgstr ""
#: src/view/PreferencesPanel.cpp:748 src/view/UsersDialog.cpp:39 #: src/view/PreferencesPanel.cpp:757 src/view/UsersDialog.cpp:39
#: src/view/UsersDialog.cpp:120 #: src/view/UsersDialog.cpp:120
msgid "User " msgid "User "
msgstr "" msgstr ""
@ -508,58 +508,58 @@ msgstr ""
msgid "Users" msgid "Users"
msgstr "" msgstr ""
#: src/view/grid/GridAccount.cpp:1033 #: src/view/grid/GridAccount.cpp:1037
msgid "Warning" msgid "Warning"
msgstr "" msgstr ""
#: src/view/grid/GridAccount.cpp:1033 #: src/view/grid/GridAccount.cpp:1037
msgid "You made a debit on a blocked account" msgid "You made a debit on a blocked account"
msgstr "" msgstr ""
#: src/view/wxUI.cpp:123 #: src/view/wxUI.cpp:125
msgid "april" msgid "april"
msgstr "" msgstr ""
#: src/view/wxUI.cpp:127 #: src/view/wxUI.cpp:129
msgid "august" msgid "august"
msgstr "" msgstr ""
#: src/view/wxUI.cpp:131 #: src/view/wxUI.cpp:133
msgid "december" msgid "december"
msgstr "" msgstr ""
#: src/view/wxUI.cpp:121 #: src/view/wxUI.cpp:123
msgid "february" msgid "february"
msgstr "" msgstr ""
#: src/view/wxUI.cpp:120 #: src/view/wxUI.cpp:122
msgid "january" msgid "january"
msgstr "" msgstr ""
#: src/view/wxUI.cpp:126 #: src/view/wxUI.cpp:128
msgid "july" msgid "july"
msgstr "" msgstr ""
#: src/view/wxUI.cpp:125 #: src/view/wxUI.cpp:127
msgid "june" msgid "june"
msgstr "" msgstr ""
#: src/view/wxUI.cpp:122 #: src/view/wxUI.cpp:124
msgid "march" msgid "march"
msgstr "" msgstr ""
#: src/view/wxUI.cpp:124 #: src/view/wxUI.cpp:126
msgid "may" msgid "may"
msgstr "" msgstr ""
#: src/view/wxUI.cpp:130 #: src/view/wxUI.cpp:132
msgid "november" msgid "november"
msgstr "" msgstr ""
#: src/view/wxUI.cpp:129 #: src/view/wxUI.cpp:131
msgid "october" msgid "october"
msgstr "" msgstr ""
#: src/view/wxUI.cpp:128 #: src/view/wxUI.cpp:130
msgid "september" msgid "september"
msgstr "" msgstr ""

View File

@ -28,9 +28,35 @@
/* this is only to get definitions for memcpy(), ntohl() and htonl() */ /* this is only to get definitions for memcpy(), ntohl() and htonl() */
//#include "../git-compat-util.h" //#include "../git-compat-util.h"
#include <string.h> #include <string.h>
#include <arpa/inet.h>
#include "sha1.h" #include "sha1.h"
#ifndef WIN32
#include <arpa/inet.h>
#else
#if BYTE_ORDER == BIG_ENDIAN
#define htons(n) (n)
#define ntohs(n) (n)
#define htonl(n) (n)
#define ntohl(n) (n)
#else
#define htons(n) (((((unsigned short)(n) & 0xFF)) << 8) | (((unsigned short)(n) & 0xFF00) >> 8))
#define ntohs(n) (((((unsigned short)(n) & 0xFF)) << 8) | (((unsigned short)(n) & 0xFF00) >> 8))
#define htonl(n) (((((unsigned long)(n) & 0xFF)) << 24) | \
((((unsigned long)(n) & 0xFF00)) << 8) | \
((((unsigned long)(n) & 0xFF0000)) >> 8) | \
((((unsigned long)(n) & 0xFF000000)) >> 24))
#define ntohl(n) (((((unsigned long)(n) & 0xFF)) << 24) | \
((((unsigned long)(n) & 0xFF00)) << 8) | \
((((unsigned long)(n) & 0xFF0000)) >> 8) | \
((((unsigned long)(n) & 0xFF000000)) >> 24))
#endif
#endif
#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
/* /*

View File

@ -165,7 +165,7 @@ KissPanel* AccountPanel::CreatePanel()
wxBitmapButton* AccountPanel::GetButton(int id) wxBitmapButton* AccountPanel::GetButton(int id)
{ {
if (!_KissButton) if (!_KissButton)
_KissButton = new wxBitmapButton(_wxUI, id, wxBitmap(wxT(ACCOUNT_ICON)), wxDefaultPosition, wxSize(128, 128)); _KissButton = new wxBitmapButton(_wxUI, id, wxBitmap(wxT(ACCOUNT_ICON), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxSize(128, 128));
return _KissButton; return _KissButton;
} }

View File

@ -174,7 +174,7 @@ KissPanel* PreferencesPanel::CreatePanel()
wxBitmapButton* PreferencesPanel::GetButton(int id) wxBitmapButton* PreferencesPanel::GetButton(int id)
{ {
if (!_KissButton) if (!_KissButton)
_KissButton = new wxBitmapButton(_wxUI, id, wxBitmap(wxT(PREFS_ICON)), wxDefaultPosition, wxSize(128, 128)); _KissButton = new wxBitmapButton(_wxUI, id, wxBitmap(wxT(PREFS_ICON), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxSize(128, 128));
return _KissButton; return _KissButton;
} }
@ -348,7 +348,7 @@ void PreferencesPanel::InitLanguage(User* user)
for (i=0; i<NB_SUPPORTED_LANGUAGES; i++) for (i=0; i<NB_SUPPORTED_LANGUAGES; i++)
{ {
_language->Append(languages[i].name, wxBitmap(languages[i].icon)); _language->Append(languages[i].name, wxBitmap(languages[i].icon, wxBITMAP_TYPE_PNG));
if (languages[i].language == _wxUI->_language) if (languages[i].language == _wxUI->_language)
select = i; select = i;
} }

View File

@ -133,7 +133,7 @@ KissPanel* SearchPanel::CreatePanel()
wxBitmapButton* SearchPanel::GetButton(int id) wxBitmapButton* SearchPanel::GetButton(int id)
{ {
if (!_KissButton) if (!_KissButton)
_KissButton = new wxBitmapButton(_wxUI, id, wxBitmap(wxT(SEARCH_ICON)), wxDefaultPosition, wxSize(128, 128)); _KissButton = new wxBitmapButton(_wxUI, id, wxBitmap(wxT(SEARCH_ICON), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxSize(128, 128));
return _KissButton; return _KissButton;
} }

View File

@ -150,7 +150,7 @@ KissPanel* StatsPanel::CreatePanel()
wxBitmapButton* StatsPanel::GetButton(int id) wxBitmapButton* StatsPanel::GetButton(int id)
{ {
if (!_KissButton) if (!_KissButton)
_KissButton = new wxBitmapButton(_wxUI, id, wxBitmap(wxT(STATS_ICON)), wxDefaultPosition, wxSize(128, 128)); _KissButton = new wxBitmapButton(_wxUI, id, wxBitmap(wxT(STATS_ICON), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxSize(128, 128));
return _KissButton; return _KissButton;
} }

View File

@ -39,14 +39,17 @@ BEGIN_EVENT_TABLE(GridAccount, wxGrid)
EVT_GRID_CELL_LEFT_CLICK(GridAccount::OnCellLeftClick ) EVT_GRID_CELL_LEFT_CLICK(GridAccount::OnCellLeftClick )
END_EVENT_TABLE() END_EVENT_TABLE()
enum {TREE, DESCRIPTION, OP_DATE, DEBIT, CREDIT, CATEGORY, ACCOUNT, OP_DELETE, CHECKED, NUMBER_COLS_OPS};
enum {GRID_ID}; enum {GRID_ID};
GridAccount::GridAccount(KissCount* kiss, wxWindow *parent, wxWindowID id) : wxGrid(parent, id), _fixCosts(0), _week1(0), GridAccount::GridAccount(KissCount* kiss, wxWindow *parent, wxWindowID id) : wxGrid(parent, id), _fixCosts(0), _week1(0),
_week2(0), _week3(0), _week4(0), _parent(parent), _kiss(kiss), _week2(0), _week3(0), _week4(0), _parent(parent), _kiss(kiss),
_loadOperations(false), _loadOperations(false),
_curMonth(0), _curYear(0) _curMonth(0), _curYear(0)
{ {
wxBitmap deleteBitmap(wxT(DELETE_ICON)); wxBitmap deleteBitmap(wxT(DELETE_ICON), wxBITMAP_TYPE_PNG);
wxBitmap checkedBitmap(wxT(CHECKED_ICON)); wxBitmap checkedBitmap(wxT(CHECKED_ICON), wxBITMAP_TYPE_PNG);
DEFAULT_FONT(font); DEFAULT_FONT(font);
int i; int i;
User* user = _kiss->GetUser(); User* user = _kiss->GetUser();
@ -70,7 +73,7 @@ GridAccount::GridAccount(KissCount* kiss, wxWindow *parent, wxWindowID id) : wxG
SetReadOnly(0, i, true); SetReadOnly(0, i, true);
SetCellAlignment(0, i, wxALIGN_CENTRE, wxALIGN_CENTRE); SetCellAlignment(0, i, wxALIGN_CENTRE, wxALIGN_CENTRE);
} }
SetCellRenderer(0, DELETE, new wxGridCellBitmapRenderer(deleteBitmap)); SetCellRenderer(0, OP_DELETE, new wxGridCellBitmapRenderer(deleteBitmap));
SetCellRenderer(0, CHECKED, new wxGridCellBitmapRenderer(checkedBitmap)); SetCellRenderer(0, CHECKED, new wxGridCellBitmapRenderer(checkedBitmap));
_accounts = new wxString[user->GetAccountsNumber()]; _accounts = new wxString[user->GetAccountsNumber()];
@ -92,9 +95,9 @@ GridAccount::GridAccount(KissCount* kiss, wxWindow *parent, wxWindowID id) : wxG
AutoSizeColumn(TREE, false); AutoSizeColumn(TREE, false);
AutoSizeColumn(CATEGORY, false); AutoSizeColumn(CATEGORY, false);
AutoSizeColumn(DATE, false); AutoSizeColumn(OP_DATE, false);
AutoSizeColumn(ACCOUNT, false); AutoSizeColumn(ACCOUNT, false);
AutoSizeColumn(DELETE, false); AutoSizeColumn(OP_DELETE, false);
AutoSizeColumn(CHECKED, false); AutoSizeColumn(CHECKED, false);
} }
@ -226,9 +229,9 @@ void GridAccount::LoadOperations(std::vector<Operation>* operations, bool canAdd
AutoSizeColumn(TREE, false); AutoSizeColumn(TREE, false);
AutoSizeColumn(CATEGORY, false); AutoSizeColumn(CATEGORY, false);
AutoSizeColumn(DATE, false); AutoSizeColumn(OP_DATE, false);
AutoSizeColumn(ACCOUNT, false); AutoSizeColumn(ACCOUNT, false);
AutoSizeColumn(DELETE, false); AutoSizeColumn(OP_DELETE, false);
AutoSizeColumn(CHECKED, false); AutoSizeColumn(CHECKED, false);
_loadOperations = false; _loadOperations = false;
@ -302,7 +305,7 @@ void GridAccount::InsertOperation(User* user, Operation& op, int line, bool fix,
SetCellRenderer(line, TREE, new wxGridCellTreeButtonRenderer()); SetCellRenderer(line, TREE, new wxGridCellTreeButtonRenderer());
SetCellEditor(line, TREE, new wxGridCellTreeButtonEditor()); SetCellEditor(line, TREE, new wxGridCellTreeButtonEditor());
SetReadOnly(line, DATE, true); SetReadOnly(line, OP_DATE, true);
SetReadOnly(line, CREDIT, true); SetReadOnly(line, CREDIT, true);
SetReadOnly(line, DEBIT, true); SetReadOnly(line, DEBIT, true);
SetReadOnly(line, CATEGORY, true); SetReadOnly(line, CATEGORY, true);
@ -332,12 +335,12 @@ void GridAccount::InsertOperation(User* user, Operation& op, int line, bool fix,
{ {
cat = user->GetCategory(op.category); cat = user->GetCategory(op.category);
SetCellEditor(line, DATE, new CalendarEditor(op.day, month, year)); SetCellEditor(line, OP_DATE, new CalendarEditor(op.day, month, year));
description = op.description; description = op.description;
UNESCAPE_CHARS(description); UNESCAPE_CHARS(description);
SetCellValue(line, DESCRIPTION, description); SetCellValue(line, DESCRIPTION, description);
SetCellRenderer(line, DESCRIPTION, new wxGridCellTabStringRenderer ()); SetCellRenderer(line, DESCRIPTION, new wxGridCellTabStringRenderer ());
SetCellValue(line, DATE, wxString::Format(wxT("%02d/%02d/%d"), op.day+1, month+1, year)); SetCellValue(line, OP_DATE, wxString::Format(wxT("%02d/%02d/%d"), op.day+1, month+1, year));
if (op.amount < 0) if (op.amount < 0)
SetCellValue(line, DEBIT, wxString::Format(wxT("%.2lf"), -op.amount)); SetCellValue(line, DEBIT, wxString::Format(wxT("%.2lf"), -op.amount));
else else
@ -347,8 +350,8 @@ void GridAccount::InsertOperation(User* user, Operation& op, int line, bool fix,
SetCellValue(line, ACCOUNT, user->GetAccountName(op.account)); SetCellValue(line, ACCOUNT, user->GetAccountName(op.account));
if (!fix && !op.meta) if (!fix && !op.meta)
SetCellValue(line, CATEGORY, cat.name); SetCellValue(line, CATEGORY, cat.name);
SetCellRenderer(line, DELETE, new wxGridCellBoolRenderer ()); SetCellRenderer(line, OP_DELETE, new wxGridCellBoolRenderer ());
SetCellEditor(line, DELETE, new wxGridCellBoolEditor ()); SetCellEditor(line, OP_DELETE, new wxGridCellBoolEditor ());
SetCellRenderer(line, CHECKED, new wxGridCellBoolRenderer ()); SetCellRenderer(line, CHECKED, new wxGridCellBoolRenderer ());
SetCellEditor(line, CHECKED, new wxGridCellFastBoolEditor ()); SetCellEditor(line, CHECKED, new wxGridCellFastBoolEditor ());
@ -391,16 +394,16 @@ void GridAccount::InsertOperation(User* user, Operation& op, int line, bool fix,
} }
else else
{ {
SetCellEditor(line, DATE, new CalendarEditor(0, month, year)); SetCellEditor(line, OP_DATE, new CalendarEditor(0, month, year));
if (curDate.GetMonth() == month && if (curDate.GetMonth() == month &&
curDate.GetYear() == year) curDate.GetYear() == year)
{ {
if (!fix) if (!fix)
SetCellValue(line, DATE, wxString::Format(wxT("%02d/%02d/%d"), curDate.GetDay(), month+1, year)); SetCellValue(line, OP_DATE, wxString::Format(wxT("%02d/%02d/%d"), curDate.GetDay(), month+1, year));
SetCellEditor(line, DATE, new CalendarEditor(curDate.GetDay()-1, month, year)); SetCellEditor(line, OP_DATE, new CalendarEditor(curDate.GetDay()-1, month, year));
} }
else else
SetCellEditor(line, DATE, new CalendarEditor(0, month, year)); SetCellEditor(line, OP_DATE, new CalendarEditor(0, month, year));
if (fix) if (fix)
{ {
@ -412,13 +415,13 @@ void GridAccount::InsertOperation(User* user, Operation& op, int line, bool fix,
} }
SetReadOnly(line, CHECKED, true); SetReadOnly(line, CHECKED, true);
SetReadOnly(line, DELETE, true); SetReadOnly(line, OP_DELETE, true);
} }
SetCellAlignment(line, DATE, wxALIGN_CENTRE, wxALIGN_CENTRE); SetCellAlignment(line, OP_DATE, wxALIGN_CENTRE, wxALIGN_CENTRE);
SetCellAlignment(line, DEBIT, wxALIGN_RIGHT, wxALIGN_CENTRE); SetCellAlignment(line, DEBIT, wxALIGN_RIGHT, wxALIGN_CENTRE);
SetCellAlignment(line, CREDIT, wxALIGN_RIGHT, wxALIGN_CENTRE); SetCellAlignment(line, CREDIT, wxALIGN_RIGHT, wxALIGN_CENTRE);
SetCellAlignment(line, DELETE, wxALIGN_CENTRE, wxALIGN_CENTRE); SetCellAlignment(line, OP_DELETE, wxALIGN_CENTRE, wxALIGN_CENTRE);
SetCellAlignment(line, CHECKED, wxALIGN_CENTRE, wxALIGN_CENTRE); SetCellAlignment(line, CHECKED, wxALIGN_CENTRE, wxALIGN_CENTRE);
AutoSizeRow(line); AutoSizeRow(line);
@ -430,7 +433,7 @@ void GridAccount::InsertOperation(User* user, Operation& op, int line, bool fix,
// From http://nomadsync.cvs.sourceforge.net/nomadsync/nomadsync/src/ // From http://nomadsync.cvs.sourceforge.net/nomadsync/nomadsync/src/
void GridAccount::OnCellLeftClick(wxGridEvent& evt) void GridAccount::OnCellLeftClick(wxGridEvent& evt)
{ {
if (evt.GetCol() != TREE && evt.GetCol() != DELETE && evt.GetCol() != CHECKED) { evt.Skip() ; return;} if (evt.GetCol() != TREE && evt.GetCol() != OP_DELETE && evt.GetCol() != CHECKED) { evt.Skip() ; return;}
// This forces the cell to go into edit mode directly // This forces the cell to go into edit mode directly
//m_waitForSlowClick = TRUE; //m_waitForSlowClick = TRUE;
@ -692,7 +695,7 @@ void GridAccount::OnOperationModified(wxGridEvent& event)
op_complete--; op_complete--;
} }
value = GetCellValue(row, DATE); value = GetCellValue(row, OP_DATE);
if (value.Length()) if (value.Length())
{ {
date.ParseFormat(value, wxT("%d/%m/%Y")); date.ParseFormat(value, wxT("%d/%m/%Y"));
@ -821,7 +824,7 @@ void GridAccount::OnOperationModified(wxGridEvent& event)
} }
} }
if (col == DELETE) if (col == OP_DELETE)
{ {
wxMessageDialog dialog(this, _("Are you sure want to delete : \n")+new_op.description, wxT("KissCount"), wxYES_NO); wxMessageDialog dialog(this, _("Are you sure want to delete : \n")+new_op.description, wxT("KissCount"), wxYES_NO);
if (dialog.ShowModal() == wxID_NO) if (dialog.ShowModal() == wxID_NO)
@ -835,7 +838,7 @@ void GridAccount::OnOperationModified(wxGridEvent& event)
// Modify a fix operation // Modify a fix operation
if (row < _fixCosts) if (row < _fixCosts)
{ {
if (col == DELETE) if (col == OP_DELETE)
{ {
if (cur_op.parent.Length()) if (cur_op.parent.Length())
user->UnGroup(_displayedOperations[row]); user->UnGroup(_displayedOperations[row]);
@ -943,7 +946,7 @@ void GridAccount::OnOperationModified(wxGridEvent& event)
new_op.parent = cur_op.parent; new_op.parent = cur_op.parent;
new_op.childs = cur_op.childs; new_op.childs = cur_op.childs;
if (col == DELETE) if (col == OP_DELETE)
{ {
if (cur_op.parent.Length()) if (cur_op.parent.Length())
user->UnGroup(_displayedOperations[row]); user->UnGroup(_displayedOperations[row]);
@ -1078,7 +1081,7 @@ void GridAccount::OnOperationModified(wxGridEvent& event)
SET_ROW_FONT(row, font); SET_ROW_FONT(row, font);
} }
SetCellValue(row, DATE, wxString::Format(wxT("%02d/%02d/%d"), new_op.day+1, _curMonth+1, _curYear)); SetCellValue(row, OP_DATE, wxString::Format(wxT("%02d/%02d/%d"), new_op.day+1, _curMonth+1, _curYear));
if (!_displayedOperations[row].amount) if (!_displayedOperations[row].amount)
{ {

View File

@ -35,8 +35,6 @@
class KissCount; class KissCount;
enum {TREE, DESCRIPTION, DATE, DEBIT, CREDIT, CATEGORY, ACCOUNT, DELETE, CHECKED, NUMBER_COLS_OPS};
class GridAccount : public wxGrid class GridAccount : public wxGrid
{ {
public: public:

View File

@ -28,15 +28,15 @@
#define DEFAULT_FONT_SIZE 12 #define DEFAULT_FONT_SIZE 12
#define DEFAULT_FONT(font_name) wxFont font_name(DEFAULT_FONT_SIZE, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, DEFAULT_FONT_NAME); #define DEFAULT_FONT(font_name) wxFont font_name(DEFAULT_FONT_SIZE, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, DEFAULT_FONT_NAME);
#define DELETE_ICON "ressources/icons/process-stop.png" #define DELETE_ICON "./ressources/icons/process-stop.png"
#define CHECKED_ICON "ressources/icons/tick-icon.png" #define CHECKED_ICON "./ressources/icons/tick-icon.png"
#define ACCOUNT_ICON "ressources/icons/administrator-icon.png" #define ACCOUNT_ICON "./ressources/icons/administrator-icon.png"
#define STATS_ICON "ressources/icons/chart-icon.png" #define STATS_ICON "./ressources/icons/chart-icon.png"
#define SEARCH_ICON "ressources/icons/Search-icon.png" #define SEARCH_ICON "./ressources/icons/Search-icon.png"
#define PREFS_ICON "ressources/icons/options-icon.png" #define PREFS_ICON "./ressources/icons/options-icon.png"
#define CHANGE_USER_ICON "ressources/icons/Clients-icon.png" #define CHANGE_USER_ICON "./ressources/icons/Clients-icon.png"
#define ABOUT_ICON "ressources/icons/windows-users-icon.png" #define ABOUT_ICON "./ressources/icons/windows-users-icon.png"
#define QUIT_ICON "ressources/icons/system-log-out.png" #define QUIT_ICON "./ressources/icons/system-log-out.png"
#include "KissPanel.h" #include "KissPanel.h"

View File

@ -45,6 +45,8 @@ wxUI::wxUI(KissCount* kiss, const wxString& title, const wxPoint& pos, const wxS
: wxFrame(NULL, -1, title, pos, size), _kiss(kiss), : wxFrame(NULL, -1, title, pos, size), _kiss(kiss),
_curPanel(NULL), _locale(NULL), _needReload(false) _curPanel(NULL), _locale(NULL), _needReload(false)
{ {
wxInitAllImageHandlers();
_vbox = new wxBoxSizer(wxVERTICAL); _vbox = new wxBoxSizer(wxVERTICAL);
_buttonsBox = new wxBoxSizer(wxHORIZONTAL); _buttonsBox = new wxBoxSizer(wxHORIZONTAL);
// ButtonPanel* buttons = new ButtonPanel(_kiss, this); // ButtonPanel* buttons = new ButtonPanel(_kiss, this);
@ -61,9 +63,9 @@ wxUI::wxUI(KissCount* kiss, const wxString& title, const wxPoint& pos, const wxS
// CreateStatusBar(); // CreateStatusBar();
// SetStatusText( wxT("Welcome to wxWidgets!") ); // SetStatusText( wxT("Welcome to wxWidgets!") );
_buttonsBox->Add(new wxBitmapButton(this, BUTTON_CHANGE_USER_ID, wxBitmap(wxT(CHANGE_USER_ICON)), wxDefaultPosition, wxSize(128, 128))); _buttonsBox->Add(new wxBitmapButton(this, BUTTON_CHANGE_USER_ID, wxBitmap(wxT(CHANGE_USER_ICON), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxSize(128, 128)));
_buttonsBox->Add(new wxBitmapButton(this, BUTTON_ABOUT_ID, wxBitmap(wxT(ABOUT_ICON)), wxDefaultPosition, wxSize(128, 128))); _buttonsBox->Add(new wxBitmapButton(this, BUTTON_ABOUT_ID, wxBitmap(wxT(ABOUT_ICON), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxSize(128, 128)));
_buttonsBox->Add(new wxBitmapButton(this, BUTTON_QUIT_ID, wxBitmap(wxT(QUIT_ICON)), wxDefaultPosition, wxSize(128, 128))); _buttonsBox->Add(new wxBitmapButton(this, BUTTON_QUIT_ID, wxBitmap(wxT(QUIT_ICON), wxBITMAP_TYPE_PNG), wxDefaultPosition, wxSize(128, 128)));
SetSizer(_vbox); SetSizer(_vbox);

View File

@ -33,6 +33,9 @@
#include "grid/wxGridCellButtonRenderer.h" #include "grid/wxGridCellButtonRenderer.h"
#include "grid/wxGridCellButtonEditor.h" #include "grid/wxGridCellButtonEditor.h"
#undef _
#define _(s) wxString(wxGetTranslation(s))
class KissCount; class KissCount;
class AccountPanel; class AccountPanel;
class PreferencesPanel; class PreferencesPanel;