From c86f5b8a45cca158b46a4fe3b48280e88ce9aba1 Mon Sep 17 00:00:00 2001 From: John Darrington Date: Sat, 1 Dec 2007 04:42:19 +0000 Subject: [PATCH] Implemented the FREQUENCIES dialog. --- po/de.po | 241 ++++++++++------- po/en_GB.po | 233 ++++++++++------- src/ui/gui/ChangeLog | 14 + src/ui/gui/automake.mk | 5 + src/ui/gui/checkbox-treeview.c | 127 +++++++++ src/ui/gui/checkbox-treeview.h | 43 ++++ src/ui/gui/data-editor.c | 16 ++ src/ui/gui/data-editor.glade | 2 +- src/ui/gui/data-editor.h | 1 + src/ui/gui/descriptives-dialog.c | 125 +-------- src/ui/gui/frequencies-dialog.c | 418 ++++++++++++++++++++++++++++++ src/ui/gui/frequencies-dialog.h | 27 ++ src/ui/gui/frequencies.glade | 429 +++++++++++++++++++++++++++++++ 13 files changed, 1393 insertions(+), 288 deletions(-) create mode 100644 src/ui/gui/checkbox-treeview.c create mode 100644 src/ui/gui/checkbox-treeview.h create mode 100644 src/ui/gui/frequencies-dialog.c create mode 100644 src/ui/gui/frequencies-dialog.h create mode 100644 src/ui/gui/frequencies.glade diff --git a/po/de.po b/po/de.po index 22304c4d..37c7d8f0 100644 --- a/po/de.po +++ b/po/de.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: PSPP 0.4.3\n" "Report-Msgid-Bugs-To: pspp-dev@gnu.org\n" -"POT-Creation-Date: 2007-11-29 20:13+0900\n" +"POT-Creation-Date: 2007-11-30 16:17+0900\n" "PO-Revision-Date: 2006-07-28 19:32+0800\n" "Last-Translator: John Darrington \n" "Language-Team: German \n" @@ -2665,7 +2665,7 @@ msgstr "" #: src/language/stats/crosstabs.q:1151 src/language/stats/crosstabs.q:1178 #: src/language/stats/crosstabs.q:1198 src/language/stats/crosstabs.q:1219 -#: src/language/stats/examine.q:1423 src/ui/gui/descriptives-dialog.c:276 +#: src/language/stats/examine.q:1423 src/ui/gui/checkbox-treeview.c:115 msgid "Statistic" msgstr "" @@ -2859,7 +2859,8 @@ msgstr "" #: src/language/stats/frequencies.q:123 src/language/stats/npar-summary.c:125 #: src/language/stats/oneway.q:392 src/language/stats/t-test.q:683 #: src/language/stats/t-test.q:706 src/language/stats/t-test.q:830 -#: src/language/stats/t-test.q:1168 src/ui/gui/descriptives-dialog.c:52 +#: src/language/stats/t-test.q:1168 src/ui/gui/descriptives-dialog.c:40 +#: src/ui/gui/frequencies-dialog.c:41 msgid "Mean" msgstr "" @@ -2872,12 +2873,14 @@ msgid "Std Dev" msgstr "" #: src/language/stats/descriptives.c:105 src/language/stats/examine.q:1604 -#: src/language/stats/frequencies.q:128 src/ui/gui/descriptives-dialog.c:59 +#: src/language/stats/frequencies.q:128 src/ui/gui/descriptives-dialog.c:47 +#: src/ui/gui/frequencies-dialog.c:46 msgid "Variance" msgstr "" #: src/language/stats/descriptives.c:106 src/language/stats/examine.q:1711 -#: src/language/stats/frequencies.q:129 src/ui/gui/descriptives-dialog.c:60 +#: src/language/stats/frequencies.q:129 src/ui/gui/descriptives-dialog.c:48 +#: src/ui/gui/frequencies-dialog.c:51 msgid "Kurtosis" msgstr "" @@ -2886,7 +2889,8 @@ msgid "S E Kurt" msgstr "" #: src/language/stats/descriptives.c:108 src/language/stats/examine.q:1691 -#: src/language/stats/frequencies.q:131 src/ui/gui/descriptives-dialog.c:61 +#: src/language/stats/frequencies.q:131 src/ui/gui/descriptives-dialog.c:49 +#: src/ui/gui/frequencies-dialog.c:47 msgid "Skewness" msgstr "" @@ -2895,24 +2899,27 @@ msgid "S E Skew" msgstr "" #: src/language/stats/descriptives.c:110 src/language/stats/examine.q:1652 -#: src/language/stats/frequencies.q:133 src/ui/gui/descriptives-dialog.c:56 +#: src/language/stats/frequencies.q:133 src/ui/gui/descriptives-dialog.c:44 +#: src/ui/gui/frequencies-dialog.c:49 msgid "Range" msgstr "" #: src/language/stats/descriptives.c:111 src/language/stats/examine.q:1629 #: src/language/stats/frequencies.q:134 src/language/stats/npar-summary.c:131 -#: src/language/stats/oneway.q:404 src/ui/gui/descriptives-dialog.c:54 +#: src/language/stats/oneway.q:404 src/ui/gui/descriptives-dialog.c:42 +#: src/ui/gui/frequencies-dialog.c:43 msgid "Minimum" msgstr "" #: src/language/stats/descriptives.c:112 src/language/stats/examine.q:1640 #: src/language/stats/frequencies.q:135 src/language/stats/npar-summary.c:134 -#: src/language/stats/oneway.q:405 src/ui/gui/descriptives-dialog.c:55 +#: src/language/stats/oneway.q:405 src/ui/gui/descriptives-dialog.c:43 +#: src/ui/gui/frequencies-dialog.c:44 msgid "Maximum" msgstr "" #: src/language/stats/descriptives.c:113 src/language/stats/frequencies.q:136 -#: src/ui/gui/descriptives-dialog.c:57 +#: src/ui/gui/descriptives-dialog.c:45 src/ui/gui/frequencies-dialog.c:54 msgid "Sum" msgstr "" @@ -3019,6 +3026,7 @@ msgid "5%% Trimmed Mean" msgstr "" #: src/language/stats/examine.q:1582 src/language/stats/frequencies.q:125 +#: src/ui/gui/frequencies-dialog.c:53 msgid "Median" msgstr "" @@ -3147,7 +3155,7 @@ msgstr "" msgid "S.E. Mean" msgstr "" -#: src/language/stats/frequencies.q:126 +#: src/language/stats/frequencies.q:126 src/ui/gui/frequencies-dialog.c:50 msgid "Mode" msgstr "" @@ -4397,286 +4405,295 @@ msgstr "Spalten" msgid "Style of bevel around the custom entry button" msgstr "" -#: src/ui/gui/data-editor.c:163 +#: src/ui/gui/data-editor.c:164 msgid "Transformations Pending" msgstr "" -#: src/ui/gui/data-editor.c:425 +#: src/ui/gui/data-editor.c:426 #, fuzzy msgid "Labels" msgstr "Kennsatz" -#: src/ui/gui/data-editor.c:426 +#: src/ui/gui/data-editor.c:427 msgid "Show/hide value labels" msgstr "" -#: src/ui/gui/data-editor.c:444 src/ui/gui/data-editor.c:461 -#: src/ui/gui/data-editor.c:1830 src/ui/gui/data-editor.c:1883 +#: src/ui/gui/data-editor.c:445 src/ui/gui/data-editor.c:462 +#: src/ui/gui/data-editor.c:1846 src/ui/gui/data-editor.c:1899 msgid "Clear" msgstr "" -#: src/ui/gui/data-editor.c:445 +#: src/ui/gui/data-editor.c:446 msgid "Delete the cases at the selected position(s)" msgstr "" -#: src/ui/gui/data-editor.c:462 +#: src/ui/gui/data-editor.c:463 msgid "Delete the variables at the selected position(s)" msgstr "" -#: src/ui/gui/data-editor.c:476 src/ui/gui/data-editor.c:1827 +#: src/ui/gui/data-editor.c:477 src/ui/gui/data-editor.c:1843 #: src/ui/gui/data-editor.glade:137 src/ui/gui/data-editor.glade:808 #, fuzzy msgid "Insert Variable" msgstr "Variableansicht" -#: src/ui/gui/data-editor.c:477 +#: src/ui/gui/data-editor.c:478 msgid "Create a new variable at the current position" msgstr "" -#: src/ui/gui/data-editor.c:495 src/ui/gui/data-editor.c:1880 +#: src/ui/gui/data-editor.c:496 src/ui/gui/data-editor.c:1896 #: src/ui/gui/data-editor.glade:796 #, fuzzy msgid "Insert Case" msgstr "_Stecken" -#: src/ui/gui/data-editor.c:496 +#: src/ui/gui/data-editor.c:497 msgid "Create a new case at the current position" msgstr "" -#: src/ui/gui/data-editor.c:516 +#: src/ui/gui/data-editor.c:517 #, fuzzy msgid "Goto Case" msgstr "_Stecken" -#: src/ui/gui/data-editor.c:517 +#: src/ui/gui/data-editor.c:518 msgid "Jump to a Case in the Data Sheet" msgstr "" -#: src/ui/gui/data-editor.c:536 +#: src/ui/gui/data-editor.c:537 #, fuzzy msgid "Weights" msgstr "Rechts" -#: src/ui/gui/data-editor.c:537 +#: src/ui/gui/data-editor.c:538 msgid "Weight cases by variable" msgstr "" -#: src/ui/gui/data-editor.c:546 src/ui/gui/data-editor.glade:312 +#: src/ui/gui/data-editor.c:547 src/ui/gui/data-editor.glade:312 msgid "Transpose" msgstr "" -#: src/ui/gui/data-editor.c:547 +#: src/ui/gui/data-editor.c:548 msgid "Transpose the cases with the variables" msgstr "" -#: src/ui/gui/data-editor.c:558 +#: src/ui/gui/data-editor.c:559 #, fuzzy msgid "Split" msgstr "Alle Datei" -#: src/ui/gui/data-editor.c:559 +#: src/ui/gui/data-editor.c:560 msgid "Split the active file" msgstr "" -#: src/ui/gui/data-editor.c:569 +#: src/ui/gui/data-editor.c:570 msgid "Sort" msgstr "" -#: src/ui/gui/data-editor.c:570 +#: src/ui/gui/data-editor.c:571 msgid "Sort cases in the active file" msgstr "" -#: src/ui/gui/data-editor.c:578 src/ui/gui/data-editor.glade:347 +#: src/ui/gui/data-editor.c:579 src/ui/gui/data-editor.glade:347 #: src/ui/gui/data-editor.glade:851 msgid "Select Cases" msgstr "" -#: src/ui/gui/data-editor.c:579 +#: src/ui/gui/data-editor.c:580 msgid "Select cases from the active file" msgstr "" -#: src/ui/gui/data-editor.c:588 +#: src/ui/gui/data-editor.c:589 msgid "Compute" msgstr "" -#: src/ui/gui/data-editor.c:589 +#: src/ui/gui/data-editor.c:590 #, fuzzy msgid "Compute new values for a variable" msgstr "Unpassend Wert für Variable" -#: src/ui/gui/data-editor.c:597 +#: src/ui/gui/data-editor.c:598 msgid "Oneway _ANOVA" msgstr "" -#: src/ui/gui/data-editor.c:598 +#: src/ui/gui/data-editor.c:599 msgid "Perform one way analysis of variance" msgstr "" -#: src/ui/gui/data-editor.c:606 src/ui/gui/data-editor.glade:503 +#: src/ui/gui/data-editor.c:607 src/ui/gui/data-editor.glade:503 msgid "_Independent Samples T Test" msgstr "" -#: src/ui/gui/data-editor.c:607 +#: src/ui/gui/data-editor.c:608 msgid "Calculate T Test for samples from independent groups" msgstr "" -#: src/ui/gui/data-editor.c:616 +#: src/ui/gui/data-editor.c:617 #, fuzzy msgid "Data File Comments" msgstr "Datei Fehler" -#: src/ui/gui/data-editor.c:617 +#: src/ui/gui/data-editor.c:618 msgid "Commentary text for the data file" msgstr "" -#: src/ui/gui/data-editor.c:625 src/ui/gui/data-editor.glade:776 +#: src/ui/gui/data-editor.c:626 src/ui/gui/data-editor.glade:776 msgid "Find" msgstr "" -#: src/ui/gui/data-editor.c:626 +#: src/ui/gui/data-editor.c:627 #, fuzzy msgid "Find Case" msgstr "_Stecken" -#: src/ui/gui/data-editor.c:635 src/ui/gui/data-editor.glade:384 +#: src/ui/gui/data-editor.c:636 src/ui/gui/data-editor.glade:384 #, fuzzy msgid "Ran_k Cases" msgstr "_Stecken" -#: src/ui/gui/data-editor.c:636 +#: src/ui/gui/data-editor.c:637 #, fuzzy msgid "Rank Cases" msgstr "_Stecken" -#: src/ui/gui/data-editor.c:645 src/ui/gui/data-editor.glade:396 +#: src/ui/gui/data-editor.c:646 src/ui/gui/data-editor.glade:396 #, fuzzy msgid "Recode into _Same Variables" msgstr "Variableansicht" -#: src/ui/gui/data-editor.c:646 +#: src/ui/gui/data-editor.c:647 #, fuzzy msgid "Recode values into the same Variables" msgstr "Unpassend Wert für Variable" -#: src/ui/gui/data-editor.c:655 src/ui/gui/data-editor.glade:403 +#: src/ui/gui/data-editor.c:656 src/ui/gui/data-editor.glade:403 msgid "Recode into _Different Variables" msgstr "" -#: src/ui/gui/data-editor.c:656 +#: src/ui/gui/data-editor.c:657 msgid "Recode values into different Variables" msgstr "" -#: src/ui/gui/data-editor.c:665 src/ui/gui/data-editor.glade:286 +#: src/ui/gui/data-editor.c:666 src/ui/gui/data-editor.glade:286 #: src/ui/gui/data-editor.glade:755 msgid "Variables" msgstr "Variableansicht" -#: src/ui/gui/data-editor.c:666 +#: src/ui/gui/data-editor.c:667 #, fuzzy msgid "Jump to Variable" msgstr "Variableansicht" -#: src/ui/gui/data-editor.c:674 src/ui/gui/data-editor.glade:457 +#: src/ui/gui/data-editor.c:675 src/ui/gui/data-editor.glade:457 #: src/ui/gui/oneway.glade:179 msgid "_Descriptives" msgstr "" -#: src/ui/gui/data-editor.c:675 +#: src/ui/gui/data-editor.c:676 msgid "Calculate descriptive statistics (mean, variance, ...)" msgstr "" -#: src/ui/gui/data-editor.c:1108 +#: src/ui/gui/data-editor.c:685 src/ui/gui/data-editor.glade:449 +#, fuzzy +msgid "_Frequencies" +msgstr "Variableansicht" + +#: src/ui/gui/data-editor.c:686 +msgid "Generate frequency statistics" +msgstr "" + +#: src/ui/gui/data-editor.c:1124 msgid "Font Selection" msgstr "Schriftwahlung" -#: src/ui/gui/data-editor.c:1315 +#: src/ui/gui/data-editor.c:1331 msgid "No Split" msgstr "" -#: src/ui/gui/data-editor.c:1324 +#: src/ui/gui/data-editor.c:1340 #, fuzzy msgid "Split by " msgstr "Alle Datei" -#: src/ui/gui/data-editor.c:1349 +#: src/ui/gui/data-editor.c:1365 msgid "Filter off" msgstr "" -#: src/ui/gui/data-editor.c:1362 +#: src/ui/gui/data-editor.c:1378 #, c-format msgid "Filter by %s" msgstr "" -#: src/ui/gui/data-editor.c:1380 +#: src/ui/gui/data-editor.c:1396 msgid "Weights off" msgstr "" -#: src/ui/gui/data-editor.c:1393 +#: src/ui/gui/data-editor.c:1409 #, c-format msgid "Weight by %s" msgstr "" -#: src/ui/gui/data-editor.c:1416 src/ui/gui/data-editor.c:1650 +#: src/ui/gui/data-editor.c:1432 src/ui/gui/data-editor.c:1666 #: src/ui/gui/data-editor.glade:667 msgid "Open" msgstr "Öffen" -#: src/ui/gui/data-editor.c:1417 +#: src/ui/gui/data-editor.c:1433 msgid "Open a data file" msgstr "" -#: src/ui/gui/data-editor.c:1425 src/ui/gui/data-editor.c:1532 +#: src/ui/gui/data-editor.c:1441 src/ui/gui/data-editor.c:1548 #: src/ui/gui/data-editor.glade:677 msgid "Save" msgstr "Speichen" -#: src/ui/gui/data-editor.c:1426 src/ui/gui/data-editor.c:1436 +#: src/ui/gui/data-editor.c:1442 src/ui/gui/data-editor.c:1452 #, fuzzy msgid "Save data to file" msgstr "Speichern unter" -#: src/ui/gui/data-editor.c:1435 +#: src/ui/gui/data-editor.c:1451 #, fuzzy msgid "Save As" msgstr "Speichern unter" -#: src/ui/gui/data-editor.c:1444 src/ui/gui/recode-dialog.c:931 +#: src/ui/gui/data-editor.c:1460 src/ui/gui/recode-dialog.c:931 #: src/ui/gui/recode-dialog.c:1025 msgid "New" msgstr "" -#: src/ui/gui/data-editor.c:1445 +#: src/ui/gui/data-editor.c:1461 msgid "New data file" msgstr "" -#: src/ui/gui/data-editor.c:1540 src/ui/gui/data-editor.c:1658 +#: src/ui/gui/data-editor.c:1556 src/ui/gui/data-editor.c:1674 msgid "System Files (*.sav)" msgstr "Systemedatein (*.sav)" -#: src/ui/gui/data-editor.c:1546 src/ui/gui/data-editor.c:1664 +#: src/ui/gui/data-editor.c:1562 src/ui/gui/data-editor.c:1680 msgid "Portable Files (*.por) " msgstr "Tragbardatein (*.por)" -#: src/ui/gui/data-editor.c:1552 src/ui/gui/data-editor.c:1670 +#: src/ui/gui/data-editor.c:1568 src/ui/gui/data-editor.c:1686 #: src/ui/gui/syntax-editor.c:138 src/ui/gui/syntax-editor.c:522 msgid "All Files" msgstr "Alle Datei" -#: src/ui/gui/data-editor.c:1560 +#: src/ui/gui/data-editor.c:1576 #, fuzzy msgid "System File" msgstr "Systemedatein (*.sav)" -#: src/ui/gui/data-editor.c:1565 +#: src/ui/gui/data-editor.c:1581 #, fuzzy msgid "Portable File" msgstr "Tragbardatein (*.por)" -#: src/ui/gui/data-editor.c:1820 +#: src/ui/gui/data-editor.c:1836 msgid "Sort Ascending" msgstr "" -#: src/ui/gui/data-editor.c:1823 +#: src/ui/gui/data-editor.c:1839 msgid "Sort Descending" msgstr "" @@ -4805,11 +4822,6 @@ msgstr "" msgid "_Descriptive Statistics" msgstr "" -#: src/ui/gui/data-editor.glade:449 -#, fuzzy -msgid "_Frequencies" -msgstr "Variableansicht" - #: src/ui/gui/data-editor.glade:465 msgid "_Explore" msgstr "" @@ -5033,16 +5045,16 @@ msgstr "_Kein Lösewerten" msgid "_Discrete missing values" msgstr "_Diskret Lösewerten" -#: src/ui/gui/descriptives-dialog.c:53 +#: src/ui/gui/descriptives-dialog.c:41 src/ui/gui/frequencies-dialog.c:42 msgid "Standard deviation" msgstr "" -#: src/ui/gui/descriptives-dialog.c:58 +#: src/ui/gui/descriptives-dialog.c:46 #, fuzzy msgid "Standard error" msgstr "Skript Fehler" -#: src/ui/gui/descriptives-dialog.glade:122 +#: src/ui/gui/descriptives-dialog.glade:122 src/ui/gui/frequencies.glade:139 msgid "Statistics:" msgstr "" @@ -5067,6 +5079,64 @@ msgstr "" msgid "Bad regular expression: %s" msgstr "" +#: src/ui/gui/frequencies-dialog.c:45 +#, fuzzy +msgid "Standard error of the mean" +msgstr "Skript Fehler" + +#: src/ui/gui/frequencies-dialog.c:48 +#, fuzzy +msgid "Standard error of the skewness" +msgstr "Skript Fehler" + +#: src/ui/gui/frequencies-dialog.c:52 +#, fuzzy +msgid "Standard error of the kurtosis" +msgstr "Skript Fehler" + +#: src/ui/gui/frequencies.glade:98 src/ui/gui/psppire.glade:265 +#: src/ui/gui/rank.glade:67 +#, fuzzy +msgid "Variable(s):" +msgstr "Variableansicht" + +#: src/ui/gui/frequencies.glade:168 +#, fuzzy +msgid "Display Frequency Table" +msgstr "Variableansicht" + +#: src/ui/gui/frequencies.glade:185 +msgid "Format..." +msgstr "" + +#: src/ui/gui/frequencies.glade:264 +msgid "Ascending Order" +msgstr "" + +#: src/ui/gui/frequencies.glade:275 +msgid "Descending Order" +msgstr "" + +#: src/ui/gui/frequencies.glade:290 +msgid "Ascending Counts" +msgstr "" + +#: src/ui/gui/frequencies.glade:305 +msgid "Descending Counts" +msgstr "" + +#: src/ui/gui/frequencies.glade:323 +msgid "Order by" +msgstr "" + +#: src/ui/gui/frequencies.glade:355 +msgid "Supress tables with more than N categories" +msgstr "" + +#: src/ui/gui/frequencies.glade:371 +msgid "Maximum no of categories" +msgstr "" + #: src/ui/gui/helper.c:140 msgid "Sorry. The help system hasn't yet been implemented." msgstr "Es gibt noch nicht kein Helpsysteme. Schade!" @@ -5273,11 +5343,6 @@ msgstr "Variableansicht" msgid "Current Status: " msgstr "" -#: src/ui/gui/psppire.glade:265 src/ui/gui/rank.glade:67 -#, fuzzy -msgid "Variable(s):" -msgstr "Variableansicht" - #: src/ui/gui/psppire.glade:314 #, fuzzy msgid "Name Variable:" diff --git a/po/en_GB.po b/po/en_GB.po index 54fd361a..1d9eb170 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PSPP 0.4.3\n" "Report-Msgid-Bugs-To: pspp-dev@gnu.org\n" -"POT-Creation-Date: 2007-11-29 20:13+0900\n" +"POT-Creation-Date: 2007-11-30 16:17+0900\n" "PO-Revision-Date: 2007-09-15 08:29+0800\n" "Last-Translator: John Darrington \n" "Language-Team: John Darrington \n" @@ -2656,7 +2656,7 @@ msgstr "" #: src/language/stats/crosstabs.q:1151 src/language/stats/crosstabs.q:1178 #: src/language/stats/crosstabs.q:1198 src/language/stats/crosstabs.q:1219 -#: src/language/stats/examine.q:1423 src/ui/gui/descriptives-dialog.c:276 +#: src/language/stats/examine.q:1423 src/ui/gui/checkbox-treeview.c:115 msgid "Statistic" msgstr "" @@ -2850,7 +2850,8 @@ msgstr "" #: src/language/stats/frequencies.q:123 src/language/stats/npar-summary.c:125 #: src/language/stats/oneway.q:392 src/language/stats/t-test.q:683 #: src/language/stats/t-test.q:706 src/language/stats/t-test.q:830 -#: src/language/stats/t-test.q:1168 src/ui/gui/descriptives-dialog.c:52 +#: src/language/stats/t-test.q:1168 src/ui/gui/descriptives-dialog.c:40 +#: src/ui/gui/frequencies-dialog.c:41 msgid "Mean" msgstr "" @@ -2863,12 +2864,14 @@ msgid "Std Dev" msgstr "" #: src/language/stats/descriptives.c:105 src/language/stats/examine.q:1604 -#: src/language/stats/frequencies.q:128 src/ui/gui/descriptives-dialog.c:59 +#: src/language/stats/frequencies.q:128 src/ui/gui/descriptives-dialog.c:47 +#: src/ui/gui/frequencies-dialog.c:46 msgid "Variance" msgstr "" #: src/language/stats/descriptives.c:106 src/language/stats/examine.q:1711 -#: src/language/stats/frequencies.q:129 src/ui/gui/descriptives-dialog.c:60 +#: src/language/stats/frequencies.q:129 src/ui/gui/descriptives-dialog.c:48 +#: src/ui/gui/frequencies-dialog.c:51 msgid "Kurtosis" msgstr "" @@ -2877,7 +2880,8 @@ msgid "S E Kurt" msgstr "" #: src/language/stats/descriptives.c:108 src/language/stats/examine.q:1691 -#: src/language/stats/frequencies.q:131 src/ui/gui/descriptives-dialog.c:61 +#: src/language/stats/frequencies.q:131 src/ui/gui/descriptives-dialog.c:49 +#: src/ui/gui/frequencies-dialog.c:47 msgid "Skewness" msgstr "" @@ -2886,24 +2890,27 @@ msgid "S E Skew" msgstr "" #: src/language/stats/descriptives.c:110 src/language/stats/examine.q:1652 -#: src/language/stats/frequencies.q:133 src/ui/gui/descriptives-dialog.c:56 +#: src/language/stats/frequencies.q:133 src/ui/gui/descriptives-dialog.c:44 +#: src/ui/gui/frequencies-dialog.c:49 msgid "Range" msgstr "" #: src/language/stats/descriptives.c:111 src/language/stats/examine.q:1629 #: src/language/stats/frequencies.q:134 src/language/stats/npar-summary.c:131 -#: src/language/stats/oneway.q:404 src/ui/gui/descriptives-dialog.c:54 +#: src/language/stats/oneway.q:404 src/ui/gui/descriptives-dialog.c:42 +#: src/ui/gui/frequencies-dialog.c:43 msgid "Minimum" msgstr "" #: src/language/stats/descriptives.c:112 src/language/stats/examine.q:1640 #: src/language/stats/frequencies.q:135 src/language/stats/npar-summary.c:134 -#: src/language/stats/oneway.q:405 src/ui/gui/descriptives-dialog.c:55 +#: src/language/stats/oneway.q:405 src/ui/gui/descriptives-dialog.c:43 +#: src/ui/gui/frequencies-dialog.c:44 msgid "Maximum" msgstr "" #: src/language/stats/descriptives.c:113 src/language/stats/frequencies.q:136 -#: src/ui/gui/descriptives-dialog.c:57 +#: src/ui/gui/descriptives-dialog.c:45 src/ui/gui/frequencies-dialog.c:54 msgid "Sum" msgstr "" @@ -3010,6 +3017,7 @@ msgid "5%% Trimmed Mean" msgstr "" #: src/language/stats/examine.q:1582 src/language/stats/frequencies.q:125 +#: src/ui/gui/frequencies-dialog.c:53 msgid "Median" msgstr "" @@ -3138,7 +3146,7 @@ msgstr "" msgid "S.E. Mean" msgstr "" -#: src/language/stats/frequencies.q:126 +#: src/language/stats/frequencies.q:126 src/ui/gui/frequencies-dialog.c:50 msgid "Mode" msgstr "" @@ -4388,267 +4396,275 @@ msgstr "" msgid "Style of bevel around the custom entry button" msgstr "" -#: src/ui/gui/data-editor.c:163 +#: src/ui/gui/data-editor.c:164 msgid "Transformations Pending" msgstr "" -#: src/ui/gui/data-editor.c:425 +#: src/ui/gui/data-editor.c:426 msgid "Labels" msgstr "" -#: src/ui/gui/data-editor.c:426 +#: src/ui/gui/data-editor.c:427 msgid "Show/hide value labels" msgstr "" -#: src/ui/gui/data-editor.c:444 src/ui/gui/data-editor.c:461 -#: src/ui/gui/data-editor.c:1830 src/ui/gui/data-editor.c:1883 +#: src/ui/gui/data-editor.c:445 src/ui/gui/data-editor.c:462 +#: src/ui/gui/data-editor.c:1846 src/ui/gui/data-editor.c:1899 msgid "Clear" msgstr "" -#: src/ui/gui/data-editor.c:445 +#: src/ui/gui/data-editor.c:446 msgid "Delete the cases at the selected position(s)" msgstr "" -#: src/ui/gui/data-editor.c:462 +#: src/ui/gui/data-editor.c:463 msgid "Delete the variables at the selected position(s)" msgstr "" -#: src/ui/gui/data-editor.c:476 src/ui/gui/data-editor.c:1827 +#: src/ui/gui/data-editor.c:477 src/ui/gui/data-editor.c:1843 #: src/ui/gui/data-editor.glade:137 src/ui/gui/data-editor.glade:808 msgid "Insert Variable" msgstr "" -#: src/ui/gui/data-editor.c:477 +#: src/ui/gui/data-editor.c:478 msgid "Create a new variable at the current position" msgstr "" -#: src/ui/gui/data-editor.c:495 src/ui/gui/data-editor.c:1880 +#: src/ui/gui/data-editor.c:496 src/ui/gui/data-editor.c:1896 #: src/ui/gui/data-editor.glade:796 msgid "Insert Case" msgstr "" -#: src/ui/gui/data-editor.c:496 +#: src/ui/gui/data-editor.c:497 msgid "Create a new case at the current position" msgstr "" -#: src/ui/gui/data-editor.c:516 +#: src/ui/gui/data-editor.c:517 msgid "Goto Case" msgstr "" -#: src/ui/gui/data-editor.c:517 +#: src/ui/gui/data-editor.c:518 msgid "Jump to a Case in the Data Sheet" msgstr "" -#: src/ui/gui/data-editor.c:536 +#: src/ui/gui/data-editor.c:537 msgid "Weights" msgstr "" -#: src/ui/gui/data-editor.c:537 +#: src/ui/gui/data-editor.c:538 msgid "Weight cases by variable" msgstr "" -#: src/ui/gui/data-editor.c:546 src/ui/gui/data-editor.glade:312 +#: src/ui/gui/data-editor.c:547 src/ui/gui/data-editor.glade:312 msgid "Transpose" msgstr "" -#: src/ui/gui/data-editor.c:547 +#: src/ui/gui/data-editor.c:548 msgid "Transpose the cases with the variables" msgstr "" -#: src/ui/gui/data-editor.c:558 +#: src/ui/gui/data-editor.c:559 msgid "Split" msgstr "" -#: src/ui/gui/data-editor.c:559 +#: src/ui/gui/data-editor.c:560 msgid "Split the active file" msgstr "" -#: src/ui/gui/data-editor.c:569 +#: src/ui/gui/data-editor.c:570 msgid "Sort" msgstr "" -#: src/ui/gui/data-editor.c:570 +#: src/ui/gui/data-editor.c:571 msgid "Sort cases in the active file" msgstr "" -#: src/ui/gui/data-editor.c:578 src/ui/gui/data-editor.glade:347 +#: src/ui/gui/data-editor.c:579 src/ui/gui/data-editor.glade:347 #: src/ui/gui/data-editor.glade:851 msgid "Select Cases" msgstr "" -#: src/ui/gui/data-editor.c:579 +#: src/ui/gui/data-editor.c:580 msgid "Select cases from the active file" msgstr "" -#: src/ui/gui/data-editor.c:588 +#: src/ui/gui/data-editor.c:589 msgid "Compute" msgstr "" -#: src/ui/gui/data-editor.c:589 +#: src/ui/gui/data-editor.c:590 msgid "Compute new values for a variable" msgstr "" -#: src/ui/gui/data-editor.c:597 +#: src/ui/gui/data-editor.c:598 msgid "Oneway _ANOVA" msgstr "" -#: src/ui/gui/data-editor.c:598 +#: src/ui/gui/data-editor.c:599 msgid "Perform one way analysis of variance" msgstr "" -#: src/ui/gui/data-editor.c:606 src/ui/gui/data-editor.glade:503 +#: src/ui/gui/data-editor.c:607 src/ui/gui/data-editor.glade:503 msgid "_Independent Samples T Test" msgstr "" -#: src/ui/gui/data-editor.c:607 +#: src/ui/gui/data-editor.c:608 msgid "Calculate T Test for samples from independent groups" msgstr "" -#: src/ui/gui/data-editor.c:616 +#: src/ui/gui/data-editor.c:617 msgid "Data File Comments" msgstr "" -#: src/ui/gui/data-editor.c:617 +#: src/ui/gui/data-editor.c:618 msgid "Commentary text for the data file" msgstr "" -#: src/ui/gui/data-editor.c:625 src/ui/gui/data-editor.glade:776 +#: src/ui/gui/data-editor.c:626 src/ui/gui/data-editor.glade:776 msgid "Find" msgstr "" -#: src/ui/gui/data-editor.c:626 +#: src/ui/gui/data-editor.c:627 msgid "Find Case" msgstr "" -#: src/ui/gui/data-editor.c:635 src/ui/gui/data-editor.glade:384 +#: src/ui/gui/data-editor.c:636 src/ui/gui/data-editor.glade:384 msgid "Ran_k Cases" msgstr "" -#: src/ui/gui/data-editor.c:636 +#: src/ui/gui/data-editor.c:637 msgid "Rank Cases" msgstr "" -#: src/ui/gui/data-editor.c:645 src/ui/gui/data-editor.glade:396 +#: src/ui/gui/data-editor.c:646 src/ui/gui/data-editor.glade:396 msgid "Recode into _Same Variables" msgstr "" -#: src/ui/gui/data-editor.c:646 +#: src/ui/gui/data-editor.c:647 msgid "Recode values into the same Variables" msgstr "" -#: src/ui/gui/data-editor.c:655 src/ui/gui/data-editor.glade:403 +#: src/ui/gui/data-editor.c:656 src/ui/gui/data-editor.glade:403 msgid "Recode into _Different Variables" msgstr "" -#: src/ui/gui/data-editor.c:656 +#: src/ui/gui/data-editor.c:657 msgid "Recode values into different Variables" msgstr "" -#: src/ui/gui/data-editor.c:665 src/ui/gui/data-editor.glade:286 +#: src/ui/gui/data-editor.c:666 src/ui/gui/data-editor.glade:286 #: src/ui/gui/data-editor.glade:755 msgid "Variables" msgstr "" -#: src/ui/gui/data-editor.c:666 +#: src/ui/gui/data-editor.c:667 msgid "Jump to Variable" msgstr "" -#: src/ui/gui/data-editor.c:674 src/ui/gui/data-editor.glade:457 +#: src/ui/gui/data-editor.c:675 src/ui/gui/data-editor.glade:457 #: src/ui/gui/oneway.glade:179 msgid "_Descriptives" msgstr "" -#: src/ui/gui/data-editor.c:675 +#: src/ui/gui/data-editor.c:676 msgid "Calculate descriptive statistics (mean, variance, ...)" msgstr "" -#: src/ui/gui/data-editor.c:1108 +#: src/ui/gui/data-editor.c:685 src/ui/gui/data-editor.glade:449 +msgid "_Frequencies" +msgstr "" + +#: src/ui/gui/data-editor.c:686 +msgid "Generate frequency statistics" +msgstr "" + +#: src/ui/gui/data-editor.c:1124 msgid "Font Selection" msgstr "" -#: src/ui/gui/data-editor.c:1315 +#: src/ui/gui/data-editor.c:1331 msgid "No Split" msgstr "" -#: src/ui/gui/data-editor.c:1324 +#: src/ui/gui/data-editor.c:1340 msgid "Split by " msgstr "" -#: src/ui/gui/data-editor.c:1349 +#: src/ui/gui/data-editor.c:1365 msgid "Filter off" msgstr "" -#: src/ui/gui/data-editor.c:1362 +#: src/ui/gui/data-editor.c:1378 #, c-format msgid "Filter by %s" msgstr "" -#: src/ui/gui/data-editor.c:1380 +#: src/ui/gui/data-editor.c:1396 msgid "Weights off" msgstr "" -#: src/ui/gui/data-editor.c:1393 +#: src/ui/gui/data-editor.c:1409 #, c-format msgid "Weight by %s" msgstr "" -#: src/ui/gui/data-editor.c:1416 src/ui/gui/data-editor.c:1650 +#: src/ui/gui/data-editor.c:1432 src/ui/gui/data-editor.c:1666 #: src/ui/gui/data-editor.glade:667 msgid "Open" msgstr "" -#: src/ui/gui/data-editor.c:1417 +#: src/ui/gui/data-editor.c:1433 msgid "Open a data file" msgstr "" -#: src/ui/gui/data-editor.c:1425 src/ui/gui/data-editor.c:1532 +#: src/ui/gui/data-editor.c:1441 src/ui/gui/data-editor.c:1548 #: src/ui/gui/data-editor.glade:677 msgid "Save" msgstr "" -#: src/ui/gui/data-editor.c:1426 src/ui/gui/data-editor.c:1436 +#: src/ui/gui/data-editor.c:1442 src/ui/gui/data-editor.c:1452 msgid "Save data to file" msgstr "" -#: src/ui/gui/data-editor.c:1435 +#: src/ui/gui/data-editor.c:1451 msgid "Save As" msgstr "" -#: src/ui/gui/data-editor.c:1444 src/ui/gui/recode-dialog.c:931 +#: src/ui/gui/data-editor.c:1460 src/ui/gui/recode-dialog.c:931 #: src/ui/gui/recode-dialog.c:1025 msgid "New" msgstr "" -#: src/ui/gui/data-editor.c:1445 +#: src/ui/gui/data-editor.c:1461 msgid "New data file" msgstr "" -#: src/ui/gui/data-editor.c:1540 src/ui/gui/data-editor.c:1658 +#: src/ui/gui/data-editor.c:1556 src/ui/gui/data-editor.c:1674 msgid "System Files (*.sav)" msgstr "" -#: src/ui/gui/data-editor.c:1546 src/ui/gui/data-editor.c:1664 +#: src/ui/gui/data-editor.c:1562 src/ui/gui/data-editor.c:1680 msgid "Portable Files (*.por) " msgstr "" -#: src/ui/gui/data-editor.c:1552 src/ui/gui/data-editor.c:1670 +#: src/ui/gui/data-editor.c:1568 src/ui/gui/data-editor.c:1686 #: src/ui/gui/syntax-editor.c:138 src/ui/gui/syntax-editor.c:522 msgid "All Files" msgstr "" -#: src/ui/gui/data-editor.c:1560 +#: src/ui/gui/data-editor.c:1576 msgid "System File" msgstr "" -#: src/ui/gui/data-editor.c:1565 +#: src/ui/gui/data-editor.c:1581 msgid "Portable File" msgstr "" -#: src/ui/gui/data-editor.c:1820 +#: src/ui/gui/data-editor.c:1836 msgid "Sort Ascending" msgstr "" -#: src/ui/gui/data-editor.c:1823 +#: src/ui/gui/data-editor.c:1839 msgid "Sort Descending" msgstr "" @@ -4770,10 +4786,6 @@ msgstr "" msgid "_Descriptive Statistics" msgstr "" -#: src/ui/gui/data-editor.glade:449 -msgid "_Frequencies" -msgstr "" - #: src/ui/gui/data-editor.glade:465 msgid "_Explore" msgstr "" @@ -4992,15 +5004,15 @@ msgstr "" msgid "_Discrete missing values" msgstr "" -#: src/ui/gui/descriptives-dialog.c:53 +#: src/ui/gui/descriptives-dialog.c:41 src/ui/gui/frequencies-dialog.c:42 msgid "Standard deviation" msgstr "" -#: src/ui/gui/descriptives-dialog.c:58 +#: src/ui/gui/descriptives-dialog.c:46 msgid "Standard error" msgstr "" -#: src/ui/gui/descriptives-dialog.glade:122 +#: src/ui/gui/descriptives-dialog.glade:122 src/ui/gui/frequencies.glade:139 msgid "Statistics:" msgstr "" @@ -5025,6 +5037,59 @@ msgstr "" msgid "Bad regular expression: %s" msgstr "" +#: src/ui/gui/frequencies-dialog.c:45 +msgid "Standard error of the mean" +msgstr "" + +#: src/ui/gui/frequencies-dialog.c:48 +msgid "Standard error of the skewness" +msgstr "" + +#: src/ui/gui/frequencies-dialog.c:52 +msgid "Standard error of the kurtosis" +msgstr "" + +#: src/ui/gui/frequencies.glade:98 src/ui/gui/psppire.glade:265 +#: src/ui/gui/rank.glade:67 +msgid "Variable(s):" +msgstr "" + +#: src/ui/gui/frequencies.glade:168 +msgid "Display Frequency Table" +msgstr "" + +#: src/ui/gui/frequencies.glade:185 +msgid "Format..." +msgstr "" + +#: src/ui/gui/frequencies.glade:264 +msgid "Ascending Order" +msgstr "" + +#: src/ui/gui/frequencies.glade:275 +msgid "Descending Order" +msgstr "" + +#: src/ui/gui/frequencies.glade:290 +msgid "Ascending Counts" +msgstr "" + +#: src/ui/gui/frequencies.glade:305 +msgid "Descending Counts" +msgstr "" + +#: src/ui/gui/frequencies.glade:323 +msgid "Order by" +msgstr "" + +#: src/ui/gui/frequencies.glade:355 +msgid "Supress tables with more than N categories" +msgstr "" + +#: src/ui/gui/frequencies.glade:371 +msgid "Maximum no of categories" +msgstr "" + #: src/ui/gui/helper.c:140 msgid "Sorry. The help system hasn't yet been implemented." msgstr "" @@ -5220,10 +5285,6 @@ msgstr "" msgid "Current Status: " msgstr "" -#: src/ui/gui/psppire.glade:265 src/ui/gui/rank.glade:67 -msgid "Variable(s):" -msgstr "" - #: src/ui/gui/psppire.glade:314 msgid "Name Variable:" msgstr "" diff --git a/src/ui/gui/ChangeLog b/src/ui/gui/ChangeLog index 45058669..24c9293c 100644 --- a/src/ui/gui/ChangeLog +++ b/src/ui/gui/ChangeLog @@ -1,3 +1,17 @@ +2007-12-01 John Darrington + + * descriptives-dialog.c: Moved the code dealing with checkboxes + inside treeview widgets into their own files. + + * checkbox-treeview.c checkbox-treeview.h: New file (see above). + + * frequencies-dialog.c frequencies-dialog.h frequencies.glade: New + files. Implemented FREQUENCIES dialog box. + + * data-editor.c data-editor.h data-editor.glade : Added callback + for frequencies dialog. + + 2007-11-23 John Darrington * psppire-acr.c psppire-acr.h: Generalised the external widget diff --git a/src/ui/gui/automake.mk b/src/ui/gui/automake.mk index ee2b5c82..24f0196c 100644 --- a/src/ui/gui/automake.mk +++ b/src/ui/gui/automake.mk @@ -49,6 +49,7 @@ src_ui_gui_psppiredir = $(pkgdatadir) dist_src_ui_gui_psppire_DATA = \ $(top_srcdir)/src/ui/gui/data-editor.glade \ $(top_srcdir)/src/ui/gui/descriptives-dialog.glade \ + $(top_srcdir)/src/ui/gui/frequencies.glade \ $(top_srcdir)/src/ui/gui/oneway.glade \ $(top_srcdir)/src/ui/gui/output-viewer.glade \ $(top_srcdir)/src/ui/gui/psppire.glade \ @@ -79,12 +80,16 @@ src_ui_gui_psppire_SOURCES = \ src/ui/gui/about.h \ src/ui/gui/clipboard.c \ src/ui/gui/clipboard.h \ + src/ui/gui/checkbox-treeview.c \ + src/ui/gui/checkbox-treeview.h \ src/ui/gui/compute-dialog.c \ src/ui/gui/compute-dialog.h \ src/ui/gui/comments-dialog.c \ src/ui/gui/comments-dialog.h \ src/ui/gui/customentry.c \ src/ui/gui/customentry.h \ + src/ui/gui/frequencies-dialog.c \ + src/ui/gui/frequencies-dialog.h \ src/ui/gui/goto-case-dialog.c \ src/ui/gui/goto-case-dialog.h \ src/ui/gui/data-sheet.c \ diff --git a/src/ui/gui/checkbox-treeview.c b/src/ui/gui/checkbox-treeview.c new file mode 100644 index 00000000..2639665f --- /dev/null +++ b/src/ui/gui/checkbox-treeview.c @@ -0,0 +1,127 @@ +/* PSPPIRE - a graphical user interface for PSPP. + Copyright (C) 2007 Free Software Foundation + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "checkbox-treeview.h" +#include + +#include "gettext.h" +#define _(msgid) gettext (msgid) +#define N_(msgid) msgid + + +/* A GtkTreeCellDataFunc which renders a checkbox that determines + whether to calculate the statistic. */ +static void +stat_calculate_cell_data_func (GtkTreeViewColumn *col, + GtkCellRenderer *cell, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer data) +{ + gboolean selected; + + gtk_tree_model_get (model, iter, CHECKBOX_COLUMN_SELECTED, &selected, -1); + g_object_set (cell, "active", selected, NULL); +} + + +/* A GtkTreeCellDataFunc which renders the label of the statistic. */ +static void +stat_label_cell_data_func (GtkTreeViewColumn *col, + GtkCellRenderer *cell, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer statistic) +{ + gchar *label = NULL; + gtk_tree_model_get (model, iter, CHECKBOX_COLUMN_LABEL, &label, -1); + g_object_set (cell, "text", gettext (label), NULL); + g_free (label); +} + +/* Callback for checkbox cells in the statistics tree view. + Toggles the checkbox. */ +static void +toggle (GtkCellRendererToggle *cell_renderer, gchar *path_str, gpointer data) +{ + GtkTreeModel *model = (GtkTreeModel *)data; + GtkTreeIter iter; + GtkTreePath *path = gtk_tree_path_new_from_string (path_str); + gboolean selected; + + gtk_tree_model_get_iter (model, &iter, path); + gtk_tree_model_get (model, &iter, CHECKBOX_COLUMN_SELECTED, &selected, -1); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, CHECKBOX_COLUMN_SELECTED, + !selected, -1); + gtk_tree_path_free (path); +} + + +void +put_checkbox_items_in_treeview (GtkTreeView *treeview, + guint default_items, + gint n_items, + const struct checkbox_entry_item *items + ) +{ + GtkTreeViewColumn *col; + GtkCellRenderer *renderer; + GtkListStore *list; + size_t i; + + list = gtk_list_store_new (N_CHECKBOX_COLUMNS, + G_TYPE_STRING, G_TYPE_BOOLEAN); + gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (list)); + + for (i = 0; i < n_items; i++) + { + GtkTreeIter iter; + gtk_list_store_append (list, &iter); + gtk_list_store_set (list, &iter, + CHECKBOX_COLUMN_LABEL, items[i].label, + CHECKBOX_COLUMN_SELECTED, + (default_items & (1u << i)) != 0, + -1); + } + + /* Calculate column. */ + col = gtk_tree_view_column_new (); + renderer = gtk_cell_renderer_toggle_new (); + g_signal_connect (GTK_CELL_RENDERER_TOGGLE (renderer), + "toggled", G_CALLBACK (toggle), GTK_TREE_MODEL (list)); + gtk_tree_view_column_pack_start (col, renderer, TRUE); + gtk_tree_view_column_set_cell_data_func (col, renderer, + stat_calculate_cell_data_func, + NULL, NULL); + gtk_tree_view_append_column (treeview, col); + + /* Statistic column. */ + col = gtk_tree_view_column_new (); + gtk_tree_view_column_set_title (col, _("Statistic")); + renderer = gtk_cell_renderer_text_new (); + gtk_tree_view_column_pack_start (col, renderer, TRUE); + gtk_tree_view_column_set_cell_data_func (col, renderer, + stat_label_cell_data_func, + NULL, NULL); + g_object_set (renderer, "ellipsize-set", TRUE, NULL); + g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); + gtk_tree_view_column_set_min_width (col, 200); + gtk_tree_view_column_set_sizing (col, GTK_TREE_VIEW_COLUMN_AUTOSIZE); + gtk_tree_view_column_set_resizable (col, TRUE); + gtk_tree_view_append_column (treeview, col); +} diff --git a/src/ui/gui/checkbox-treeview.h b/src/ui/gui/checkbox-treeview.h new file mode 100644 index 00000000..1616b734 --- /dev/null +++ b/src/ui/gui/checkbox-treeview.h @@ -0,0 +1,43 @@ +/* PSPPIRE - a graphical user interface for PSPP. + Copyright (C) 2007 Free Software Foundation + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +#ifndef __CHECKBOX_TREEVIEW_H__ +#define __CHECKBOX_TREEVIEW_H__ 1 + + +#include + +struct checkbox_entry_item + { + const char *name; + const char *label; + }; + +enum + { + CHECKBOX_COLUMN_LABEL, + CHECKBOX_COLUMN_SELECTED, + N_CHECKBOX_COLUMNS + }; + + +void put_checkbox_items_in_treeview (GtkTreeView *treeview, + guint default_items, + gint n_items, + const struct checkbox_entry_item *items + ); +#endif diff --git a/src/ui/gui/data-editor.c b/src/ui/gui/data-editor.c index f1848621..a69b7e66 100644 --- a/src/ui/gui/data-editor.c +++ b/src/ui/gui/data-editor.c @@ -42,6 +42,7 @@ #include "comments-dialog.h" #include "variable-info-dialog.h" #include "descriptives-dialog.h" +#include "frequencies-dialog.h" #include "dict-display.h" #include "clipboard.h" @@ -678,6 +679,17 @@ new_data_editor (void) g_signal_connect (de->invoke_descriptives_dialog, "activate", G_CALLBACK (descriptives_dialog), de); + + de->invoke_frequencies_dialog = + gtk_action_new ("frequencies-dialog", + _("_Frequencies"), + _("Generate frequency statistics"), + "pspp-frequencies"); + + g_signal_connect (de->invoke_frequencies_dialog, "activate", + G_CALLBACK (frequencies_dialog), de); + + e->window = GTK_WINDOW (get_widget_assert (de->xml, "data_editor")); g_signal_connect_swapped (get_widget_assert (de->xml,"file_new_data"), @@ -824,6 +836,10 @@ new_data_editor (void) get_widget_assert (de->xml, "analyze_descriptives") ); + gtk_action_connect_proxy (de->invoke_frequencies_dialog, + get_widget_assert (de->xml, "analyze_frequencies") + ); + g_signal_connect (get_widget_assert (de->xml,"help_about"), "activate", G_CALLBACK (about_new), diff --git a/src/ui/gui/data-editor.glade b/src/ui/gui/data-editor.glade index 7a34a31f..1746d9e7 100644 --- a/src/ui/gui/data-editor.glade +++ b/src/ui/gui/data-editor.glade @@ -443,7 +443,7 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK _Frequencies diff --git a/src/ui/gui/data-editor.h b/src/ui/gui/data-editor.h index a49d2c5b..9f8ce0a6 100644 --- a/src/ui/gui/data-editor.h +++ b/src/ui/gui/data-editor.h @@ -47,6 +47,7 @@ struct data_editor GtkAction *invoke_recode_different_dialog; GtkAction *invoke_descriptives_dialog; + GtkAction *invoke_frequencies_dialog; GtkAction *invoke_t_test_independent_samples_dialog; GtkAction *invoke_oneway_anova_dialog; diff --git a/src/ui/gui/descriptives-dialog.c b/src/ui/gui/descriptives-dialog.c index 5a9a2b73..4697c9fd 100644 --- a/src/ui/gui/descriptives-dialog.c +++ b/src/ui/gui/descriptives-dialog.c @@ -16,6 +16,7 @@ #include +#include "checkbox-treeview.h" #include "descriptives-dialog.h" #include @@ -35,19 +36,6 @@ #define _(msgid) gettext (msgid) #define N_(msgid) msgid -enum - { - COLUMN_LABEL, - COLUMN_SELECTED, - N_STAT_COLUMNS - }; - -struct descriptive_stat - { - const char *name; - const char *label; - }; - #define DESCRIPTIVE_STATS \ DS (MEAN, N_("Mean")) \ DS (STDDEV, N_("Standard deviation")) \ @@ -77,7 +65,8 @@ enum B_DS_DEFAULT = B_DS_MEAN | B_DS_STDDEV | B_DS_MINIMUM | B_DS_MAXIMUM }; -static const struct descriptive_stat stats[] = + +static const struct checkbox_entry_item stats[] = { #define DS(NAME, LABEL) {#NAME, LABEL}, DESCRIPTIVE_STATS @@ -107,7 +96,8 @@ refresh (PsppireDialog *dialog, struct descriptives_dialog *scd) for (i = 0, ok = gtk_tree_model_get_iter_first (scd->stats, &iter); ok; i++, ok = gtk_tree_model_iter_next (scd->stats, &iter)) - gtk_list_store_set (GTK_LIST_STORE (scd->stats), &iter, COLUMN_SELECTED, + gtk_list_store_set (GTK_LIST_STORE (scd->stats), &iter, + CHECKBOX_COLUMN_SELECTED, (B_DS_DEFAULT & (1u << i)) ? true : false, -1); gtk_toggle_button_set_active (scd->exclude_missing_listwise, false); @@ -150,7 +140,8 @@ generate_syntax (const struct descriptives_dialog *scd) i++, ok = gtk_tree_model_iter_next (scd->stats, &iter)) { gboolean toggled; - gtk_tree_model_get (scd->stats, &iter, COLUMN_SELECTED, &toggled, -1); + gtk_tree_model_get (scd->stats, &iter, + CHECKBOX_COLUMN_SELECTED, &toggled, -1); if (toggled) selected |= 1u << i; } @@ -193,100 +184,6 @@ generate_syntax (const struct descriptives_dialog *scd) return text; } -/* A GtkTreeCellDataFunc which renders a checkbox that determines - whether to calculate the statistic. */ -static void -stat_calculate_cell_data_func (GtkTreeViewColumn *col, - GtkCellRenderer *cell, - GtkTreeModel *model, - GtkTreeIter *iter, - gpointer data) -{ - gboolean selected; - - gtk_tree_model_get (model, iter, COLUMN_SELECTED, &selected, -1); - g_object_set (cell, "active", selected, NULL); -} - -/* Callback for checkbox cells in the statistics tree view. - Toggles the checkbox. */ -static void -toggle (GtkCellRendererToggle *cell_renderer, gchar *path_str, gpointer data) -{ - GtkTreeModel *model = (GtkTreeModel *)data; - GtkTreeIter iter; - GtkTreePath *path = gtk_tree_path_new_from_string (path_str); - gboolean selected; - - gtk_tree_model_get_iter (model, &iter, path); - gtk_tree_model_get (model, &iter, COLUMN_SELECTED, &selected, -1); - gtk_list_store_set (GTK_LIST_STORE (model), &iter, COLUMN_SELECTED, - !selected, -1); - gtk_tree_path_free (path); -} - -/* A GtkTreeCellDataFunc which renders the label of the statistic. */ -static void -stat_label_cell_data_func (GtkTreeViewColumn *col, - GtkCellRenderer *cell, - GtkTreeModel *model, - GtkTreeIter *iter, - gpointer statistic) -{ - gchar *label = NULL; - gtk_tree_model_get (model, iter, COLUMN_LABEL, &label, -1); - g_object_set (cell, "text", gettext (label), NULL); - g_free (label); -} - -static void -put_statistics_in_treeview (GtkTreeView *treeview) -{ - GtkTreeViewColumn *col; - GtkCellRenderer *renderer; - GtkListStore *list; - size_t i; - - list = gtk_list_store_new (N_STAT_COLUMNS, G_TYPE_STRING, G_TYPE_BOOLEAN); - gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (list)); - - for (i = 0; i < sizeof stats / sizeof *stats; i++) - { - GtkTreeIter iter; - gtk_list_store_append (list, &iter); - gtk_list_store_set (list, &iter, - COLUMN_LABEL, stats[i].label, - COLUMN_SELECTED, (B_DS_DEFAULT & (1u << i)) != 0, - -1); - } - - /* Calculate column. */ - col = gtk_tree_view_column_new (); - renderer = gtk_cell_renderer_toggle_new (); - g_signal_connect (GTK_CELL_RENDERER_TOGGLE (renderer), - "toggled", G_CALLBACK (toggle), GTK_TREE_MODEL (list)); - gtk_tree_view_column_pack_start (col, renderer, TRUE); - gtk_tree_view_column_set_cell_data_func (col, renderer, - stat_calculate_cell_data_func, - NULL, NULL); - gtk_tree_view_append_column (treeview, col); - - /* Statistic column. */ - col = gtk_tree_view_column_new (); - gtk_tree_view_column_set_title (col, _("Statistic")); - renderer = gtk_cell_renderer_text_new (); - gtk_tree_view_column_pack_start (col, renderer, TRUE); - gtk_tree_view_column_set_cell_data_func (col, renderer, - stat_label_cell_data_func, - NULL, NULL); - g_object_set (renderer, "ellipsize-set", TRUE, NULL); - g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); - gtk_tree_view_column_set_min_width (col, 150); - gtk_tree_view_column_set_sizing (col, GTK_TREE_VIEW_COLUMN_AUTOSIZE); - gtk_tree_view_column_set_resizable (col, true); - gtk_tree_view_append_column (treeview, col); -} - /* Dialog is valid iff at least one variable has been selected */ static gboolean @@ -319,7 +216,7 @@ descriptives_dialog (GObject *o, gpointer data) GtkWidget *selector = get_widget_assert (xml, "stat-var-selector"); GtkWidget *dest = get_widget_assert (xml, "stat-variables"); - GtkWidget *stats = get_widget_assert (xml, "statistics"); + GtkWidget *stats_treeview = get_widget_assert (xml, "statistics"); GtkSheet *var_sheet = GTK_SHEET (get_widget_assert (de->xml, "variable_sheet")); @@ -340,10 +237,12 @@ descriptives_dialog (GObject *o, gpointer data) insert_source_row_into_tree_view, NULL); - put_statistics_in_treeview (GTK_TREE_VIEW (stats)); + put_checkbox_items_in_treeview (GTK_TREE_VIEW (stats_treeview), + B_DS_DEFAULT, + N_DESCRIPTIVE_STATS, stats); scd.stat_vars = GTK_TREE_VIEW (dest); - scd.stats = gtk_tree_view_get_model (GTK_TREE_VIEW (stats)); + scd.stats = gtk_tree_view_get_model (GTK_TREE_VIEW (stats_treeview)); scd.dict = vs->dict; scd.include_user_missing = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "include_user_missing")); diff --git a/src/ui/gui/frequencies-dialog.c b/src/ui/gui/frequencies-dialog.c new file mode 100644 index 00000000..295b764a --- /dev/null +++ b/src/ui/gui/frequencies-dialog.c @@ -0,0 +1,418 @@ +/* PSPPIRE - a graphical user interface for PSPP. + Copyright (C) 2007 Free Software Foundation + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "checkbox-treeview.h" +#include "frequencies-dialog.h" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "gettext.h" +#define _(msgid) gettext (msgid) +#define N_(msgid) msgid + + +#define FREQUENCY_STATS \ + FS (MEAN, N_("Mean")) \ + FS (STDDEV, N_("Standard deviation")) \ + FS (MINIMUM, N_("Minimum")) \ + FS (MAXIMUM, N_("Maximum")) \ + FS (SEMEAN, N_("Standard error of the mean")) \ + FS (VARIANCE, N_("Variance")) \ + FS (SKEWNESS, N_("Skewness")) \ + FS (SESKEW, N_("Standard error of the skewness")) \ + FS (RANGE, N_("Range")) \ + FS (MODE, N_("Mode")) \ + FS (KURTOSIS, N_("Kurtosis")) \ + FS (SEKURT, N_("Standard error of the kurtosis")) \ + FS (MEDIAN, N_("Median")) \ + FS (SUM, N_("Sum")) + +enum + { +#define FS(NAME, LABEL) FS_##NAME, + FREQUENCY_STATS +#undef FS + N_FREQUENCY_STATS + }; + +enum + { +#define FS(NAME, LABEL) B_FS_##NAME = 1u << FS_##NAME, + FREQUENCY_STATS +#undef FS + B_FS_ALL = (1u << N_FREQUENCY_STATS) - 1, + B_FS_DEFAULT = B_FS_MEAN | B_FS_STDDEV | B_FS_MINIMUM | B_FS_MAXIMUM + }; + + +static const struct checkbox_entry_item stats[] = + { +#define FS(NAME, LABEL) {#NAME, LABEL}, + FREQUENCY_STATS +#undef FS + }; + + + +enum frq_order + { + FRQ_AVALUE, + FRQ_DVALUE, + FRQ_ACOUNT, + FRQ_DCOUNT + }; + +struct format_options +{ + enum frq_order order; + gboolean use_limits; + int limit; +}; + +struct frequencies_dialog +{ + GtkTreeView *stat_vars; + PsppireDict *dict; + + GtkWidget *table_button; + + GtkWidget *format_dialog; + GtkWidget *maximum_cats; + GtkWidget *limit_toggle_button; + GtkSpinButton *limit_spinbutton; + + GtkToggleButton *avalue; + GtkToggleButton *dvalue; + GtkToggleButton *afreq; + GtkToggleButton *dfreq; + + struct format_options current_opts; + + GtkTreeModel *stats; +}; + +static void +refresh (PsppireDialog *dialog, struct frequencies_dialog *fd) +{ + GtkTreeIter iter; + size_t i; + bool ok; + + GtkTreeModel *liststore = gtk_tree_view_get_model (fd->stat_vars); + gtk_list_store_clear (GTK_LIST_STORE (liststore)); + + for (i = 0, ok = gtk_tree_model_get_iter_first (fd->stats, &iter); ok; + i++, ok = gtk_tree_model_iter_next (fd->stats, &iter)) + gtk_list_store_set (GTK_LIST_STORE (fd->stats), &iter, + CHECKBOX_COLUMN_SELECTED, + (B_FS_DEFAULT & (1u << i)) ? true : false, -1); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fd->table_button), TRUE); +} + +static char * +generate_syntax (const struct frequencies_dialog *fd) +{ + GtkTreeIter iter; + gboolean ok; + gint i; + guint selected = 0; + + gchar *text; + GString *string = g_string_new ("FREQUENCIES"); + + g_string_append (string, "\n\t/VARIABLES="); + append_variable_names (string, fd->dict, GTK_TREE_VIEW (fd->stat_vars)); + + g_string_append (string, "\n\t/FORMAT="); + + switch (fd->current_opts.order) + { + case FRQ_AVALUE: + g_string_append (string, "AVALUE"); + break; + case FRQ_DVALUE: + g_string_append (string, "DVALUE"); + break; + case FRQ_ACOUNT: + g_string_append (string, "AFREQ"); + break; + case FRQ_DCOUNT: + g_string_append (string, "DFREQ"); + break; + default: + g_assert_not_reached(); + } + + g_string_append (string, " "); + + if ( fd->current_opts.use_limits ) + { + g_string_append_printf (string, "LIMIT (%d)", fd->current_opts.limit); + } + else + { + if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (fd->table_button))) + g_string_append (string, "TABLE"); + else + g_string_append (string, "NOTABLE"); + } + + + for (i = 0, ok = gtk_tree_model_get_iter_first (fd->stats, &iter); ok; + i++, ok = gtk_tree_model_iter_next (fd->stats, &iter)) + { + gboolean toggled; + gtk_tree_model_get (fd->stats, &iter, + CHECKBOX_COLUMN_SELECTED, &toggled, -1); + if (toggled) + selected |= 1u << i; + } + + if (selected != B_FS_DEFAULT) + { + g_string_append (string, "\n\t/STATISTICS="); + if (selected == B_FS_ALL) + g_string_append (string, "ALL"); + else if (selected == 0) + g_string_append (string, "NONE"); + else + { + int n = 0; + if ((selected & B_FS_DEFAULT) == B_FS_DEFAULT) + { + g_string_append (string, "DEFAULT"); + selected &= ~B_FS_DEFAULT; + n++; + } + for (i = 0; i < N_FREQUENCY_STATS; i++) + if (selected & (1u << i)) + { + if (n++) + g_string_append (string, " "); + g_string_append (string, stats[i].name); + } + } + } + + g_string_append (string, ".\n"); + + text = string->str; + + g_string_free (string, FALSE); + + return text; +} + +/* Dialog is valid iff at least one variable has been selected */ +static gboolean +dialog_state_valid (gpointer data) +{ + struct frequencies_dialog *fd = data; + + GtkTreeModel *vars = gtk_tree_view_get_model (fd->stat_vars); + + GtkTreeIter notused; + + return gtk_tree_model_get_iter_first (vars, ¬used); +} + + +static void +on_format_clicked (struct frequencies_dialog *fd) +{ + int ret; + g_signal_emit_by_name (fd->limit_toggle_button, "toggled"); + + switch (fd->current_opts.order) + { + case FRQ_AVALUE: + gtk_toggle_button_set_active (fd->avalue, TRUE); + break; + case FRQ_DVALUE: + gtk_toggle_button_set_active (fd->dvalue, TRUE); + break; + case FRQ_ACOUNT: + gtk_toggle_button_set_active (fd->dfreq, TRUE); + break; + case FRQ_DCOUNT: + gtk_toggle_button_set_active (fd->dfreq, TRUE); + break; + }; + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fd->limit_toggle_button), + fd->current_opts.use_limits); + + gtk_spin_button_set_value (fd->limit_spinbutton, + fd->current_opts.limit); + + ret = psppire_dialog_run (PSPPIRE_DIALOG (fd->format_dialog)); + + if ( ret == PSPPIRE_RESPONSE_CONTINUE ) + { + if (gtk_toggle_button_get_active (fd->avalue)) + fd->current_opts.order = FRQ_AVALUE; + else if (gtk_toggle_button_get_active (fd->dvalue)) + fd->current_opts.order = FRQ_DVALUE; + else if (gtk_toggle_button_get_active (fd->afreq)) + fd->current_opts.order = FRQ_ACOUNT; + else if (gtk_toggle_button_get_active (fd->dfreq)) + fd->current_opts.order = FRQ_DCOUNT; + + fd->current_opts.use_limits = gtk_toggle_button_get_active + (GTK_TOGGLE_BUTTON (fd->limit_toggle_button)); + + fd->current_opts.limit = + gtk_spin_button_get_value (fd->limit_spinbutton); + } +} + + +/* Makes widget W's sensitivity follow the active state of TOGGLE */ +static void +sensitive_if_active (GtkToggleButton *toggle, GtkWidget *w) +{ + gboolean active = gtk_toggle_button_get_active (toggle); + + gtk_widget_set_sensitive (w, active); +} + +/* Pops up the Frequencies dialog box */ +void +frequencies_dialog (GObject *o, gpointer data) +{ + gint response; + struct data_editor *de = data; + + struct frequencies_dialog fd; + + GladeXML *xml = XML_NEW ("frequencies.glade"); + + GtkWidget *dialog = get_widget_assert (xml, "frequencies-dialog"); + GtkWidget *source = get_widget_assert (xml, "dict-treeview"); + GtkWidget *dest = get_widget_assert (xml, "var-treeview"); + GtkWidget *selector = get_widget_assert (xml, "selector1"); + GtkWidget *format_button = get_widget_assert (xml, "button1"); + GtkWidget *stats_treeview = get_widget_assert (xml, "stats-treeview"); + + GtkSheet *var_sheet = + GTK_SHEET (get_widget_assert (de->xml, "variable_sheet")); + + PsppireVarStore *vs = PSPPIRE_VAR_STORE (gtk_sheet_get_model (var_sheet)); + + put_checkbox_items_in_treeview (GTK_TREE_VIEW(stats_treeview), + B_FS_DEFAULT, + N_FREQUENCY_STATS, + stats + ); + + + + + gtk_window_set_transient_for (GTK_WINDOW (dialog), de->parent.window); + + attach_dictionary_to_treeview (GTK_TREE_VIEW (source), + vs->dict, + GTK_SELECTION_MULTIPLE, NULL); + + set_dest_model (GTK_TREE_VIEW (dest), vs->dict); + + + psppire_selector_set_subjects (PSPPIRE_SELECTOR (selector), + source, + dest, + insert_source_row_into_tree_view, + NULL); + + + fd.stat_vars = GTK_TREE_VIEW (dest); + fd.dict = vs->dict; + fd.table_button = get_widget_assert (xml, "checkbutton1"); + fd.format_dialog = get_widget_assert (xml, "format-dialog"); + fd.maximum_cats = get_widget_assert (xml, "hbox5"); + fd.limit_toggle_button = get_widget_assert (xml, "checkbutton2"); + fd.limit_spinbutton = + GTK_SPIN_BUTTON (get_widget_assert (xml, "spinbutton1")); + + fd.stats = gtk_tree_view_get_model (GTK_TREE_VIEW (stats_treeview)); + + fd.avalue = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "radiobutton1")); + fd.dvalue = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "radiobutton2")); + fd.afreq = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "radiobutton3")); + fd.dfreq = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "radiobutton4")); + + fd.current_opts.order = FRQ_AVALUE; + fd.current_opts.use_limits = FALSE; + fd.current_opts.limit = 50; + + g_signal_connect (dialog, "refresh", G_CALLBACK (refresh), &fd); + + psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (dialog), + dialog_state_valid, &fd); + + + g_signal_connect_swapped (format_button, "clicked", + G_CALLBACK (on_format_clicked), &fd); + + g_signal_connect (fd.limit_toggle_button, "toggled", + G_CALLBACK (sensitive_if_active), fd.maximum_cats); + + + response = psppire_dialog_run (PSPPIRE_DIALOG (dialog)); + + + switch (response) + { + case GTK_RESPONSE_OK: + { + gchar *syntax = generate_syntax (&fd); + struct getl_interface *sss = create_syntax_string_source (syntax); + execute_syntax (sss); + + g_free (syntax); + } + break; + case PSPPIRE_RESPONSE_PASTE: + { + gchar *syntax = generate_syntax (&fd); + + struct syntax_editor *se = + (struct syntax_editor *) window_create (WINDOW_SYNTAX, NULL); + + gtk_text_buffer_insert_at_cursor (se->buffer, syntax, -1); + + g_free (syntax); + } + break; + default: + break; + } + + g_object_unref (xml); +} diff --git a/src/ui/gui/frequencies-dialog.h b/src/ui/gui/frequencies-dialog.h new file mode 100644 index 00000000..90990a41 --- /dev/null +++ b/src/ui/gui/frequencies-dialog.h @@ -0,0 +1,27 @@ +/* PSPPIRE - a graphical user interface for PSPP. + Copyright (C) 2007 Free Software Foundation + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef __FREQUENCIES_DIALOG_H +#define __FREQUENCIES_DIALOG_H + + +#include +#include + + +void frequencies_dialog (GObject *o, gpointer data); + +#endif diff --git a/src/ui/gui/frequencies.glade b/src/ui/gui/frequencies.glade new file mode 100644 index 00000000..5617d40d --- /dev/null +++ b/src/ui/gui/frequencies.glade @@ -0,0 +1,429 @@ + + + + + + + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Frequencies + True + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 2 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + GTK_POLICY_NEVER + GTK_POLICY_AUTOMATIC + GTK_SHADOW_ETCHED_IN + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + True + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0.05000000074505806 + 0 + + + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + 5 + + + + + False + False + 1 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + GTK_SHADOW_NONE + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + GTK_POLICY_NEVER + GTK_POLICY_AUTOMATIC + GTK_SHADOW_ETCHED_IN + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + True + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Variable(s): + True + + + label_item + + + + + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + GTK_SHADOW_NONE + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + GTK_POLICY_NEVER + GTK_POLICY_AUTOMATIC + GTK_SHADOW_ETCHED_IN + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + True + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Statistics: + True + + + label_item + + + + + 1 + + + + + False + 2 + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Display Frequency Table + 0 + True + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 + True + + + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Format... + 0 + + + + + + + + + + + False + False + 5 + GTK_PACK_END + 1 + + + + + False + False + 5 + 1 + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 + + + False + False + GTK_PACK_END + 1 + + + + + + + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Frequencies: Format + True + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 2 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 12 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Ascending Order + 0 + True + True + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Descending Order + 0 + True + True + radiobutton1 + + + 1 + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Ascending Counts + 0 + True + True + radiobutton1 + + + 2 + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Descending Counts + 0 + True + True + radiobutton1 + + + 3 + + + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Order by + True + + + label_item + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + 0 + 5 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + True + + + 180 + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Supress tables with more than N categories + True + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + 120 + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + Maximum no of categories + True + PANGO_WRAP_WORD_CHAR + + + False + False + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 100 1 65536 1 10 10 + True + GTK_UPDATE_IF_VALID + + + False + False + 1 + + + + + 5 + 1 + + + + + + + False + 5 + 1 + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 5 + PSPPIRE_BUTTON_CONTINUE_MASK | PSPPIRE_BUTTON_CANCEL_MASK | PSPPIRE_BUTTON_HELP_MASK + + + False + False + GTK_PACK_END + 1 + + + + + + -- 2.30.2