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 <john@darrington.wattle.id.au>\n"
"Language-Team: German <pspp-dev@gnu.org>\n"
#: 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 ""
#: 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 ""
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 ""
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 ""
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 ""
msgstr ""
#: src/language/stats/examine.q:1582 src/language/stats/frequencies.q:125
+#: src/ui/gui/frequencies-dialog.c:53
msgid "Median"
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 ""
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 ""
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 ""
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 ""
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!"
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:"
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 <john@darrington.wattle.id.au>\n"
"Language-Team: John Darrington <john@darrington.wattle.id.au>\n"
#: 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 ""
#: 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 ""
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 ""
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 ""
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 ""
msgstr ""
#: src/language/stats/examine.q:1582 src/language/stats/frequencies.q:125
+#: src/ui/gui/frequencies-dialog.c:53
msgid "Median"
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 ""
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 ""
msgid "_Descriptive Statistics"
msgstr ""
-#: src/ui/gui/data-editor.glade:449
-msgid "_Frequencies"
-msgstr ""
-
#: src/ui/gui/data-editor.glade:465
msgid "_Explore"
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 ""
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 ""
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 ""
+2007-12-01 John Darrington <john@darrington.wattle.id.au>
+
+ * 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 <john@darrington.wattle.id.au>
* psppire-acr.c psppire-acr.h: Generalised the external widget
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 \
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 \
--- /dev/null
+/* 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 <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include "checkbox-treeview.h"
+#include <gtk/gtk.h>
+
+#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);
+}
--- /dev/null
+/* 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 <http://www.gnu.org/licenses/>. */
+
+
+#ifndef __CHECKBOX_TREEVIEW_H__
+#define __CHECKBOX_TREEVIEW_H__ 1
+
+
+#include <gtk/gtk.h>
+
+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
#include "comments-dialog.h"
#include "variable-info-dialog.h"
#include "descriptives-dialog.h"
+#include "frequencies-dialog.h"
#include "dict-display.h"
#include "clipboard.h"
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"),
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),
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
- <widget class="GtkMenuItem" id="frequencies">
+ <widget class="GtkMenuItem" id="analyze_frequencies">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">_Frequencies</property>
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;
#include <config.h>
+#include "checkbox-treeview.h"
#include "descriptives-dialog.h"
#include <gtk/gtk.h>
#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")) \
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
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);
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;
}
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
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"));
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"));
--- /dev/null
+/* 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 <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include "checkbox-treeview.h"
+#include "frequencies-dialog.h"
+
+#include <gtk/gtk.h>
+#include <gtksheet/gtksheet.h>
+#include <stdlib.h>
+
+#include <language/syntax-string-source.h>
+#include <ui/gui/data-editor.h>
+#include <ui/gui/dialog-common.h>
+#include <ui/gui/dict-display.h>
+#include <ui/gui/helper.h>
+#include <ui/gui/psppire-dialog.h>
+#include <ui/gui/psppire-var-store.h>
+#include <ui/gui/syntax-editor.h>
+
+#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);
+}
--- /dev/null
+/* 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 <http://www.gnu.org/licenses/>. */
+
+#ifndef __FREQUENCIES_DIALOG_H
+#define __FREQUENCIES_DIALOG_H
+
+
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+
+void frequencies_dialog (GObject *o, gpointer data);
+
+#endif
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--Generated with glade3 3.2.2 on Fri Nov 30 15:42:55 2007 by john@marilyn-->
+<glade-interface>
+ <requires lib="psppire"/>
+ <widget class="PsppireDialog" id="frequencies-dialog">
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="title">Frequencies</property>
+ <property name="modal">True</property>
+ <child internal-child="hbox">
+ <widget class="GtkHBox" id="dialog-hbox1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <child>
+ <widget class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="dict-treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="headers_visible">False</property>
+ <property name="headers_clickable">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkAlignment" id="alignment2">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="yalign">0.05000000074505806</property>
+ <property name="yscale">0</property>
+ <child>
+ <widget class="PsppireSelector" id="selector1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="no_show_all">True</property>
+ <property name="border_width">5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox3">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <child>
+ <widget class="GtkFrame" id="frame1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="var-treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="headers_visible">False</property>
+ <property name="headers_clickable">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Variable(s):</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow3">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="stats-treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="headers_visible">False</property>
+ <property name="headers_clickable">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Statistics:</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox3">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Display Frequency Table</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox2">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="spacing">5</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <widget class="GtkButton" id="button1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Format...</property>
+ <property name="response_id">0</property>
+ </widget>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="padding">5</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="padding">5</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="PsppireVButtonBox" id="psppire-vbuttonbox1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="border_width">5</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <widget class="PsppireDialog" id="format-dialog">
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="title">Frequencies: Format</property>
+ <property name="modal">True</property>
+ <child internal-child="hbox">
+ <widget class="GtkHBox" id="dialog-hbox2">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkHBox" id="hbox4">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="spacing">5</property>
+ <child>
+ <widget class="GtkFrame" id="frame2">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label_xalign">0</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkVButtonBox" id="vbuttonbox1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <widget class="GtkRadioButton" id="radiobutton1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Ascending Order</property>
+ <property name="response_id">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkRadioButton" id="radiobutton2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Descending Order</property>
+ <property name="response_id">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">radiobutton1</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkRadioButton" id="radiobutton3">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Ascending Counts</property>
+ <property name="response_id">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">radiobutton1</property>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkRadioButton" id="radiobutton4">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Descending Counts</property>
+ <property name="response_id">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">radiobutton1</property>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Order by</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkAlignment" id="alignment3">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="yalign">0</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">5</property>
+ <child>
+ <widget class="GtkVBox" id="vbox2">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ <child>
+ <widget class="GtkLabel" id="label4">
+ <property name="width_request">180</property>
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Supress tables with more than N categories</property>
+ <property name="wrap">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox5">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <child>
+ <widget class="GtkLabel" id="label3">
+ <property name="width_request">120</property>
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Maximum no of categories</property>
+ <property name="wrap">True</property>
+ <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton" id="spinbutton1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="adjustment">100 1 65536 1 10 10</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_IF_VALID</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">5</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="padding">5</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="PsppireVButtonBox" id="psppire-vbuttonbox2">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="border_width">5</property>
+ <property name="buttons">PSPPIRE_BUTTON_CONTINUE_MASK | PSPPIRE_BUTTON_CANCEL_MASK | PSPPIRE_BUTTON_HELP_MASK</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>