summaryrefslogtreecommitdiff
path: root/muse2/muse/widgets
diff options
context:
space:
mode:
authorRobert Jonsson <spamatica@gmail.com>2010-10-13 19:34:22 +0000
committerRobert Jonsson <spamatica@gmail.com>2010-10-13 19:34:22 +0000
commit8a2c2824a59d7644e13bc52c9a0ecbd641f21f95 (patch)
tree064ad3f2bf8daab0ad27b128abd86a9bbdb1e496 /muse2/muse/widgets
parenta27706d9629e8b592cca4659f865b70adef24e6d (diff)
new branch muse2, first checkin
Diffstat (limited to 'muse2/muse/widgets')
-rw-r--r--muse2/muse/widgets/.cvsignore23
-rw-r--r--muse2/muse/widgets/Makefile.am262
-rw-r--r--muse2/muse/widgets/Makefile.in2647
-rw-r--r--muse2/muse/widgets/aboutbox.ui129
-rw-r--r--muse2/muse/widgets/aboutbox_impl.cpp10
-rw-r--r--muse2/muse/widgets/aboutbox_impl.h16
-rw-r--r--muse2/muse/widgets/action.h32
-rw-r--r--muse2/muse/widgets/appearancebase.ui1764
-rw-r--r--muse2/muse/widgets/bigtime.cpp442
-rw-r--r--muse2/muse/widgets/bigtime.h55
-rw-r--r--muse2/muse/widgets/canvas.cpp1405
-rw-r--r--muse2/muse/widgets/canvas.h185
-rw-r--r--muse2/muse/widgets/checkbox.cpp58
-rw-r--r--muse2/muse/widgets/checkbox.h45
-rw-r--r--muse2/muse/widgets/citem.cpp93
-rw-r--r--muse2/muse/widgets/citem.h90
-rw-r--r--muse2/muse/widgets/cliplisteditorbase.ui168
-rw-r--r--muse2/muse/widgets/comboQuant.cpp61
-rw-r--r--muse2/muse/widgets/comboQuant.h33
-rw-r--r--muse2/muse/widgets/combobox.cpp74
-rw-r--r--muse2/muse/widgets/combobox.h49
-rw-r--r--muse2/muse/widgets/comment.cpp86
-rw-r--r--muse2/muse/widgets/comment.h53
-rw-r--r--muse2/muse/widgets/commentbase.ui116
-rw-r--r--muse2/muse/widgets/configmidifilebase.ui259
-rw-r--r--muse2/muse/widgets/ctrlcombo.cpp56
-rw-r--r--muse2/muse/widgets/ctrlcombo.cw22
-rw-r--r--muse2/muse/widgets/ctrlcombo.h22
-rw-r--r--muse2/muse/widgets/dentry.cpp243
-rw-r--r--muse2/muse/widgets/dentry.h79
-rw-r--r--muse2/muse/widgets/didyouknow.ui102
-rw-r--r--muse2/muse/widgets/dimap.cpp308
-rw-r--r--muse2/muse/widgets/dimap.h55
-rw-r--r--muse2/muse/widgets/doublelabel.cpp189
-rw-r--r--muse2/muse/widgets/doublelabel.h60
-rw-r--r--muse2/muse/widgets/drange.cpp262
-rw-r--r--muse2/muse/widgets/drange.h71
-rw-r--r--muse2/muse/widgets/editctrl7dialogbase.ui214
-rw-r--r--muse2/muse/widgets/editmetadialogbase.ui254
-rw-r--r--muse2/muse/widgets/editnotedialogbase.ui202
-rw-r--r--muse2/muse/widgets/editsysexdialogbase.ui209
-rw-r--r--muse2/muse/widgets/fdialogbuttons.ui204
-rw-r--r--muse2/muse/widgets/filedialog.cpp534
-rw-r--r--muse2/muse/widgets/filedialog.h92
-rw-r--r--muse2/muse/widgets/fontsel.cpp137
-rw-r--r--muse2/muse/widgets/fontsel.h45
-rw-r--r--muse2/muse/widgets/gatetime.cpp46
-rw-r--r--muse2/muse/widgets/gatetime.h36
-rw-r--r--muse2/muse/widgets/gatetimebase.ui285
-rw-r--r--muse2/muse/widgets/genset.cpp444
-rw-r--r--muse2/muse/widgets/genset.h41
-rw-r--r--muse2/muse/widgets/gensetbase.ui1470
-rw-r--r--muse2/muse/widgets/header.cpp62
-rw-r--r--muse2/muse/widgets/header.h30
-rw-r--r--muse2/muse/widgets/hitscale.cpp134
-rw-r--r--muse2/muse/widgets/hitscale.h50
-rw-r--r--muse2/muse/widgets/intlabel.cpp144
-rw-r--r--muse2/muse/widgets/intlabel.h46
-rw-r--r--muse2/muse/widgets/itransformbase.ui1296
-rw-r--r--muse2/muse/widgets/knob.cpp506
-rw-r--r--muse2/muse/widgets/knob.h78
-rw-r--r--muse2/muse/widgets/lcombo.cpp49
-rw-r--r--muse2/muse/widgets/lcombo.h40
-rw-r--r--muse2/muse/widgets/listitem.h85
-rw-r--r--muse2/muse/widgets/menutitleitem.h29
-rw-r--r--muse2/muse/widgets/metronome.cpp186
-rw-r--r--muse2/muse/widgets/metronome.h34
-rw-r--r--muse2/muse/widgets/metronomebase.ui604
-rw-r--r--muse2/muse/widgets/midisync.ui443
-rw-r--r--muse2/muse/widgets/midisyncimpl.cpp1294
-rw-r--r--muse2/muse/widgets/midisyncimpl.h150
-rw-r--r--muse2/muse/widgets/mittransposebase.ui117
-rw-r--r--muse2/muse/widgets/mixdowndialog.cpp108
-rw-r--r--muse2/muse/widgets/mixdowndialog.h37
-rw-r--r--muse2/muse/widgets/mixdowndialogbase.ui224
-rw-r--r--muse2/muse/widgets/mktest5
-rw-r--r--muse2/muse/widgets/mlabel.cpp17
-rw-r--r--muse2/muse/widgets/mlabel.h39
-rw-r--r--muse2/muse/widgets/mmath.cpp300
-rw-r--r--muse2/muse/widgets/mmath.h77
-rw-r--r--muse2/muse/widgets/moc_aboutbox.cpp81
-rw-r--r--muse2/muse/widgets/moc_didyouknow.cpp81
-rw-r--r--muse2/muse/widgets/moc_songinfo.cpp84
-rw-r--r--muse2/muse/widgets/moc_ttoolbar.cpp0
-rw-r--r--muse2/muse/widgets/mtrackinfobase.ui1067
-rw-r--r--muse2/muse/widgets/mtscale.cpp425
-rw-r--r--muse2/muse/widgets/mtscale.h53
-rw-r--r--muse2/muse/widgets/musewidgetsplug.cpp539
-rw-r--r--muse2/muse/widgets/nentry.cpp407
-rw-r--r--muse2/muse/widgets/nentry.h93
-rw-r--r--muse2/muse/widgets/noteinfo.cpp178
-rw-r--r--muse2/muse/widgets/noteinfo.h52
-rw-r--r--muse2/muse/widgets/pitchedit.cpp64
-rw-r--r--muse2/muse/widgets/pitchedit.h33
-rw-r--r--muse2/muse/widgets/pitchlabel.cpp95
-rw-r--r--muse2/muse/widgets/pitchlabel.h41
-rw-r--r--muse2/muse/widgets/popupmenu.cpp2770
-rw-r--r--muse2/muse/widgets/popupmenu.h303
-rw-r--r--muse2/muse/widgets/posedit.cpp875
-rw-r--r--muse2/muse/widgets/posedit.h106
-rw-r--r--muse2/muse/widgets/poslabel.cpp152
-rw-r--r--muse2/muse/widgets/poslabel.h45
-rw-r--r--muse2/muse/widgets/scldiv.cpp652
-rw-r--r--muse2/muse/widgets/scldiv.h57
-rw-r--r--muse2/muse/widgets/scldraw.cpp881
-rw-r--r--muse2/muse/widgets/scldraw.h89
-rw-r--r--muse2/muse/widgets/sclif.cpp205
-rw-r--r--muse2/muse/widgets/sclif.h51
-rw-r--r--muse2/muse/widgets/scrollscale.cpp499
-rw-r--r--muse2/muse/widgets/scrollscale.h90
-rw-r--r--muse2/muse/widgets/section.h19
-rw-r--r--muse2/muse/widgets/shortcutcapturedialog.cpp87
-rw-r--r--muse2/muse/widgets/shortcutcapturedialog.h35
-rw-r--r--muse2/muse/widgets/shortcutcapturedialogbase.ui134
-rw-r--r--muse2/muse/widgets/shortcutconfig.cpp115
-rw-r--r--muse2/muse/widgets/shortcutconfig.h61
-rw-r--r--muse2/muse/widgets/shortcutconfigbase.ui207
-rw-r--r--muse2/muse/widgets/sigedit.cpp755
-rw-r--r--muse2/muse/widgets/sigedit.h90
-rw-r--r--muse2/muse/widgets/siglabel.cpp157
-rw-r--r--muse2/muse/widgets/siglabel.h42
-rw-r--r--muse2/muse/widgets/sigscale.cpp152
-rw-r--r--muse2/muse/widgets/sigscale.h50
-rw-r--r--muse2/muse/widgets/slider.cpp930
-rw-r--r--muse2/muse/widgets/slider.h98
-rw-r--r--muse2/muse/widgets/sliderbase.cpp726
-rw-r--r--muse2/muse/widgets/sliderbase.h107
-rw-r--r--muse2/muse/widgets/songinfo.ui115
-rw-r--r--muse2/muse/widgets/spinbox.cpp83
-rw-r--r--muse2/muse/widgets/spinbox.h44
-rw-r--r--muse2/muse/widgets/spinboxFP.cpp80
-rw-r--r--muse2/muse/widgets/spinboxFP.h35
-rw-r--r--muse2/muse/widgets/splitter.cpp77
-rw-r--r--muse2/muse/widgets/splitter.h29
-rw-r--r--muse2/muse/widgets/swidget.cpp20
-rw-r--r--muse2/muse/widgets/swidget.h33
-rw-r--r--muse2/muse/widgets/synthconfigbase.ui247
-rw-r--r--muse2/muse/widgets/synthwizardbase.h58
-rw-r--r--muse2/muse/widgets/tb1.cpp225
-rw-r--r--muse2/muse/widgets/tb1.h57
-rw-r--r--muse2/muse/widgets/tempolabel.cpp126
-rw-r--r--muse2/muse/widgets/tempolabel.h60
-rw-r--r--muse2/muse/widgets/tools.cpp139
-rw-r--r--muse2/muse/widgets/tools.h57
-rw-r--r--muse2/muse/widgets/transformbase.ui1146
-rw-r--r--muse2/muse/widgets/transposebase.ui252
-rw-r--r--muse2/muse/widgets/ttoolbar.cpp24
-rw-r--r--muse2/muse/widgets/ttoolbar.h9
-rw-r--r--muse2/muse/widgets/ttoolbutton.cpp30
-rw-r--r--muse2/muse/widgets/ttoolbutton.h28
-rw-r--r--muse2/muse/widgets/utils.cpp358
-rw-r--r--muse2/muse/widgets/utils.h33
-rw-r--r--muse2/muse/widgets/velocity.cpp46
-rw-r--r--muse2/muse/widgets/velocity.h36
-rw-r--r--muse2/muse/widgets/velocitybase.ui232
-rw-r--r--muse2/muse/widgets/view.cpp514
-rw-r--r--muse2/muse/widgets/view.h108
-rw-r--r--muse2/muse/widgets/vscale.cpp27
-rw-r--r--muse2/muse/widgets/vscale.h29
-rw-r--r--muse2/muse/widgets/wtrackinfobase.ui224
-rw-r--r--muse2/muse/widgets/wtscale.cpp289
-rw-r--r--muse2/muse/widgets/wtscale.h51
162 files changed, 38775 insertions, 0 deletions
diff --git a/muse2/muse/widgets/.cvsignore b/muse2/muse/widgets/.cvsignore
new file mode 100644
index 00000000..89de206f
--- /dev/null
+++ b/muse2/muse/widgets/.cvsignore
@@ -0,0 +1,23 @@
+appearancebase.h
+audioconfbase.h
+ccontrolbase.h
+cliplisteditorbase.h
+commentbase.h
+editctrl7dialogbase.h
+editmetadialogbase.h
+editnotedialogbase.h
+editsysexdialogbase.h
+gatetimebase.h
+gensetbase.h
+itransformbase.h
+metronomebase.h
+midirawbase.h
+midisync.h
+mittransposebase.h
+mixdowndialogbase.h
+synthconfigbase.h
+trackinfobase.h
+transformbase.h
+transposebase.h
+velocitybase.h
+fdialogbuttons.h
diff --git a/muse2/muse/widgets/Makefile.am b/muse2/muse/widgets/Makefile.am
new file mode 100644
index 00000000..9a551264
--- /dev/null
+++ b/muse2/muse/widgets/Makefile.am
@@ -0,0 +1,262 @@
+include $(top_srcdir)/common.am
+
+## musewidgetsplugin_so_CPPFLAGS = $(MUSECXXFLAGS) -fPIC -I.. -I$(top_srcdir)/synti \
+## -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_PLUGIN
+libwidgets_a_CPPFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti
+
+if PCH
+libwidgets_a_CPPFLAGS += -include $(top_srcdir)/all.h
+## musewidgetsplugin_so_CPPFLAGS += -include $(top_srcdir)/all-pic.h
+endif
+
+AM_CXXFLAGS +=-DSVNVERSION=\"$(shell svnversion)\"
+
+
+noinst_LIBRARIES = libwidgets.a
+
+dist_libwidgets_a_SOURCES = \
+ utils.cpp utils.h \
+ citem.cpp citem.h \
+ vscale.cpp vscale.h \
+ drange.cpp drange.h \
+ sclif.cpp sclif.h \
+ dimap.cpp dimap.h \
+ scldiv.cpp scldiv.h \
+ mmath.cpp mmath.h \
+ scldraw.cpp scldraw.h \
+ action.h \
+ \
+ scrollscale.cpp scrollscale.h \
+ view.cpp view.h \
+ nentry.cpp nentry.h \
+ mtscale.cpp mtscale.h \
+ sigscale.cpp sigscale.h \
+ hitscale.cpp hitscale.h \
+ intlabel.cpp intlabel.h \
+ doublelabel.cpp doublelabel.h \
+ canvas.cpp canvas.h \
+ noteinfo.cpp noteinfo.h \
+ dentry.cpp dentry.h \
+ siglabel.cpp siglabel.h \
+ ttoolbar.cpp ttoolbar.h \
+ ttoolbutton.cpp ttoolbutton.h \
+ tb1.cpp tb1.h \
+ lcombo.cpp lcombo.h \
+ swidget.cpp swidget.h \
+ tempolabel.cpp tempolabel.h \
+ tools.cpp tools.h \
+ fontsel.cpp fontsel.h \
+ ctrlcombo.cpp ctrlcombo.h \
+ sliderbase.cpp sliderbase.h \
+ slider.cpp slider.h \
+ midisyncimpl.cpp midisyncimpl.h \
+ header.cpp header.h \
+ knob.cpp knob.h \
+ mlabel.cpp mlabel.h \
+ genset.cpp genset.h \
+ mixdowndialog.cpp mixdowndialog.h \
+ spinboxFP.cpp spinboxFP.h \
+ spinbox.cpp spinbox.h \
+ comboQuant.cpp comboQuant.h \
+ bigtime.cpp bigtime.h \
+ comment.cpp comment.h \
+ splitter.cpp splitter.h \
+ gatetime.cpp gatetime.h \
+ velocity.cpp velocity.h \
+ metronome.cpp metronome.h \
+ posedit.cpp posedit.h section.h \
+ pitchedit.cpp pitchedit.h \
+ pitchlabel.cpp pitchlabel.h \
+ poslabel.cpp poslabel.h \
+ filedialog.cpp filedialog.h \
+ sigedit.cpp sigedit.h \
+ shortcutconfig.cpp shortcutconfig.h \
+ shortcutcapturedialog.cpp shortcutcapturedialog.h \
+ combobox.cpp combobox.h \
+ checkbox.cpp checkbox.h \
+ aboutbox_impl.cpp aboutbox_impl.h \
+ popupmenu.cpp popupmenu.h \
+ listitem.h \
+ menutitleitem.h \
+ \
+ midisync.ui \
+ gensetbase.ui \
+ mixdowndialogbase.ui \
+ transposebase.ui \
+ transformbase.ui \
+ appearancebase.ui \
+ itransformbase.ui \
+ commentbase.ui \
+ synthconfigbase.ui \
+ gatetimebase.ui \
+ velocitybase.ui \
+ metronomebase.ui \
+ mtrackinfobase.ui \
+ wtrackinfobase.ui \
+ editctrl7dialogbase.ui \
+ editmetadialogbase.ui \
+ editnotedialogbase.ui \
+ editsysexdialogbase.ui \
+ cliplisteditorbase.ui \
+ mittransposebase.ui \
+ fdialogbuttons.ui \
+ shortcutconfigbase.ui \
+ shortcutcapturedialogbase.ui \
+ aboutbox.ui \
+ songinfo.ui \
+ didyouknow.ui \
+ configmidifilebase.ui
+
+nodist_libwidgets_a_SOURCES = \
+ moc_scrollscale.cpp \
+ moc_view.cpp \
+ moc_nentry.cpp \
+ moc_mtscale.cpp \
+ moc_sigscale.cpp \
+ moc_hitscale.cpp \
+ moc_intlabel.cpp \
+ moc_doublelabel.cpp \
+ moc_canvas.cpp \
+ moc_noteinfo.cpp \
+ moc_dentry.cpp \
+ moc_siglabel.cpp \
+ moc_ttoolbar.cpp \
+ moc_ttoolbutton.cpp \
+ moc_tb1.cpp \
+ moc_lcombo.cpp \
+ moc_swidget.cpp \
+ moc_tempolabel.cpp \
+ moc_tools.cpp \
+ moc_popupmenu.cpp \
+ moc_fontsel.cpp \
+ moc_ctrlcombo.cpp \
+ moc_sliderbase.cpp \
+ moc_slider.cpp \
+ moc_midisyncimpl.cpp \
+ moc_header.cpp \
+ moc_knob.cpp \
+ moc_mlabel.cpp \
+ moc_genset.cpp \
+ moc_mixdowndialog.cpp \
+ moc_spinboxFP.cpp \
+ moc_spinbox.cpp \
+ moc_comboQuant.cpp \
+ moc_bigtime.cpp \
+ moc_comment.cpp \
+ moc_splitter.cpp \
+ moc_gatetime.cpp \
+ moc_velocity.cpp \
+ moc_metronome.cpp \
+ moc_posedit.cpp \
+ moc_pitchedit.cpp \
+ moc_pitchlabel.cpp \
+ moc_poslabel.cpp \
+ moc_filedialog.cpp \
+ moc_sigedit.cpp \
+ moc_shortcutconfig.cpp \
+ moc_shortcutcapturedialog.cpp \
+ moc_combobox.cpp \
+ moc_aboutbox_impl.cpp\
+ moc_aboutbox.cpp \
+ moc_songinfo.cpp \
+ moc_didyouknow.cpp \
+ moc_checkbox.cpp \
+ moc_vscale.cpp \
+ moc_action.cpp
+
+# inst_PROGRAMS = musewidgetsplugin.so
+# instdir = $(pkglibdir)/qtplugins/designer
+#
+### widgetsplugin_LTLIBRARIES = musewidgetsplugin.la
+### widgetsplugindir = $(pkglibdir)/qtplugin
+
+#dist_musewidgetsplugin_so_SOURCES = \
+# musewidgetsplug.cpp \
+# sigedit.h \
+# $(top_srcdir)/muse/xml.cpp $(top_srcdir)/muse/tempo.cpp \
+# $(top_srcdir)/muse/sig.cpp $(top_srcdir)/muse/pos.cpp
+
+#nodist_musewidgetsplugin_so_SOURCES = \
+# moc_posedit.non-libtool.cpp moc_poslabel.non-libtool.cpp \
+# moc_sigedit.non-libtool.cpp \
+# moc_pitchedit.non-libtool.cpp moc_pitchlabel.non-libtool.cpp \
+# moc_tempolabel.non-libtool.cpp \
+# \
+# posedit.non-libtool.cpp poslabel.non-libtool.cpp \
+# pitchedit.non-libtool.cpp pitchlabel.non-libtool.cpp \
+# sigedit.non-libtool.cpp \
+# tempolabel.non-libtool.cpp \
+# slider.non-libtool.cpp moc_slider.non-libtool.cpp \
+# sliderbase.non-libtool.cpp moc_sliderbase.non-libtool.cpp \
+# sclif.non-libtool.cpp \
+# scldiv.non-libtool.cpp mmath.non-libtool.cpp scldraw.non-libtool.cpp \
+# dimap.non-libtool.cpp drange.non-libtool.cpp \
+# doublelabel.non-libtool.cpp moc_doublelabel.non-libtool.cpp \
+# dentry.non-libtool.cpp moc_dentry.non-libtool.cpp \
+# checkbox.non-libtool.cpp moc_checkbox.non-libtool.cpp \
+# combobox.non-libtool.cpp moc_combobox.non-libtool.cpp
+
+#musewidgetsplugin_so_LDFLAGS = --whole-archive -fno-exceptions -shared \
+# -Wl,-soname,libmusewidgetsplugin.so.1 $(QT_LIBS) -lasound
+
+#musewidgetsplug.o: musewidgetsplug.cpp
+# $(CXXCOMPILE) -fPIC -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_PLUGIN -c musewidgetsplug.cpp
+
+EXTRA_DIST = ctrlcombo.cw
+
+# This is for stuff that needs the widgets, but dosn't build them with
+# libtool
+
+BUILT_SOURCES += \
+ posedit.non-libtool.cpp \
+ poslabel.non-libtool.cpp \
+ pitchedit.non-libtool.cpp \
+ pitchlabel.non-libtool.cpp \
+ sigedit.non-libtool.cpp \
+ tempolabel.non-libtool.cpp \
+ slider.non-libtool.cpp \
+ sliderbase.non-libtool.cpp \
+ sclif.non-libtool.cpp \
+ moc_posedit.non-libtool.cpp \
+ moc_poslabel.non-libtool.cpp \
+ moc_sigedit.non-libtool.cpp \
+ moc_pitchedit.non-libtool.cpp \
+ moc_pitchlabel.non-libtool.cpp \
+ moc_tempolabel.non-libtool.cpp \
+ moc_slider.non-libtool.cpp \
+ moc_sliderbase.non-libtool.cpp \
+ scldiv.non-libtool.cpp mmath.non-libtool.cpp scldraw.non-libtool.cpp \
+ dimap.non-libtool.cpp drange.non-libtool.cpp \
+ doublelabel.non-libtool.cpp moc_doublelabel.non-libtool.cpp \
+ dentry.non-libtool.cpp moc_dentry.non-libtool.cpp \
+ checkbox.non-libtool.cpp moc_checkbox.non-libtool.cpp \
+ combobox.non-libtool.cpp moc_combobox.non-libtool.cpp
+
+%.non-libtool.cpp: %.cpp
+ $(LN_S) $*.cpp $*.non-libtool.cpp
+
+CLEANFILES = \
+ posedit.non-libtool.cpp \
+ poslabel.non-libtool.cpp \
+ pitchedit.non-libtool.cpp \
+ pitchlabel.non-libtool.cpp \
+ sigedit.non-libtool.cpp \
+ tempolabel.non-libtool.cpp \
+ slider.non-libtool.cpp \
+ sliderbase.non-libtool.cpp \
+ sclif.non-libtool.cpp \
+ moc_posedit.non-libtool.cpp \
+ moc_poslabel.non-libtool.cpp \
+ moc_sigedit.non-libtool.cpp \
+ moc_pitchedit.non-libtool.cpp \
+ moc_pitchlabel.non-libtool.cpp \
+ moc_tempolabel.non-libtool.cpp \
+ moc_slider.non-libtool.cpp \
+ moc_sliderbase.non-libtool.cpp \
+ scldiv.non-libtool.cpp mmath.non-libtool.cpp scldraw.non-libtool.cpp \
+ dimap.non-libtool.cpp drange.non-libtool.cpp \
+ doublelabel.non-libtool.cpp moc_doublelabel.non-libtool.cpp \
+ dentry.non-libtool.cpp moc_dentry.non-libtool.cpp \
+ checkbox.non-libtool.cpp moc_checkbox.non-libtool.cpp \
+ combobox.non-libtool.cpp moc_combobox.non-libtool.cpp
+
diff --git a/muse2/muse/widgets/Makefile.in b/muse2/muse/widgets/Makefile.in
new file mode 100644
index 00000000..01b5747c
--- /dev/null
+++ b/muse2/muse/widgets/Makefile.in
@@ -0,0 +1,2647 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/common.am
+@PCH_TRUE@am__append_1 = -include $(top_srcdir)/all.h
+subdir = muse/widgets
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal-include.m4 \
+ $(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/docbook.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+libwidgets_a_AR = $(AR) $(ARFLAGS)
+libwidgets_a_LIBADD =
+dist_libwidgets_a_OBJECTS = libwidgets_a-utils.$(OBJEXT) \
+ libwidgets_a-citem.$(OBJEXT) libwidgets_a-vscale.$(OBJEXT) \
+ libwidgets_a-drange.$(OBJEXT) libwidgets_a-sclif.$(OBJEXT) \
+ libwidgets_a-dimap.$(OBJEXT) libwidgets_a-scldiv.$(OBJEXT) \
+ libwidgets_a-mmath.$(OBJEXT) libwidgets_a-scldraw.$(OBJEXT) \
+ libwidgets_a-scrollscale.$(OBJEXT) libwidgets_a-view.$(OBJEXT) \
+ libwidgets_a-nentry.$(OBJEXT) libwidgets_a-mtscale.$(OBJEXT) \
+ libwidgets_a-sigscale.$(OBJEXT) \
+ libwidgets_a-hitscale.$(OBJEXT) \
+ libwidgets_a-intlabel.$(OBJEXT) \
+ libwidgets_a-doublelabel.$(OBJEXT) \
+ libwidgets_a-canvas.$(OBJEXT) libwidgets_a-noteinfo.$(OBJEXT) \
+ libwidgets_a-dentry.$(OBJEXT) libwidgets_a-siglabel.$(OBJEXT) \
+ libwidgets_a-ttoolbar.$(OBJEXT) \
+ libwidgets_a-ttoolbutton.$(OBJEXT) libwidgets_a-tb1.$(OBJEXT) \
+ libwidgets_a-lcombo.$(OBJEXT) libwidgets_a-swidget.$(OBJEXT) \
+ libwidgets_a-tempolabel.$(OBJEXT) libwidgets_a-tools.$(OBJEXT) \
+ libwidgets_a-fontsel.$(OBJEXT) \
+ libwidgets_a-ctrlcombo.$(OBJEXT) \
+ libwidgets_a-sliderbase.$(OBJEXT) \
+ libwidgets_a-slider.$(OBJEXT) \
+ libwidgets_a-midisyncimpl.$(OBJEXT) \
+ libwidgets_a-header.$(OBJEXT) libwidgets_a-knob.$(OBJEXT) \
+ libwidgets_a-mlabel.$(OBJEXT) libwidgets_a-genset.$(OBJEXT) \
+ libwidgets_a-mixdowndialog.$(OBJEXT) \
+ libwidgets_a-spinboxFP.$(OBJEXT) \
+ libwidgets_a-spinbox.$(OBJEXT) \
+ libwidgets_a-comboQuant.$(OBJEXT) \
+ libwidgets_a-bigtime.$(OBJEXT) libwidgets_a-comment.$(OBJEXT) \
+ libwidgets_a-splitter.$(OBJEXT) \
+ libwidgets_a-gatetime.$(OBJEXT) \
+ libwidgets_a-velocity.$(OBJEXT) \
+ libwidgets_a-metronome.$(OBJEXT) \
+ libwidgets_a-posedit.$(OBJEXT) \
+ libwidgets_a-pitchedit.$(OBJEXT) \
+ libwidgets_a-pitchlabel.$(OBJEXT) \
+ libwidgets_a-poslabel.$(OBJEXT) \
+ libwidgets_a-filedialog.$(OBJEXT) \
+ libwidgets_a-sigedit.$(OBJEXT) \
+ libwidgets_a-shortcutconfig.$(OBJEXT) \
+ libwidgets_a-shortcutcapturedialog.$(OBJEXT) \
+ libwidgets_a-combobox.$(OBJEXT) \
+ libwidgets_a-checkbox.$(OBJEXT) \
+ libwidgets_a-aboutbox_impl.$(OBJEXT) \
+ libwidgets_a-popupmenu.$(OBJEXT) midisync.$(OBJEXT) \
+ gensetbase.$(OBJEXT) mixdowndialogbase.$(OBJEXT) \
+ transposebase.$(OBJEXT) transformbase.$(OBJEXT) \
+ appearancebase.$(OBJEXT) itransformbase.$(OBJEXT) \
+ commentbase.$(OBJEXT) synthconfigbase.$(OBJEXT) \
+ gatetimebase.$(OBJEXT) velocitybase.$(OBJEXT) \
+ metronomebase.$(OBJEXT) mtrackinfobase.$(OBJEXT) \
+ wtrackinfobase.$(OBJEXT) editctrl7dialogbase.$(OBJEXT) \
+ editmetadialogbase.$(OBJEXT) editnotedialogbase.$(OBJEXT) \
+ editsysexdialogbase.$(OBJEXT) cliplisteditorbase.$(OBJEXT) \
+ mittransposebase.$(OBJEXT) fdialogbuttons.$(OBJEXT) \
+ shortcutconfigbase.$(OBJEXT) \
+ shortcutcapturedialogbase.$(OBJEXT) aboutbox.$(OBJEXT) \
+ songinfo.$(OBJEXT) didyouknow.$(OBJEXT) \
+ configmidifilebase.$(OBJEXT)
+nodist_libwidgets_a_OBJECTS = libwidgets_a-moc_scrollscale.$(OBJEXT) \
+ libwidgets_a-moc_view.$(OBJEXT) \
+ libwidgets_a-moc_nentry.$(OBJEXT) \
+ libwidgets_a-moc_mtscale.$(OBJEXT) \
+ libwidgets_a-moc_sigscale.$(OBJEXT) \
+ libwidgets_a-moc_hitscale.$(OBJEXT) \
+ libwidgets_a-moc_intlabel.$(OBJEXT) \
+ libwidgets_a-moc_doublelabel.$(OBJEXT) \
+ libwidgets_a-moc_canvas.$(OBJEXT) \
+ libwidgets_a-moc_noteinfo.$(OBJEXT) \
+ libwidgets_a-moc_dentry.$(OBJEXT) \
+ libwidgets_a-moc_siglabel.$(OBJEXT) \
+ libwidgets_a-moc_ttoolbar.$(OBJEXT) \
+ libwidgets_a-moc_ttoolbutton.$(OBJEXT) \
+ libwidgets_a-moc_tb1.$(OBJEXT) \
+ libwidgets_a-moc_lcombo.$(OBJEXT) \
+ libwidgets_a-moc_swidget.$(OBJEXT) \
+ libwidgets_a-moc_tempolabel.$(OBJEXT) \
+ libwidgets_a-moc_tools.$(OBJEXT) \
+ libwidgets_a-moc_popupmenu.$(OBJEXT) \
+ libwidgets_a-moc_fontsel.$(OBJEXT) \
+ libwidgets_a-moc_ctrlcombo.$(OBJEXT) \
+ libwidgets_a-moc_sliderbase.$(OBJEXT) \
+ libwidgets_a-moc_slider.$(OBJEXT) \
+ libwidgets_a-moc_midisyncimpl.$(OBJEXT) \
+ libwidgets_a-moc_header.$(OBJEXT) \
+ libwidgets_a-moc_knob.$(OBJEXT) \
+ libwidgets_a-moc_mlabel.$(OBJEXT) \
+ libwidgets_a-moc_genset.$(OBJEXT) \
+ libwidgets_a-moc_mixdowndialog.$(OBJEXT) \
+ libwidgets_a-moc_spinboxFP.$(OBJEXT) \
+ libwidgets_a-moc_spinbox.$(OBJEXT) \
+ libwidgets_a-moc_comboQuant.$(OBJEXT) \
+ libwidgets_a-moc_bigtime.$(OBJEXT) \
+ libwidgets_a-moc_comment.$(OBJEXT) \
+ libwidgets_a-moc_splitter.$(OBJEXT) \
+ libwidgets_a-moc_gatetime.$(OBJEXT) \
+ libwidgets_a-moc_velocity.$(OBJEXT) \
+ libwidgets_a-moc_metronome.$(OBJEXT) \
+ libwidgets_a-moc_posedit.$(OBJEXT) \
+ libwidgets_a-moc_pitchedit.$(OBJEXT) \
+ libwidgets_a-moc_pitchlabel.$(OBJEXT) \
+ libwidgets_a-moc_poslabel.$(OBJEXT) \
+ libwidgets_a-moc_filedialog.$(OBJEXT) \
+ libwidgets_a-moc_sigedit.$(OBJEXT) \
+ libwidgets_a-moc_shortcutconfig.$(OBJEXT) \
+ libwidgets_a-moc_shortcutcapturedialog.$(OBJEXT) \
+ libwidgets_a-moc_combobox.$(OBJEXT) \
+ libwidgets_a-moc_aboutbox_impl.$(OBJEXT) \
+ libwidgets_a-moc_aboutbox.$(OBJEXT) \
+ libwidgets_a-moc_songinfo.$(OBJEXT) \
+ libwidgets_a-moc_didyouknow.$(OBJEXT) \
+ libwidgets_a-moc_checkbox.$(OBJEXT) \
+ libwidgets_a-moc_vscale.$(OBJEXT) \
+ libwidgets_a-moc_action.$(OBJEXT)
+libwidgets_a_OBJECTS = $(dist_libwidgets_a_OBJECTS) \
+ $(nodist_libwidgets_a_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(dist_libwidgets_a_SOURCES) $(nodist_libwidgets_a_SOURCES)
+DIST_SOURCES = $(dist_libwidgets_a_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOCBOOKSTYLE = @DOCBOOKSTYLE@
+DOCBOOKTARGETS = @DOCBOOKTARGETS@
+DOT = @DOT@
+DOTPATH = @DOTPATH@
+DOXYGEN = @DOXYGEN@
+DOXYGEN_TREEVIEW = @DOXYGEN_TREEVIEW@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FLUIDSYNTHDIRS = @FLUIDSYNTHDIRS@
+FST_CFLAGS = @FST_CFLAGS@
+FST_LIBS = @FST_LIBS@
+Fluidsynth_CFLAGS = @Fluidsynth_CFLAGS@
+Fluidsynth_LIBS = @Fluidsynth_LIBS@
+GIVERTCAP = @GIVERTCAP@
+GREP = @GREP@
+HAVEDOT = @HAVEDOT@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JACK_CFLAGS = @JACK_CFLAGS@
+JACK_LIBS = @JACK_LIBS@
+JADE = @JADE@
+LASH_CFLAGS = @LASH_CFLAGS@
+LASH_LIBS = @LASH_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LO_CFLAGS = @LO_CFLAGS@
+LO_LIBS = @LO_LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MUSECXXFLAGS = @MUSECXXFLAGS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NSGMLS = @NSGMLS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCH = @PCH@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_INCLUDES = @PYTHON_INCLUDES@
+PYTHON_LIB = @PYTHON_LIB@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+QTDIR_BIN = @QTDIR_BIN@
+QTDIR_INC = @QTDIR_INC@
+QT_LIBS = @QT_LIBS@
+RANLIB = @RANLIB@
+SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@
+SAMPLERATE_LIBS = @SAMPLERATE_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+SUIDBUILD = @SUIDBUILD@
+SUIDINSTALL = @SUIDINSTALL@
+USE_SSE = @USE_SSE@
+UUID_CFLAGS = @UUID_CFLAGS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+have_docbook = @have_docbook@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+synth_fluid = @synth_fluid@
+synth_fluidsynth = @synth_fluidsynth@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CXXFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \
+ -I$(top_srcdir)/muse/widgets -DQT_SHARED -DQT_THREAD_SUPPORT \
+ -DQT_PLUGIN $(QTDIR_INC) -DQT3_SUPPORT -DSVNVERSION=\"$(shell \
+ svnversion)\"
+AM_CPPFLAGS =
+MOC = $(QTDIR_BIN)/moc
+#UIC = $(QTDIR_BIN)/uic3
+UIC = /usr/bin/uic3
+UIFILES = $(wildcard *.ui)
+MOCFILES = $(shell for h in $(filter %.h,$(SOURCES)); do \
+ if grep -q Q_OBJECT $$h; then \
+ echo $$h | sed "s/\(.*\)\.h/moc_\1.cpp/"; \
+ fi; \
+ done)
+
+
+# This is for stuff that needs the widgets, but dosn't build them with
+# libtool
+BUILT_SOURCES = $(MOCFILES) $(UIFILES:%.ui=%.h) \
+ posedit.non-libtool.cpp poslabel.non-libtool.cpp \
+ pitchedit.non-libtool.cpp pitchlabel.non-libtool.cpp \
+ sigedit.non-libtool.cpp tempolabel.non-libtool.cpp \
+ slider.non-libtool.cpp sliderbase.non-libtool.cpp \
+ sclif.non-libtool.cpp moc_posedit.non-libtool.cpp \
+ moc_poslabel.non-libtool.cpp moc_sigedit.non-libtool.cpp \
+ moc_pitchedit.non-libtool.cpp moc_pitchlabel.non-libtool.cpp \
+ moc_tempolabel.non-libtool.cpp moc_slider.non-libtool.cpp \
+ moc_sliderbase.non-libtool.cpp scldiv.non-libtool.cpp \
+ mmath.non-libtool.cpp scldraw.non-libtool.cpp \
+ dimap.non-libtool.cpp drange.non-libtool.cpp \
+ doublelabel.non-libtool.cpp moc_doublelabel.non-libtool.cpp \
+ dentry.non-libtool.cpp moc_dentry.non-libtool.cpp \
+ checkbox.non-libtool.cpp moc_checkbox.non-libtool.cpp \
+ combobox.non-libtool.cpp moc_combobox.non-libtool.cpp
+MOSTLYCLEANFILES = $(MOCFILES) $(UIFILES:%.ui=%.h)
+SUFFIXES = .ui .h.gch
+libwidgets_a_CPPFLAGS = $(MUSECXXFLAGS) -I.. -I$(top_srcdir)/synti \
+ $(am__append_1)
+noinst_LIBRARIES = libwidgets.a
+dist_libwidgets_a_SOURCES = \
+ utils.cpp utils.h \
+ citem.cpp citem.h \
+ vscale.cpp vscale.h \
+ drange.cpp drange.h \
+ sclif.cpp sclif.h \
+ dimap.cpp dimap.h \
+ scldiv.cpp scldiv.h \
+ mmath.cpp mmath.h \
+ scldraw.cpp scldraw.h \
+ action.h \
+ \
+ scrollscale.cpp scrollscale.h \
+ view.cpp view.h \
+ nentry.cpp nentry.h \
+ mtscale.cpp mtscale.h \
+ sigscale.cpp sigscale.h \
+ hitscale.cpp hitscale.h \
+ intlabel.cpp intlabel.h \
+ doublelabel.cpp doublelabel.h \
+ canvas.cpp canvas.h \
+ noteinfo.cpp noteinfo.h \
+ dentry.cpp dentry.h \
+ siglabel.cpp siglabel.h \
+ ttoolbar.cpp ttoolbar.h \
+ ttoolbutton.cpp ttoolbutton.h \
+ tb1.cpp tb1.h \
+ lcombo.cpp lcombo.h \
+ swidget.cpp swidget.h \
+ tempolabel.cpp tempolabel.h \
+ tools.cpp tools.h \
+ fontsel.cpp fontsel.h \
+ ctrlcombo.cpp ctrlcombo.h \
+ sliderbase.cpp sliderbase.h \
+ slider.cpp slider.h \
+ midisyncimpl.cpp midisyncimpl.h \
+ header.cpp header.h \
+ knob.cpp knob.h \
+ mlabel.cpp mlabel.h \
+ genset.cpp genset.h \
+ mixdowndialog.cpp mixdowndialog.h \
+ spinboxFP.cpp spinboxFP.h \
+ spinbox.cpp spinbox.h \
+ comboQuant.cpp comboQuant.h \
+ bigtime.cpp bigtime.h \
+ comment.cpp comment.h \
+ splitter.cpp splitter.h \
+ gatetime.cpp gatetime.h \
+ velocity.cpp velocity.h \
+ metronome.cpp metronome.h \
+ posedit.cpp posedit.h section.h \
+ pitchedit.cpp pitchedit.h \
+ pitchlabel.cpp pitchlabel.h \
+ poslabel.cpp poslabel.h \
+ filedialog.cpp filedialog.h \
+ sigedit.cpp sigedit.h \
+ shortcutconfig.cpp shortcutconfig.h \
+ shortcutcapturedialog.cpp shortcutcapturedialog.h \
+ combobox.cpp combobox.h \
+ checkbox.cpp checkbox.h \
+ aboutbox_impl.cpp aboutbox_impl.h \
+ popupmenu.cpp popupmenu.h \
+ listitem.h \
+ menutitleitem.h \
+ \
+ midisync.ui \
+ gensetbase.ui \
+ mixdowndialogbase.ui \
+ transposebase.ui \
+ transformbase.ui \
+ appearancebase.ui \
+ itransformbase.ui \
+ commentbase.ui \
+ synthconfigbase.ui \
+ gatetimebase.ui \
+ velocitybase.ui \
+ metronomebase.ui \
+ mtrackinfobase.ui \
+ wtrackinfobase.ui \
+ editctrl7dialogbase.ui \
+ editmetadialogbase.ui \
+ editnotedialogbase.ui \
+ editsysexdialogbase.ui \
+ cliplisteditorbase.ui \
+ mittransposebase.ui \
+ fdialogbuttons.ui \
+ shortcutconfigbase.ui \
+ shortcutcapturedialogbase.ui \
+ aboutbox.ui \
+ songinfo.ui \
+ didyouknow.ui \
+ configmidifilebase.ui
+
+nodist_libwidgets_a_SOURCES = \
+ moc_scrollscale.cpp \
+ moc_view.cpp \
+ moc_nentry.cpp \
+ moc_mtscale.cpp \
+ moc_sigscale.cpp \
+ moc_hitscale.cpp \
+ moc_intlabel.cpp \
+ moc_doublelabel.cpp \
+ moc_canvas.cpp \
+ moc_noteinfo.cpp \
+ moc_dentry.cpp \
+ moc_siglabel.cpp \
+ moc_ttoolbar.cpp \
+ moc_ttoolbutton.cpp \
+ moc_tb1.cpp \
+ moc_lcombo.cpp \
+ moc_swidget.cpp \
+ moc_tempolabel.cpp \
+ moc_tools.cpp \
+ moc_popupmenu.cpp \
+ moc_fontsel.cpp \
+ moc_ctrlcombo.cpp \
+ moc_sliderbase.cpp \
+ moc_slider.cpp \
+ moc_midisyncimpl.cpp \
+ moc_header.cpp \
+ moc_knob.cpp \
+ moc_mlabel.cpp \
+ moc_genset.cpp \
+ moc_mixdowndialog.cpp \
+ moc_spinboxFP.cpp \
+ moc_spinbox.cpp \
+ moc_comboQuant.cpp \
+ moc_bigtime.cpp \
+ moc_comment.cpp \
+ moc_splitter.cpp \
+ moc_gatetime.cpp \
+ moc_velocity.cpp \
+ moc_metronome.cpp \
+ moc_posedit.cpp \
+ moc_pitchedit.cpp \
+ moc_pitchlabel.cpp \
+ moc_poslabel.cpp \
+ moc_filedialog.cpp \
+ moc_sigedit.cpp \
+ moc_shortcutconfig.cpp \
+ moc_shortcutcapturedialog.cpp \
+ moc_combobox.cpp \
+ moc_aboutbox_impl.cpp\
+ moc_aboutbox.cpp \
+ moc_songinfo.cpp \
+ moc_didyouknow.cpp \
+ moc_checkbox.cpp \
+ moc_vscale.cpp \
+ moc_action.cpp
+
+
+# inst_PROGRAMS = musewidgetsplugin.so
+# instdir = $(pkglibdir)/qtplugins/designer
+#
+### widgetsplugin_LTLIBRARIES = musewidgetsplugin.la
+### widgetsplugindir = $(pkglibdir)/qtplugin
+
+#dist_musewidgetsplugin_so_SOURCES = \
+# musewidgetsplug.cpp \
+# sigedit.h \
+# $(top_srcdir)/muse/xml.cpp $(top_srcdir)/muse/tempo.cpp \
+# $(top_srcdir)/muse/sig.cpp $(top_srcdir)/muse/pos.cpp
+
+#nodist_musewidgetsplugin_so_SOURCES = \
+# moc_posedit.non-libtool.cpp moc_poslabel.non-libtool.cpp \
+# moc_sigedit.non-libtool.cpp \
+# moc_pitchedit.non-libtool.cpp moc_pitchlabel.non-libtool.cpp \
+# moc_tempolabel.non-libtool.cpp \
+# \
+# posedit.non-libtool.cpp poslabel.non-libtool.cpp \
+# pitchedit.non-libtool.cpp pitchlabel.non-libtool.cpp \
+# sigedit.non-libtool.cpp \
+# tempolabel.non-libtool.cpp \
+# slider.non-libtool.cpp moc_slider.non-libtool.cpp \
+# sliderbase.non-libtool.cpp moc_sliderbase.non-libtool.cpp \
+# sclif.non-libtool.cpp \
+# scldiv.non-libtool.cpp mmath.non-libtool.cpp scldraw.non-libtool.cpp \
+# dimap.non-libtool.cpp drange.non-libtool.cpp \
+# doublelabel.non-libtool.cpp moc_doublelabel.non-libtool.cpp \
+# dentry.non-libtool.cpp moc_dentry.non-libtool.cpp \
+# checkbox.non-libtool.cpp moc_checkbox.non-libtool.cpp \
+# combobox.non-libtool.cpp moc_combobox.non-libtool.cpp
+
+#musewidgetsplugin_so_LDFLAGS = --whole-archive -fno-exceptions -shared \
+# -Wl,-soname,libmusewidgetsplugin.so.1 $(QT_LIBS) -lasound
+
+#musewidgetsplug.o: musewidgetsplug.cpp
+# $(CXXCOMPILE) -fPIC -DQT_THREAD_SUPPORT -DQT_SHARED -DQT_PLUGIN -c musewidgetsplug.cpp
+EXTRA_DIST = ctrlcombo.cw
+CLEANFILES = \
+ posedit.non-libtool.cpp \
+ poslabel.non-libtool.cpp \
+ pitchedit.non-libtool.cpp \
+ pitchlabel.non-libtool.cpp \
+ sigedit.non-libtool.cpp \
+ tempolabel.non-libtool.cpp \
+ slider.non-libtool.cpp \
+ sliderbase.non-libtool.cpp \
+ sclif.non-libtool.cpp \
+ moc_posedit.non-libtool.cpp \
+ moc_poslabel.non-libtool.cpp \
+ moc_sigedit.non-libtool.cpp \
+ moc_pitchedit.non-libtool.cpp \
+ moc_pitchlabel.non-libtool.cpp \
+ moc_tempolabel.non-libtool.cpp \
+ moc_slider.non-libtool.cpp \
+ moc_sliderbase.non-libtool.cpp \
+ scldiv.non-libtool.cpp mmath.non-libtool.cpp scldraw.non-libtool.cpp \
+ dimap.non-libtool.cpp drange.non-libtool.cpp \
+ doublelabel.non-libtool.cpp moc_doublelabel.non-libtool.cpp \
+ dentry.non-libtool.cpp moc_dentry.non-libtool.cpp \
+ checkbox.non-libtool.cpp moc_checkbox.non-libtool.cpp \
+ combobox.non-libtool.cpp moc_combobox.non-libtool.cpp
+
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .ui .h.gch .cpp .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/common.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu muse/widgets/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu muse/widgets/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libwidgets.a: $(libwidgets_a_OBJECTS) $(libwidgets_a_DEPENDENCIES)
+ -rm -f libwidgets.a
+ $(libwidgets_a_AR) libwidgets.a $(libwidgets_a_OBJECTS) $(libwidgets_a_LIBADD)
+ $(RANLIB) libwidgets.a
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-aboutbox_impl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-bigtime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-canvas.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-checkbox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-citem.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-comboQuant.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-combobox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-comment.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-ctrlcombo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-dentry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-dimap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-doublelabel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-drange.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-filedialog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-fontsel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-gatetime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-genset.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-header.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-hitscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-intlabel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-knob.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-lcombo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-metronome.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-midisyncimpl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-mixdowndialog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-mlabel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-mmath.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_aboutbox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_aboutbox_impl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_action.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_bigtime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_canvas.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_checkbox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_comboQuant.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_combobox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_comment.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_ctrlcombo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_dentry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_didyouknow.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_doublelabel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_filedialog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_fontsel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_gatetime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_genset.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_header.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_hitscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_intlabel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_knob.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_lcombo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_metronome.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_midisyncimpl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_mixdowndialog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_mlabel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_mtscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_nentry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_noteinfo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_pitchedit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_pitchlabel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_popupmenu.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_posedit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_poslabel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_scrollscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_shortcutcapturedialog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_shortcutconfig.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_sigedit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_siglabel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_sigscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_slider.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_sliderbase.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_songinfo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_spinbox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_spinboxFP.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_splitter.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_swidget.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_tb1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_tempolabel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_tools.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_ttoolbar.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_ttoolbutton.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_velocity.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_view.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-moc_vscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-mtscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-nentry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-noteinfo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-pitchedit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-pitchlabel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-popupmenu.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-posedit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-poslabel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-scldiv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-scldraw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-sclif.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-scrollscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-shortcutcapturedialog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-shortcutconfig.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-sigedit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-siglabel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-sigscale.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-slider.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-sliderbase.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-spinbox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-spinboxFP.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-splitter.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-swidget.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-tb1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-tempolabel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-tools.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-ttoolbar.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-ttoolbutton.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-velocity.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-view.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libwidgets_a-vscale.Po@am__quote@
+
+.cpp.o:
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
+
+libwidgets_a-utils.o: utils.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-utils.o -MD -MP -MF $(DEPDIR)/libwidgets_a-utils.Tpo -c -o libwidgets_a-utils.o `test -f 'utils.cpp' || echo '$(srcdir)/'`utils.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-utils.Tpo $(DEPDIR)/libwidgets_a-utils.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='utils.cpp' object='libwidgets_a-utils.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-utils.o `test -f 'utils.cpp' || echo '$(srcdir)/'`utils.cpp
+
+libwidgets_a-utils.obj: utils.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-utils.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-utils.Tpo -c -o libwidgets_a-utils.obj `if test -f 'utils.cpp'; then $(CYGPATH_W) 'utils.cpp'; else $(CYGPATH_W) '$(srcdir)/utils.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-utils.Tpo $(DEPDIR)/libwidgets_a-utils.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='utils.cpp' object='libwidgets_a-utils.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-utils.obj `if test -f 'utils.cpp'; then $(CYGPATH_W) 'utils.cpp'; else $(CYGPATH_W) '$(srcdir)/utils.cpp'; fi`
+
+libwidgets_a-citem.o: citem.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-citem.o -MD -MP -MF $(DEPDIR)/libwidgets_a-citem.Tpo -c -o libwidgets_a-citem.o `test -f 'citem.cpp' || echo '$(srcdir)/'`citem.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-citem.Tpo $(DEPDIR)/libwidgets_a-citem.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='citem.cpp' object='libwidgets_a-citem.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-citem.o `test -f 'citem.cpp' || echo '$(srcdir)/'`citem.cpp
+
+libwidgets_a-citem.obj: citem.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-citem.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-citem.Tpo -c -o libwidgets_a-citem.obj `if test -f 'citem.cpp'; then $(CYGPATH_W) 'citem.cpp'; else $(CYGPATH_W) '$(srcdir)/citem.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-citem.Tpo $(DEPDIR)/libwidgets_a-citem.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='citem.cpp' object='libwidgets_a-citem.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-citem.obj `if test -f 'citem.cpp'; then $(CYGPATH_W) 'citem.cpp'; else $(CYGPATH_W) '$(srcdir)/citem.cpp'; fi`
+
+libwidgets_a-vscale.o: vscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-vscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-vscale.Tpo -c -o libwidgets_a-vscale.o `test -f 'vscale.cpp' || echo '$(srcdir)/'`vscale.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-vscale.Tpo $(DEPDIR)/libwidgets_a-vscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='vscale.cpp' object='libwidgets_a-vscale.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-vscale.o `test -f 'vscale.cpp' || echo '$(srcdir)/'`vscale.cpp
+
+libwidgets_a-vscale.obj: vscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-vscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-vscale.Tpo -c -o libwidgets_a-vscale.obj `if test -f 'vscale.cpp'; then $(CYGPATH_W) 'vscale.cpp'; else $(CYGPATH_W) '$(srcdir)/vscale.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-vscale.Tpo $(DEPDIR)/libwidgets_a-vscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='vscale.cpp' object='libwidgets_a-vscale.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-vscale.obj `if test -f 'vscale.cpp'; then $(CYGPATH_W) 'vscale.cpp'; else $(CYGPATH_W) '$(srcdir)/vscale.cpp'; fi`
+
+libwidgets_a-drange.o: drange.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-drange.o -MD -MP -MF $(DEPDIR)/libwidgets_a-drange.Tpo -c -o libwidgets_a-drange.o `test -f 'drange.cpp' || echo '$(srcdir)/'`drange.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-drange.Tpo $(DEPDIR)/libwidgets_a-drange.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='drange.cpp' object='libwidgets_a-drange.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-drange.o `test -f 'drange.cpp' || echo '$(srcdir)/'`drange.cpp
+
+libwidgets_a-drange.obj: drange.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-drange.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-drange.Tpo -c -o libwidgets_a-drange.obj `if test -f 'drange.cpp'; then $(CYGPATH_W) 'drange.cpp'; else $(CYGPATH_W) '$(srcdir)/drange.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-drange.Tpo $(DEPDIR)/libwidgets_a-drange.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='drange.cpp' object='libwidgets_a-drange.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-drange.obj `if test -f 'drange.cpp'; then $(CYGPATH_W) 'drange.cpp'; else $(CYGPATH_W) '$(srcdir)/drange.cpp'; fi`
+
+libwidgets_a-sclif.o: sclif.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sclif.o -MD -MP -MF $(DEPDIR)/libwidgets_a-sclif.Tpo -c -o libwidgets_a-sclif.o `test -f 'sclif.cpp' || echo '$(srcdir)/'`sclif.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sclif.Tpo $(DEPDIR)/libwidgets_a-sclif.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sclif.cpp' object='libwidgets_a-sclif.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sclif.o `test -f 'sclif.cpp' || echo '$(srcdir)/'`sclif.cpp
+
+libwidgets_a-sclif.obj: sclif.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sclif.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-sclif.Tpo -c -o libwidgets_a-sclif.obj `if test -f 'sclif.cpp'; then $(CYGPATH_W) 'sclif.cpp'; else $(CYGPATH_W) '$(srcdir)/sclif.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sclif.Tpo $(DEPDIR)/libwidgets_a-sclif.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sclif.cpp' object='libwidgets_a-sclif.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sclif.obj `if test -f 'sclif.cpp'; then $(CYGPATH_W) 'sclif.cpp'; else $(CYGPATH_W) '$(srcdir)/sclif.cpp'; fi`
+
+libwidgets_a-dimap.o: dimap.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-dimap.o -MD -MP -MF $(DEPDIR)/libwidgets_a-dimap.Tpo -c -o libwidgets_a-dimap.o `test -f 'dimap.cpp' || echo '$(srcdir)/'`dimap.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-dimap.Tpo $(DEPDIR)/libwidgets_a-dimap.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='dimap.cpp' object='libwidgets_a-dimap.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-dimap.o `test -f 'dimap.cpp' || echo '$(srcdir)/'`dimap.cpp
+
+libwidgets_a-dimap.obj: dimap.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-dimap.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-dimap.Tpo -c -o libwidgets_a-dimap.obj `if test -f 'dimap.cpp'; then $(CYGPATH_W) 'dimap.cpp'; else $(CYGPATH_W) '$(srcdir)/dimap.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-dimap.Tpo $(DEPDIR)/libwidgets_a-dimap.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='dimap.cpp' object='libwidgets_a-dimap.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-dimap.obj `if test -f 'dimap.cpp'; then $(CYGPATH_W) 'dimap.cpp'; else $(CYGPATH_W) '$(srcdir)/dimap.cpp'; fi`
+
+libwidgets_a-scldiv.o: scldiv.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-scldiv.o -MD -MP -MF $(DEPDIR)/libwidgets_a-scldiv.Tpo -c -o libwidgets_a-scldiv.o `test -f 'scldiv.cpp' || echo '$(srcdir)/'`scldiv.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-scldiv.Tpo $(DEPDIR)/libwidgets_a-scldiv.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='scldiv.cpp' object='libwidgets_a-scldiv.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-scldiv.o `test -f 'scldiv.cpp' || echo '$(srcdir)/'`scldiv.cpp
+
+libwidgets_a-scldiv.obj: scldiv.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-scldiv.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-scldiv.Tpo -c -o libwidgets_a-scldiv.obj `if test -f 'scldiv.cpp'; then $(CYGPATH_W) 'scldiv.cpp'; else $(CYGPATH_W) '$(srcdir)/scldiv.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-scldiv.Tpo $(DEPDIR)/libwidgets_a-scldiv.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='scldiv.cpp' object='libwidgets_a-scldiv.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-scldiv.obj `if test -f 'scldiv.cpp'; then $(CYGPATH_W) 'scldiv.cpp'; else $(CYGPATH_W) '$(srcdir)/scldiv.cpp'; fi`
+
+libwidgets_a-mmath.o: mmath.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mmath.o -MD -MP -MF $(DEPDIR)/libwidgets_a-mmath.Tpo -c -o libwidgets_a-mmath.o `test -f 'mmath.cpp' || echo '$(srcdir)/'`mmath.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mmath.Tpo $(DEPDIR)/libwidgets_a-mmath.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mmath.cpp' object='libwidgets_a-mmath.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mmath.o `test -f 'mmath.cpp' || echo '$(srcdir)/'`mmath.cpp
+
+libwidgets_a-mmath.obj: mmath.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mmath.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-mmath.Tpo -c -o libwidgets_a-mmath.obj `if test -f 'mmath.cpp'; then $(CYGPATH_W) 'mmath.cpp'; else $(CYGPATH_W) '$(srcdir)/mmath.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mmath.Tpo $(DEPDIR)/libwidgets_a-mmath.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mmath.cpp' object='libwidgets_a-mmath.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mmath.obj `if test -f 'mmath.cpp'; then $(CYGPATH_W) 'mmath.cpp'; else $(CYGPATH_W) '$(srcdir)/mmath.cpp'; fi`
+
+libwidgets_a-scldraw.o: scldraw.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-scldraw.o -MD -MP -MF $(DEPDIR)/libwidgets_a-scldraw.Tpo -c -o libwidgets_a-scldraw.o `test -f 'scldraw.cpp' || echo '$(srcdir)/'`scldraw.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-scldraw.Tpo $(DEPDIR)/libwidgets_a-scldraw.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='scldraw.cpp' object='libwidgets_a-scldraw.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-scldraw.o `test -f 'scldraw.cpp' || echo '$(srcdir)/'`scldraw.cpp
+
+libwidgets_a-scldraw.obj: scldraw.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-scldraw.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-scldraw.Tpo -c -o libwidgets_a-scldraw.obj `if test -f 'scldraw.cpp'; then $(CYGPATH_W) 'scldraw.cpp'; else $(CYGPATH_W) '$(srcdir)/scldraw.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-scldraw.Tpo $(DEPDIR)/libwidgets_a-scldraw.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='scldraw.cpp' object='libwidgets_a-scldraw.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-scldraw.obj `if test -f 'scldraw.cpp'; then $(CYGPATH_W) 'scldraw.cpp'; else $(CYGPATH_W) '$(srcdir)/scldraw.cpp'; fi`
+
+libwidgets_a-scrollscale.o: scrollscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-scrollscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-scrollscale.Tpo -c -o libwidgets_a-scrollscale.o `test -f 'scrollscale.cpp' || echo '$(srcdir)/'`scrollscale.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-scrollscale.Tpo $(DEPDIR)/libwidgets_a-scrollscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='scrollscale.cpp' object='libwidgets_a-scrollscale.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-scrollscale.o `test -f 'scrollscale.cpp' || echo '$(srcdir)/'`scrollscale.cpp
+
+libwidgets_a-scrollscale.obj: scrollscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-scrollscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-scrollscale.Tpo -c -o libwidgets_a-scrollscale.obj `if test -f 'scrollscale.cpp'; then $(CYGPATH_W) 'scrollscale.cpp'; else $(CYGPATH_W) '$(srcdir)/scrollscale.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-scrollscale.Tpo $(DEPDIR)/libwidgets_a-scrollscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='scrollscale.cpp' object='libwidgets_a-scrollscale.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-scrollscale.obj `if test -f 'scrollscale.cpp'; then $(CYGPATH_W) 'scrollscale.cpp'; else $(CYGPATH_W) '$(srcdir)/scrollscale.cpp'; fi`
+
+libwidgets_a-view.o: view.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-view.o -MD -MP -MF $(DEPDIR)/libwidgets_a-view.Tpo -c -o libwidgets_a-view.o `test -f 'view.cpp' || echo '$(srcdir)/'`view.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-view.Tpo $(DEPDIR)/libwidgets_a-view.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='view.cpp' object='libwidgets_a-view.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-view.o `test -f 'view.cpp' || echo '$(srcdir)/'`view.cpp
+
+libwidgets_a-view.obj: view.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-view.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-view.Tpo -c -o libwidgets_a-view.obj `if test -f 'view.cpp'; then $(CYGPATH_W) 'view.cpp'; else $(CYGPATH_W) '$(srcdir)/view.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-view.Tpo $(DEPDIR)/libwidgets_a-view.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='view.cpp' object='libwidgets_a-view.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-view.obj `if test -f 'view.cpp'; then $(CYGPATH_W) 'view.cpp'; else $(CYGPATH_W) '$(srcdir)/view.cpp'; fi`
+
+libwidgets_a-nentry.o: nentry.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-nentry.o -MD -MP -MF $(DEPDIR)/libwidgets_a-nentry.Tpo -c -o libwidgets_a-nentry.o `test -f 'nentry.cpp' || echo '$(srcdir)/'`nentry.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-nentry.Tpo $(DEPDIR)/libwidgets_a-nentry.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='nentry.cpp' object='libwidgets_a-nentry.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-nentry.o `test -f 'nentry.cpp' || echo '$(srcdir)/'`nentry.cpp
+
+libwidgets_a-nentry.obj: nentry.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-nentry.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-nentry.Tpo -c -o libwidgets_a-nentry.obj `if test -f 'nentry.cpp'; then $(CYGPATH_W) 'nentry.cpp'; else $(CYGPATH_W) '$(srcdir)/nentry.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-nentry.Tpo $(DEPDIR)/libwidgets_a-nentry.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='nentry.cpp' object='libwidgets_a-nentry.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-nentry.obj `if test -f 'nentry.cpp'; then $(CYGPATH_W) 'nentry.cpp'; else $(CYGPATH_W) '$(srcdir)/nentry.cpp'; fi`
+
+libwidgets_a-mtscale.o: mtscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mtscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-mtscale.Tpo -c -o libwidgets_a-mtscale.o `test -f 'mtscale.cpp' || echo '$(srcdir)/'`mtscale.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mtscale.Tpo $(DEPDIR)/libwidgets_a-mtscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mtscale.cpp' object='libwidgets_a-mtscale.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mtscale.o `test -f 'mtscale.cpp' || echo '$(srcdir)/'`mtscale.cpp
+
+libwidgets_a-mtscale.obj: mtscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mtscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-mtscale.Tpo -c -o libwidgets_a-mtscale.obj `if test -f 'mtscale.cpp'; then $(CYGPATH_W) 'mtscale.cpp'; else $(CYGPATH_W) '$(srcdir)/mtscale.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mtscale.Tpo $(DEPDIR)/libwidgets_a-mtscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mtscale.cpp' object='libwidgets_a-mtscale.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mtscale.obj `if test -f 'mtscale.cpp'; then $(CYGPATH_W) 'mtscale.cpp'; else $(CYGPATH_W) '$(srcdir)/mtscale.cpp'; fi`
+
+libwidgets_a-sigscale.o: sigscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sigscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-sigscale.Tpo -c -o libwidgets_a-sigscale.o `test -f 'sigscale.cpp' || echo '$(srcdir)/'`sigscale.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sigscale.Tpo $(DEPDIR)/libwidgets_a-sigscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sigscale.cpp' object='libwidgets_a-sigscale.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sigscale.o `test -f 'sigscale.cpp' || echo '$(srcdir)/'`sigscale.cpp
+
+libwidgets_a-sigscale.obj: sigscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sigscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-sigscale.Tpo -c -o libwidgets_a-sigscale.obj `if test -f 'sigscale.cpp'; then $(CYGPATH_W) 'sigscale.cpp'; else $(CYGPATH_W) '$(srcdir)/sigscale.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sigscale.Tpo $(DEPDIR)/libwidgets_a-sigscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sigscale.cpp' object='libwidgets_a-sigscale.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sigscale.obj `if test -f 'sigscale.cpp'; then $(CYGPATH_W) 'sigscale.cpp'; else $(CYGPATH_W) '$(srcdir)/sigscale.cpp'; fi`
+
+libwidgets_a-hitscale.o: hitscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-hitscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-hitscale.Tpo -c -o libwidgets_a-hitscale.o `test -f 'hitscale.cpp' || echo '$(srcdir)/'`hitscale.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-hitscale.Tpo $(DEPDIR)/libwidgets_a-hitscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='hitscale.cpp' object='libwidgets_a-hitscale.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-hitscale.o `test -f 'hitscale.cpp' || echo '$(srcdir)/'`hitscale.cpp
+
+libwidgets_a-hitscale.obj: hitscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-hitscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-hitscale.Tpo -c -o libwidgets_a-hitscale.obj `if test -f 'hitscale.cpp'; then $(CYGPATH_W) 'hitscale.cpp'; else $(CYGPATH_W) '$(srcdir)/hitscale.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-hitscale.Tpo $(DEPDIR)/libwidgets_a-hitscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='hitscale.cpp' object='libwidgets_a-hitscale.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-hitscale.obj `if test -f 'hitscale.cpp'; then $(CYGPATH_W) 'hitscale.cpp'; else $(CYGPATH_W) '$(srcdir)/hitscale.cpp'; fi`
+
+libwidgets_a-intlabel.o: intlabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-intlabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-intlabel.Tpo -c -o libwidgets_a-intlabel.o `test -f 'intlabel.cpp' || echo '$(srcdir)/'`intlabel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-intlabel.Tpo $(DEPDIR)/libwidgets_a-intlabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='intlabel.cpp' object='libwidgets_a-intlabel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-intlabel.o `test -f 'intlabel.cpp' || echo '$(srcdir)/'`intlabel.cpp
+
+libwidgets_a-intlabel.obj: intlabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-intlabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-intlabel.Tpo -c -o libwidgets_a-intlabel.obj `if test -f 'intlabel.cpp'; then $(CYGPATH_W) 'intlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/intlabel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-intlabel.Tpo $(DEPDIR)/libwidgets_a-intlabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='intlabel.cpp' object='libwidgets_a-intlabel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-intlabel.obj `if test -f 'intlabel.cpp'; then $(CYGPATH_W) 'intlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/intlabel.cpp'; fi`
+
+libwidgets_a-doublelabel.o: doublelabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-doublelabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-doublelabel.Tpo -c -o libwidgets_a-doublelabel.o `test -f 'doublelabel.cpp' || echo '$(srcdir)/'`doublelabel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-doublelabel.Tpo $(DEPDIR)/libwidgets_a-doublelabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='doublelabel.cpp' object='libwidgets_a-doublelabel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-doublelabel.o `test -f 'doublelabel.cpp' || echo '$(srcdir)/'`doublelabel.cpp
+
+libwidgets_a-doublelabel.obj: doublelabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-doublelabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-doublelabel.Tpo -c -o libwidgets_a-doublelabel.obj `if test -f 'doublelabel.cpp'; then $(CYGPATH_W) 'doublelabel.cpp'; else $(CYGPATH_W) '$(srcdir)/doublelabel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-doublelabel.Tpo $(DEPDIR)/libwidgets_a-doublelabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='doublelabel.cpp' object='libwidgets_a-doublelabel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-doublelabel.obj `if test -f 'doublelabel.cpp'; then $(CYGPATH_W) 'doublelabel.cpp'; else $(CYGPATH_W) '$(srcdir)/doublelabel.cpp'; fi`
+
+libwidgets_a-canvas.o: canvas.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-canvas.o -MD -MP -MF $(DEPDIR)/libwidgets_a-canvas.Tpo -c -o libwidgets_a-canvas.o `test -f 'canvas.cpp' || echo '$(srcdir)/'`canvas.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-canvas.Tpo $(DEPDIR)/libwidgets_a-canvas.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='canvas.cpp' object='libwidgets_a-canvas.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-canvas.o `test -f 'canvas.cpp' || echo '$(srcdir)/'`canvas.cpp
+
+libwidgets_a-canvas.obj: canvas.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-canvas.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-canvas.Tpo -c -o libwidgets_a-canvas.obj `if test -f 'canvas.cpp'; then $(CYGPATH_W) 'canvas.cpp'; else $(CYGPATH_W) '$(srcdir)/canvas.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-canvas.Tpo $(DEPDIR)/libwidgets_a-canvas.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='canvas.cpp' object='libwidgets_a-canvas.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-canvas.obj `if test -f 'canvas.cpp'; then $(CYGPATH_W) 'canvas.cpp'; else $(CYGPATH_W) '$(srcdir)/canvas.cpp'; fi`
+
+libwidgets_a-noteinfo.o: noteinfo.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-noteinfo.o -MD -MP -MF $(DEPDIR)/libwidgets_a-noteinfo.Tpo -c -o libwidgets_a-noteinfo.o `test -f 'noteinfo.cpp' || echo '$(srcdir)/'`noteinfo.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-noteinfo.Tpo $(DEPDIR)/libwidgets_a-noteinfo.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noteinfo.cpp' object='libwidgets_a-noteinfo.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-noteinfo.o `test -f 'noteinfo.cpp' || echo '$(srcdir)/'`noteinfo.cpp
+
+libwidgets_a-noteinfo.obj: noteinfo.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-noteinfo.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-noteinfo.Tpo -c -o libwidgets_a-noteinfo.obj `if test -f 'noteinfo.cpp'; then $(CYGPATH_W) 'noteinfo.cpp'; else $(CYGPATH_W) '$(srcdir)/noteinfo.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-noteinfo.Tpo $(DEPDIR)/libwidgets_a-noteinfo.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noteinfo.cpp' object='libwidgets_a-noteinfo.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-noteinfo.obj `if test -f 'noteinfo.cpp'; then $(CYGPATH_W) 'noteinfo.cpp'; else $(CYGPATH_W) '$(srcdir)/noteinfo.cpp'; fi`
+
+libwidgets_a-dentry.o: dentry.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-dentry.o -MD -MP -MF $(DEPDIR)/libwidgets_a-dentry.Tpo -c -o libwidgets_a-dentry.o `test -f 'dentry.cpp' || echo '$(srcdir)/'`dentry.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-dentry.Tpo $(DEPDIR)/libwidgets_a-dentry.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='dentry.cpp' object='libwidgets_a-dentry.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-dentry.o `test -f 'dentry.cpp' || echo '$(srcdir)/'`dentry.cpp
+
+libwidgets_a-dentry.obj: dentry.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-dentry.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-dentry.Tpo -c -o libwidgets_a-dentry.obj `if test -f 'dentry.cpp'; then $(CYGPATH_W) 'dentry.cpp'; else $(CYGPATH_W) '$(srcdir)/dentry.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-dentry.Tpo $(DEPDIR)/libwidgets_a-dentry.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='dentry.cpp' object='libwidgets_a-dentry.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-dentry.obj `if test -f 'dentry.cpp'; then $(CYGPATH_W) 'dentry.cpp'; else $(CYGPATH_W) '$(srcdir)/dentry.cpp'; fi`
+
+libwidgets_a-siglabel.o: siglabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-siglabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-siglabel.Tpo -c -o libwidgets_a-siglabel.o `test -f 'siglabel.cpp' || echo '$(srcdir)/'`siglabel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-siglabel.Tpo $(DEPDIR)/libwidgets_a-siglabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='siglabel.cpp' object='libwidgets_a-siglabel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-siglabel.o `test -f 'siglabel.cpp' || echo '$(srcdir)/'`siglabel.cpp
+
+libwidgets_a-siglabel.obj: siglabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-siglabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-siglabel.Tpo -c -o libwidgets_a-siglabel.obj `if test -f 'siglabel.cpp'; then $(CYGPATH_W) 'siglabel.cpp'; else $(CYGPATH_W) '$(srcdir)/siglabel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-siglabel.Tpo $(DEPDIR)/libwidgets_a-siglabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='siglabel.cpp' object='libwidgets_a-siglabel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-siglabel.obj `if test -f 'siglabel.cpp'; then $(CYGPATH_W) 'siglabel.cpp'; else $(CYGPATH_W) '$(srcdir)/siglabel.cpp'; fi`
+
+libwidgets_a-ttoolbar.o: ttoolbar.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-ttoolbar.o -MD -MP -MF $(DEPDIR)/libwidgets_a-ttoolbar.Tpo -c -o libwidgets_a-ttoolbar.o `test -f 'ttoolbar.cpp' || echo '$(srcdir)/'`ttoolbar.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-ttoolbar.Tpo $(DEPDIR)/libwidgets_a-ttoolbar.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ttoolbar.cpp' object='libwidgets_a-ttoolbar.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-ttoolbar.o `test -f 'ttoolbar.cpp' || echo '$(srcdir)/'`ttoolbar.cpp
+
+libwidgets_a-ttoolbar.obj: ttoolbar.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-ttoolbar.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-ttoolbar.Tpo -c -o libwidgets_a-ttoolbar.obj `if test -f 'ttoolbar.cpp'; then $(CYGPATH_W) 'ttoolbar.cpp'; else $(CYGPATH_W) '$(srcdir)/ttoolbar.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-ttoolbar.Tpo $(DEPDIR)/libwidgets_a-ttoolbar.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ttoolbar.cpp' object='libwidgets_a-ttoolbar.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-ttoolbar.obj `if test -f 'ttoolbar.cpp'; then $(CYGPATH_W) 'ttoolbar.cpp'; else $(CYGPATH_W) '$(srcdir)/ttoolbar.cpp'; fi`
+
+libwidgets_a-ttoolbutton.o: ttoolbutton.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-ttoolbutton.o -MD -MP -MF $(DEPDIR)/libwidgets_a-ttoolbutton.Tpo -c -o libwidgets_a-ttoolbutton.o `test -f 'ttoolbutton.cpp' || echo '$(srcdir)/'`ttoolbutton.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-ttoolbutton.Tpo $(DEPDIR)/libwidgets_a-ttoolbutton.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ttoolbutton.cpp' object='libwidgets_a-ttoolbutton.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-ttoolbutton.o `test -f 'ttoolbutton.cpp' || echo '$(srcdir)/'`ttoolbutton.cpp
+
+libwidgets_a-ttoolbutton.obj: ttoolbutton.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-ttoolbutton.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-ttoolbutton.Tpo -c -o libwidgets_a-ttoolbutton.obj `if test -f 'ttoolbutton.cpp'; then $(CYGPATH_W) 'ttoolbutton.cpp'; else $(CYGPATH_W) '$(srcdir)/ttoolbutton.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-ttoolbutton.Tpo $(DEPDIR)/libwidgets_a-ttoolbutton.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ttoolbutton.cpp' object='libwidgets_a-ttoolbutton.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-ttoolbutton.obj `if test -f 'ttoolbutton.cpp'; then $(CYGPATH_W) 'ttoolbutton.cpp'; else $(CYGPATH_W) '$(srcdir)/ttoolbutton.cpp'; fi`
+
+libwidgets_a-tb1.o: tb1.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-tb1.o -MD -MP -MF $(DEPDIR)/libwidgets_a-tb1.Tpo -c -o libwidgets_a-tb1.o `test -f 'tb1.cpp' || echo '$(srcdir)/'`tb1.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-tb1.Tpo $(DEPDIR)/libwidgets_a-tb1.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tb1.cpp' object='libwidgets_a-tb1.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-tb1.o `test -f 'tb1.cpp' || echo '$(srcdir)/'`tb1.cpp
+
+libwidgets_a-tb1.obj: tb1.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-tb1.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-tb1.Tpo -c -o libwidgets_a-tb1.obj `if test -f 'tb1.cpp'; then $(CYGPATH_W) 'tb1.cpp'; else $(CYGPATH_W) '$(srcdir)/tb1.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-tb1.Tpo $(DEPDIR)/libwidgets_a-tb1.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tb1.cpp' object='libwidgets_a-tb1.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-tb1.obj `if test -f 'tb1.cpp'; then $(CYGPATH_W) 'tb1.cpp'; else $(CYGPATH_W) '$(srcdir)/tb1.cpp'; fi`
+
+libwidgets_a-lcombo.o: lcombo.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-lcombo.o -MD -MP -MF $(DEPDIR)/libwidgets_a-lcombo.Tpo -c -o libwidgets_a-lcombo.o `test -f 'lcombo.cpp' || echo '$(srcdir)/'`lcombo.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-lcombo.Tpo $(DEPDIR)/libwidgets_a-lcombo.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='lcombo.cpp' object='libwidgets_a-lcombo.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-lcombo.o `test -f 'lcombo.cpp' || echo '$(srcdir)/'`lcombo.cpp
+
+libwidgets_a-lcombo.obj: lcombo.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-lcombo.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-lcombo.Tpo -c -o libwidgets_a-lcombo.obj `if test -f 'lcombo.cpp'; then $(CYGPATH_W) 'lcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/lcombo.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-lcombo.Tpo $(DEPDIR)/libwidgets_a-lcombo.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='lcombo.cpp' object='libwidgets_a-lcombo.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-lcombo.obj `if test -f 'lcombo.cpp'; then $(CYGPATH_W) 'lcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/lcombo.cpp'; fi`
+
+libwidgets_a-swidget.o: swidget.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-swidget.o -MD -MP -MF $(DEPDIR)/libwidgets_a-swidget.Tpo -c -o libwidgets_a-swidget.o `test -f 'swidget.cpp' || echo '$(srcdir)/'`swidget.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-swidget.Tpo $(DEPDIR)/libwidgets_a-swidget.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='swidget.cpp' object='libwidgets_a-swidget.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-swidget.o `test -f 'swidget.cpp' || echo '$(srcdir)/'`swidget.cpp
+
+libwidgets_a-swidget.obj: swidget.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-swidget.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-swidget.Tpo -c -o libwidgets_a-swidget.obj `if test -f 'swidget.cpp'; then $(CYGPATH_W) 'swidget.cpp'; else $(CYGPATH_W) '$(srcdir)/swidget.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-swidget.Tpo $(DEPDIR)/libwidgets_a-swidget.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='swidget.cpp' object='libwidgets_a-swidget.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-swidget.obj `if test -f 'swidget.cpp'; then $(CYGPATH_W) 'swidget.cpp'; else $(CYGPATH_W) '$(srcdir)/swidget.cpp'; fi`
+
+libwidgets_a-tempolabel.o: tempolabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-tempolabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-tempolabel.Tpo -c -o libwidgets_a-tempolabel.o `test -f 'tempolabel.cpp' || echo '$(srcdir)/'`tempolabel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-tempolabel.Tpo $(DEPDIR)/libwidgets_a-tempolabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tempolabel.cpp' object='libwidgets_a-tempolabel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-tempolabel.o `test -f 'tempolabel.cpp' || echo '$(srcdir)/'`tempolabel.cpp
+
+libwidgets_a-tempolabel.obj: tempolabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-tempolabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-tempolabel.Tpo -c -o libwidgets_a-tempolabel.obj `if test -f 'tempolabel.cpp'; then $(CYGPATH_W) 'tempolabel.cpp'; else $(CYGPATH_W) '$(srcdir)/tempolabel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-tempolabel.Tpo $(DEPDIR)/libwidgets_a-tempolabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tempolabel.cpp' object='libwidgets_a-tempolabel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-tempolabel.obj `if test -f 'tempolabel.cpp'; then $(CYGPATH_W) 'tempolabel.cpp'; else $(CYGPATH_W) '$(srcdir)/tempolabel.cpp'; fi`
+
+libwidgets_a-tools.o: tools.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-tools.o -MD -MP -MF $(DEPDIR)/libwidgets_a-tools.Tpo -c -o libwidgets_a-tools.o `test -f 'tools.cpp' || echo '$(srcdir)/'`tools.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-tools.Tpo $(DEPDIR)/libwidgets_a-tools.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tools.cpp' object='libwidgets_a-tools.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-tools.o `test -f 'tools.cpp' || echo '$(srcdir)/'`tools.cpp
+
+libwidgets_a-tools.obj: tools.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-tools.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-tools.Tpo -c -o libwidgets_a-tools.obj `if test -f 'tools.cpp'; then $(CYGPATH_W) 'tools.cpp'; else $(CYGPATH_W) '$(srcdir)/tools.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-tools.Tpo $(DEPDIR)/libwidgets_a-tools.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tools.cpp' object='libwidgets_a-tools.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-tools.obj `if test -f 'tools.cpp'; then $(CYGPATH_W) 'tools.cpp'; else $(CYGPATH_W) '$(srcdir)/tools.cpp'; fi`
+
+libwidgets_a-fontsel.o: fontsel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-fontsel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-fontsel.Tpo -c -o libwidgets_a-fontsel.o `test -f 'fontsel.cpp' || echo '$(srcdir)/'`fontsel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-fontsel.Tpo $(DEPDIR)/libwidgets_a-fontsel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fontsel.cpp' object='libwidgets_a-fontsel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-fontsel.o `test -f 'fontsel.cpp' || echo '$(srcdir)/'`fontsel.cpp
+
+libwidgets_a-fontsel.obj: fontsel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-fontsel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-fontsel.Tpo -c -o libwidgets_a-fontsel.obj `if test -f 'fontsel.cpp'; then $(CYGPATH_W) 'fontsel.cpp'; else $(CYGPATH_W) '$(srcdir)/fontsel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-fontsel.Tpo $(DEPDIR)/libwidgets_a-fontsel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fontsel.cpp' object='libwidgets_a-fontsel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-fontsel.obj `if test -f 'fontsel.cpp'; then $(CYGPATH_W) 'fontsel.cpp'; else $(CYGPATH_W) '$(srcdir)/fontsel.cpp'; fi`
+
+libwidgets_a-ctrlcombo.o: ctrlcombo.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-ctrlcombo.o -MD -MP -MF $(DEPDIR)/libwidgets_a-ctrlcombo.Tpo -c -o libwidgets_a-ctrlcombo.o `test -f 'ctrlcombo.cpp' || echo '$(srcdir)/'`ctrlcombo.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-ctrlcombo.Tpo $(DEPDIR)/libwidgets_a-ctrlcombo.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ctrlcombo.cpp' object='libwidgets_a-ctrlcombo.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-ctrlcombo.o `test -f 'ctrlcombo.cpp' || echo '$(srcdir)/'`ctrlcombo.cpp
+
+libwidgets_a-ctrlcombo.obj: ctrlcombo.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-ctrlcombo.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-ctrlcombo.Tpo -c -o libwidgets_a-ctrlcombo.obj `if test -f 'ctrlcombo.cpp'; then $(CYGPATH_W) 'ctrlcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/ctrlcombo.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-ctrlcombo.Tpo $(DEPDIR)/libwidgets_a-ctrlcombo.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ctrlcombo.cpp' object='libwidgets_a-ctrlcombo.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-ctrlcombo.obj `if test -f 'ctrlcombo.cpp'; then $(CYGPATH_W) 'ctrlcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/ctrlcombo.cpp'; fi`
+
+libwidgets_a-sliderbase.o: sliderbase.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sliderbase.o -MD -MP -MF $(DEPDIR)/libwidgets_a-sliderbase.Tpo -c -o libwidgets_a-sliderbase.o `test -f 'sliderbase.cpp' || echo '$(srcdir)/'`sliderbase.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sliderbase.Tpo $(DEPDIR)/libwidgets_a-sliderbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sliderbase.cpp' object='libwidgets_a-sliderbase.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sliderbase.o `test -f 'sliderbase.cpp' || echo '$(srcdir)/'`sliderbase.cpp
+
+libwidgets_a-sliderbase.obj: sliderbase.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sliderbase.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-sliderbase.Tpo -c -o libwidgets_a-sliderbase.obj `if test -f 'sliderbase.cpp'; then $(CYGPATH_W) 'sliderbase.cpp'; else $(CYGPATH_W) '$(srcdir)/sliderbase.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sliderbase.Tpo $(DEPDIR)/libwidgets_a-sliderbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sliderbase.cpp' object='libwidgets_a-sliderbase.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sliderbase.obj `if test -f 'sliderbase.cpp'; then $(CYGPATH_W) 'sliderbase.cpp'; else $(CYGPATH_W) '$(srcdir)/sliderbase.cpp'; fi`
+
+libwidgets_a-slider.o: slider.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-slider.o -MD -MP -MF $(DEPDIR)/libwidgets_a-slider.Tpo -c -o libwidgets_a-slider.o `test -f 'slider.cpp' || echo '$(srcdir)/'`slider.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-slider.Tpo $(DEPDIR)/libwidgets_a-slider.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='slider.cpp' object='libwidgets_a-slider.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-slider.o `test -f 'slider.cpp' || echo '$(srcdir)/'`slider.cpp
+
+libwidgets_a-slider.obj: slider.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-slider.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-slider.Tpo -c -o libwidgets_a-slider.obj `if test -f 'slider.cpp'; then $(CYGPATH_W) 'slider.cpp'; else $(CYGPATH_W) '$(srcdir)/slider.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-slider.Tpo $(DEPDIR)/libwidgets_a-slider.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='slider.cpp' object='libwidgets_a-slider.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-slider.obj `if test -f 'slider.cpp'; then $(CYGPATH_W) 'slider.cpp'; else $(CYGPATH_W) '$(srcdir)/slider.cpp'; fi`
+
+libwidgets_a-midisyncimpl.o: midisyncimpl.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-midisyncimpl.o -MD -MP -MF $(DEPDIR)/libwidgets_a-midisyncimpl.Tpo -c -o libwidgets_a-midisyncimpl.o `test -f 'midisyncimpl.cpp' || echo '$(srcdir)/'`midisyncimpl.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-midisyncimpl.Tpo $(DEPDIR)/libwidgets_a-midisyncimpl.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='midisyncimpl.cpp' object='libwidgets_a-midisyncimpl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-midisyncimpl.o `test -f 'midisyncimpl.cpp' || echo '$(srcdir)/'`midisyncimpl.cpp
+
+libwidgets_a-midisyncimpl.obj: midisyncimpl.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-midisyncimpl.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-midisyncimpl.Tpo -c -o libwidgets_a-midisyncimpl.obj `if test -f 'midisyncimpl.cpp'; then $(CYGPATH_W) 'midisyncimpl.cpp'; else $(CYGPATH_W) '$(srcdir)/midisyncimpl.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-midisyncimpl.Tpo $(DEPDIR)/libwidgets_a-midisyncimpl.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='midisyncimpl.cpp' object='libwidgets_a-midisyncimpl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-midisyncimpl.obj `if test -f 'midisyncimpl.cpp'; then $(CYGPATH_W) 'midisyncimpl.cpp'; else $(CYGPATH_W) '$(srcdir)/midisyncimpl.cpp'; fi`
+
+libwidgets_a-header.o: header.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-header.o -MD -MP -MF $(DEPDIR)/libwidgets_a-header.Tpo -c -o libwidgets_a-header.o `test -f 'header.cpp' || echo '$(srcdir)/'`header.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-header.Tpo $(DEPDIR)/libwidgets_a-header.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='header.cpp' object='libwidgets_a-header.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-header.o `test -f 'header.cpp' || echo '$(srcdir)/'`header.cpp
+
+libwidgets_a-header.obj: header.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-header.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-header.Tpo -c -o libwidgets_a-header.obj `if test -f 'header.cpp'; then $(CYGPATH_W) 'header.cpp'; else $(CYGPATH_W) '$(srcdir)/header.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-header.Tpo $(DEPDIR)/libwidgets_a-header.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='header.cpp' object='libwidgets_a-header.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-header.obj `if test -f 'header.cpp'; then $(CYGPATH_W) 'header.cpp'; else $(CYGPATH_W) '$(srcdir)/header.cpp'; fi`
+
+libwidgets_a-knob.o: knob.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-knob.o -MD -MP -MF $(DEPDIR)/libwidgets_a-knob.Tpo -c -o libwidgets_a-knob.o `test -f 'knob.cpp' || echo '$(srcdir)/'`knob.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-knob.Tpo $(DEPDIR)/libwidgets_a-knob.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='knob.cpp' object='libwidgets_a-knob.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-knob.o `test -f 'knob.cpp' || echo '$(srcdir)/'`knob.cpp
+
+libwidgets_a-knob.obj: knob.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-knob.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-knob.Tpo -c -o libwidgets_a-knob.obj `if test -f 'knob.cpp'; then $(CYGPATH_W) 'knob.cpp'; else $(CYGPATH_W) '$(srcdir)/knob.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-knob.Tpo $(DEPDIR)/libwidgets_a-knob.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='knob.cpp' object='libwidgets_a-knob.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-knob.obj `if test -f 'knob.cpp'; then $(CYGPATH_W) 'knob.cpp'; else $(CYGPATH_W) '$(srcdir)/knob.cpp'; fi`
+
+libwidgets_a-mlabel.o: mlabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mlabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-mlabel.Tpo -c -o libwidgets_a-mlabel.o `test -f 'mlabel.cpp' || echo '$(srcdir)/'`mlabel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mlabel.Tpo $(DEPDIR)/libwidgets_a-mlabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mlabel.cpp' object='libwidgets_a-mlabel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mlabel.o `test -f 'mlabel.cpp' || echo '$(srcdir)/'`mlabel.cpp
+
+libwidgets_a-mlabel.obj: mlabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mlabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-mlabel.Tpo -c -o libwidgets_a-mlabel.obj `if test -f 'mlabel.cpp'; then $(CYGPATH_W) 'mlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/mlabel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mlabel.Tpo $(DEPDIR)/libwidgets_a-mlabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mlabel.cpp' object='libwidgets_a-mlabel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mlabel.obj `if test -f 'mlabel.cpp'; then $(CYGPATH_W) 'mlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/mlabel.cpp'; fi`
+
+libwidgets_a-genset.o: genset.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-genset.o -MD -MP -MF $(DEPDIR)/libwidgets_a-genset.Tpo -c -o libwidgets_a-genset.o `test -f 'genset.cpp' || echo '$(srcdir)/'`genset.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-genset.Tpo $(DEPDIR)/libwidgets_a-genset.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='genset.cpp' object='libwidgets_a-genset.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-genset.o `test -f 'genset.cpp' || echo '$(srcdir)/'`genset.cpp
+
+libwidgets_a-genset.obj: genset.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-genset.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-genset.Tpo -c -o libwidgets_a-genset.obj `if test -f 'genset.cpp'; then $(CYGPATH_W) 'genset.cpp'; else $(CYGPATH_W) '$(srcdir)/genset.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-genset.Tpo $(DEPDIR)/libwidgets_a-genset.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='genset.cpp' object='libwidgets_a-genset.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-genset.obj `if test -f 'genset.cpp'; then $(CYGPATH_W) 'genset.cpp'; else $(CYGPATH_W) '$(srcdir)/genset.cpp'; fi`
+
+libwidgets_a-mixdowndialog.o: mixdowndialog.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mixdowndialog.o -MD -MP -MF $(DEPDIR)/libwidgets_a-mixdowndialog.Tpo -c -o libwidgets_a-mixdowndialog.o `test -f 'mixdowndialog.cpp' || echo '$(srcdir)/'`mixdowndialog.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mixdowndialog.Tpo $(DEPDIR)/libwidgets_a-mixdowndialog.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mixdowndialog.cpp' object='libwidgets_a-mixdowndialog.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mixdowndialog.o `test -f 'mixdowndialog.cpp' || echo '$(srcdir)/'`mixdowndialog.cpp
+
+libwidgets_a-mixdowndialog.obj: mixdowndialog.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-mixdowndialog.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-mixdowndialog.Tpo -c -o libwidgets_a-mixdowndialog.obj `if test -f 'mixdowndialog.cpp'; then $(CYGPATH_W) 'mixdowndialog.cpp'; else $(CYGPATH_W) '$(srcdir)/mixdowndialog.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-mixdowndialog.Tpo $(DEPDIR)/libwidgets_a-mixdowndialog.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mixdowndialog.cpp' object='libwidgets_a-mixdowndialog.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-mixdowndialog.obj `if test -f 'mixdowndialog.cpp'; then $(CYGPATH_W) 'mixdowndialog.cpp'; else $(CYGPATH_W) '$(srcdir)/mixdowndialog.cpp'; fi`
+
+libwidgets_a-spinboxFP.o: spinboxFP.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-spinboxFP.o -MD -MP -MF $(DEPDIR)/libwidgets_a-spinboxFP.Tpo -c -o libwidgets_a-spinboxFP.o `test -f 'spinboxFP.cpp' || echo '$(srcdir)/'`spinboxFP.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-spinboxFP.Tpo $(DEPDIR)/libwidgets_a-spinboxFP.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='spinboxFP.cpp' object='libwidgets_a-spinboxFP.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-spinboxFP.o `test -f 'spinboxFP.cpp' || echo '$(srcdir)/'`spinboxFP.cpp
+
+libwidgets_a-spinboxFP.obj: spinboxFP.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-spinboxFP.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-spinboxFP.Tpo -c -o libwidgets_a-spinboxFP.obj `if test -f 'spinboxFP.cpp'; then $(CYGPATH_W) 'spinboxFP.cpp'; else $(CYGPATH_W) '$(srcdir)/spinboxFP.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-spinboxFP.Tpo $(DEPDIR)/libwidgets_a-spinboxFP.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='spinboxFP.cpp' object='libwidgets_a-spinboxFP.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-spinboxFP.obj `if test -f 'spinboxFP.cpp'; then $(CYGPATH_W) 'spinboxFP.cpp'; else $(CYGPATH_W) '$(srcdir)/spinboxFP.cpp'; fi`
+
+libwidgets_a-spinbox.o: spinbox.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-spinbox.o -MD -MP -MF $(DEPDIR)/libwidgets_a-spinbox.Tpo -c -o libwidgets_a-spinbox.o `test -f 'spinbox.cpp' || echo '$(srcdir)/'`spinbox.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-spinbox.Tpo $(DEPDIR)/libwidgets_a-spinbox.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='spinbox.cpp' object='libwidgets_a-spinbox.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-spinbox.o `test -f 'spinbox.cpp' || echo '$(srcdir)/'`spinbox.cpp
+
+libwidgets_a-spinbox.obj: spinbox.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-spinbox.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-spinbox.Tpo -c -o libwidgets_a-spinbox.obj `if test -f 'spinbox.cpp'; then $(CYGPATH_W) 'spinbox.cpp'; else $(CYGPATH_W) '$(srcdir)/spinbox.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-spinbox.Tpo $(DEPDIR)/libwidgets_a-spinbox.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='spinbox.cpp' object='libwidgets_a-spinbox.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-spinbox.obj `if test -f 'spinbox.cpp'; then $(CYGPATH_W) 'spinbox.cpp'; else $(CYGPATH_W) '$(srcdir)/spinbox.cpp'; fi`
+
+libwidgets_a-comboQuant.o: comboQuant.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-comboQuant.o -MD -MP -MF $(DEPDIR)/libwidgets_a-comboQuant.Tpo -c -o libwidgets_a-comboQuant.o `test -f 'comboQuant.cpp' || echo '$(srcdir)/'`comboQuant.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-comboQuant.Tpo $(DEPDIR)/libwidgets_a-comboQuant.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='comboQuant.cpp' object='libwidgets_a-comboQuant.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-comboQuant.o `test -f 'comboQuant.cpp' || echo '$(srcdir)/'`comboQuant.cpp
+
+libwidgets_a-comboQuant.obj: comboQuant.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-comboQuant.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-comboQuant.Tpo -c -o libwidgets_a-comboQuant.obj `if test -f 'comboQuant.cpp'; then $(CYGPATH_W) 'comboQuant.cpp'; else $(CYGPATH_W) '$(srcdir)/comboQuant.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-comboQuant.Tpo $(DEPDIR)/libwidgets_a-comboQuant.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='comboQuant.cpp' object='libwidgets_a-comboQuant.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-comboQuant.obj `if test -f 'comboQuant.cpp'; then $(CYGPATH_W) 'comboQuant.cpp'; else $(CYGPATH_W) '$(srcdir)/comboQuant.cpp'; fi`
+
+libwidgets_a-bigtime.o: bigtime.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-bigtime.o -MD -MP -MF $(DEPDIR)/libwidgets_a-bigtime.Tpo -c -o libwidgets_a-bigtime.o `test -f 'bigtime.cpp' || echo '$(srcdir)/'`bigtime.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-bigtime.Tpo $(DEPDIR)/libwidgets_a-bigtime.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='bigtime.cpp' object='libwidgets_a-bigtime.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-bigtime.o `test -f 'bigtime.cpp' || echo '$(srcdir)/'`bigtime.cpp
+
+libwidgets_a-bigtime.obj: bigtime.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-bigtime.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-bigtime.Tpo -c -o libwidgets_a-bigtime.obj `if test -f 'bigtime.cpp'; then $(CYGPATH_W) 'bigtime.cpp'; else $(CYGPATH_W) '$(srcdir)/bigtime.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-bigtime.Tpo $(DEPDIR)/libwidgets_a-bigtime.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='bigtime.cpp' object='libwidgets_a-bigtime.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-bigtime.obj `if test -f 'bigtime.cpp'; then $(CYGPATH_W) 'bigtime.cpp'; else $(CYGPATH_W) '$(srcdir)/bigtime.cpp'; fi`
+
+libwidgets_a-comment.o: comment.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-comment.o -MD -MP -MF $(DEPDIR)/libwidgets_a-comment.Tpo -c -o libwidgets_a-comment.o `test -f 'comment.cpp' || echo '$(srcdir)/'`comment.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-comment.Tpo $(DEPDIR)/libwidgets_a-comment.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='comment.cpp' object='libwidgets_a-comment.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-comment.o `test -f 'comment.cpp' || echo '$(srcdir)/'`comment.cpp
+
+libwidgets_a-comment.obj: comment.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-comment.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-comment.Tpo -c -o libwidgets_a-comment.obj `if test -f 'comment.cpp'; then $(CYGPATH_W) 'comment.cpp'; else $(CYGPATH_W) '$(srcdir)/comment.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-comment.Tpo $(DEPDIR)/libwidgets_a-comment.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='comment.cpp' object='libwidgets_a-comment.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-comment.obj `if test -f 'comment.cpp'; then $(CYGPATH_W) 'comment.cpp'; else $(CYGPATH_W) '$(srcdir)/comment.cpp'; fi`
+
+libwidgets_a-splitter.o: splitter.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-splitter.o -MD -MP -MF $(DEPDIR)/libwidgets_a-splitter.Tpo -c -o libwidgets_a-splitter.o `test -f 'splitter.cpp' || echo '$(srcdir)/'`splitter.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-splitter.Tpo $(DEPDIR)/libwidgets_a-splitter.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='splitter.cpp' object='libwidgets_a-splitter.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-splitter.o `test -f 'splitter.cpp' || echo '$(srcdir)/'`splitter.cpp
+
+libwidgets_a-splitter.obj: splitter.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-splitter.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-splitter.Tpo -c -o libwidgets_a-splitter.obj `if test -f 'splitter.cpp'; then $(CYGPATH_W) 'splitter.cpp'; else $(CYGPATH_W) '$(srcdir)/splitter.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-splitter.Tpo $(DEPDIR)/libwidgets_a-splitter.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='splitter.cpp' object='libwidgets_a-splitter.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-splitter.obj `if test -f 'splitter.cpp'; then $(CYGPATH_W) 'splitter.cpp'; else $(CYGPATH_W) '$(srcdir)/splitter.cpp'; fi`
+
+libwidgets_a-gatetime.o: gatetime.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-gatetime.o -MD -MP -MF $(DEPDIR)/libwidgets_a-gatetime.Tpo -c -o libwidgets_a-gatetime.o `test -f 'gatetime.cpp' || echo '$(srcdir)/'`gatetime.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-gatetime.Tpo $(DEPDIR)/libwidgets_a-gatetime.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gatetime.cpp' object='libwidgets_a-gatetime.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-gatetime.o `test -f 'gatetime.cpp' || echo '$(srcdir)/'`gatetime.cpp
+
+libwidgets_a-gatetime.obj: gatetime.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-gatetime.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-gatetime.Tpo -c -o libwidgets_a-gatetime.obj `if test -f 'gatetime.cpp'; then $(CYGPATH_W) 'gatetime.cpp'; else $(CYGPATH_W) '$(srcdir)/gatetime.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-gatetime.Tpo $(DEPDIR)/libwidgets_a-gatetime.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gatetime.cpp' object='libwidgets_a-gatetime.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-gatetime.obj `if test -f 'gatetime.cpp'; then $(CYGPATH_W) 'gatetime.cpp'; else $(CYGPATH_W) '$(srcdir)/gatetime.cpp'; fi`
+
+libwidgets_a-velocity.o: velocity.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-velocity.o -MD -MP -MF $(DEPDIR)/libwidgets_a-velocity.Tpo -c -o libwidgets_a-velocity.o `test -f 'velocity.cpp' || echo '$(srcdir)/'`velocity.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-velocity.Tpo $(DEPDIR)/libwidgets_a-velocity.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='velocity.cpp' object='libwidgets_a-velocity.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-velocity.o `test -f 'velocity.cpp' || echo '$(srcdir)/'`velocity.cpp
+
+libwidgets_a-velocity.obj: velocity.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-velocity.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-velocity.Tpo -c -o libwidgets_a-velocity.obj `if test -f 'velocity.cpp'; then $(CYGPATH_W) 'velocity.cpp'; else $(CYGPATH_W) '$(srcdir)/velocity.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-velocity.Tpo $(DEPDIR)/libwidgets_a-velocity.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='velocity.cpp' object='libwidgets_a-velocity.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-velocity.obj `if test -f 'velocity.cpp'; then $(CYGPATH_W) 'velocity.cpp'; else $(CYGPATH_W) '$(srcdir)/velocity.cpp'; fi`
+
+libwidgets_a-metronome.o: metronome.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-metronome.o -MD -MP -MF $(DEPDIR)/libwidgets_a-metronome.Tpo -c -o libwidgets_a-metronome.o `test -f 'metronome.cpp' || echo '$(srcdir)/'`metronome.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-metronome.Tpo $(DEPDIR)/libwidgets_a-metronome.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='metronome.cpp' object='libwidgets_a-metronome.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-metronome.o `test -f 'metronome.cpp' || echo '$(srcdir)/'`metronome.cpp
+
+libwidgets_a-metronome.obj: metronome.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-metronome.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-metronome.Tpo -c -o libwidgets_a-metronome.obj `if test -f 'metronome.cpp'; then $(CYGPATH_W) 'metronome.cpp'; else $(CYGPATH_W) '$(srcdir)/metronome.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-metronome.Tpo $(DEPDIR)/libwidgets_a-metronome.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='metronome.cpp' object='libwidgets_a-metronome.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-metronome.obj `if test -f 'metronome.cpp'; then $(CYGPATH_W) 'metronome.cpp'; else $(CYGPATH_W) '$(srcdir)/metronome.cpp'; fi`
+
+libwidgets_a-posedit.o: posedit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-posedit.o -MD -MP -MF $(DEPDIR)/libwidgets_a-posedit.Tpo -c -o libwidgets_a-posedit.o `test -f 'posedit.cpp' || echo '$(srcdir)/'`posedit.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-posedit.Tpo $(DEPDIR)/libwidgets_a-posedit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='posedit.cpp' object='libwidgets_a-posedit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-posedit.o `test -f 'posedit.cpp' || echo '$(srcdir)/'`posedit.cpp
+
+libwidgets_a-posedit.obj: posedit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-posedit.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-posedit.Tpo -c -o libwidgets_a-posedit.obj `if test -f 'posedit.cpp'; then $(CYGPATH_W) 'posedit.cpp'; else $(CYGPATH_W) '$(srcdir)/posedit.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-posedit.Tpo $(DEPDIR)/libwidgets_a-posedit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='posedit.cpp' object='libwidgets_a-posedit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-posedit.obj `if test -f 'posedit.cpp'; then $(CYGPATH_W) 'posedit.cpp'; else $(CYGPATH_W) '$(srcdir)/posedit.cpp'; fi`
+
+libwidgets_a-pitchedit.o: pitchedit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-pitchedit.o -MD -MP -MF $(DEPDIR)/libwidgets_a-pitchedit.Tpo -c -o libwidgets_a-pitchedit.o `test -f 'pitchedit.cpp' || echo '$(srcdir)/'`pitchedit.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-pitchedit.Tpo $(DEPDIR)/libwidgets_a-pitchedit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pitchedit.cpp' object='libwidgets_a-pitchedit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-pitchedit.o `test -f 'pitchedit.cpp' || echo '$(srcdir)/'`pitchedit.cpp
+
+libwidgets_a-pitchedit.obj: pitchedit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-pitchedit.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-pitchedit.Tpo -c -o libwidgets_a-pitchedit.obj `if test -f 'pitchedit.cpp'; then $(CYGPATH_W) 'pitchedit.cpp'; else $(CYGPATH_W) '$(srcdir)/pitchedit.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-pitchedit.Tpo $(DEPDIR)/libwidgets_a-pitchedit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pitchedit.cpp' object='libwidgets_a-pitchedit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-pitchedit.obj `if test -f 'pitchedit.cpp'; then $(CYGPATH_W) 'pitchedit.cpp'; else $(CYGPATH_W) '$(srcdir)/pitchedit.cpp'; fi`
+
+libwidgets_a-pitchlabel.o: pitchlabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-pitchlabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-pitchlabel.Tpo -c -o libwidgets_a-pitchlabel.o `test -f 'pitchlabel.cpp' || echo '$(srcdir)/'`pitchlabel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-pitchlabel.Tpo $(DEPDIR)/libwidgets_a-pitchlabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pitchlabel.cpp' object='libwidgets_a-pitchlabel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-pitchlabel.o `test -f 'pitchlabel.cpp' || echo '$(srcdir)/'`pitchlabel.cpp
+
+libwidgets_a-pitchlabel.obj: pitchlabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-pitchlabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-pitchlabel.Tpo -c -o libwidgets_a-pitchlabel.obj `if test -f 'pitchlabel.cpp'; then $(CYGPATH_W) 'pitchlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/pitchlabel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-pitchlabel.Tpo $(DEPDIR)/libwidgets_a-pitchlabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pitchlabel.cpp' object='libwidgets_a-pitchlabel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-pitchlabel.obj `if test -f 'pitchlabel.cpp'; then $(CYGPATH_W) 'pitchlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/pitchlabel.cpp'; fi`
+
+libwidgets_a-poslabel.o: poslabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-poslabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-poslabel.Tpo -c -o libwidgets_a-poslabel.o `test -f 'poslabel.cpp' || echo '$(srcdir)/'`poslabel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-poslabel.Tpo $(DEPDIR)/libwidgets_a-poslabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='poslabel.cpp' object='libwidgets_a-poslabel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-poslabel.o `test -f 'poslabel.cpp' || echo '$(srcdir)/'`poslabel.cpp
+
+libwidgets_a-poslabel.obj: poslabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-poslabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-poslabel.Tpo -c -o libwidgets_a-poslabel.obj `if test -f 'poslabel.cpp'; then $(CYGPATH_W) 'poslabel.cpp'; else $(CYGPATH_W) '$(srcdir)/poslabel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-poslabel.Tpo $(DEPDIR)/libwidgets_a-poslabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='poslabel.cpp' object='libwidgets_a-poslabel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-poslabel.obj `if test -f 'poslabel.cpp'; then $(CYGPATH_W) 'poslabel.cpp'; else $(CYGPATH_W) '$(srcdir)/poslabel.cpp'; fi`
+
+libwidgets_a-filedialog.o: filedialog.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-filedialog.o -MD -MP -MF $(DEPDIR)/libwidgets_a-filedialog.Tpo -c -o libwidgets_a-filedialog.o `test -f 'filedialog.cpp' || echo '$(srcdir)/'`filedialog.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-filedialog.Tpo $(DEPDIR)/libwidgets_a-filedialog.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='filedialog.cpp' object='libwidgets_a-filedialog.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-filedialog.o `test -f 'filedialog.cpp' || echo '$(srcdir)/'`filedialog.cpp
+
+libwidgets_a-filedialog.obj: filedialog.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-filedialog.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-filedialog.Tpo -c -o libwidgets_a-filedialog.obj `if test -f 'filedialog.cpp'; then $(CYGPATH_W) 'filedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/filedialog.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-filedialog.Tpo $(DEPDIR)/libwidgets_a-filedialog.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='filedialog.cpp' object='libwidgets_a-filedialog.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-filedialog.obj `if test -f 'filedialog.cpp'; then $(CYGPATH_W) 'filedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/filedialog.cpp'; fi`
+
+libwidgets_a-sigedit.o: sigedit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sigedit.o -MD -MP -MF $(DEPDIR)/libwidgets_a-sigedit.Tpo -c -o libwidgets_a-sigedit.o `test -f 'sigedit.cpp' || echo '$(srcdir)/'`sigedit.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sigedit.Tpo $(DEPDIR)/libwidgets_a-sigedit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sigedit.cpp' object='libwidgets_a-sigedit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sigedit.o `test -f 'sigedit.cpp' || echo '$(srcdir)/'`sigedit.cpp
+
+libwidgets_a-sigedit.obj: sigedit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-sigedit.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-sigedit.Tpo -c -o libwidgets_a-sigedit.obj `if test -f 'sigedit.cpp'; then $(CYGPATH_W) 'sigedit.cpp'; else $(CYGPATH_W) '$(srcdir)/sigedit.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-sigedit.Tpo $(DEPDIR)/libwidgets_a-sigedit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='sigedit.cpp' object='libwidgets_a-sigedit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-sigedit.obj `if test -f 'sigedit.cpp'; then $(CYGPATH_W) 'sigedit.cpp'; else $(CYGPATH_W) '$(srcdir)/sigedit.cpp'; fi`
+
+libwidgets_a-shortcutconfig.o: shortcutconfig.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-shortcutconfig.o -MD -MP -MF $(DEPDIR)/libwidgets_a-shortcutconfig.Tpo -c -o libwidgets_a-shortcutconfig.o `test -f 'shortcutconfig.cpp' || echo '$(srcdir)/'`shortcutconfig.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-shortcutconfig.Tpo $(DEPDIR)/libwidgets_a-shortcutconfig.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='shortcutconfig.cpp' object='libwidgets_a-shortcutconfig.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-shortcutconfig.o `test -f 'shortcutconfig.cpp' || echo '$(srcdir)/'`shortcutconfig.cpp
+
+libwidgets_a-shortcutconfig.obj: shortcutconfig.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-shortcutconfig.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-shortcutconfig.Tpo -c -o libwidgets_a-shortcutconfig.obj `if test -f 'shortcutconfig.cpp'; then $(CYGPATH_W) 'shortcutconfig.cpp'; else $(CYGPATH_W) '$(srcdir)/shortcutconfig.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-shortcutconfig.Tpo $(DEPDIR)/libwidgets_a-shortcutconfig.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='shortcutconfig.cpp' object='libwidgets_a-shortcutconfig.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-shortcutconfig.obj `if test -f 'shortcutconfig.cpp'; then $(CYGPATH_W) 'shortcutconfig.cpp'; else $(CYGPATH_W) '$(srcdir)/shortcutconfig.cpp'; fi`
+
+libwidgets_a-shortcutcapturedialog.o: shortcutcapturedialog.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-shortcutcapturedialog.o -MD -MP -MF $(DEPDIR)/libwidgets_a-shortcutcapturedialog.Tpo -c -o libwidgets_a-shortcutcapturedialog.o `test -f 'shortcutcapturedialog.cpp' || echo '$(srcdir)/'`shortcutcapturedialog.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-shortcutcapturedialog.Tpo $(DEPDIR)/libwidgets_a-shortcutcapturedialog.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='shortcutcapturedialog.cpp' object='libwidgets_a-shortcutcapturedialog.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-shortcutcapturedialog.o `test -f 'shortcutcapturedialog.cpp' || echo '$(srcdir)/'`shortcutcapturedialog.cpp
+
+libwidgets_a-shortcutcapturedialog.obj: shortcutcapturedialog.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-shortcutcapturedialog.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-shortcutcapturedialog.Tpo -c -o libwidgets_a-shortcutcapturedialog.obj `if test -f 'shortcutcapturedialog.cpp'; then $(CYGPATH_W) 'shortcutcapturedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/shortcutcapturedialog.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-shortcutcapturedialog.Tpo $(DEPDIR)/libwidgets_a-shortcutcapturedialog.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='shortcutcapturedialog.cpp' object='libwidgets_a-shortcutcapturedialog.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-shortcutcapturedialog.obj `if test -f 'shortcutcapturedialog.cpp'; then $(CYGPATH_W) 'shortcutcapturedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/shortcutcapturedialog.cpp'; fi`
+
+libwidgets_a-combobox.o: combobox.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-combobox.o -MD -MP -MF $(DEPDIR)/libwidgets_a-combobox.Tpo -c -o libwidgets_a-combobox.o `test -f 'combobox.cpp' || echo '$(srcdir)/'`combobox.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-combobox.Tpo $(DEPDIR)/libwidgets_a-combobox.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='combobox.cpp' object='libwidgets_a-combobox.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-combobox.o `test -f 'combobox.cpp' || echo '$(srcdir)/'`combobox.cpp
+
+libwidgets_a-combobox.obj: combobox.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-combobox.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-combobox.Tpo -c -o libwidgets_a-combobox.obj `if test -f 'combobox.cpp'; then $(CYGPATH_W) 'combobox.cpp'; else $(CYGPATH_W) '$(srcdir)/combobox.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-combobox.Tpo $(DEPDIR)/libwidgets_a-combobox.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='combobox.cpp' object='libwidgets_a-combobox.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-combobox.obj `if test -f 'combobox.cpp'; then $(CYGPATH_W) 'combobox.cpp'; else $(CYGPATH_W) '$(srcdir)/combobox.cpp'; fi`
+
+libwidgets_a-checkbox.o: checkbox.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-checkbox.o -MD -MP -MF $(DEPDIR)/libwidgets_a-checkbox.Tpo -c -o libwidgets_a-checkbox.o `test -f 'checkbox.cpp' || echo '$(srcdir)/'`checkbox.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-checkbox.Tpo $(DEPDIR)/libwidgets_a-checkbox.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='checkbox.cpp' object='libwidgets_a-checkbox.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-checkbox.o `test -f 'checkbox.cpp' || echo '$(srcdir)/'`checkbox.cpp
+
+libwidgets_a-checkbox.obj: checkbox.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-checkbox.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-checkbox.Tpo -c -o libwidgets_a-checkbox.obj `if test -f 'checkbox.cpp'; then $(CYGPATH_W) 'checkbox.cpp'; else $(CYGPATH_W) '$(srcdir)/checkbox.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-checkbox.Tpo $(DEPDIR)/libwidgets_a-checkbox.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='checkbox.cpp' object='libwidgets_a-checkbox.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-checkbox.obj `if test -f 'checkbox.cpp'; then $(CYGPATH_W) 'checkbox.cpp'; else $(CYGPATH_W) '$(srcdir)/checkbox.cpp'; fi`
+
+libwidgets_a-aboutbox_impl.o: aboutbox_impl.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-aboutbox_impl.o -MD -MP -MF $(DEPDIR)/libwidgets_a-aboutbox_impl.Tpo -c -o libwidgets_a-aboutbox_impl.o `test -f 'aboutbox_impl.cpp' || echo '$(srcdir)/'`aboutbox_impl.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-aboutbox_impl.Tpo $(DEPDIR)/libwidgets_a-aboutbox_impl.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='aboutbox_impl.cpp' object='libwidgets_a-aboutbox_impl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-aboutbox_impl.o `test -f 'aboutbox_impl.cpp' || echo '$(srcdir)/'`aboutbox_impl.cpp
+
+libwidgets_a-aboutbox_impl.obj: aboutbox_impl.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-aboutbox_impl.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-aboutbox_impl.Tpo -c -o libwidgets_a-aboutbox_impl.obj `if test -f 'aboutbox_impl.cpp'; then $(CYGPATH_W) 'aboutbox_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/aboutbox_impl.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-aboutbox_impl.Tpo $(DEPDIR)/libwidgets_a-aboutbox_impl.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='aboutbox_impl.cpp' object='libwidgets_a-aboutbox_impl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-aboutbox_impl.obj `if test -f 'aboutbox_impl.cpp'; then $(CYGPATH_W) 'aboutbox_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/aboutbox_impl.cpp'; fi`
+
+libwidgets_a-popupmenu.o: popupmenu.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-popupmenu.o -MD -MP -MF $(DEPDIR)/libwidgets_a-popupmenu.Tpo -c -o libwidgets_a-popupmenu.o `test -f 'popupmenu.cpp' || echo '$(srcdir)/'`popupmenu.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-popupmenu.Tpo $(DEPDIR)/libwidgets_a-popupmenu.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='popupmenu.cpp' object='libwidgets_a-popupmenu.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-popupmenu.o `test -f 'popupmenu.cpp' || echo '$(srcdir)/'`popupmenu.cpp
+
+libwidgets_a-popupmenu.obj: popupmenu.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-popupmenu.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-popupmenu.Tpo -c -o libwidgets_a-popupmenu.obj `if test -f 'popupmenu.cpp'; then $(CYGPATH_W) 'popupmenu.cpp'; else $(CYGPATH_W) '$(srcdir)/popupmenu.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-popupmenu.Tpo $(DEPDIR)/libwidgets_a-popupmenu.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='popupmenu.cpp' object='libwidgets_a-popupmenu.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-popupmenu.obj `if test -f 'popupmenu.cpp'; then $(CYGPATH_W) 'popupmenu.cpp'; else $(CYGPATH_W) '$(srcdir)/popupmenu.cpp'; fi`
+
+libwidgets_a-moc_scrollscale.o: moc_scrollscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_scrollscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_scrollscale.Tpo -c -o libwidgets_a-moc_scrollscale.o `test -f 'moc_scrollscale.cpp' || echo '$(srcdir)/'`moc_scrollscale.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_scrollscale.Tpo $(DEPDIR)/libwidgets_a-moc_scrollscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_scrollscale.cpp' object='libwidgets_a-moc_scrollscale.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_scrollscale.o `test -f 'moc_scrollscale.cpp' || echo '$(srcdir)/'`moc_scrollscale.cpp
+
+libwidgets_a-moc_scrollscale.obj: moc_scrollscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_scrollscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_scrollscale.Tpo -c -o libwidgets_a-moc_scrollscale.obj `if test -f 'moc_scrollscale.cpp'; then $(CYGPATH_W) 'moc_scrollscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_scrollscale.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_scrollscale.Tpo $(DEPDIR)/libwidgets_a-moc_scrollscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_scrollscale.cpp' object='libwidgets_a-moc_scrollscale.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_scrollscale.obj `if test -f 'moc_scrollscale.cpp'; then $(CYGPATH_W) 'moc_scrollscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_scrollscale.cpp'; fi`
+
+libwidgets_a-moc_view.o: moc_view.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_view.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_view.Tpo -c -o libwidgets_a-moc_view.o `test -f 'moc_view.cpp' || echo '$(srcdir)/'`moc_view.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_view.Tpo $(DEPDIR)/libwidgets_a-moc_view.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_view.cpp' object='libwidgets_a-moc_view.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_view.o `test -f 'moc_view.cpp' || echo '$(srcdir)/'`moc_view.cpp
+
+libwidgets_a-moc_view.obj: moc_view.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_view.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_view.Tpo -c -o libwidgets_a-moc_view.obj `if test -f 'moc_view.cpp'; then $(CYGPATH_W) 'moc_view.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_view.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_view.Tpo $(DEPDIR)/libwidgets_a-moc_view.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_view.cpp' object='libwidgets_a-moc_view.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_view.obj `if test -f 'moc_view.cpp'; then $(CYGPATH_W) 'moc_view.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_view.cpp'; fi`
+
+libwidgets_a-moc_nentry.o: moc_nentry.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_nentry.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_nentry.Tpo -c -o libwidgets_a-moc_nentry.o `test -f 'moc_nentry.cpp' || echo '$(srcdir)/'`moc_nentry.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_nentry.Tpo $(DEPDIR)/libwidgets_a-moc_nentry.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_nentry.cpp' object='libwidgets_a-moc_nentry.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_nentry.o `test -f 'moc_nentry.cpp' || echo '$(srcdir)/'`moc_nentry.cpp
+
+libwidgets_a-moc_nentry.obj: moc_nentry.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_nentry.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_nentry.Tpo -c -o libwidgets_a-moc_nentry.obj `if test -f 'moc_nentry.cpp'; then $(CYGPATH_W) 'moc_nentry.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_nentry.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_nentry.Tpo $(DEPDIR)/libwidgets_a-moc_nentry.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_nentry.cpp' object='libwidgets_a-moc_nentry.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_nentry.obj `if test -f 'moc_nentry.cpp'; then $(CYGPATH_W) 'moc_nentry.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_nentry.cpp'; fi`
+
+libwidgets_a-moc_mtscale.o: moc_mtscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_mtscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_mtscale.Tpo -c -o libwidgets_a-moc_mtscale.o `test -f 'moc_mtscale.cpp' || echo '$(srcdir)/'`moc_mtscale.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_mtscale.Tpo $(DEPDIR)/libwidgets_a-moc_mtscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_mtscale.cpp' object='libwidgets_a-moc_mtscale.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_mtscale.o `test -f 'moc_mtscale.cpp' || echo '$(srcdir)/'`moc_mtscale.cpp
+
+libwidgets_a-moc_mtscale.obj: moc_mtscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_mtscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_mtscale.Tpo -c -o libwidgets_a-moc_mtscale.obj `if test -f 'moc_mtscale.cpp'; then $(CYGPATH_W) 'moc_mtscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_mtscale.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_mtscale.Tpo $(DEPDIR)/libwidgets_a-moc_mtscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_mtscale.cpp' object='libwidgets_a-moc_mtscale.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_mtscale.obj `if test -f 'moc_mtscale.cpp'; then $(CYGPATH_W) 'moc_mtscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_mtscale.cpp'; fi`
+
+libwidgets_a-moc_sigscale.o: moc_sigscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_sigscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_sigscale.Tpo -c -o libwidgets_a-moc_sigscale.o `test -f 'moc_sigscale.cpp' || echo '$(srcdir)/'`moc_sigscale.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_sigscale.Tpo $(DEPDIR)/libwidgets_a-moc_sigscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_sigscale.cpp' object='libwidgets_a-moc_sigscale.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_sigscale.o `test -f 'moc_sigscale.cpp' || echo '$(srcdir)/'`moc_sigscale.cpp
+
+libwidgets_a-moc_sigscale.obj: moc_sigscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_sigscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_sigscale.Tpo -c -o libwidgets_a-moc_sigscale.obj `if test -f 'moc_sigscale.cpp'; then $(CYGPATH_W) 'moc_sigscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_sigscale.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_sigscale.Tpo $(DEPDIR)/libwidgets_a-moc_sigscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_sigscale.cpp' object='libwidgets_a-moc_sigscale.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_sigscale.obj `if test -f 'moc_sigscale.cpp'; then $(CYGPATH_W) 'moc_sigscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_sigscale.cpp'; fi`
+
+libwidgets_a-moc_hitscale.o: moc_hitscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_hitscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_hitscale.Tpo -c -o libwidgets_a-moc_hitscale.o `test -f 'moc_hitscale.cpp' || echo '$(srcdir)/'`moc_hitscale.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_hitscale.Tpo $(DEPDIR)/libwidgets_a-moc_hitscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_hitscale.cpp' object='libwidgets_a-moc_hitscale.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_hitscale.o `test -f 'moc_hitscale.cpp' || echo '$(srcdir)/'`moc_hitscale.cpp
+
+libwidgets_a-moc_hitscale.obj: moc_hitscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_hitscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_hitscale.Tpo -c -o libwidgets_a-moc_hitscale.obj `if test -f 'moc_hitscale.cpp'; then $(CYGPATH_W) 'moc_hitscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_hitscale.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_hitscale.Tpo $(DEPDIR)/libwidgets_a-moc_hitscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_hitscale.cpp' object='libwidgets_a-moc_hitscale.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_hitscale.obj `if test -f 'moc_hitscale.cpp'; then $(CYGPATH_W) 'moc_hitscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_hitscale.cpp'; fi`
+
+libwidgets_a-moc_intlabel.o: moc_intlabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_intlabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_intlabel.Tpo -c -o libwidgets_a-moc_intlabel.o `test -f 'moc_intlabel.cpp' || echo '$(srcdir)/'`moc_intlabel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_intlabel.Tpo $(DEPDIR)/libwidgets_a-moc_intlabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_intlabel.cpp' object='libwidgets_a-moc_intlabel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_intlabel.o `test -f 'moc_intlabel.cpp' || echo '$(srcdir)/'`moc_intlabel.cpp
+
+libwidgets_a-moc_intlabel.obj: moc_intlabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_intlabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_intlabel.Tpo -c -o libwidgets_a-moc_intlabel.obj `if test -f 'moc_intlabel.cpp'; then $(CYGPATH_W) 'moc_intlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_intlabel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_intlabel.Tpo $(DEPDIR)/libwidgets_a-moc_intlabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_intlabel.cpp' object='libwidgets_a-moc_intlabel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_intlabel.obj `if test -f 'moc_intlabel.cpp'; then $(CYGPATH_W) 'moc_intlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_intlabel.cpp'; fi`
+
+libwidgets_a-moc_doublelabel.o: moc_doublelabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_doublelabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_doublelabel.Tpo -c -o libwidgets_a-moc_doublelabel.o `test -f 'moc_doublelabel.cpp' || echo '$(srcdir)/'`moc_doublelabel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_doublelabel.Tpo $(DEPDIR)/libwidgets_a-moc_doublelabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_doublelabel.cpp' object='libwidgets_a-moc_doublelabel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_doublelabel.o `test -f 'moc_doublelabel.cpp' || echo '$(srcdir)/'`moc_doublelabel.cpp
+
+libwidgets_a-moc_doublelabel.obj: moc_doublelabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_doublelabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_doublelabel.Tpo -c -o libwidgets_a-moc_doublelabel.obj `if test -f 'moc_doublelabel.cpp'; then $(CYGPATH_W) 'moc_doublelabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_doublelabel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_doublelabel.Tpo $(DEPDIR)/libwidgets_a-moc_doublelabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_doublelabel.cpp' object='libwidgets_a-moc_doublelabel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_doublelabel.obj `if test -f 'moc_doublelabel.cpp'; then $(CYGPATH_W) 'moc_doublelabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_doublelabel.cpp'; fi`
+
+libwidgets_a-moc_canvas.o: moc_canvas.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_canvas.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_canvas.Tpo -c -o libwidgets_a-moc_canvas.o `test -f 'moc_canvas.cpp' || echo '$(srcdir)/'`moc_canvas.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_canvas.Tpo $(DEPDIR)/libwidgets_a-moc_canvas.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_canvas.cpp' object='libwidgets_a-moc_canvas.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_canvas.o `test -f 'moc_canvas.cpp' || echo '$(srcdir)/'`moc_canvas.cpp
+
+libwidgets_a-moc_canvas.obj: moc_canvas.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_canvas.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_canvas.Tpo -c -o libwidgets_a-moc_canvas.obj `if test -f 'moc_canvas.cpp'; then $(CYGPATH_W) 'moc_canvas.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_canvas.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_canvas.Tpo $(DEPDIR)/libwidgets_a-moc_canvas.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_canvas.cpp' object='libwidgets_a-moc_canvas.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_canvas.obj `if test -f 'moc_canvas.cpp'; then $(CYGPATH_W) 'moc_canvas.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_canvas.cpp'; fi`
+
+libwidgets_a-moc_noteinfo.o: moc_noteinfo.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_noteinfo.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_noteinfo.Tpo -c -o libwidgets_a-moc_noteinfo.o `test -f 'moc_noteinfo.cpp' || echo '$(srcdir)/'`moc_noteinfo.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_noteinfo.Tpo $(DEPDIR)/libwidgets_a-moc_noteinfo.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_noteinfo.cpp' object='libwidgets_a-moc_noteinfo.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_noteinfo.o `test -f 'moc_noteinfo.cpp' || echo '$(srcdir)/'`moc_noteinfo.cpp
+
+libwidgets_a-moc_noteinfo.obj: moc_noteinfo.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_noteinfo.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_noteinfo.Tpo -c -o libwidgets_a-moc_noteinfo.obj `if test -f 'moc_noteinfo.cpp'; then $(CYGPATH_W) 'moc_noteinfo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_noteinfo.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_noteinfo.Tpo $(DEPDIR)/libwidgets_a-moc_noteinfo.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_noteinfo.cpp' object='libwidgets_a-moc_noteinfo.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_noteinfo.obj `if test -f 'moc_noteinfo.cpp'; then $(CYGPATH_W) 'moc_noteinfo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_noteinfo.cpp'; fi`
+
+libwidgets_a-moc_dentry.o: moc_dentry.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_dentry.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_dentry.Tpo -c -o libwidgets_a-moc_dentry.o `test -f 'moc_dentry.cpp' || echo '$(srcdir)/'`moc_dentry.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_dentry.Tpo $(DEPDIR)/libwidgets_a-moc_dentry.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_dentry.cpp' object='libwidgets_a-moc_dentry.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_dentry.o `test -f 'moc_dentry.cpp' || echo '$(srcdir)/'`moc_dentry.cpp
+
+libwidgets_a-moc_dentry.obj: moc_dentry.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_dentry.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_dentry.Tpo -c -o libwidgets_a-moc_dentry.obj `if test -f 'moc_dentry.cpp'; then $(CYGPATH_W) 'moc_dentry.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_dentry.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_dentry.Tpo $(DEPDIR)/libwidgets_a-moc_dentry.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_dentry.cpp' object='libwidgets_a-moc_dentry.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_dentry.obj `if test -f 'moc_dentry.cpp'; then $(CYGPATH_W) 'moc_dentry.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_dentry.cpp'; fi`
+
+libwidgets_a-moc_siglabel.o: moc_siglabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_siglabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_siglabel.Tpo -c -o libwidgets_a-moc_siglabel.o `test -f 'moc_siglabel.cpp' || echo '$(srcdir)/'`moc_siglabel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_siglabel.Tpo $(DEPDIR)/libwidgets_a-moc_siglabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_siglabel.cpp' object='libwidgets_a-moc_siglabel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_siglabel.o `test -f 'moc_siglabel.cpp' || echo '$(srcdir)/'`moc_siglabel.cpp
+
+libwidgets_a-moc_siglabel.obj: moc_siglabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_siglabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_siglabel.Tpo -c -o libwidgets_a-moc_siglabel.obj `if test -f 'moc_siglabel.cpp'; then $(CYGPATH_W) 'moc_siglabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_siglabel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_siglabel.Tpo $(DEPDIR)/libwidgets_a-moc_siglabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_siglabel.cpp' object='libwidgets_a-moc_siglabel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_siglabel.obj `if test -f 'moc_siglabel.cpp'; then $(CYGPATH_W) 'moc_siglabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_siglabel.cpp'; fi`
+
+libwidgets_a-moc_ttoolbar.o: moc_ttoolbar.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_ttoolbar.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_ttoolbar.Tpo -c -o libwidgets_a-moc_ttoolbar.o `test -f 'moc_ttoolbar.cpp' || echo '$(srcdir)/'`moc_ttoolbar.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_ttoolbar.Tpo $(DEPDIR)/libwidgets_a-moc_ttoolbar.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_ttoolbar.cpp' object='libwidgets_a-moc_ttoolbar.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_ttoolbar.o `test -f 'moc_ttoolbar.cpp' || echo '$(srcdir)/'`moc_ttoolbar.cpp
+
+libwidgets_a-moc_ttoolbar.obj: moc_ttoolbar.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_ttoolbar.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_ttoolbar.Tpo -c -o libwidgets_a-moc_ttoolbar.obj `if test -f 'moc_ttoolbar.cpp'; then $(CYGPATH_W) 'moc_ttoolbar.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_ttoolbar.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_ttoolbar.Tpo $(DEPDIR)/libwidgets_a-moc_ttoolbar.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_ttoolbar.cpp' object='libwidgets_a-moc_ttoolbar.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_ttoolbar.obj `if test -f 'moc_ttoolbar.cpp'; then $(CYGPATH_W) 'moc_ttoolbar.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_ttoolbar.cpp'; fi`
+
+libwidgets_a-moc_ttoolbutton.o: moc_ttoolbutton.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_ttoolbutton.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_ttoolbutton.Tpo -c -o libwidgets_a-moc_ttoolbutton.o `test -f 'moc_ttoolbutton.cpp' || echo '$(srcdir)/'`moc_ttoolbutton.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_ttoolbutton.Tpo $(DEPDIR)/libwidgets_a-moc_ttoolbutton.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_ttoolbutton.cpp' object='libwidgets_a-moc_ttoolbutton.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_ttoolbutton.o `test -f 'moc_ttoolbutton.cpp' || echo '$(srcdir)/'`moc_ttoolbutton.cpp
+
+libwidgets_a-moc_ttoolbutton.obj: moc_ttoolbutton.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_ttoolbutton.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_ttoolbutton.Tpo -c -o libwidgets_a-moc_ttoolbutton.obj `if test -f 'moc_ttoolbutton.cpp'; then $(CYGPATH_W) 'moc_ttoolbutton.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_ttoolbutton.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_ttoolbutton.Tpo $(DEPDIR)/libwidgets_a-moc_ttoolbutton.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_ttoolbutton.cpp' object='libwidgets_a-moc_ttoolbutton.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_ttoolbutton.obj `if test -f 'moc_ttoolbutton.cpp'; then $(CYGPATH_W) 'moc_ttoolbutton.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_ttoolbutton.cpp'; fi`
+
+libwidgets_a-moc_tb1.o: moc_tb1.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_tb1.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_tb1.Tpo -c -o libwidgets_a-moc_tb1.o `test -f 'moc_tb1.cpp' || echo '$(srcdir)/'`moc_tb1.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_tb1.Tpo $(DEPDIR)/libwidgets_a-moc_tb1.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_tb1.cpp' object='libwidgets_a-moc_tb1.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_tb1.o `test -f 'moc_tb1.cpp' || echo '$(srcdir)/'`moc_tb1.cpp
+
+libwidgets_a-moc_tb1.obj: moc_tb1.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_tb1.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_tb1.Tpo -c -o libwidgets_a-moc_tb1.obj `if test -f 'moc_tb1.cpp'; then $(CYGPATH_W) 'moc_tb1.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_tb1.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_tb1.Tpo $(DEPDIR)/libwidgets_a-moc_tb1.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_tb1.cpp' object='libwidgets_a-moc_tb1.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_tb1.obj `if test -f 'moc_tb1.cpp'; then $(CYGPATH_W) 'moc_tb1.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_tb1.cpp'; fi`
+
+libwidgets_a-moc_lcombo.o: moc_lcombo.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_lcombo.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_lcombo.Tpo -c -o libwidgets_a-moc_lcombo.o `test -f 'moc_lcombo.cpp' || echo '$(srcdir)/'`moc_lcombo.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_lcombo.Tpo $(DEPDIR)/libwidgets_a-moc_lcombo.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_lcombo.cpp' object='libwidgets_a-moc_lcombo.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_lcombo.o `test -f 'moc_lcombo.cpp' || echo '$(srcdir)/'`moc_lcombo.cpp
+
+libwidgets_a-moc_lcombo.obj: moc_lcombo.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_lcombo.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_lcombo.Tpo -c -o libwidgets_a-moc_lcombo.obj `if test -f 'moc_lcombo.cpp'; then $(CYGPATH_W) 'moc_lcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_lcombo.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_lcombo.Tpo $(DEPDIR)/libwidgets_a-moc_lcombo.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_lcombo.cpp' object='libwidgets_a-moc_lcombo.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_lcombo.obj `if test -f 'moc_lcombo.cpp'; then $(CYGPATH_W) 'moc_lcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_lcombo.cpp'; fi`
+
+libwidgets_a-moc_swidget.o: moc_swidget.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_swidget.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_swidget.Tpo -c -o libwidgets_a-moc_swidget.o `test -f 'moc_swidget.cpp' || echo '$(srcdir)/'`moc_swidget.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_swidget.Tpo $(DEPDIR)/libwidgets_a-moc_swidget.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_swidget.cpp' object='libwidgets_a-moc_swidget.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_swidget.o `test -f 'moc_swidget.cpp' || echo '$(srcdir)/'`moc_swidget.cpp
+
+libwidgets_a-moc_swidget.obj: moc_swidget.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_swidget.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_swidget.Tpo -c -o libwidgets_a-moc_swidget.obj `if test -f 'moc_swidget.cpp'; then $(CYGPATH_W) 'moc_swidget.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_swidget.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_swidget.Tpo $(DEPDIR)/libwidgets_a-moc_swidget.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_swidget.cpp' object='libwidgets_a-moc_swidget.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_swidget.obj `if test -f 'moc_swidget.cpp'; then $(CYGPATH_W) 'moc_swidget.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_swidget.cpp'; fi`
+
+libwidgets_a-moc_tempolabel.o: moc_tempolabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_tempolabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_tempolabel.Tpo -c -o libwidgets_a-moc_tempolabel.o `test -f 'moc_tempolabel.cpp' || echo '$(srcdir)/'`moc_tempolabel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_tempolabel.Tpo $(DEPDIR)/libwidgets_a-moc_tempolabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_tempolabel.cpp' object='libwidgets_a-moc_tempolabel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_tempolabel.o `test -f 'moc_tempolabel.cpp' || echo '$(srcdir)/'`moc_tempolabel.cpp
+
+libwidgets_a-moc_tempolabel.obj: moc_tempolabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_tempolabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_tempolabel.Tpo -c -o libwidgets_a-moc_tempolabel.obj `if test -f 'moc_tempolabel.cpp'; then $(CYGPATH_W) 'moc_tempolabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_tempolabel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_tempolabel.Tpo $(DEPDIR)/libwidgets_a-moc_tempolabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_tempolabel.cpp' object='libwidgets_a-moc_tempolabel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_tempolabel.obj `if test -f 'moc_tempolabel.cpp'; then $(CYGPATH_W) 'moc_tempolabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_tempolabel.cpp'; fi`
+
+libwidgets_a-moc_tools.o: moc_tools.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_tools.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_tools.Tpo -c -o libwidgets_a-moc_tools.o `test -f 'moc_tools.cpp' || echo '$(srcdir)/'`moc_tools.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_tools.Tpo $(DEPDIR)/libwidgets_a-moc_tools.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_tools.cpp' object='libwidgets_a-moc_tools.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_tools.o `test -f 'moc_tools.cpp' || echo '$(srcdir)/'`moc_tools.cpp
+
+libwidgets_a-moc_tools.obj: moc_tools.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_tools.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_tools.Tpo -c -o libwidgets_a-moc_tools.obj `if test -f 'moc_tools.cpp'; then $(CYGPATH_W) 'moc_tools.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_tools.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_tools.Tpo $(DEPDIR)/libwidgets_a-moc_tools.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_tools.cpp' object='libwidgets_a-moc_tools.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_tools.obj `if test -f 'moc_tools.cpp'; then $(CYGPATH_W) 'moc_tools.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_tools.cpp'; fi`
+
+libwidgets_a-moc_popupmenu.o: moc_popupmenu.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_popupmenu.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_popupmenu.Tpo -c -o libwidgets_a-moc_popupmenu.o `test -f 'moc_popupmenu.cpp' || echo '$(srcdir)/'`moc_popupmenu.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_popupmenu.Tpo $(DEPDIR)/libwidgets_a-moc_popupmenu.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_popupmenu.cpp' object='libwidgets_a-moc_popupmenu.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_popupmenu.o `test -f 'moc_popupmenu.cpp' || echo '$(srcdir)/'`moc_popupmenu.cpp
+
+libwidgets_a-moc_popupmenu.obj: moc_popupmenu.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_popupmenu.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_popupmenu.Tpo -c -o libwidgets_a-moc_popupmenu.obj `if test -f 'moc_popupmenu.cpp'; then $(CYGPATH_W) 'moc_popupmenu.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_popupmenu.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_popupmenu.Tpo $(DEPDIR)/libwidgets_a-moc_popupmenu.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_popupmenu.cpp' object='libwidgets_a-moc_popupmenu.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_popupmenu.obj `if test -f 'moc_popupmenu.cpp'; then $(CYGPATH_W) 'moc_popupmenu.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_popupmenu.cpp'; fi`
+
+libwidgets_a-moc_fontsel.o: moc_fontsel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_fontsel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_fontsel.Tpo -c -o libwidgets_a-moc_fontsel.o `test -f 'moc_fontsel.cpp' || echo '$(srcdir)/'`moc_fontsel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_fontsel.Tpo $(DEPDIR)/libwidgets_a-moc_fontsel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_fontsel.cpp' object='libwidgets_a-moc_fontsel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_fontsel.o `test -f 'moc_fontsel.cpp' || echo '$(srcdir)/'`moc_fontsel.cpp
+
+libwidgets_a-moc_fontsel.obj: moc_fontsel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_fontsel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_fontsel.Tpo -c -o libwidgets_a-moc_fontsel.obj `if test -f 'moc_fontsel.cpp'; then $(CYGPATH_W) 'moc_fontsel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_fontsel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_fontsel.Tpo $(DEPDIR)/libwidgets_a-moc_fontsel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_fontsel.cpp' object='libwidgets_a-moc_fontsel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_fontsel.obj `if test -f 'moc_fontsel.cpp'; then $(CYGPATH_W) 'moc_fontsel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_fontsel.cpp'; fi`
+
+libwidgets_a-moc_ctrlcombo.o: moc_ctrlcombo.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_ctrlcombo.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_ctrlcombo.Tpo -c -o libwidgets_a-moc_ctrlcombo.o `test -f 'moc_ctrlcombo.cpp' || echo '$(srcdir)/'`moc_ctrlcombo.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_ctrlcombo.Tpo $(DEPDIR)/libwidgets_a-moc_ctrlcombo.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_ctrlcombo.cpp' object='libwidgets_a-moc_ctrlcombo.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_ctrlcombo.o `test -f 'moc_ctrlcombo.cpp' || echo '$(srcdir)/'`moc_ctrlcombo.cpp
+
+libwidgets_a-moc_ctrlcombo.obj: moc_ctrlcombo.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_ctrlcombo.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_ctrlcombo.Tpo -c -o libwidgets_a-moc_ctrlcombo.obj `if test -f 'moc_ctrlcombo.cpp'; then $(CYGPATH_W) 'moc_ctrlcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_ctrlcombo.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_ctrlcombo.Tpo $(DEPDIR)/libwidgets_a-moc_ctrlcombo.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_ctrlcombo.cpp' object='libwidgets_a-moc_ctrlcombo.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_ctrlcombo.obj `if test -f 'moc_ctrlcombo.cpp'; then $(CYGPATH_W) 'moc_ctrlcombo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_ctrlcombo.cpp'; fi`
+
+libwidgets_a-moc_sliderbase.o: moc_sliderbase.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_sliderbase.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_sliderbase.Tpo -c -o libwidgets_a-moc_sliderbase.o `test -f 'moc_sliderbase.cpp' || echo '$(srcdir)/'`moc_sliderbase.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_sliderbase.Tpo $(DEPDIR)/libwidgets_a-moc_sliderbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_sliderbase.cpp' object='libwidgets_a-moc_sliderbase.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_sliderbase.o `test -f 'moc_sliderbase.cpp' || echo '$(srcdir)/'`moc_sliderbase.cpp
+
+libwidgets_a-moc_sliderbase.obj: moc_sliderbase.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_sliderbase.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_sliderbase.Tpo -c -o libwidgets_a-moc_sliderbase.obj `if test -f 'moc_sliderbase.cpp'; then $(CYGPATH_W) 'moc_sliderbase.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_sliderbase.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_sliderbase.Tpo $(DEPDIR)/libwidgets_a-moc_sliderbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_sliderbase.cpp' object='libwidgets_a-moc_sliderbase.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_sliderbase.obj `if test -f 'moc_sliderbase.cpp'; then $(CYGPATH_W) 'moc_sliderbase.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_sliderbase.cpp'; fi`
+
+libwidgets_a-moc_slider.o: moc_slider.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_slider.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_slider.Tpo -c -o libwidgets_a-moc_slider.o `test -f 'moc_slider.cpp' || echo '$(srcdir)/'`moc_slider.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_slider.Tpo $(DEPDIR)/libwidgets_a-moc_slider.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_slider.cpp' object='libwidgets_a-moc_slider.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_slider.o `test -f 'moc_slider.cpp' || echo '$(srcdir)/'`moc_slider.cpp
+
+libwidgets_a-moc_slider.obj: moc_slider.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_slider.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_slider.Tpo -c -o libwidgets_a-moc_slider.obj `if test -f 'moc_slider.cpp'; then $(CYGPATH_W) 'moc_slider.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_slider.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_slider.Tpo $(DEPDIR)/libwidgets_a-moc_slider.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_slider.cpp' object='libwidgets_a-moc_slider.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_slider.obj `if test -f 'moc_slider.cpp'; then $(CYGPATH_W) 'moc_slider.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_slider.cpp'; fi`
+
+libwidgets_a-moc_midisyncimpl.o: moc_midisyncimpl.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_midisyncimpl.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_midisyncimpl.Tpo -c -o libwidgets_a-moc_midisyncimpl.o `test -f 'moc_midisyncimpl.cpp' || echo '$(srcdir)/'`moc_midisyncimpl.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_midisyncimpl.Tpo $(DEPDIR)/libwidgets_a-moc_midisyncimpl.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_midisyncimpl.cpp' object='libwidgets_a-moc_midisyncimpl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_midisyncimpl.o `test -f 'moc_midisyncimpl.cpp' || echo '$(srcdir)/'`moc_midisyncimpl.cpp
+
+libwidgets_a-moc_midisyncimpl.obj: moc_midisyncimpl.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_midisyncimpl.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_midisyncimpl.Tpo -c -o libwidgets_a-moc_midisyncimpl.obj `if test -f 'moc_midisyncimpl.cpp'; then $(CYGPATH_W) 'moc_midisyncimpl.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_midisyncimpl.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_midisyncimpl.Tpo $(DEPDIR)/libwidgets_a-moc_midisyncimpl.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_midisyncimpl.cpp' object='libwidgets_a-moc_midisyncimpl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_midisyncimpl.obj `if test -f 'moc_midisyncimpl.cpp'; then $(CYGPATH_W) 'moc_midisyncimpl.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_midisyncimpl.cpp'; fi`
+
+libwidgets_a-moc_header.o: moc_header.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_header.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_header.Tpo -c -o libwidgets_a-moc_header.o `test -f 'moc_header.cpp' || echo '$(srcdir)/'`moc_header.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_header.Tpo $(DEPDIR)/libwidgets_a-moc_header.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_header.cpp' object='libwidgets_a-moc_header.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_header.o `test -f 'moc_header.cpp' || echo '$(srcdir)/'`moc_header.cpp
+
+libwidgets_a-moc_header.obj: moc_header.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_header.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_header.Tpo -c -o libwidgets_a-moc_header.obj `if test -f 'moc_header.cpp'; then $(CYGPATH_W) 'moc_header.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_header.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_header.Tpo $(DEPDIR)/libwidgets_a-moc_header.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_header.cpp' object='libwidgets_a-moc_header.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_header.obj `if test -f 'moc_header.cpp'; then $(CYGPATH_W) 'moc_header.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_header.cpp'; fi`
+
+libwidgets_a-moc_knob.o: moc_knob.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_knob.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_knob.Tpo -c -o libwidgets_a-moc_knob.o `test -f 'moc_knob.cpp' || echo '$(srcdir)/'`moc_knob.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_knob.Tpo $(DEPDIR)/libwidgets_a-moc_knob.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_knob.cpp' object='libwidgets_a-moc_knob.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_knob.o `test -f 'moc_knob.cpp' || echo '$(srcdir)/'`moc_knob.cpp
+
+libwidgets_a-moc_knob.obj: moc_knob.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_knob.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_knob.Tpo -c -o libwidgets_a-moc_knob.obj `if test -f 'moc_knob.cpp'; then $(CYGPATH_W) 'moc_knob.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_knob.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_knob.Tpo $(DEPDIR)/libwidgets_a-moc_knob.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_knob.cpp' object='libwidgets_a-moc_knob.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_knob.obj `if test -f 'moc_knob.cpp'; then $(CYGPATH_W) 'moc_knob.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_knob.cpp'; fi`
+
+libwidgets_a-moc_mlabel.o: moc_mlabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_mlabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_mlabel.Tpo -c -o libwidgets_a-moc_mlabel.o `test -f 'moc_mlabel.cpp' || echo '$(srcdir)/'`moc_mlabel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_mlabel.Tpo $(DEPDIR)/libwidgets_a-moc_mlabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_mlabel.cpp' object='libwidgets_a-moc_mlabel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_mlabel.o `test -f 'moc_mlabel.cpp' || echo '$(srcdir)/'`moc_mlabel.cpp
+
+libwidgets_a-moc_mlabel.obj: moc_mlabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_mlabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_mlabel.Tpo -c -o libwidgets_a-moc_mlabel.obj `if test -f 'moc_mlabel.cpp'; then $(CYGPATH_W) 'moc_mlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_mlabel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_mlabel.Tpo $(DEPDIR)/libwidgets_a-moc_mlabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_mlabel.cpp' object='libwidgets_a-moc_mlabel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_mlabel.obj `if test -f 'moc_mlabel.cpp'; then $(CYGPATH_W) 'moc_mlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_mlabel.cpp'; fi`
+
+libwidgets_a-moc_genset.o: moc_genset.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_genset.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_genset.Tpo -c -o libwidgets_a-moc_genset.o `test -f 'moc_genset.cpp' || echo '$(srcdir)/'`moc_genset.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_genset.Tpo $(DEPDIR)/libwidgets_a-moc_genset.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_genset.cpp' object='libwidgets_a-moc_genset.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_genset.o `test -f 'moc_genset.cpp' || echo '$(srcdir)/'`moc_genset.cpp
+
+libwidgets_a-moc_genset.obj: moc_genset.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_genset.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_genset.Tpo -c -o libwidgets_a-moc_genset.obj `if test -f 'moc_genset.cpp'; then $(CYGPATH_W) 'moc_genset.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_genset.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_genset.Tpo $(DEPDIR)/libwidgets_a-moc_genset.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_genset.cpp' object='libwidgets_a-moc_genset.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_genset.obj `if test -f 'moc_genset.cpp'; then $(CYGPATH_W) 'moc_genset.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_genset.cpp'; fi`
+
+libwidgets_a-moc_mixdowndialog.o: moc_mixdowndialog.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_mixdowndialog.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_mixdowndialog.Tpo -c -o libwidgets_a-moc_mixdowndialog.o `test -f 'moc_mixdowndialog.cpp' || echo '$(srcdir)/'`moc_mixdowndialog.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_mixdowndialog.Tpo $(DEPDIR)/libwidgets_a-moc_mixdowndialog.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_mixdowndialog.cpp' object='libwidgets_a-moc_mixdowndialog.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_mixdowndialog.o `test -f 'moc_mixdowndialog.cpp' || echo '$(srcdir)/'`moc_mixdowndialog.cpp
+
+libwidgets_a-moc_mixdowndialog.obj: moc_mixdowndialog.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_mixdowndialog.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_mixdowndialog.Tpo -c -o libwidgets_a-moc_mixdowndialog.obj `if test -f 'moc_mixdowndialog.cpp'; then $(CYGPATH_W) 'moc_mixdowndialog.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_mixdowndialog.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_mixdowndialog.Tpo $(DEPDIR)/libwidgets_a-moc_mixdowndialog.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_mixdowndialog.cpp' object='libwidgets_a-moc_mixdowndialog.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_mixdowndialog.obj `if test -f 'moc_mixdowndialog.cpp'; then $(CYGPATH_W) 'moc_mixdowndialog.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_mixdowndialog.cpp'; fi`
+
+libwidgets_a-moc_spinboxFP.o: moc_spinboxFP.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_spinboxFP.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_spinboxFP.Tpo -c -o libwidgets_a-moc_spinboxFP.o `test -f 'moc_spinboxFP.cpp' || echo '$(srcdir)/'`moc_spinboxFP.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_spinboxFP.Tpo $(DEPDIR)/libwidgets_a-moc_spinboxFP.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_spinboxFP.cpp' object='libwidgets_a-moc_spinboxFP.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_spinboxFP.o `test -f 'moc_spinboxFP.cpp' || echo '$(srcdir)/'`moc_spinboxFP.cpp
+
+libwidgets_a-moc_spinboxFP.obj: moc_spinboxFP.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_spinboxFP.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_spinboxFP.Tpo -c -o libwidgets_a-moc_spinboxFP.obj `if test -f 'moc_spinboxFP.cpp'; then $(CYGPATH_W) 'moc_spinboxFP.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_spinboxFP.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_spinboxFP.Tpo $(DEPDIR)/libwidgets_a-moc_spinboxFP.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_spinboxFP.cpp' object='libwidgets_a-moc_spinboxFP.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_spinboxFP.obj `if test -f 'moc_spinboxFP.cpp'; then $(CYGPATH_W) 'moc_spinboxFP.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_spinboxFP.cpp'; fi`
+
+libwidgets_a-moc_spinbox.o: moc_spinbox.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_spinbox.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_spinbox.Tpo -c -o libwidgets_a-moc_spinbox.o `test -f 'moc_spinbox.cpp' || echo '$(srcdir)/'`moc_spinbox.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_spinbox.Tpo $(DEPDIR)/libwidgets_a-moc_spinbox.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_spinbox.cpp' object='libwidgets_a-moc_spinbox.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_spinbox.o `test -f 'moc_spinbox.cpp' || echo '$(srcdir)/'`moc_spinbox.cpp
+
+libwidgets_a-moc_spinbox.obj: moc_spinbox.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_spinbox.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_spinbox.Tpo -c -o libwidgets_a-moc_spinbox.obj `if test -f 'moc_spinbox.cpp'; then $(CYGPATH_W) 'moc_spinbox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_spinbox.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_spinbox.Tpo $(DEPDIR)/libwidgets_a-moc_spinbox.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_spinbox.cpp' object='libwidgets_a-moc_spinbox.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_spinbox.obj `if test -f 'moc_spinbox.cpp'; then $(CYGPATH_W) 'moc_spinbox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_spinbox.cpp'; fi`
+
+libwidgets_a-moc_comboQuant.o: moc_comboQuant.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_comboQuant.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_comboQuant.Tpo -c -o libwidgets_a-moc_comboQuant.o `test -f 'moc_comboQuant.cpp' || echo '$(srcdir)/'`moc_comboQuant.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_comboQuant.Tpo $(DEPDIR)/libwidgets_a-moc_comboQuant.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_comboQuant.cpp' object='libwidgets_a-moc_comboQuant.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_comboQuant.o `test -f 'moc_comboQuant.cpp' || echo '$(srcdir)/'`moc_comboQuant.cpp
+
+libwidgets_a-moc_comboQuant.obj: moc_comboQuant.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_comboQuant.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_comboQuant.Tpo -c -o libwidgets_a-moc_comboQuant.obj `if test -f 'moc_comboQuant.cpp'; then $(CYGPATH_W) 'moc_comboQuant.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_comboQuant.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_comboQuant.Tpo $(DEPDIR)/libwidgets_a-moc_comboQuant.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_comboQuant.cpp' object='libwidgets_a-moc_comboQuant.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_comboQuant.obj `if test -f 'moc_comboQuant.cpp'; then $(CYGPATH_W) 'moc_comboQuant.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_comboQuant.cpp'; fi`
+
+libwidgets_a-moc_bigtime.o: moc_bigtime.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_bigtime.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_bigtime.Tpo -c -o libwidgets_a-moc_bigtime.o `test -f 'moc_bigtime.cpp' || echo '$(srcdir)/'`moc_bigtime.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_bigtime.Tpo $(DEPDIR)/libwidgets_a-moc_bigtime.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_bigtime.cpp' object='libwidgets_a-moc_bigtime.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_bigtime.o `test -f 'moc_bigtime.cpp' || echo '$(srcdir)/'`moc_bigtime.cpp
+
+libwidgets_a-moc_bigtime.obj: moc_bigtime.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_bigtime.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_bigtime.Tpo -c -o libwidgets_a-moc_bigtime.obj `if test -f 'moc_bigtime.cpp'; then $(CYGPATH_W) 'moc_bigtime.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_bigtime.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_bigtime.Tpo $(DEPDIR)/libwidgets_a-moc_bigtime.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_bigtime.cpp' object='libwidgets_a-moc_bigtime.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_bigtime.obj `if test -f 'moc_bigtime.cpp'; then $(CYGPATH_W) 'moc_bigtime.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_bigtime.cpp'; fi`
+
+libwidgets_a-moc_comment.o: moc_comment.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_comment.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_comment.Tpo -c -o libwidgets_a-moc_comment.o `test -f 'moc_comment.cpp' || echo '$(srcdir)/'`moc_comment.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_comment.Tpo $(DEPDIR)/libwidgets_a-moc_comment.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_comment.cpp' object='libwidgets_a-moc_comment.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_comment.o `test -f 'moc_comment.cpp' || echo '$(srcdir)/'`moc_comment.cpp
+
+libwidgets_a-moc_comment.obj: moc_comment.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_comment.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_comment.Tpo -c -o libwidgets_a-moc_comment.obj `if test -f 'moc_comment.cpp'; then $(CYGPATH_W) 'moc_comment.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_comment.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_comment.Tpo $(DEPDIR)/libwidgets_a-moc_comment.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_comment.cpp' object='libwidgets_a-moc_comment.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_comment.obj `if test -f 'moc_comment.cpp'; then $(CYGPATH_W) 'moc_comment.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_comment.cpp'; fi`
+
+libwidgets_a-moc_splitter.o: moc_splitter.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_splitter.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_splitter.Tpo -c -o libwidgets_a-moc_splitter.o `test -f 'moc_splitter.cpp' || echo '$(srcdir)/'`moc_splitter.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_splitter.Tpo $(DEPDIR)/libwidgets_a-moc_splitter.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_splitter.cpp' object='libwidgets_a-moc_splitter.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_splitter.o `test -f 'moc_splitter.cpp' || echo '$(srcdir)/'`moc_splitter.cpp
+
+libwidgets_a-moc_splitter.obj: moc_splitter.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_splitter.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_splitter.Tpo -c -o libwidgets_a-moc_splitter.obj `if test -f 'moc_splitter.cpp'; then $(CYGPATH_W) 'moc_splitter.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_splitter.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_splitter.Tpo $(DEPDIR)/libwidgets_a-moc_splitter.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_splitter.cpp' object='libwidgets_a-moc_splitter.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_splitter.obj `if test -f 'moc_splitter.cpp'; then $(CYGPATH_W) 'moc_splitter.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_splitter.cpp'; fi`
+
+libwidgets_a-moc_gatetime.o: moc_gatetime.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_gatetime.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_gatetime.Tpo -c -o libwidgets_a-moc_gatetime.o `test -f 'moc_gatetime.cpp' || echo '$(srcdir)/'`moc_gatetime.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_gatetime.Tpo $(DEPDIR)/libwidgets_a-moc_gatetime.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_gatetime.cpp' object='libwidgets_a-moc_gatetime.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_gatetime.o `test -f 'moc_gatetime.cpp' || echo '$(srcdir)/'`moc_gatetime.cpp
+
+libwidgets_a-moc_gatetime.obj: moc_gatetime.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_gatetime.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_gatetime.Tpo -c -o libwidgets_a-moc_gatetime.obj `if test -f 'moc_gatetime.cpp'; then $(CYGPATH_W) 'moc_gatetime.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_gatetime.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_gatetime.Tpo $(DEPDIR)/libwidgets_a-moc_gatetime.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_gatetime.cpp' object='libwidgets_a-moc_gatetime.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_gatetime.obj `if test -f 'moc_gatetime.cpp'; then $(CYGPATH_W) 'moc_gatetime.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_gatetime.cpp'; fi`
+
+libwidgets_a-moc_velocity.o: moc_velocity.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_velocity.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_velocity.Tpo -c -o libwidgets_a-moc_velocity.o `test -f 'moc_velocity.cpp' || echo '$(srcdir)/'`moc_velocity.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_velocity.Tpo $(DEPDIR)/libwidgets_a-moc_velocity.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_velocity.cpp' object='libwidgets_a-moc_velocity.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_velocity.o `test -f 'moc_velocity.cpp' || echo '$(srcdir)/'`moc_velocity.cpp
+
+libwidgets_a-moc_velocity.obj: moc_velocity.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_velocity.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_velocity.Tpo -c -o libwidgets_a-moc_velocity.obj `if test -f 'moc_velocity.cpp'; then $(CYGPATH_W) 'moc_velocity.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_velocity.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_velocity.Tpo $(DEPDIR)/libwidgets_a-moc_velocity.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_velocity.cpp' object='libwidgets_a-moc_velocity.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_velocity.obj `if test -f 'moc_velocity.cpp'; then $(CYGPATH_W) 'moc_velocity.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_velocity.cpp'; fi`
+
+libwidgets_a-moc_metronome.o: moc_metronome.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_metronome.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_metronome.Tpo -c -o libwidgets_a-moc_metronome.o `test -f 'moc_metronome.cpp' || echo '$(srcdir)/'`moc_metronome.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_metronome.Tpo $(DEPDIR)/libwidgets_a-moc_metronome.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_metronome.cpp' object='libwidgets_a-moc_metronome.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_metronome.o `test -f 'moc_metronome.cpp' || echo '$(srcdir)/'`moc_metronome.cpp
+
+libwidgets_a-moc_metronome.obj: moc_metronome.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_metronome.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_metronome.Tpo -c -o libwidgets_a-moc_metronome.obj `if test -f 'moc_metronome.cpp'; then $(CYGPATH_W) 'moc_metronome.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_metronome.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_metronome.Tpo $(DEPDIR)/libwidgets_a-moc_metronome.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_metronome.cpp' object='libwidgets_a-moc_metronome.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_metronome.obj `if test -f 'moc_metronome.cpp'; then $(CYGPATH_W) 'moc_metronome.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_metronome.cpp'; fi`
+
+libwidgets_a-moc_posedit.o: moc_posedit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_posedit.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_posedit.Tpo -c -o libwidgets_a-moc_posedit.o `test -f 'moc_posedit.cpp' || echo '$(srcdir)/'`moc_posedit.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_posedit.Tpo $(DEPDIR)/libwidgets_a-moc_posedit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_posedit.cpp' object='libwidgets_a-moc_posedit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_posedit.o `test -f 'moc_posedit.cpp' || echo '$(srcdir)/'`moc_posedit.cpp
+
+libwidgets_a-moc_posedit.obj: moc_posedit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_posedit.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_posedit.Tpo -c -o libwidgets_a-moc_posedit.obj `if test -f 'moc_posedit.cpp'; then $(CYGPATH_W) 'moc_posedit.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_posedit.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_posedit.Tpo $(DEPDIR)/libwidgets_a-moc_posedit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_posedit.cpp' object='libwidgets_a-moc_posedit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_posedit.obj `if test -f 'moc_posedit.cpp'; then $(CYGPATH_W) 'moc_posedit.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_posedit.cpp'; fi`
+
+libwidgets_a-moc_pitchedit.o: moc_pitchedit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_pitchedit.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_pitchedit.Tpo -c -o libwidgets_a-moc_pitchedit.o `test -f 'moc_pitchedit.cpp' || echo '$(srcdir)/'`moc_pitchedit.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_pitchedit.Tpo $(DEPDIR)/libwidgets_a-moc_pitchedit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_pitchedit.cpp' object='libwidgets_a-moc_pitchedit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_pitchedit.o `test -f 'moc_pitchedit.cpp' || echo '$(srcdir)/'`moc_pitchedit.cpp
+
+libwidgets_a-moc_pitchedit.obj: moc_pitchedit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_pitchedit.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_pitchedit.Tpo -c -o libwidgets_a-moc_pitchedit.obj `if test -f 'moc_pitchedit.cpp'; then $(CYGPATH_W) 'moc_pitchedit.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_pitchedit.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_pitchedit.Tpo $(DEPDIR)/libwidgets_a-moc_pitchedit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_pitchedit.cpp' object='libwidgets_a-moc_pitchedit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_pitchedit.obj `if test -f 'moc_pitchedit.cpp'; then $(CYGPATH_W) 'moc_pitchedit.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_pitchedit.cpp'; fi`
+
+libwidgets_a-moc_pitchlabel.o: moc_pitchlabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_pitchlabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_pitchlabel.Tpo -c -o libwidgets_a-moc_pitchlabel.o `test -f 'moc_pitchlabel.cpp' || echo '$(srcdir)/'`moc_pitchlabel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_pitchlabel.Tpo $(DEPDIR)/libwidgets_a-moc_pitchlabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_pitchlabel.cpp' object='libwidgets_a-moc_pitchlabel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_pitchlabel.o `test -f 'moc_pitchlabel.cpp' || echo '$(srcdir)/'`moc_pitchlabel.cpp
+
+libwidgets_a-moc_pitchlabel.obj: moc_pitchlabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_pitchlabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_pitchlabel.Tpo -c -o libwidgets_a-moc_pitchlabel.obj `if test -f 'moc_pitchlabel.cpp'; then $(CYGPATH_W) 'moc_pitchlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_pitchlabel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_pitchlabel.Tpo $(DEPDIR)/libwidgets_a-moc_pitchlabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_pitchlabel.cpp' object='libwidgets_a-moc_pitchlabel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_pitchlabel.obj `if test -f 'moc_pitchlabel.cpp'; then $(CYGPATH_W) 'moc_pitchlabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_pitchlabel.cpp'; fi`
+
+libwidgets_a-moc_poslabel.o: moc_poslabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_poslabel.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_poslabel.Tpo -c -o libwidgets_a-moc_poslabel.o `test -f 'moc_poslabel.cpp' || echo '$(srcdir)/'`moc_poslabel.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_poslabel.Tpo $(DEPDIR)/libwidgets_a-moc_poslabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_poslabel.cpp' object='libwidgets_a-moc_poslabel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_poslabel.o `test -f 'moc_poslabel.cpp' || echo '$(srcdir)/'`moc_poslabel.cpp
+
+libwidgets_a-moc_poslabel.obj: moc_poslabel.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_poslabel.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_poslabel.Tpo -c -o libwidgets_a-moc_poslabel.obj `if test -f 'moc_poslabel.cpp'; then $(CYGPATH_W) 'moc_poslabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_poslabel.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_poslabel.Tpo $(DEPDIR)/libwidgets_a-moc_poslabel.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_poslabel.cpp' object='libwidgets_a-moc_poslabel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_poslabel.obj `if test -f 'moc_poslabel.cpp'; then $(CYGPATH_W) 'moc_poslabel.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_poslabel.cpp'; fi`
+
+libwidgets_a-moc_filedialog.o: moc_filedialog.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_filedialog.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_filedialog.Tpo -c -o libwidgets_a-moc_filedialog.o `test -f 'moc_filedialog.cpp' || echo '$(srcdir)/'`moc_filedialog.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_filedialog.Tpo $(DEPDIR)/libwidgets_a-moc_filedialog.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_filedialog.cpp' object='libwidgets_a-moc_filedialog.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_filedialog.o `test -f 'moc_filedialog.cpp' || echo '$(srcdir)/'`moc_filedialog.cpp
+
+libwidgets_a-moc_filedialog.obj: moc_filedialog.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_filedialog.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_filedialog.Tpo -c -o libwidgets_a-moc_filedialog.obj `if test -f 'moc_filedialog.cpp'; then $(CYGPATH_W) 'moc_filedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_filedialog.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_filedialog.Tpo $(DEPDIR)/libwidgets_a-moc_filedialog.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_filedialog.cpp' object='libwidgets_a-moc_filedialog.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_filedialog.obj `if test -f 'moc_filedialog.cpp'; then $(CYGPATH_W) 'moc_filedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_filedialog.cpp'; fi`
+
+libwidgets_a-moc_sigedit.o: moc_sigedit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_sigedit.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_sigedit.Tpo -c -o libwidgets_a-moc_sigedit.o `test -f 'moc_sigedit.cpp' || echo '$(srcdir)/'`moc_sigedit.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_sigedit.Tpo $(DEPDIR)/libwidgets_a-moc_sigedit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_sigedit.cpp' object='libwidgets_a-moc_sigedit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_sigedit.o `test -f 'moc_sigedit.cpp' || echo '$(srcdir)/'`moc_sigedit.cpp
+
+libwidgets_a-moc_sigedit.obj: moc_sigedit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_sigedit.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_sigedit.Tpo -c -o libwidgets_a-moc_sigedit.obj `if test -f 'moc_sigedit.cpp'; then $(CYGPATH_W) 'moc_sigedit.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_sigedit.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_sigedit.Tpo $(DEPDIR)/libwidgets_a-moc_sigedit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_sigedit.cpp' object='libwidgets_a-moc_sigedit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_sigedit.obj `if test -f 'moc_sigedit.cpp'; then $(CYGPATH_W) 'moc_sigedit.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_sigedit.cpp'; fi`
+
+libwidgets_a-moc_shortcutconfig.o: moc_shortcutconfig.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_shortcutconfig.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_shortcutconfig.Tpo -c -o libwidgets_a-moc_shortcutconfig.o `test -f 'moc_shortcutconfig.cpp' || echo '$(srcdir)/'`moc_shortcutconfig.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_shortcutconfig.Tpo $(DEPDIR)/libwidgets_a-moc_shortcutconfig.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_shortcutconfig.cpp' object='libwidgets_a-moc_shortcutconfig.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_shortcutconfig.o `test -f 'moc_shortcutconfig.cpp' || echo '$(srcdir)/'`moc_shortcutconfig.cpp
+
+libwidgets_a-moc_shortcutconfig.obj: moc_shortcutconfig.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_shortcutconfig.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_shortcutconfig.Tpo -c -o libwidgets_a-moc_shortcutconfig.obj `if test -f 'moc_shortcutconfig.cpp'; then $(CYGPATH_W) 'moc_shortcutconfig.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_shortcutconfig.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_shortcutconfig.Tpo $(DEPDIR)/libwidgets_a-moc_shortcutconfig.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_shortcutconfig.cpp' object='libwidgets_a-moc_shortcutconfig.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_shortcutconfig.obj `if test -f 'moc_shortcutconfig.cpp'; then $(CYGPATH_W) 'moc_shortcutconfig.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_shortcutconfig.cpp'; fi`
+
+libwidgets_a-moc_shortcutcapturedialog.o: moc_shortcutcapturedialog.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_shortcutcapturedialog.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_shortcutcapturedialog.Tpo -c -o libwidgets_a-moc_shortcutcapturedialog.o `test -f 'moc_shortcutcapturedialog.cpp' || echo '$(srcdir)/'`moc_shortcutcapturedialog.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_shortcutcapturedialog.Tpo $(DEPDIR)/libwidgets_a-moc_shortcutcapturedialog.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_shortcutcapturedialog.cpp' object='libwidgets_a-moc_shortcutcapturedialog.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_shortcutcapturedialog.o `test -f 'moc_shortcutcapturedialog.cpp' || echo '$(srcdir)/'`moc_shortcutcapturedialog.cpp
+
+libwidgets_a-moc_shortcutcapturedialog.obj: moc_shortcutcapturedialog.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_shortcutcapturedialog.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_shortcutcapturedialog.Tpo -c -o libwidgets_a-moc_shortcutcapturedialog.obj `if test -f 'moc_shortcutcapturedialog.cpp'; then $(CYGPATH_W) 'moc_shortcutcapturedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_shortcutcapturedialog.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_shortcutcapturedialog.Tpo $(DEPDIR)/libwidgets_a-moc_shortcutcapturedialog.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_shortcutcapturedialog.cpp' object='libwidgets_a-moc_shortcutcapturedialog.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_shortcutcapturedialog.obj `if test -f 'moc_shortcutcapturedialog.cpp'; then $(CYGPATH_W) 'moc_shortcutcapturedialog.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_shortcutcapturedialog.cpp'; fi`
+
+libwidgets_a-moc_combobox.o: moc_combobox.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_combobox.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_combobox.Tpo -c -o libwidgets_a-moc_combobox.o `test -f 'moc_combobox.cpp' || echo '$(srcdir)/'`moc_combobox.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_combobox.Tpo $(DEPDIR)/libwidgets_a-moc_combobox.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_combobox.cpp' object='libwidgets_a-moc_combobox.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_combobox.o `test -f 'moc_combobox.cpp' || echo '$(srcdir)/'`moc_combobox.cpp
+
+libwidgets_a-moc_combobox.obj: moc_combobox.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_combobox.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_combobox.Tpo -c -o libwidgets_a-moc_combobox.obj `if test -f 'moc_combobox.cpp'; then $(CYGPATH_W) 'moc_combobox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_combobox.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_combobox.Tpo $(DEPDIR)/libwidgets_a-moc_combobox.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_combobox.cpp' object='libwidgets_a-moc_combobox.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_combobox.obj `if test -f 'moc_combobox.cpp'; then $(CYGPATH_W) 'moc_combobox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_combobox.cpp'; fi`
+
+libwidgets_a-moc_aboutbox_impl.o: moc_aboutbox_impl.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_aboutbox_impl.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_aboutbox_impl.Tpo -c -o libwidgets_a-moc_aboutbox_impl.o `test -f 'moc_aboutbox_impl.cpp' || echo '$(srcdir)/'`moc_aboutbox_impl.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_aboutbox_impl.Tpo $(DEPDIR)/libwidgets_a-moc_aboutbox_impl.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_aboutbox_impl.cpp' object='libwidgets_a-moc_aboutbox_impl.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_aboutbox_impl.o `test -f 'moc_aboutbox_impl.cpp' || echo '$(srcdir)/'`moc_aboutbox_impl.cpp
+
+libwidgets_a-moc_aboutbox_impl.obj: moc_aboutbox_impl.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_aboutbox_impl.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_aboutbox_impl.Tpo -c -o libwidgets_a-moc_aboutbox_impl.obj `if test -f 'moc_aboutbox_impl.cpp'; then $(CYGPATH_W) 'moc_aboutbox_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_aboutbox_impl.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_aboutbox_impl.Tpo $(DEPDIR)/libwidgets_a-moc_aboutbox_impl.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_aboutbox_impl.cpp' object='libwidgets_a-moc_aboutbox_impl.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_aboutbox_impl.obj `if test -f 'moc_aboutbox_impl.cpp'; then $(CYGPATH_W) 'moc_aboutbox_impl.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_aboutbox_impl.cpp'; fi`
+
+libwidgets_a-moc_aboutbox.o: moc_aboutbox.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_aboutbox.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_aboutbox.Tpo -c -o libwidgets_a-moc_aboutbox.o `test -f 'moc_aboutbox.cpp' || echo '$(srcdir)/'`moc_aboutbox.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_aboutbox.Tpo $(DEPDIR)/libwidgets_a-moc_aboutbox.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_aboutbox.cpp' object='libwidgets_a-moc_aboutbox.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_aboutbox.o `test -f 'moc_aboutbox.cpp' || echo '$(srcdir)/'`moc_aboutbox.cpp
+
+libwidgets_a-moc_aboutbox.obj: moc_aboutbox.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_aboutbox.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_aboutbox.Tpo -c -o libwidgets_a-moc_aboutbox.obj `if test -f 'moc_aboutbox.cpp'; then $(CYGPATH_W) 'moc_aboutbox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_aboutbox.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_aboutbox.Tpo $(DEPDIR)/libwidgets_a-moc_aboutbox.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_aboutbox.cpp' object='libwidgets_a-moc_aboutbox.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_aboutbox.obj `if test -f 'moc_aboutbox.cpp'; then $(CYGPATH_W) 'moc_aboutbox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_aboutbox.cpp'; fi`
+
+libwidgets_a-moc_songinfo.o: moc_songinfo.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_songinfo.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_songinfo.Tpo -c -o libwidgets_a-moc_songinfo.o `test -f 'moc_songinfo.cpp' || echo '$(srcdir)/'`moc_songinfo.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_songinfo.Tpo $(DEPDIR)/libwidgets_a-moc_songinfo.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_songinfo.cpp' object='libwidgets_a-moc_songinfo.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_songinfo.o `test -f 'moc_songinfo.cpp' || echo '$(srcdir)/'`moc_songinfo.cpp
+
+libwidgets_a-moc_songinfo.obj: moc_songinfo.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_songinfo.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_songinfo.Tpo -c -o libwidgets_a-moc_songinfo.obj `if test -f 'moc_songinfo.cpp'; then $(CYGPATH_W) 'moc_songinfo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_songinfo.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_songinfo.Tpo $(DEPDIR)/libwidgets_a-moc_songinfo.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_songinfo.cpp' object='libwidgets_a-moc_songinfo.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_songinfo.obj `if test -f 'moc_songinfo.cpp'; then $(CYGPATH_W) 'moc_songinfo.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_songinfo.cpp'; fi`
+
+libwidgets_a-moc_didyouknow.o: moc_didyouknow.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_didyouknow.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_didyouknow.Tpo -c -o libwidgets_a-moc_didyouknow.o `test -f 'moc_didyouknow.cpp' || echo '$(srcdir)/'`moc_didyouknow.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_didyouknow.Tpo $(DEPDIR)/libwidgets_a-moc_didyouknow.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_didyouknow.cpp' object='libwidgets_a-moc_didyouknow.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_didyouknow.o `test -f 'moc_didyouknow.cpp' || echo '$(srcdir)/'`moc_didyouknow.cpp
+
+libwidgets_a-moc_didyouknow.obj: moc_didyouknow.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_didyouknow.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_didyouknow.Tpo -c -o libwidgets_a-moc_didyouknow.obj `if test -f 'moc_didyouknow.cpp'; then $(CYGPATH_W) 'moc_didyouknow.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_didyouknow.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_didyouknow.Tpo $(DEPDIR)/libwidgets_a-moc_didyouknow.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_didyouknow.cpp' object='libwidgets_a-moc_didyouknow.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_didyouknow.obj `if test -f 'moc_didyouknow.cpp'; then $(CYGPATH_W) 'moc_didyouknow.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_didyouknow.cpp'; fi`
+
+libwidgets_a-moc_checkbox.o: moc_checkbox.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_checkbox.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_checkbox.Tpo -c -o libwidgets_a-moc_checkbox.o `test -f 'moc_checkbox.cpp' || echo '$(srcdir)/'`moc_checkbox.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_checkbox.Tpo $(DEPDIR)/libwidgets_a-moc_checkbox.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_checkbox.cpp' object='libwidgets_a-moc_checkbox.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_checkbox.o `test -f 'moc_checkbox.cpp' || echo '$(srcdir)/'`moc_checkbox.cpp
+
+libwidgets_a-moc_checkbox.obj: moc_checkbox.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_checkbox.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_checkbox.Tpo -c -o libwidgets_a-moc_checkbox.obj `if test -f 'moc_checkbox.cpp'; then $(CYGPATH_W) 'moc_checkbox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_checkbox.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_checkbox.Tpo $(DEPDIR)/libwidgets_a-moc_checkbox.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_checkbox.cpp' object='libwidgets_a-moc_checkbox.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_checkbox.obj `if test -f 'moc_checkbox.cpp'; then $(CYGPATH_W) 'moc_checkbox.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_checkbox.cpp'; fi`
+
+libwidgets_a-moc_vscale.o: moc_vscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_vscale.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_vscale.Tpo -c -o libwidgets_a-moc_vscale.o `test -f 'moc_vscale.cpp' || echo '$(srcdir)/'`moc_vscale.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_vscale.Tpo $(DEPDIR)/libwidgets_a-moc_vscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_vscale.cpp' object='libwidgets_a-moc_vscale.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_vscale.o `test -f 'moc_vscale.cpp' || echo '$(srcdir)/'`moc_vscale.cpp
+
+libwidgets_a-moc_vscale.obj: moc_vscale.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_vscale.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_vscale.Tpo -c -o libwidgets_a-moc_vscale.obj `if test -f 'moc_vscale.cpp'; then $(CYGPATH_W) 'moc_vscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_vscale.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_vscale.Tpo $(DEPDIR)/libwidgets_a-moc_vscale.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_vscale.cpp' object='libwidgets_a-moc_vscale.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_vscale.obj `if test -f 'moc_vscale.cpp'; then $(CYGPATH_W) 'moc_vscale.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_vscale.cpp'; fi`
+
+libwidgets_a-moc_action.o: moc_action.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_action.o -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_action.Tpo -c -o libwidgets_a-moc_action.o `test -f 'moc_action.cpp' || echo '$(srcdir)/'`moc_action.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_action.Tpo $(DEPDIR)/libwidgets_a-moc_action.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_action.cpp' object='libwidgets_a-moc_action.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_action.o `test -f 'moc_action.cpp' || echo '$(srcdir)/'`moc_action.cpp
+
+libwidgets_a-moc_action.obj: moc_action.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libwidgets_a-moc_action.obj -MD -MP -MF $(DEPDIR)/libwidgets_a-moc_action.Tpo -c -o libwidgets_a-moc_action.obj `if test -f 'moc_action.cpp'; then $(CYGPATH_W) 'moc_action.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_action.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libwidgets_a-moc_action.Tpo $(DEPDIR)/libwidgets_a-moc_action.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='moc_action.cpp' object='libwidgets_a-moc_action.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libwidgets_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libwidgets_a-moc_action.obj `if test -f 'moc_action.cpp'; then $(CYGPATH_W) 'moc_action.cpp'; else $(CYGPATH_W) '$(srcdir)/moc_action.cpp'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+ -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+de:
+ @for base in $(MOCFILES); do echo -e "\t$${base}.cpp $${base}.h \\"; done
+
+nde:
+ @for base in $(MOCFILES); do echo -e "\tmoc_$${base}.cpp \\"; done
+
+.ui.o: %.h
+ $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui
+ $(MOC) $*.h >> $*.cpp
+ $(CXXCOMPILE) -c $*.cpp -o $*.o
+ $(RM) $*.cpp moc_$*.cpp moc_$*.o
+
+.ui.lo: %.h
+ $(UIC) -L $(top_srcdir)/muse/widgets -o $*.cpp -impl $*.h $*.ui
+ $(MOC) $*.h >> $*.cpp
+ $(LTCXXCOMPILE) -c $*.cpp -o $*.lo
+ $(RM) $*.cpp moc_$*.cpp moc_$*.lo moc_$*.o
+
+moc_%.cpp: %.h
+ $(MOC) $< -o $@
+
+%.h: %.ui
+ $(UIC) -o $@ $<
+# $(UIC) -L $(top_srcdir)/muse/widgets -o $@ $<
+
+%.non-libtool.cpp: %.cpp
+ $(LN_S) $*.cpp $*.non-libtool.cpp
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/muse2/muse/widgets/aboutbox.ui b/muse2/muse/widgets/aboutbox.ui
new file mode 100644
index 00000000..2dadb447
--- /dev/null
+++ b/muse2/muse/widgets/aboutbox.ui
@@ -0,0 +1,129 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>AboutBox</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>AboutBox</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>377</width>
+ <height>525</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="paletteForegroundColor">
+ <color>
+ <red>254</red>
+ <green>254</green>
+ <blue>254</blue>
+ </color>
+ </property>
+ <property name="paletteBackgroundColor">
+ <color>
+ <red>2</red>
+ <green>2</green>
+ <blue>2</blue>
+ </color>
+ </property>
+ <property name="caption">
+ <string>AboutBox</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout1</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>pixmapLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>32753</height>
+ </size>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ <property name="scaledContents">
+ <bool>false</bool>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>versionLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Version 1.1rc2</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>(C) Copyright 1999-2010 Werner Schweer and others.
+See http://www.muse-sequencer.org for new versions and
+more information.
+
+Published under the GNU Public License</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>doneHere</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Keep On Rocking!</string>
+ </property>
+ <property name="accel">
+ <string>Alt+K</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="365136">789c44ddc772f250bbb5ebfe3a8aaf967aab76b10021091abbe19c03c679d76e08916c1c5f67ff27ff4b3cf71836bdab6498595333e97fffe73fd7a747fff99ffffdafb7f7f2fdaefa4fb528fffde77f261f8f8f3fffdffffffffe9ffffaefb4ddfe4fda1efc276bf77aff49fffbfff9afff1ebeb7fe53fd2769affe025e56d011b4ca04e8e88ad2d0595d91ecada0ab2b5ae303435c713800ba5c71f761e03bde0ddd156c7cad20f5974eb70cfccb0dc077248f7b86f88e9d1190ea8a3fe8465c5e0dabf4681d4f57d0f3af54678042babd0bf0a5ad837743fcecfe8d21bef44c57f480fb81a1171001cbfc2bf325a05f395e18ba11974b437ce94107e8f12ffbf78634fe65d7103f7bd805b236c5616ac85657ecfdac2077c0a69b800296ec1b22fa278f404fa9fe6b88907ebf0399923033c4770caf0cab9026f7cf404ed0f73e0c11d272d79047198b5f291cd2df6d43fccae41fd0038e3e0d11d217fd8b43ba6e20a41b0612f9c81001dbde01727d476588ef48760d6443cf10b13d3b32c497ee3f1922b6870a7a11307cff3114ab2bb6d215f41dfd6a0428faa35b80b8b40e9f01057dfc61887f294e0d447fcb10211dde000571195e1ae28af33f88b8ec568608fada00e803cb96a1bf827ff12f03c7e560cb107179fa069473bb978608fac339a0543f38060ad5fd3d437cc7e0d710ffb27b6e88b8f4bf0c11f4834d4071b9fe6788b86ce4c0005826864140fc6ce9b8942d43c4f6686188801df50132aa95fd1ae28a91ae505cb8159475c0e2578eef0c7145f16320a3fe0103e0e6c6d08ff2b16d88b86cbd0165fccbf03d3144f4bb7343fccbfddf156534f493158c1dfde70a506c0ffb8608faec1850e4764a43e45c716e88b8f43b8608d8f636305063706188a27d3c31c477ec3e0025bf72f16aa0385c1ae257b21b4344bfb73044f43bff80b1ae3834c415cbae611c0526fea572027d760c91405f7b808ac3d6a7212237d6bf28fabb27069aad0a28d5167e1848e4d410b1cdf70c1197fc1718ab7c7c1bfa011343fc4b766758453f692540457af4df0de3f88ecc50adae58c45d6cf257827e0c11b9bb1c28b862961ae28afd0ea012747e0fa87c1c1486488f834343fc4b79039424f25ecf103f3b783390847786488fe3013056237d6188709c7d19221ce73d4384a33d032abef4edc91045ea74dd1049981c00f5270a4c94a0a913e82805d4a01c6e1be87f7c034a8fe218506cab1f80c8b5ce370c1197c1998190f6818aef489f0d11b9fea921fee5ec0d98a88a5d1aa248651f86f897616658453f4912604a02f52f0c9140cb1bc374050f5182664eb1d725e014fb32448a8da680cad8bf0303e971082809270225e17403a880ed2d0339776a882fcdfeae88f4b83a03266ac6bf0c9184835b43a458911b2281f21930e54b07134324d0d10b305312de1a662b785c45ae7e8a508abd6d1a22818a3540cdd6e8c110571cfe0177f50340ad76ffc94025bc0168a55ac58721a27f5a014ae4fec010b13d2a81093f7b3930f02beb86551226f73fc0942b6efa060aee3f43fccae1be21b2217b3444220f7f8119bfd2da374446fd1c18a671c5d8b0ca86647c1cd05064545bd08907bc8f886dc7f9727f06381b66065acb29a06cc8f701a57affd110d13f390554d5b7f52f13b5a70f86488f510e4cf995b35303b7e85b4394c23c0566fccaf0c1c01d68c31049f87d678854bfda0a708aadef0b22c592c77ba0c3157bdb02d274d931440ff66875c3e9749dc8d50450221f7501ddb3fb6343a4face21c0bd21b91b19a29377b70154aa1e2706eeea97804a72ffdb10a9fea6ef98ea297a6ce01ef56e201b3e0d91a6a31f60465c36cf0d54a067037d87bf2b6872fe19e24b3f8686c8ec51d71039378802d36d2a7b64d4a181862d3344cef59f05e4dced19a0acdcb830c46375eb0be892b70f5d437415fa516f53e7ede40850deae278648d3e91898d0162eaf01a56901340d6864c3ae21a2ffdd3144e4d21ba0a3fed8a321bef4f0d510697aa32f55f4074ba04b0b339b0a887e561822fa2f7b400a3c5f19a248ddadeeea9d9ed363bc6fe0b6f603a8a774b863a007fb0751d647ef806e8dfd4d0365fd0cd09db0b83044a1cbcf01b5c9a30a98e94b878648c2ad68837a75aac7159d63437ce968d71019d53b3544465d8e818e6ad48581eaf16a8880ed1097a6e6c6153b02f2e5f1c910d910232435285fbe1786c8977f64434351e7c68628961f715bcb9c519357c0bdbe6dc03d9429a0543fb9334402156340699aff4144ee291a83ac4eb108473634c41567e7067a283f40877fe94f0ddca2370c11b08b1343e44b7747406d38bb05baba9dfc4184637f1348c9864106f4f88ec3730383195d039dbc3990013f3706ea4bdc9173a7fae20950aa1f2c0d513df67243447f780b4cb8221b19e28ac1ab81fa72034cd5a0bc013375f14f0c9195dbd143c9950d49ab344446a5178648f57c1be8aa0bf760a02f9502293f3bf81190ea377f1089dcdb0528dac96207c8b8e2e8ca1085ff67df10415ffe33acb221b9d7bfe46454fa62888c5afb3244be3c0514ceb9e903a09c5ba686b8cd4f8780326aab6b2081b6017536f3134394d35e0770cf313a02459da68c296d1ae23b6e7a020aeec52f907245fa07f12b0f4f40a6ac7c1370f39c24066e16992152fd95f4709a66df061a5822d7d00a7ef70c9140f791627da7e9cbae21aed87f0194a6c58981c2df0194a6d91f50f8e386d377efe2ec0e50d1dedb02badcc5de6f0d91403b09907245be03f454d62b0129f67908a858b6f6809c8cea1d0105699ade1af8973343fc6c6f6c88144b3f803e69ba5e1a22815ea3173c709a8ebb80d2f4e0d34093b309a8473f3830440ff67e62e0617501b8a37862884277fc07d1187cc613cec0699ace0424d0d12bd023606bb70212797d0f50293cdc020a25f2ad81d6e1d54007fed010697a4bf49da645658870fce84bebcf0a6611b9d269ba5319e25f0efa80d2747fdf405ffb165012e64b03a32c9140a5fb96831b435c71b1017474cfbe34c48d6fd0067427ec9c19a2e778b70ea48474fb10e8e991674b407371776e60a45790455c92bb3343046c632ea0f0f7896d7d53a293f76488c8f5770d51919f15d29cef78bf314466cf3e80829096978698274c32033345bf409fbb47ccdfd630a0385cec18e8a12c0d9173070740a92bc686b8623c37446cd7a2128e5d821e0f0c54e419a01294dc1ae28a5e1fd0e3dbeedc40911a1948e4a80d63f782fb3f809e3db253400566b80ba4348ec7ba42e5e3f6454025fc770968d2efac3430333215a8b7f505e404fdf6c810ed7a457a3477cbb89d9c037d75153e0c4ceadc03037a17b389819e4169a0c53d3344383a6f40a9e6e2d3c014c5df15f4c7ee0c91c8374aa031f0bb6f88b23e8b46ba72de56034079bbff6ce057a23854cecaf41850ce8dd601f50c86952192f0e007d0bce9153f5b27323d947503835dfa0e1ad8d65901f4b9bd8e1241a45872ff020cc8a803e2d2e4ee0abef60da469cb4049ae0cc4f6c8c0a3d7015071c5c5a381598d3d4394f52aeafec489bc7e65889fbd8ae673d20c76c6cf6e1bf8954dc0cf845f860858fa07f1b33d7d6917384f0c9173dd2720d5b3e903d023e7325da10ab47f0a68a6796769e011700b50cebd3d02347dadc13ea0a6efb0004a2a5049023535376ac3bd81b1adc4c08851cb10e97135022af236fd3650e82686f897f531507f56f014756eea9c5bfe18e24b0fa30d9afae6f9f068a00f3337c4cf5e1e00f4b593872f03a33d25903289b17c31444615bf001995dcaf01f4b55bb77b00ddc024968cac20f265ad0ff4d516de19180a1f182281ceb70c8c07b505eaafa7c040d30bbb82c8b9a435054acad891ae2819614d4e0dc4e59f2112f9f00318eb59ecc910a530cf0d91c8d30aa8f88e74cb1021cdbf0c910d47ba62c215e703435c71facf1005e6bc034cb9e2e6c210576cfe4164e57594c2998a54721f793b73919af70c34b0fccb5f7fecc91021ed3d02aac85fdf40ae9189d4105d96fb29a0f2b1f70e686e7e2333d06c3d19e2e639fd1050e8961b86f8d2dbb9216a7676040cf88ee4c3c0e0ce3f60ac11d69e8106e5d1c063d39e81c9fa04a8f484931968606706da0f65c3842fbdd93344dea64aa0a9aef836c477dcae1be25f0e4e0c91fba70fc08cf2b17364882b763b86c8cae7552bb55af8173f7bf70fd0bd617fd7c0b4e004d0c8d5bc0da494b1e3074384b43300327a5bf906408169a505a03bf2c6a580cc3e9f035a769277012da248078648b19b73c059a99fade86ddde85f267a8eea19984adb3550914f0065d4d38f81aed30e30e33b8efe19e23bf64b03637d1f8659dcf7ef039aaf8dacfc83c8b9642ee8469a2e223d3aceb979c710b5e1fe10d0c0ccd58681ae75cb4047e01348f57036027ac0e9259001b7e78608e94d0e685461f00e1464f6c10ba069c1e1be805a995e1ae28aed23401387c9b581e78639a025349d6b034f6bb9813eccab8076bd6803baef770f0cf1a55da5c78472da7f31c4af1cbe0153cad8516588a18a4501a87cf4fe808a3c0d68ca6114984f43dc3ca75706ee84eb02cac79efea5feace0dfaa1deb765d60ee4f0d3cf17d002a1fc508d070e969dbc05dac03f4801bfd0bc52129df001587f7b1210276be07149a187a00fafccbfa8121527de71cd06cc241cfc0e3db8d40637def06a69e1517f50bcf7f0c8c291d03cafd74084c3444d035c4b347590153aed87d0466f11dc93c2a61b769a7e2674f0c91d9c73343d49763bea3294351c6e64097bc3d9818a2819daf6ed1ddd45979f80868c835bb36b012e1c81059795b023ddd0a04999ec4734304ecfcdbc0628e1d20d7ca9d1303b768fd4ba15edf1e30d077f405b40eff5a8066f0fa1f801662dc1c1968d7d70daba027ad6b032d9d0236a1e03e0e05f42d97130329a6a04f35c8f466885f99bd03330aeef6a681c7d9e780e6d61701fb67886a7a746988b86cf3b34db314578c0cd1e79fe85fba2a30b7404a81593f3744397d8c26b8e702b3380654606ea6067a3957806e05833ba024a3bedb80aad8485faab9a4cb6d03cf0d0930251b5afa95298dc1cdbe21b261fc08cce88e4ed70c118e76c4b6d77449e23b6e0d3100b0e81b18b91a182260df1f4047b7f973436443775f4013fc6f027495515f8648b1a36d01ff7298022915f9be05d49fa8d9abde673773bedcbd1a18724d801e90df1b221c83125045ce0b4304ecb2636042e60228541b2aa0afe50dfa8e92b27e931922d52f7b803adfa71b4045f9f8c801cf58fd33d00d3c34709b6f19a8eaa5212ae1bd424a094a5a1f0616923f01330dcbc53d2a6bbabdd12891c84d9724728ef4686e17d1d0770d918405e9e13a77f169882f3d242e4dfe47f3393644c0ee360d317c3cd7cf66d4dbfd0743a4e93cc2f137c5797f02a838f45f0d8c197c022a0eb76b86884befc7100d4ab60da819bfda37c41597c706e6c4db8046470789809a7d3e0274df3f3d05181d6d0dce81b196e12c04b4a7a32140bb9e3c5e019ef37c1668706717d0da8d4ba598baf8477147ce9b679cc8864ba0ab66bc6588667c561a18c824c5eab63fbe74ab67889fddff0306ddbe0c0c1154020accbe7eb6c715c3a980f231226f5d3e0e3680fab38259dcb40a978fee8621c2b1bb0032aee84c0d2c8c4d0d3c156c039a19b91d19c8971f4314989b53a0d092a24b034f165d40634ad9bb8142a7efd038eed52e506aa8e2c210ad54bb0d54fccbeba581d9c831a091efe200d034d8e0ca40368c0c2caf8c7b76d1d5b293d144a081ff63402bff0e47860858f7db40deee19e84b1d025d06cc1e124384e3fe52c00de7483f9b72e31b3e1a98d5383470e3bb3190b78a4b4ff7b90d03f7b9074364d44926a09c1eae0119ade5d11990ab2d7c37302fa67014c07edb1039f71485bfefa2fd7a07a8243f9f1b7816db31301b3901d4d2757a86884ba703e8f9763402d48ee5fa8e01f7cafb0c60d4ba55e88a31f0fb616099a782ae52787128a0c01cff0334e23c5a1a62783056cb3540465d005d4dd7f68f0c0c1f0f004a6132f906ba04ece24940911afe002a52fb5f0646267201993d5c037a348efb278608d8de868115886d20a3813d4d01958ff31740e563b46f88f2719c007da02c0d6ced8a12347081591c19221ce343402d5d6f6860815ddf4081e9022a30d99e817be526d0e73bae6f8001ffd22f05e47ed1012aa0f764602dcb12d0e8d75e94f54157d33e57b7021e24ca31a0a53ce7cf06c61d7e81942f4d66408fdc1fbd08b8696d7d03191df8e9d8c08def11c869b6e6f702cad82949e88cda575ceacf0aeee2674b67d4eb1c5046f5fb067a391f80ee4045668854ef2e01e54b2735447adc4e055aee215046b5af80523f3b0234489d9d191864ba032aada83a35b025e2de10997df30b68d4693e04665a121075aeec6aaea0bf2de06773d2a3aba981d14240bb3ef804bada35f00468f95c3631b0c1f018e811f4c30e905160b6370cd1189c0e0594a0db6720d72d29070654e4ce9d81c9368a43f35901833b631787c35d43446eeb0b2874c59e81e80f01158734374481b96801cafd0bfd8bb261271aa57157c372a79b0212f9e009d0386ebe6660c6fb01609d52b2480c0ca9ed1ba27cf4de0056ccb4d23d4324f2e50da07c393805f208faf07dd7104f5a77774041cd5ebc00fda8b7c9fd81819b96ae28c9b9dd19507f56f0100d7df59751df8648a072075046fdbb3250915f0cb4b8ba423997ff33b0ba54a016f7ac2ba0125eed01ba673f281c1312f935ea7ed5d5cae14381b272edd5c0b4cfa5815bf41da0e7b9de8181a1ac998151b8434055ac3d07b42e787b1d202b5bfb6343548fb3095070c5edaf81816e85a3a40b777a0f54e4dceea981e55111b98973eedf185046250340f972fe64e0c67705285f4eae0d7404f601cd129fad0b34293c039473bd0450037bd30118fc6b75360c34b043409baeae5e0554a08f5360a67e10dfd1d56a978d5743a4d8b5408f5efd3703cf0da9206ec049750468c07d7a2dd048cda681a7c60c50de1ef70d91fb9b2472dd55e48edc0206dc91ef1682a8c849f264a047af70948c5c9d26061a941ca83f5109a34d9eba3894b7808a43efd740456e032a0ebd6f034304fbc05809f42a50a7e6d4c0f4641750714837001587db1340a392dbf1743275deee3c005a8f7b5819e8e30e010daa1cdd0af4b03a03346fda5d1822912f7700ad603e7b35709b272e5d2d15dd7d3210b02360a0f9ca774304ec2711743952e60e28e98f1d2f818a667ce31f30256fb73e0cf1a5cfd1839d396f998098396fd7de014de72fbf0d34d23d01d97019d563e671dccd6d43c4f66c0874553d041a65f94800e5dc3e3fdbd54340de32704bba0334a775b40968c5eec9d2c0aabd025022dfee03152335fb0a7afd59c1d32a3dd2b6d3e3e1d6c0e37d0ad0f425492e20810a7d8746d0ce4b01e9311e18222ef92ea0dad0db04265cd17d0868960d44aa6f1968e9ce018d9f8e041a1bdf3e0632d597d210f5e5fcc2c004c48f8181880f405d854165e026fe0268ae717d04686af166d3c0c2fa53032548bfa23568fbaf8678ce9eaf03a53a46fa978a1eecd11b30a53bba9705349fb83546f43b2eebd5102881ed4b4364f6f2544046f5e7809aad411fd098c166c4b6a37c49c60b40e3da7b29a06c18b5057cc7f71ba075d245cbc0f44202a88336b83444293ccc051a215907faaa5147806601cf8e0d6cb6ae0c742553433406478f80d6c18e3a404525bc2b047458c77bc08c8c3a8c52b8da941810b1ed3aa3ee9e0165d45d66606a7101a8129eac0bc8a8610ee8693e7f01a65a37cecfbaa56bdf021d2df19e005d6e16fb7780326af718d05adaeeccc060c6dcc09908fa593fdff60ce4dc09a0479ec3b18133223601adc9bbb80034f33efd35d07e0c808a9189d809ba8268fa1ebe8109bdcf0e895c5324f2f6a72065af46fc6cea8c8a15332b887f79b802c65cb1fc32d0c01e0b488fee3f40ade5edab21d2636b0b986872e9089871c50fe1a8f39687e66d401b515ef80ee7dc606a600c760c78b0fcd01049f89002caa8a31ea07cd9cf01cdae1cdc1ad8797060a0d55e07b466e2902f6d9ac7f8d22550ff454720b2a1f797ea378013b90494a657db801662e4d7019eb0fb3c32b09b740068f4fc9d2f6d968444a1d3159aa1c99e013d47edb400ad723d7b36d033181a580fa3800d80835f408dc1622420e8b75706ce867a37b0a05d5faac1e1bdc2c016805d40ab4b874b604a8f6da0049ad15f5faf0c9c861379db6b1ad0f88e199052a38e084743012d437cc7220a5de6ac6c19748a4401545af13f10a82dfc07a8be9c7e03330d3245039bb9a5cb37819404da1c015a5b7c780a94ea3a5d0ba80dc3c2405b7807a863743007340ab7bd6688f997d91130d10ab32b43e4cbe13da02523775b86b86283d8367dd848e4b801674db726d2947f69ee52ab2bd229e07c2160cd27821e55ec6f22f5ee0950364cce0564c36654e4fc6f11c52bd0d198d216a0fa72fa6688549fdf026aa5aeef0075ae465780eacbe535506a75e9ab8141b73560ac5be30fa016f72c3744c04e6e0c11f4d3c2c01cce3f60a2698e35033b0ffeaee0108d0b402b76476700cb3c9384246cbabd91732d036721fd02298f4d0744bff9c41d28ee6285f3e5e101d03aa5c919a0d50c69b4c9cdec1bbb387f0dec914800ed39bb5a03f4fcf2bb0568b56db63030c7f70c68bde5596288a2fd786e887fe9ff01c3a597023d25dd0095a69fae0c2cb0bb053430b31345aa683a2d11db2190d28eed8e80fab3825984b4ef246c2d0c1ccdb907e8797fa76b882b76a22bd94c94716bdc05340d56f0a5ca8656b60968777e771df08ee53ec0f869ebfd19f0b970af0666cddf012d8048868668e9ca6f816613ae800903337bbfc094908efe80a53c5301ff7224d0b876ff5a40d0d781ba956257c98b2182fed306528d054f80fa13b793b8250dfc40b3f16e886c58ec03caa8bb47435cb1b105a87a9cc6ad71a0b51badac02940de91bd0d7e0df27a0aed3f30850be1c3f1928fcc78096241e2e0c3c25fd18985e5807b424717a29d07ec24340cb4d8ff4b35a5f78f1cf405ffbde1019757e6388902efb021e792ea22b3948f5343f7a33706bfc02b49cf0df8d810340c9176565b23c0306e4ed56c740c0e28ad25939191978d4e801ea381f1786682eaaa862a59659b47a2d400366833d402d5dde07786a4c926760ac91cd134039f7b50be81cb4dd9e81f51f9f067a7dfe179dee416cbb5aa5f6706260d4fad8101568f205689de351d497b24e422ad014a83f71b388b23e766d78b8079484bd88edd8e385bd1cf04ee17740b13d6b0b74dfbf3030282bd0795b879b8648a0f18981118104d0d2d96124d038d502ccdb21c08abbe4fe0b483539ad2b52759df680923276f001d49f682ee26e5a393dfe5d1bd81a1abf52e9512399cf003d592cf600ed361e1d18224d6fdf0025f2e009d036027a8e5557c7389d3d1968e809a913e8885f49f50cb47b65e0c4e9998176fd04e89073d7b702a66cce33a0abbabf012891cff42b9adf3fae808cfee9fc1bc8f5c437018a686192d8f9d8403c372471dc690dca97ad36507f56f0b21af94e27cea8bb9e21f265192579e251c9987c5c415c41d769e2b52c577c699d519cba720668a6f9e112d01999378f022d5db9067462ca5a61a05ddf30b08f2faac724d5eab0ec9f211279f75940ce1d10d25485ee780ce82eb67b63889cbbfe127459dd710cf41992df25b6cd277a17514ea77eac7efa00b428edf8d5c03a364197cee6e41d50e1df58009a6b4ce78648b1873b40834c9d0c5022bfad034ad3e7682ea64ec2aba1215a98e4dd1069dabb027448d3c1d0c044596560c5ddc0c0e8c631d0558dba36b0ab84d8a65a00b1db36b0cb7707c868a5f6f5a52c7d6ba58706a606b680fa13691a37ad99332a8e8eaf4171795d18c8a87d400fcd370b033b63bb809ea237ae00cdef4ff6009d45507c03eac0df3c016aa56e4f0d9c7117b572e69cebbd1ad8bd3004381e27999486b89b3efc0854604e0d3cab3f008a6df711d0eab07e056849d1d5818189f60ca86894da37c094fab2f705d49f28c9abe2d06b3b1bee9606f6abbf033a6ded7edfc052c06b43d4a8640cd04a2571706f0d99561fef01a56689fbc094d88edb01a98e6129668648e4c539a02387d2570189bc9f1858bfbe34f0a475076839d0e186817d9e57404fddd17f40c68cc4fdd8c066b8db80e6b382652461c769faf8012860cb3f882b5a378608c7c51c206049551a1800f802746f58be019af45bef017daa476b0dd0b6f07e1bd02edfc34980b3a1fa0674d0c2f9ba81ad7ffa17adedd9db35c46d2d36f5ae20e2b2c8013d799e1f0099527dd3c092f77d400b75b6897ef3891626cad8dff4c25d0ae854c0e19e217ef62437449adedd033a5cad756ea068df013a3aedf1db10ede9a97e45893c98015ae5fa1405b7eb348d33ed6bd036d7b34703cfc81702dd1b885caa13862617862863f903d06798e1f80c187479c3c328a019508eea3134f0129528a7a9d3f47e0f509adeef1a7813c90ee024bc35305a9c1a2209274b40cb814e4b03f7a84f433428d53f8047e2a43c05b4cee06c135097f6bb6b88b2be36014a9d67b0618854af0a60ace7cae3003f681eb401e5dcbf0b03eb836e0cec1a980934b6e57fe1e9642b077abae16406c6a4bf05d4b9cb23400333f9b721326a6f1d1830d677d701268cd29e105b1787c37720a5386cfd01b782885ccfc561f266e0c4c72b40637d4961a08bbf0034ea747300e8c483eb149812975e3406bdb4ad75c11f4087c7fb947ff153c1f609a0341d0c047a8a26a4a996bf0c760da4fa42a01b4e618814ebbc1b983bf932c4af5cfb57541bfa0616c6de015a6473350558dad41aad19581aa9f42819944d778071977359f42f13e61a4fa3f0f79cd92743200536c8cae62fae88c63173defe26806af6ee05a0c88dbe809c0988f211d06046ab6d887afb6f0f50adecb6000d63e7d11864a9966a0cae0d9173a54099bd9b01cadb930743e4edfe994047eb7d1b18eed83144221f09d8499e5407064e7dbb37f08e90634007939c7f185839ac9096da6cadd88ee929c534690d5ac974f214e09c3b6919786e20d59b4fdce7a2b9c89d733faf80726efdd2c0bf7401057d796060a9c62fa091abb767035b43ef80b186c3760c8c4b29603ec9266e05b91bc7741fd0d69d9f16a0bcbd3d3444de7e648056dd1ccf0d3ccebe08b4c06e6c202bf52f1c8bd7ba7e37f016a26d43a4c7443f5bf094743901e8c324e329a01555c751e772e55c323d03322ae126f9d27ce22e16f5a570cefd5c1b085817d0bd727c0768ccf1b7050c48f5cd1d40f952dd023e41e61fa05ad98d542f5c095f0780527d7e6360ee7529a01d5b3f03bc0ce749a051c9a5817cf934d0e7cf01464793e99120a50b17ed7ad1f43fa32de4579ac6af81611c095143ce73d44601d49f0869a4d8df5449d2067460eec5b38191ef3340436add0847bf59abb28285409dbc8b8580d53fd39681a5f74780761d6d8f819c3194d709a0344ddb022d151d00ec1949eeb6057a7a2d0ddcd69606e6095301657d6706f8dcc02b60c2285cbce4af010687cf045322d7eb1ae2f9a5da0aa8738ed35f7e814c39f70fe8535f8e968648e424eeb70367d4efae811af50668f271d403d4b0fdec0113527d331afa41b3262202f605e42c5e18f3a54ae456b72fd0429d7303379c0701f7fdf32340a7245ebd0313fa30fd1130a51f542c81194958467d19d449c8534109d49f680b23e8a51368676ce0ecc10ea0a6ef77c710793b4d008dd17fcf018dc06fcc0ccc4547b12c539d32529c010585bff564e06cec7b4069ba3e1790a6b316c07adc64fa6360ffcb3130d50610fd8b969d9c46c35636ad7234e384a36e0c78cf08416f3eab5f59466773fc9740b70692b00d909549cc25f59a290a7a3951e8c67fd17f36c497c629de35f8f0ce630171e9ea5ffa2ce2dc6c015a9fbc3e33f014bd0568d9c9d98321eafe4d69889fbdfd314415bb4e00ed17cbba028e0d88a35b7be35e9ba66ff80d682cb8b503f449f5d31ba0fe448d8a9b67e534fdde03748ae6f40bd002ccaf99216ed14905e8a4451e8aaa54832af7db80ba3debfcac13e8e1c240e3d832b099765d40172ece84ac410bfc1f160606760969aa7ed0cd8740cf4037c0a4cb40c429a01555170aba56541d11b9e61349182936f13cf2e73fc00b520f019d40f5716688ef787c3470d84bb4741397d32c0114dbf13f4304acfa02b48862ff9f2152fdeadcc0a9b39f02aae9f68580499dfe1aa01bce2ca23fe9b569fa72811694f5b68194d9a6f613d063fcf46d0bc8788eda4f0df1b32715507fe2661171993a91cf87066e7c1b80560e7f7c18e2b1e951dfa17c79e9013a7c6ff40a6890697d574071f8893eeeb4594b1d657d01e83c94e2111873c5da0fa07c99968648f581be54d9305d077420d9b6be4307d60dee052ab867800eac1b45499e364399d1773807c897849bf8b4eeb1d138921e3d2da1e96c02ca8691a0feac6011393773ebf07601e844aeb7d2c01052a4e9acd937b0fad9fb0ea03524e35b40c706acbf020545aaff00a8226f2680522cd67dae8059c0be81856df7021dc2730d683dcc566660f64d576899c5f6af81592f02d6d3d8d631bfd2d3896d171f40979a7db509a440f206f4a851ed470115a8ad5fc9182cbfae8042b7d77f8032ea48e1a83f515f569079c34392bc1a22b6ef3b40a92bbe814a7bbccf019d4d79c115cd12ddd515651f5056664b40bdaddf1340a9feb666e090b76340cb5fce6f039cc8ed11a00deca707404adefe0a0a0ddd5c03631e01e398d1e69dcb24d0c99a20a31fb44ad3ace3a2fdf16960577c195097539ea326409f7bf6e40118d3a0ec9c008adc73cbc0a177bf013dad1bbf7d34d04ffe0174f2c2e9958187e65760daa367300266d4ec63fea5f9448a455cfed6f3fffb0674b0e2bf2f4047a725e78096bd2e2f0c2c5b9b002a300747018edcbf730375eedec0599d2f80b6449c170606fe5b80b6bb5c9702dac2de0ce8b1afe0ea06c8a8737b03a0a02f75ff6988a0b797c0207ab049acdaab61cc6a8653a0f944a3b4ba3566a993f06117a8b42c690acc34280b6894b6f5be2d500f25522c757aacdf18222ee50ba019bcad1f43e4dcdd1a906a27e810d0fa8f8b0ac849a06c66606e7e0e4ce8c08fb9a229762b984f00a5c7e819a83f11b9488f9e13e8e30b70022d0cf43ee700ab0892c73fa058ce0015cb12f053d2db39c069274932023466906c02139e09f7232e3da769bcf261056c981a08343b7b0b682bc2e8d1c092912940aa27f1e8d5808a94be34271c170f06760ce93b741e4afb1918736f687f02531e022eef80594032e35f9c5127bf40fd59c1e7ea1e9565ca97d6cb958132b60d6895fc4b69882b5ef702521d77fa790074b5fdf80bd019110767014ec2ead3c0fab1b181f9fd3b01e53466cd6bd0faf5cd6b03ff3211301071fc0c68a9c6e52e50501bae67409f06a57762e068ac75a08ad5fa49eb4240fb71ff084cb9cd5f2e04e44b12ad65d6cc0d444926c5ea7ce1c1fb06a8ff56f0b57a6acc72e74b0c8666b9b22149360c1cb8bd0e68ede8f8d5c08811df910e488febb879e64ed3c9be210aee92efe8e938988b89810374e68016c88c6e00a56977080c80e13ba09519570b0129368e8cca9bae40fc4bcbc0aeb47f404a593ffb05ea4f94d388cbdfb0eddb25a0def8766588242ca33d2dd20e45fb857f710b13abd36bd0deea83a851851368ba666085d9a680f9a8715fc063d354902ba31e018df6ec7c0848b1e11028bbaca84a013d02b6a312164d431ec5922f6d3e2b98471bd4777abc8c0dbcf9fc0ad081b9c98d81a21d95b0efd9c8f119a0638b92350321fd05dc48ff181876c9029c1eb343036b58af0554e43921ed15ead2be0bb8df769e0d51603a3343a4d8c514e09c9a24a67d6a98d18cdf4533de6f3e71e38bb670e014fb4a01a5581989dc2ccf6610f21650912ae780a25f6c053872e7d78022f7fe64a09c6e027de0b214d026cf07c080f271c3cff6c63c9cdd5e00d394bd1afad219abc2db91a683ba67c07e20bea3994a8c7fd90654c68e2f81fa1377d32896e55f02457facfc2b30574057a3a317803a350751924bc7f6f35640668f3e0c3cbe6d193856e2cc1039f72ce05c8556bb3230d6f76d60137c1fd0992ad99a81273ec2a1144baa1630a0049df12fcd27621b71192b815a1ff1b3e354cf0dbf6d0307e7bd1ae829ed001c879b2497408ff4d8dc05748bde5c37c4d37cc5afd4d523fa0e5bfc8a13e87b60e0d8a29181f7aee88a922b6e9f0c0ca86e19d89a71028c1921b92f019d6433181b386247219d900d97cf021e128b2130e531f23cee0de33ab2f4d7f9d9ba6647e18ff7e0d530e08e7cca97369fa884f11d95336a12fdf5ca19556e1ba2ee2fc78096cdef7e1bc839fd8b6612bfef01b596a5c0cfeaeb005999940b032f807d0774b6cb6e1ee07ca1ce55ce97dbcac02ece852182fe33013460d6be364481e9b40d1cd0f604541af91628e786c4a537056e9e0d3ccf4529ac9473ad0e4958f79c222e574ba022a3ca3d437ce95bc476e20af4ef07e8a891ce0de44b06687f43750ab0c82629ef00d5a85164f6c409543e1b224de9a04d7a1a0e3b7f30b01c2835b0d9e90cd0f6b0cebd802310066bc08cb27ecdcf66ed94c3a1f9d93a0919bbb8067aac60ee901e4d9775f52f13625b17fef897935ba0feac6011419ffe2561618854dfda01b474656f0ae8e9b5ec19224d2713c0657d0bc8b48a6064a0f0b7011d555a6e00852001948467717f99f6346dfc43c09c2fe31b039b36e786f897fcef5fa2e5af3e000d53167d01f3519797c04c85ffdac0c1df2f02e66f2ff98e8c834992310954f724a3c9797f057a2c8bbeba03a81ec944dfa14514ed7ba0c858a576088ce396d43a2172cd272a508474e676eca532d08c7f021acbf9776888d86e6c037ae2a367d0004326fa955c79bb69605ddf04d081753fd1a79b39d56315e30a18b6cd0cac40bc36f0a495008cd1b7063d038b6c3680198b28ce63a87396b5c9b99b2f035314858177c62e802ebb6c2a7eb6bee1c4944dbc6eae868a5bd2e40998d0973a2160cd6705cb5522e76d27f2ce2790aa7b2ec854a35220e756b0d636b04e6901a802c514560d1a1d2d77037a7ddaa03541c9e3ca470b509ac6a1222b6085c89121cafafd1630e38aee1fb00d693340cf84ad9d21409ab686f7806a43770ae404acf302140cc95fbe017d864cae6640498f6d44389a4f349f911e1da7fad31ee0a2fd63e024df27035bee6e00adec7a5e035cf8bb8053bd63a087f21ed0ebd1a0e467800aeece23a0349d16065e1f7e696021e8a921522c8e7f6d4e9fe75f2e0b038f2b9f060e32febb8263e0fe09680bf303031d921da0c3775c2c05fccb99a0aba71352bd6e0b3969513fdbe3816692039a7f69f701e5fef01918d05f9f1c026306dc3beb01758160cee205a83fd1e44419ebfee5feb721bee365026894656ddfc06aeca581f2710de4baf17d0085aae91050f9586e0315f932ba08d0d06f52bd0115a97eba0b4ca8403ff30067f6ef91818df48981856d070232eaa70374f897eb4f03c79eed005d0633e275a60db092e98c34cd520d773c027d9679a60b40fdf5fd2ea035139d2f415c91540a47c5645bf74540037b41aa371d9f28eb7bc094aee409bfd27ce2c6b7ba37e4a972bff5726de0a0b84f4099bdfecf40f49f01c6d892e5a3812d444f400e2c4b010f671b23604071189f1b22fab12aab86528bd2a204359b283807ad02743ad056d4a8d459f9b2616015c1bb81aa7e29a0387c7f035dfee53407b294598d363060c1617b00942c3ababa079451dd6d60c240c47c6a601dfd1898d161bd7a08a82b328bc1f88ee6138d6354c29e322aa95e0086f692c719906b8de21c609821994c0167c3bb21e2b21e05b7e7f4f8bc3170f4d19b80243c3d37c4bf3c0f81947f190e0c14dc5b0155bdb734b007ef02c85945d02d0c91d9dd53a0107c1818d96c0153e65ebbd706a6f4da80b2e102683ed1f2c7cf66ae1e2f5340a95ebd1aa82fd786a80db35b40e385eb9981fa720c688559f50828e7c6578072aeba03c6aa2f1706d64c445b98f59484b791b759dd16d2755a33b09447d0251b7eba80b2f2a96fe09d5c6f028a437fcfc000e2d4108de34f0568de74676ee0b4f937033dd813015f7af60964fcec4e5bc0adb1ab5fe9c7c3c8f0fd0c283585a55fd16364575f3a89059849951ab8796e0153c61c8751915703fd2b8855d079ee3d892f0f06cac70da023ec975d036b583301c561720f146a71af045cb15c37c41d79a99fd510e3da0c60003199ac01a59ae04bc0fb1b3e004648927134394d5de7cd2c842363017792dc1b78bd2bffe2cc7e7a36303ed635c497fe1b0199ae3834d0edc9013d235f750032bbb52472f5dd94e5c8cf06563225802630afa3e0e675f78a1bf08d81ce043febcc3e5b00f5df0aeee3570a6576ebf11a50663f1c1ba8fb29a0bc5d7604dc3c777f0c6cb8bc02349c5e5d021a1c5e3f3444be4cb78052edc78381fec719c05c5252dd1bd8e917d5b4e8a9566ec4234ffda44e6d381d03cab9c74d43fccbf717a009ff2ee951b7dac47609f4d5715e1858a4b70f0cc8eccea18125459f0296045cf78152634a8f809659b43303d3e8c706a6057360caf2ec9bc410e1681f0133162f9471272c9a3edbea8a9301507f56f01efdd3becb0729d6ec098870fc760c118ebd9980e2b0b103a8383cbe02da95166fba5a0175ff16d0dda35a025a9ad08dc6b15f37b0bc89f50850cebdf60d0c446c09b87bc456d91a58ed92c4ab0457c0fab15d40cfea03fdcb40b91f79dbaf9fb4236f1f464087a9d6e32fa0feace0333a3503df6f974700699a4c760d9c12a02b3487b37620a0126ee95f94a6ef6d8031e9c4bfa22a36d51595aad88521527d320318fc4b2671d31ae8a139a94e00b5b8dfd1180c94a6adf2c9c0bde15da03bf2a721f225e65f6ae8930dd7d7029eb4ba77c0807b76ae2f1d53e7da3d03c383436046beb449c23ae7b8ab178096f2cc5e802e2deef536903298714902d52d2ec3a58740c1134eb56de060b42da04f153b3907ea4f14dc0858e92af67863e034ad1780e290cc4f04dc6f1f0e01cd363d9640a9bef68e2152fded01d0d27bee510d44f9982e00ad93ae4680f6e13c45292c7b0c6624935f406df24b02d05a2695fe4559791ac5a1ac9334cad88cf4c8349d1f6777d4a0f241912a33ed5e483b065ebb7b010cb8e2fccec0dbd4886d56d1c05e64c0440b522f05dca22fbf81a9464862a8a25463d06aef031d96249647061a25f2b6e9f5c7bfbc0219539c930fa0c8e93a9d03034ad029f9d27c56308d6a3a7673f1d5136889f71ba0e9c9f53fe05796801a83ea1c98aa315837b02137726edc538aedc5fd76ec8529a36fa04bf379b306e82160f30c5046c53e9c15b055e5de1039f742389a59f168b54f0cac3dff36c4cfae09aa94f77a7d005a9674db1768a8334ad0b8ce399eb3b781ae327bcb40e7dbc003de3549986b29e0e503d0a74139e900f56705f7d17c56ceca590f18a8ee1702b2f2770c68be72f301d054dac635a0967fb20d688bc8e40e607b58b24c0ce4fe1cd0597b37fc8b1f78d705ca979f8581e3a30f0d9151bdccc076a84d60ccbff467065eb87e6060a5ecab8151eb5ba0e2572ede0c5191f32b03ab082a60c68059375a98aaaed934172dc0b94f48f3949a7dbd23206fdbe44bae756cd7bb02ae481f819c05219d5f03071a7681820180eb3540b7936bfd8b5a87dbd4c05312395797315a9857034bcec8ece613ed7ab4631397c2971b6020980934b8f30c946a5032033b969f004df9ee7c019a385cb60195c24994a049733e50fcec05a07afbba0bccd8e2fe19919b7874746d0d50917a3e35b00b6b6e60575acfc0905a6260979ebec37b8a8e0dec069b18e839fe1a7817380954df7018504d05f4d7e39de435b0c42ab98fc1d0495d0a7949f93d9032cc70dd13e8fef202f4d80270fd24a095ba4c0cbcf7ed0ce8530adb434314989311507fa2bb11756eea46e9f90dd07b577ebb00b99f2c7b06ce429a029a585ecf0df4603b805ba94360a6566acb104326cb48f5ba5507266d03b5e10650efe2f905e06cca24390118f84fe65160a61a946d5dec011aeb9bf3b3d9803be107b175f928be0cdc1adb86286383c21005a6776ea0fba52b3423717663603dee8f8143443f0c91b7bd129802d7d1659936532191fba78072bf3312e4dc3d8640c923cf353f5bb730acc71d002a30279b40fd89b844bb3e7381f9fc3044b1fc9a0363e07bdfc029899f069e817240456a7b024c54a41e0dc4a507b80d8a51fc66b313ad6514ba9953fde9c9c0bec60d03d3e82f06f69b0e81a972bf32d03adc1b38b43b5a87595d91a3af3dff01a6a4e9f108a83f512b5777a0a2ed347dfb034e037e0748d32456dbae8034fd002a9d9a7068a0d52e00763f25b36f60a624dc0c501226cb7ba04b9a9ef602b28aeed7cd3aa0048aa9a315303aba66e0e65919a2147e9d0033fee5fccdc026f87f01799bc25f740d1cd9fe03745206dd087adde2128e5fa0d0526242da8c3c04ac1b98145e025ae778b9059454b1ee15306668af730e54f4f96f3360ca3dfbe422a0f9448aad1a94a2e3cc8e61fda2e3cc9edd009560dbc0d8f8bb21f276b10168abdbdaa1811ddc1360ca2a93c7c2c02b0e7203dbb11f02b4e93b99a440478d7407d03ecfd91cc874442871f1b4cfef1550912fef0340c5e1b530d0383e1be23b1e22d53bcdfa8e68e8d70d2cd2fb027416d2e51a30509f4ee0bcfd01b482a84dbe34ddcd683ee70676603e0113c61d66bbc08ce6735806349f087a04acebd6f2f90370663f19381ef8d310bff27000286fe350e61aa66a3e0b036306fa172da2d8d835446310fbc59af7699395932ee0bc05b292c66074074c7856ff3a0b70bebc560636a1cd810ed05f37b0c77b60e0cc8c2f4364547a6aa031e8035a5e99b50c11b0fd3740c7f4b4f41d85ba5fa458dd18d0dbba0058e3dcbafc05b496b63b012afa7429e9d1bc703e9acf19507f56103bda8b5499dd7abb31f0cec71f60027c2d0c6c62ad0065f6e2dec0cb5ce680327b3d9a8bb4a7177ecc86001376c9b46b603be5a581d53f078086901e75c580637aaab88ba5598f9cdb89929c3ab3972f06327bcbc073f626a0e662d80634467f496c73ad94ed1c19d846a0ef98b2b8a54baad7b532827e4b6c9baa1c702b20e74ef8d2e613018b8adc73ce3d760c9c6c7c084c546fc786f88eaf0c50cec5d9e92b886afaf00ecc742a4fb4b83d9fbbb1b907b09a2199ee035d65e51260ee3599de013d65e50f90d3b51e476c7b75cd66e51f017336c4f2861544def627066ae5a6817df33b8648f5b57540eb3e774e0d64c335906b7087e8e75a33713b00a67a9adf30f034af2b663c9a77a261eb296f937102a4392b768f0434d2976d03cfc8c7408f8a7c72686005401487ccb93fdb01a6ea7e6d19e25fbe0f809972ffce40357d0c50bd6d6d5f035acbb2b507b01023992d004d0d4cef0d91fb5302e6b982c704d0795bcb16a0079a8ba8b759c6deb72466138acce33071da5ad1cce9f09a7b7e25d72ac633425ae72def267d07facc8b7596c058e37444bfee4d31da931b989de55fea8a1c70bd0e741943e9ee09c8dbee1990e6cc9d7c09a8fb173706ce73bc047a340627e45cf389248c062577ab3d3906a66a0c2a03c5611370ee47d0f3e614e668d7ff80c30952408766febe19a23178280117871fc0c5610f50076d7907145a691f2539af1f34e95b6e03cacaf99d81359b8f066ec02f067a062320d390496260c7e1b181e3a4f60574372e4a431487bd3520efb14c7cdf10d17f7c07fac044011b305e78a59fad782ae81c003356cb5d3f1898f0271ccdd347042c37d0d93c073a3c267473034f2727062652c7401768ef18582aba0ba4f43eafcf0c8c7d9e1838e26f00f4721695f4808c66ebb405d49f15c41691a250c16d3d5606864c7e0deccffe0438802b995d1b28da912f854bf2cf07a00363361f01774872a0a7bbd82ec03c72b2bc0598144e9684a36eb6d8e8182d6ea10576ad98c22a0a95c2d6536ee010f30d03e75bae0b18c82ccf011d3598cd0d513e3e06409fbbd80bd1cf4bad0fda01263c6876e2a1a870ee77c640ca6ce4e58f81dc1f1a3870aa6560cc91ac6c6e9f513efe0968c7ae3b808ac395ae5071383906eabf48b1b857f65d1c9e8e010ead4ae65f06faa7d148f79bf3e6a331b833d0d23d021d607665885bd2c39b81919a1f402fe99a6d1898f7280015a9d919a0a6ef610c68e1c13435b0c8661f605634492281fa9ed5388f2e7edfc5a1ca0d511cb20343fc4b496ceb7acae42321cdb52e78780a0c623023b927faf99839f1aa03544ca35f11f4ba41216f09bacb47e701e8a9049d001905e6b265a0a5bb15706becec1898f7d802f280e13be95117214e2bf8165082967b40fd891626823e70098a03da56408189341db8b978e50ae7fe43d71077c2c510d0c1466b47065a980c70eef700a6af93785b780dcc8b25e3e8f50db28ac62016a317036765b26de01d212f02ee627136430d7df5a574855aa9bb789c1d146d2d035e021dd607753e812e99ddf900728618dba5809c6b2740015c8f0c3cf07e1b28419b067ad2bb06e65f888bb3f2f818a83f91519162a58fb49b4756364b130218972add3abc1f1ae2573ed6005a87d6ef27a0cc7ed80352eafeefc4403fe8125071d89e0219f797d903a08d06b33bc0c5e10a28995cda8b44f61a81d6f72f40deb63e7301b9ff750c0c80f4dac04ed02e30652fcfd91c98d14349895c5d4de9385f00cacaced0c0468316d057bdcd0cfda8b704bdce396e059581574ef50cece49a01f56705cf912f63e7edecd4105ffa760b74b837cc4f0d9c2df705e8c8b2cf3fe065501f866850be0f01e5fef7ad81ba7f0df474bafa0220f75b9b05a0dc9f3f036e1d22b6e3e6188d0818ffe2ac8c25672b60ceb30f947a5d03416f961e448392015a7b1e2ff9ab61c6cec7f186819c03ea06967369bb023de1f4803e55bd9b19e8b012f43a2b39fbb863a0bb9103a5aa7acfc0a2b48121fee5eac3c02439d9d05014984b039b9ce339bbea75b46775626084243770c6cc3dc07b0113faa7559db734062f40a67783750c2c24ff06b44671630fd0015cb325c0f29764766fa0b37903e8889d78b1770d3a89220e562c2ae7fec3cc10b5f2fb1f30d6f286c4c0e90d070626fd22b3ab3af77999ed3ed057af8f146bee0e912f2780b2f2f2cbc036c61e3006aebe0dd4fd8e816302ef0c8cd28e0dac93261b9adf09e81a78c3e5ad21e21287331613e57eebdfaf211279de07d43abc1f19681d4a2027b37f7b80ce735cff3090d9eb0033cdc96c0494caec3d8089c3649603537a06cb1d03ddd148e4667b7aa4d857dc7026f5e32b876666804e25feba15f0e4f9b206a87cbcfd1ad8ff7264e0c93333f08ea167a0d2a14407c08c26e72a5aed49d3e1882f4d819212747d68604bc48f8185a09706960355808bd4295051822e0606c6d7df0d3cae902f0d45fb3136b08a31526cea02b3e81838df3207ba5c116fcb5a014740b60d3c6a14404a67f363dd10793b3f0668725a5ffa179a9cd6cf2790ab77f10bb0da25595e032a30cb5d80836b92927fc9531e236f097a9db7f4830e01e5ed6766e0dd3e1bc004b8253d0a56cab62e47409e736ae43f0353476f4049f9b83a02c6059b04d60ccc8aee0115ed47e7129814ecb2c90d2cd5e81b180b6e1b783ab902a6c0c999213adf84c3c79d2671be43d19c6e1a49f8f96de045c50b20e766c1dcfcccedc7a6beb4d00eee7d6040cf8039ad06683ff42f6a3f6605a0b54e67d15ccc9c2f5f47063608dd0253a0dd31303b7b2288999124e9023a90ec311ae95991652c4d3803723d241e00633a1397ba624a365c7e18981a20e8cd27eed9ab82db6ffb00d0876d20d32d7a69e08d3939a0547f6803a4696bf3092895a61702eec8f3174035eaa102b4dce3a608a8d39431831d4069fade37449a3eae19a27c3c65c08cf6f4b36b88aa7ef61350a43a1ce90ce869ef3d71a9b38169f46760acd984d780e6b382e9aa03dfff3b54f5f508e8a9d9aa0c11b0b78e81136337804cadd41250aa2fee0015edef23430c54cddf011d8ef43b3550f8770dac834d0072aeb5de17a82f750eb0482f898e510dac0048e2dd82fd4e9d73bc07ef18d099b28b0c50bedccd0c9caa310e28dac0e527907156c538052ab2614812369f153caefa0efdae537df16ce0d513c780cae97c0fa828968bc8fdae97349ff1a5aea6e5c0c001e406868f6304bedf755c5e7303e5f411e800d7f706cefd3a07baccf16da680467b4ee701cd67059328c9a963fb7a0c642a741303bb49bb808e08fdfc0178536febab0fe8a598b125a2069d0a186fc85d01af4899011525e861c3c041712d80b7652533fdca548bc1a2ee372f40657f8360467a7c1b18c53f1805384de79706b676bd1988dc39d065bea1b56160bee110c899d11c11f4e613cde7ea1ed5ef39d5a35daf41a9fed236b03dec1850aaefdd019c199acc334015f9e70b50aacf8f8031a9bed90794c80fb706127900a8173c57c03863267988f2d1cb98f04f1ea640572b327781946e4f8b9fad6f6b6c2388c2df539ab6e2bdb32b8854ff9c01297073688854ff3a30b00591f428585c9bdc1d1b589e7d6f60877f0f2832e2a2ef1833437342c09a4fb41f7145e69c8bb5b42b6030f404d019bb6f5303a7126f02ae400f002793268f7f1091fbd5cf525f5aeb9f80aac7fc1598e9e97511905524f24514feacd02e8a4f02e644fe9c1898e1bd3490c8fa0e9de619933a35b056b2f5fd69e0acf017036786de0139f5763d15d06c5d3d02fd8c294efdec94bee5304ad0ea08cc48f5c8cadca9fe6fcd10a9fe960205f07e62e0d0ee7b4067317efe1a88dc3130a653b375004c54a376802977c2f91ba00a34ff1790b5591c77fa1190ebb0fd8768a473a7e9f4dbc06324016b26f4a3ee9740ce6cc2781ba8729e5ef9d9fa319163df23f757db275710af766e261348c2a713406741bffe0125790b508abddc033a9bf26b00943c9a2f16804e28fb9d013a396ef319701246252c9c62a368d88a423b423ef915a747bca46b059ceff063887f899da0cda406579caf015a5d1ae78ff59b499c2863271b40fd89ba1f41ef3b81e806f69d406f3d402f807d3f3550c6d6009d4afcf508e828ca873ea014fbf90638c22d797c3190840340074dae9d003375d06e0274024432ef00dabf7f1a79db77efe26d246046f393c83909abccc0e3db3fa0d024d78f40b7822d031d6722d7fcc52d3a6ad4c0691a27b4f79b3365231c711adf0a78b5c0ba8137e66c032a961f27808e91fc7a324409fa6e013a35f25bffa2b3f6b60e019da4b7ad8029d5b76f80991e68ae029a575c44aaf31d4af5647e00741944584463d0cc367136c33ba0358a7bd13f1d28915b7148d30a580d75226080284e03aea1afb75544ad1c349f48e480d289bc3c354422bffe01457b0828913fd78112d86a19684f134087ff7eeb4b95c83f3f006fc84de25d47354c29fc8b350385ffc510d9f09b033a8a7263dfc0fe97e83a957ff9d2033a540f9e804be7cbc32b402fa75546f5289da631b1dc00a97e4f7a140360ff0828392c6a3837f040530163fa30b378062aebdac126e74fa0fec4cfc67d6eec8c7ae918c8db1c1870c5f39781fab263202b370065e5d7b381ac1c02caca8d03a052fff4d71079bbbd00f4f6e38d1640deb67ee7065ee5130ddb5827d9b4767a80326a4ef4eb7c6168af6b60796574bfc65ebb318d818871d1d1b00b2956e71c335684c339f7991ad881f92c6048ed35034a1d78f908282b1312b960e1633289d18d71fdc8cbe62ff2a5f944ce45d7a972cec529012ba0129e1968e97601e5dc77098c7582ee9181cea67e4539b7fe034cc8b9dfbe819bf80298026b4381b2b20066caca6f43d4cadd281f559db7dcb44e0ddcb4ae811e59f9b065880e7c193dd8aa59b2bcfa8e837f00d9d0babb31c4af7cf2a575be3066f069e0dd82f19454359f6882233d264ef5590994c0dbcc40aa8f8131f07b6f886cd8be0394eabb6b805bba488f89cfdc59fc026cfa4e167340857f310594400f9b40c6fe6cfa9693faa18857d5f22f7502f15695474009f4f460603fe19b8137e4921e45c5770c4f0cbcc89a2bea34655ddf35507f22d5a38a4d9da6cfdf06daa0174069babb0e4cb41c289a8ba952acb5f30338c56640a604fa07e42c8ddc8b9bc5d471b99b1a78c3f6a52192f0e70e9870c5eb2330d591a9fc4af389563b9a8b9963fb746a88c83dde03bc4fbcb51c1a38a2eb0f38d67b03d099e59b87804ee0debe0566ea4a463fe8ef3cd8584a5c438f7ee1ded24019fb0254a46604dd0d6c45380aade75f6c011352ec977fa91388ed9491fbb3ba2d64d1e2ea67076d473f8ea15d01bd8b070367fd6e0095ae383250e7ee8109f05e19385aef3940a779268f2dc0d1ff01323a029b37018a4bebedc7c0f4d304d0fa8fd3bb80e613ed7a84a3e3c83dfc028acbc6d240d01340ef24df6e1b387695efa8e3426dc800f236599c00c425597c03390bfce7170175d039a07eddc023cf7640bfcdb6ac61dfc0f17c1d408b9fce4601cd276ac3eaae3ee83ab6cb3343c4f62d03266a4f97066646a27c74f3b1069837010d880c8f031cd2f9c2c0f8fa21d0d13dfb014839196c9c039a463fde0a683e5170e35f52c7e561cdc00b4fbf0095c2f5234087ddeef02f753bc68b58724059b9710b642a96c7409fa3b1164786b88b3d47d14e9b3588512cdf8019937e07512c5345bff5b930b06d6f0a74d5b0bd04349f28c9118e9e23f73b0074b6fe7607d079e33b8581821b65aca763ac93786f640d9cfa962c3e039a5387032640c6f8fabf8f00452e4922a37a755cd81ff506282eb33d03bde00a4881e1872112b9ea029a683f8e8c5abddb7905b1507890393d6237470dbc61bb15bb0656c043d119a013da77fa06f6e1c4cf36c737b22c6913d0d18bbfd116660e7aac955c01b94f38fa1e1d3d12c40af7e17b0a64ac923f8ed661f55a95885c2450eeb844a77705749d3600c565bb67602c270a4cfe97d95da0643dee63b441795d70b9e1f0b37d8d4c7cdc01c4a515af215e015b210f0c1c6af604642cd5182e0cbc45e417c889fe5e228879d3e4fe3ca06ed959deb00dd49f887ee44be1e87ffe01d371d15c143ec37d872b74946db288142b0a9da6156f84ad1fe67512f82b5738e8b1b2ab863c63c7d0a981771eec19181188a2bd5af819491805b7efa0c7e6c041bf79a367446ecb40b13c33909551d59b33dd18b5be0558ba9224fc4b5f67bb7cf22b0a7aeb636160248f80f50be0fe02e8b300e22e03062ac95f8688dcf63930e5297accafd41fee623d0307c347c0068e7eecc05c0137e014e800ff760d91c85b17c094f458c40d67e066eb296e6b0347eee5c0c0211a37409f5b52bcf2a1019e2b5b27c08069b093c8ecd55f646554f5d2418f178dd6a0a0ffac19986bdc0774fceb1eff92a7ccadbd454fa9ec17ac33f8980384b415afab6c8090269f8668b6e2adb2350c748c5394b1b2f9ac205ec630183ba4cb918153457505c77ab7be5e0d8c3b4c01c565fb09e094a2e48e2b8aae0677221ce33a606c225902257016756edc7ce2361f0d5bf517d24b030377db006f606fcd1f0dcc688e0085f4f70bd0cbb0e99f56f57d8e37b146b1ac1cb05811b1025e423d01c63a5a2f0374bcc546dc1b260ed86469e0a4c50b8093d15b6fb981b29e0808fae716d0d39cd6af21427ac0cf2a60ad8f998137d26f1b38b2ec07a8588f7b7762e0bda2511c26832e8df4711ba83f910d51b3a78e5c55028a5c1c14b7023a68038003da9269346c53b5c9496c22a94107b53c9c0284b4f5b134b0f46d139800cf530347a81c031c4e90dc47259cd6918b1bcef135507fa29c46eb30735c76360cbc5f7d0e285f365f814c23ac91403307ec6168888ec0d31a3025a4ad28ebb3ba77c950e70e507f22d557ad65d976c0e2ece315f0ca876d40e705c7ab2756c0b28225a0c3a13ff60cd4864720d758f04340dd1360589f2b728d18cdcf03eab8449afe3b036601496b3760d0d6f9303b01cd279acf5546951d073d7650ad80a077814c8723fd0a88cbc621a0a07f57808ef7dcdd0ad066c9d64b2ba019538c9ec10e3065d2ef6017202ead9d6703b33c65401db978b2b8cb01b6da27f7fb40c6bacf5362db7c22a35665acec3ab6d521a0d8def7053a9f3f0572e07568e0949111d027fa6b7fc07befb380bce098af68e96a983233725f042872ad38706a05acd97c36307a7e0274b862fa6ee0089573014df0492472b7f944598f8c4a1dfd494b406ce7ba42d17fe91a1871de35f0eabc5f40c5e125c2910edacc15bc1c021de2f2d403ba8275802d6649b96fe0d4fb6f20d3cee9b780e613918b02d3735ce2d0aab2f71797b981f3a51e00bd5f7deb1850de6e2480cea6fc59074ac6a57e225f7a799b8d5b6bfc8a77a37fde0538b671b6cb0a78e9e1b621eed99ffcec803d9ac95d01b0ffb6751205b7d77ce24ba338648eed7c13d0b1bc14ba0638c7f906e813fdaf7f40a981998b0085a3f59a1a786a7c067a01c318caaa61c6f4f55de47eee80c51bfb6a50c0e61b8608d87d0f50c0de0a40c7484eb962a01da9f76b4006ecf50dd1380e5f029a4f8463d5eb2bff4e028f33325710e1887b7659f8b4e897852102769f017aafe84fa458e170c4cbe357c07bbdde815cadf65140f38970ac6ed165dfe198bd020a47bc74b9ecfbb8e4fbdc10e1783d0374126735334412fedb027406e2dbc2c092c416a06dd07bfc6ca18780cdc8ecbee312af575b015d9675a0a0ab70a72bb47d70182dcc6a2a31523d0affc0b17dfe3170f8cd0ba02364b74a4027e9adaf013a7af1731b9802dfe706ce1089f468f64646f4f723e80305bd95bc18683ef9d2e6413262bb0168efdb3601abef5264f626507fa22447a12bffcad81ff0e2c43540b19daf1bc8fd0740fb09e3c5ef6539d0c6adb76f40f384fb870696addd026541137c064c584a3c8cbabffa8b80ad1e02cab1c3112f712bc73e0f76ad63605fc129a09338e31c8172ec80c5eb6e57c0ced857a0044e23a4e3e613e1883bd0df31b42fa98133779680ce627c1d013ac06f3d5afeaa502ff829f2b6aa4b1def16fc00148e7815e90a78a0a900566327f1c2e41510fd1760c2c0ccc95540f389c21f756ee2b8c490c90a18d93c00b405607dc7c0345834e393fa96c418db3ed0610cf66b0dc819b7242b274dd98ef23102b4b2fcf9c4c0ea5202563ff3b105716ce018b828c993ba5cb2ef750b18976cde206075f4d9a2da01ea4f443f9acfa9d363dc0314fdf2dbc0b9e72f804ee27c3d3744c0b61f009d2cb8194df0b4dfa5d57e8f249c2a72c3f7ae81ede93b0626eb5bc084cd2cf77fc0bb8e0858dd8b618ced1dc8e9c30c5f81fa13918ba66fe6c8c5428c1a742eedc7c8c04e9d7b4091fb172579e633107f9f8094a329e239aa9c29e8c3f73f60d47a6988f2f1fe064ce38ae13b5734f5218af633507f222eabda306e3be89f2706cefe3900b4f162e328c0273f7df7028a94952a8b7640bfe0896f9605346f078f62790a6803d97c044c81a40266c0681ed07c561007a38d3b0e7ab56fa0fbf50ce8ccd0f78e81fbed4e804fb0db3a0174ced5fb39a0b36e3e2e000eae4966b38041a10d5384c3417fff3450b4270165bb60e6ac67e0b12912b9d37c221b56356adc9cc6c77b35ba0622370374b0e27d24e1dff17cf777800e687b13a464e54609f418bb88299b71b72e633c03457a7415f42169da000b41a74007186d07349f682e222ea9835ef601ade77f6f013a35f22ed234755cdef81785b4b5f612a09f1dc6f2ca15b020e4da40c7b90b74b9a2f5078c0745c14d9b4f347dabc78471cf21adf60cf4d896014ae424162d8e7b2a1fadf528b83dfd6c6bb66360ddd60690163c6afc1a0858a47aaff9ac200eed1e670ec7dd0fa037c2c6db8f57c0be93a8a659aeb5b49377038ff75182b2fe8447c045340659fdd4c89c6754b1ac0e7adcd60ece81547b01db06bee3d9c063c22fd0e38abb5303b3096f40cec8d52e21ad6f49a418d1af9328ae3826facd27a2bfea7f8c7347ff3b322a77f4bfbe001d6878bf007482dddb3da0f38326e38092599e2456338c73c5b6f5c1cf2a72adad1703eb937545a6f4b804fa0cccbc6f0a1833383e0c683e51a3a29c168e5cbc2dbc6e5df556b7cd03a0a3d66102e8dcaff575a064d7e26f54d3e66c1b86c3a2ce150e69726ee039ea0bc8b58b33dad3d5a900515fa202f51db078c3f60a222eb16fad06ad3e5ebb3270f33c06747ee18720d581867b80ce30fbd900d8399d2c3e02dc6ac72989cd987d047df8be6d6010b20098c4481e7a823eabf63e819205cbc771b3582ddb8bcc8e2235706ce32dee3528b68b5b4071b99f033a72e8eb0da89818da8dd672d0af38bd21b6cb35bd73821ecf0d2be029690be8335fb96809884b0cddd4a0b83ceb4bc7dacaf402547d5ea0f40c4c58ba7212957035f111b91f65ac746ce76b068efbb801b496f6fd0ad0114cf75340a7ae4437705cd6bd0d4e487d0a18a4c4655101131afa1863ab7bbc447f181b401ae0c16a7d080c80e328b8ab479cb85746391dffc5e509d04bece3748f1544e462c3430d3a368076bd81f8d2fb19a0c8ad25c0a4c7f6d248d33aba7d76c7ad017d20def65b83829eac1b5853f30c94c049b4a7abbf156caf4615c6d55f5c7e0c1197b50a50395dbb041497b70150b121776b0ce8dd3e6fff02ea9e6364d45d14a9aace5c56ca5e03459f774e97409f6d8c0717007119bedf1a78f2fc06c6406cc61f57cd2722170934c9592bd95a5606164ee700914b6226603cd1970ee9e44d543d92bb570387888e808a0a7412b7c649f389ea111d81a9c311ef7f59013b207e0196bdb67ef42fbcc8a975b70be86092d7a840d3a2cbd68ccf28dad3ba5d67ad64b474d366d544a429ffe2902663038be21706b6854f80095750d51b60615b94d369f389d846259c39b6d329c07abad6f8d710b1a56730cb595fd85adc007d1ac7cf7d40e7f6bcbc004a8f789dc7b8d948cf4aa648c259d161c7d076548f59d33a468312995d3f47f14cf8b60710db611c46b8026e6b77c014388e9bc5acf944e456e951b51db9788b590d5a3db8fe0711dbf52d6040a7f7f79f80d8c6cee9ca7bde5bdf8f017d3d7bec5f053860c9938176ec0c98f5d9883232705bdb08683e119755f5a83a0efad7af8115bb5b400e2cfe0105fd8fbb35400790bf5f0468776d32fb0ca86b1487574c814a53582540d087b17776053c6915860869c2cf8e3533f2fc047419cadab905c6dcc48f3f02aa3625f96407a83f2b88554855d7e911c7beaf8021c639a0f4981e1928da27801268a17f29f5c833067442c8da05a0732636df02bc41f9e300d0ab6bbef9176fc9dc680734739a51c6d6039c40f3998195906f069e2b77810e895c12d29a18723d17540ca9456c5327d0cb33a0773d9373e95f8a1d028516a4fe007d9dd6780e28c53e8e009d23f07e19e03ddeeb1b80b6b96e8c0dac644a039a29ee68e9f602941eadf52540f487ef3786087abc43b7795718b03702520add716454da7ce25f5677d3aaf717fd6343043dce93ae41e9316b1b78f63807067ade9f007a25ea5314879e37c16f9d02da8e5d2e0214f4e1fb9381d5e9bf400aaced00150f01c7c380ba38b0c22c01521a9463bea3f944f457cf1e55e6e84f1280b7ffb4aa2d03cb1a0f0096bdb6e2a0961ac60cddc4d2ea2aab83cefe971450d093d21057bc8e811e701f799b359f0858548ffcaf581680de4b1caf66adf2a2ad46fadac054c926a0edd8bfcf403f63ec33daa0dce18837c1af200a6e39073260af054ce9c11e77039a4f7c4714fec2218de3e76b18a87711595978bbfed727a090c696ff1a4a363c24512c0b8563188fb32be088ae43030b86f895ba1b1ce5f46b024cd404479d5b1d2f16418f2fed3be8b38981f5a725a037064fa606cac78381ba7f0694ff97bdebda6e2357821f33ef7594453e3247052a4b6f139973e6d7df2ea0070a96e37a57debddac5f1a1cbc3e10c80424734144852203df0b474ad40ac4b70dfced3cc697a8261d92e8e19f72ef3ba03748ff78502a7e9ebebafc840d94e2ed871c9b8e5f3425f8effdb77b1f7c83ebf5ce4004d7bad29e0a775bec70eb0374d6205d297b367d60b10eaf269771d09a0398ae8d8899b3d4d8f46ebebcfcadb699ea3a57a367db996ade966007541a7576414b066b50089af9baded4ccef27ffb2b9684be7bdb71d1013ad8e915e9dbaaeee09fa4673ddb627306d01c01bb38728fa606fd2c6ffd4ca8ef52b65a8eefa70987752b3d7cf7e8366595805ac093b5025905cead3435d125fba4760d0a9e9f345120523da86bbf128888b65fe9da1e0b329186381bf63982f4575a8b0707687542fd15b101355fdbae74c608b292d08e7ee89ec396c41420ed315b365180f4e4d1f6c602a79a698f6d5981f4dc9542a840ba5972d95420dd1e36b313377409439e5dd74379520d608e150814b8b08f6efeb39d6c2550244faa5ace8d03ec15a58e02612af85a0aa4271896ecc845a7272af74b7a85dbc3bb891448d23d01766ca34c7ab0f7c85340e31e189715488f785cd8991c65d58ec2d6322a62ccd7feac1dca2848f383726305d2d7f72f1da0c6d9408130abb241df36883417ffdceab811ffb742cb0a8bd8f55867ea00fba4f67c3101c2b40bbb0ed0a5afaf40942e17f6e5621e18656f9a2870a4ab43ce5720d64d2435fb72b1bcad1e6d5450c0d797ab060ae8cb21b8778056a1b97280b50a6c728b01d49a1f2910e95792b903d46374ab40ac0ed573bb48c7fcdf8ead159e89eb0f5b245280f4f55776814dd2bd809ecdd80d137917dd80aa57a4cf01eb3d3780faa4730ac40ad85d8b61222bbffdd9d9428113353576770a6454513c4faf90ffed609bb18df678e6a71d978903eca317b70ed08cee8d054e35391fa5b602e9019fddb202696ae44e7fc56d855cde594016652d2874610199b86a79ee148835f21e8e14481418de58401463d5600b0a042af86c6831da77ef52ea39c0becb225220d62bece98306b05724fa1599b89acb72ad40fab6f6dc15010ed5b0b287b819407773d42d20545746cd2d903dd5a806b216702f17dc39c0ce53af6581704f81c2d601d6d2eaed2990a8e539b21d74e05ece16ce8b0edca3b7b30aa44f1aeb574eb36969ac4481744f62e15c01ddd88755d502b2d2e9863afbfa3229b36a67db3e3d489f14f38602fbfae841df017a90b53e984875ad90aa3715d1a81da4cf2133594d62a3194487cf4379ad40a2b2d296f58e0e65c9d19b2e2ce036f76c8b0ed0a4673b930fe9b6b7b3f0d002e9a3b7160507a8c973afc0415613b8770a1c6996eba8a4c0a9dab7b52b05b2a17a8ce60a446a14cd2d818edcb49c9d299028d0b5cf71741ae9f6e382ed7531ac6cd4cb4beca31fa50f060f0ed01a00070a1c5ac0b3b52a0c60276ec1c897e8f834d0c4d86e600159a554d7b6f7384eef8160e4007b8f5c0a1c2950bb53e04427ee38ab40a083bdcd2890a89297180b2712a3485f3f3ab180bba94d803080fa716f153856a07ce9003bfaf6e080e8347d3974ed409d66f675ae974205d2cd5ff1ca02eea6ded601ea66182a70a240ed5e8153b56f9733051255596c991ed114f65497b27b1304d84f756d7b8f4c662fdd17ad5f11ed42e7baedb18c9f1aabf620496a1bfa1cdea503b40b8f15385560d57380a69a3f2910a9f23dd59bcaa2a371b11b058e75a08a460f92c9116a9fb653c09d7960399795f543dd83790b04beba3bd6f657b2eec1fcc4017accfd430a689f467ad330a357ac91029a69bfbb7280e6491f29e05bc0ebd51488351f666287d297e553f34f6f15486bee14ec40f9b27e68e981a502e9f1f2392b2c7c91d9562109060aa44fea5fa4803ea93dff36629e8e05fa46538a02f71ce38202870ad883bd0508d52f65cfe53180aeeb7606b97d495e6c17d820fd59d10815487f7674e800cdb61d2aa03d86f5ad0241aa9f161ca0eaa8e58bac169156bdb7540fddbbd8038205d077f16ccc3312b3409fa3345220ab066f6ea840fa1cf6bc35036852c98d02e983156307d807dbd839261a7ca4559a970a6423cdfeb1938e1abdfa4f170aa4fba3b62505d294c4cd9d02916e9a6858452072cf610f5f3480e6290d1448a309b54705e2500f84e92b906842eac42ed25174126908cb1299aab5f6c78d02ba9d01b6dc471467d2cab523fba47170982651542c20f256f7596414481fcc9e436300cd63db2a1029901f3840eb5dd8918ba54f55ffb0622d394d2b928756954c82e374ae6715384d7f65ae40605fdfebd83e4da40bed15552f05f4d1edd9b502a4cf610f6013204e1fccae748928a4da1fa64fe3bdd3f4eca74d6c814ca2151f27530bc82aa545ef1e14886d26a4d71d5b403a4873e0f715d09f6dd9f36f0da025db870a240a2c0716700f66cf3b89f7dd83d9d87cbc2f43a9958d4f2d90dea365ddd806d03a68e716909b6a08aba540a0737d6844527c202fa70f669fe3c07d257806ec57ec31c402eca74faaf790e15627a4591de243b743663eb780c87d3dbde3588158cd955dce02eea6c1b503d4b1bba7c081afea57d301ea50b5c370749a1eb1d439b14078a4d93fa39e05d27bc01e306e00f5c31c287098e6c1e61538d2b4d7fc9302c70ad42629a066b53dd84a8cdb6355261a76061da73785d5a50ca06e97810247be263f3d2a90feca26afc089caa8f15081245265e2d20232a9d4e0ad2820ffdb97332b5d7c9209550bb6a5e408a8d0b2c711b294bc263d0fb70a1c2b50ca2a70a22956abbe02994043e06d057c55696db9e4f8344c73262a0ab89bb65b0eb00fd67d50e0c4577563a180fe0a8ae70af86a9aafece89f8adeacef62d990c9a4b57edb96d919f7e8f3b502a7aa3877821408b400795981aca69b169f1ca07bce360ed09d3a9e0241a0dc1f2810aa57216fe75886636780f2b50227b11a9a9640dcd2ad01ff950269bd1c5b7921ce5275b637bd5440df05f19e035453ca2b90f135dbc5722e1b1fe88419db3ef5d32b105ca580bebe7fa640da1fb32707e861c74d07d8fea84c14f0034dbddf2a10683665fe428138b2f3b46a970b5f7a443365edeb07d90315af39dba7817b0e5bf3cf00ba33e54c015f013f768096f9ba4a01d550765b05d2e7a8d9970b64bdb4f3b478a0405619658f9c8ac34c909a0976e4c2f04065830d0c5132ea73d8d3900ca03bda2f140814580e1588d5dd51d3afc8cfaa7562df25ca1ee902db8e2ce0fa7474a040a840616701115b1ab2b97380d610992b2072cdf6585d8130b6f728d95f89b3d97497cd9d02b126b5da03fae2d8fd6cd7778066fca740a480b771806663ef29a05e386f60055f1ca7cef2d8525dd4220df8d7331670378d970ed02cd79d02b1025e4f814445d2dc4e98244ea32bdb63058e55bb18151590f1b7bd6e045fc25dbe766ceb390bb85f89f61da0c9b5e9158902b3d801ba6a2b20aa806e89385520a3b3b0f76001fe6f5fce8c4bb29f3dd1e9505c2a10e88698646301d17275165e2890feecb89202912a027d0bc8fc507bffc901eab66d28b01fa88724e3007553ee2b70a0337977ad40ea10294f1410f65bbe6415486235de6d271fb8e7b0a7ec1a40fdc9270ae87320ec3bc06a8e76f7820047fa60a59d02c7ea8828b71ca00bec5681d35097f1860354ff3855208ab4d262c1023254f61ed56c0aa403655fff5008a402f8568140f758857716a0b7cf12c8b340fa2e183452407f763355e040af085a0eb07c997514385460e42b7014e9191003058e0355697d07a81bea52819348fd4123054e438d36dd3a40a31a7d05b2eadcd9a45fc9ea82b24a7fd65729e69d59807cb0d3329302daa7eb5081fd581f2cbd623fed64db6347d9d37467ac02ae837a1b07d82b6a070aa41d344b1ca095e3da0a1c059abf9e7580869fce14d02ec42cbd693ad72799148855bb785020a35efcee950259d5617245057cf58e2e470a84ead62fec2b10c7aa18d9c13e925ed57dc05305e47fdb41766a1fbb97b3a52904d09783f5d21a4037f41714385620397280cab99e02597ddbce42015fdf253f5420b4ea86d7ab3ac08e4ba5a240a2e275a43f2b7cd0788351ad793e8ef6badd6acff37114b0e736194087a1abc0a9ce64bfe9002dd571a74036d40d970f0ed04dcee94dfd5013fcd39f0d745c8a8902a1cef5d9a1037475e82810a9105ffb0ac4aa7fe46c9f9e70a9b7d3724f8183588faa6d2b7094d8079bcd1da0476fda95ff34eba72bcc8d02898a689b9dcef8945a5aeb92055c17f67b0ed0024bfb0a9c2810ed39409d08a70a689f7a364344804ca8ce9d3b05d24eb6399b0204ba5c6c0a0a24aad1db32e77419e8c42d7b0a9c245a76c4ae7419f76095aa033432d255201dfd76e0003bfaf5ac0299d4a3b84b015d82673d05d2e9606bca0ae0875a4e6aa340acf1a8a15de8592ec7ce8fcaa302f2f0b6c7ec7291750fd68503ec734cc70aa40fb6ba4f01ed535515b2699f62d65740a7a5d74e81503b396f472e2b825ed32b770a1caa76b16d2970146b51a2a202a7fa2eb9b202195d827bf729a02f371e3840b799184b8b69b0daa7f63cbe849b3475f2f71da0ee8e8d02be4e98fe42814087217c74801e623f55205256ce060ed034cf7307680277518138e5ad5da5fc644f45d2ec2805224bb1321438d025787dafc0913a55e6170e50977c568163edd365fa957426577d054e55ced5a629a0cc0eba0a6454fbcc8f15c8ea3d6a170ed013726f15f075a0ecd11349904d4b4115eccb05aed747fb0a68af63b27280edf5e94401ed75587fb2003ac7bcdea502e930843d056235346b4d051205aa5307d83861d74e874086414358eb1488547896143850ab60364a01bda2e32b70a80b8ad74d011d97e29e0247ea505d8e1538510d65749f02dac9eb8202a70a58eb44804c3a94550758cee5d29fcdead896d29bfa2aa2d70f29a0142bda2e0c5daf6f6f144827ff72cf016a69dd29102ad0ef3a40fd1f670a440a4ca70eb03f5b4f7f254e81ad03d4d28a154814b027071a40fd85fae8c9beca4abb695380235d722a530768fca5a2c0710a5c3b407d064307e886cb8e02276aac16720a9caa5a3c3b562013eb49bd430768359c590ae84015460af84ad3e9630ae8b894c60aa436f2e42a05123b94fdb202f2bfed75bb6c45fe81ee35b7db900438d18d9f919d0e6289eb4cae361548c776d451201dca2914488772dc7480ee79bf53201d4a7b68aa00e940f52cb323a198fa710305f6d374c22705528a4d670a1cdac5d1eb151da0b1d79e023ab6988d1da0bbd2f4c192e3505505a480f25695bc88c5a02de0394013c9b50bddd86e4f14c8467a4ac42005f48af9a5036cafef6e1448f5d3ce690aa821315f3840f350e60e50152eedb140753aeb5233808ac6f41e81ae0e85bc02a12e06cb690ae884d9a6cf11e957c6cf80ea747628633fa3bb490b56d98cdd606f4e1da0349da4809a09f6704e01522297a70ed0429376858993d49f3c593a40771d5d2b904e98e593036c2737a0c08102b634b8015434e614d02985c1b902473aa5bab70e50ed33bdc7910ea53dd84a80d4033f9d3b4023de5b07a872b550e054e7a9df7080eed1bc4b81580f4fbb5720a35fa99d394045e3d201ba4a3d3840d5c0e77be826d6490aa84d68f7790a90553fcc74e500ade35c73806643e51ca075add35ff195739db903b43af28303d4cb72e500f5c3741508d445d02b3b4033654b29905a9e6d07a86377e400d5c74e1ca0f52d2f1408f58a4dd101da415307e8ba3e4b01a5e938fdd9d40f53dc4f017521d9e3a208a8d9b49c384063afee2b892e6c697fc4b11d86e28503ecaf94330eb033793b4c01fd9552de01763aacae1da0e962a70e5063f519d0aa807685e18e32fbb6553b4f1347c2c25881947385030552ce8dda0ed07a397d050e1518371ca0993b3d058e1458dd3a4073588f15384e7359360e50ffe99502270a8c9e1ca0ea68d3019a77b150e054af583e3a40adb524055499881f1ca0f1db890219bd423d35494a53cfee8d34800652d3b74d731546890374b7e0d201766c07be0354e96d39403366d60ed04eae2be0eb3deab70e5005cd7380c691670ed0520c6b07d8b19d6e1c608761ba7580edc2fa4e81407f7671e4003bf9876b07d8e7283d3ac00a605b8bd100ba06cd1c60f5f57ee200fb60d5e72bb43874d701f6c1a6eec154004ff71508f539468f0e50efd78303749bfcca01ba35f4c6017a4e40db019a58bf73802e6c2507a87c79fe592d8c564b015de96a7305227db0cdd8011aa03a76804ad3d8019a5670ee00db63f5b603d42bf97c85fad89e1ca02956296f23edc26ac6012a92720e50f56be000dd40367580ee7ddb77808edcbd03549aa6c390aea7d5746ac7fab60dcf015a36a0e600dd09bae7004da02a3a408f365a3940a7f6f357ec400dce1c6007ca567a26a0fd517a70807a25330e50ebf5de015ab9d63dbaaefcd1c601f6e52a33076874160eb0f1065b32c4001af17e7e0ecd0b5e3a405f2eef004d474e891cab9c9b161ca001cc9103b4b2a0eb421538f39603749e961ca0dac533a071a0aa03b4f2827bb04403104d07e8fe97f46d9374e2ce1ca0c7ced41ca0274dec3b4065c38303346dedc4011a9049d78f44c77675e300d5930f1ca0c712450eb01d34764faa833d3e7480d6ed5939403be8c9017ac4e3d2014ae4b903344debc201baf23f3fbaed8fc9a50354c7bd76803add1207a823337480ed8f613ab6496aaeb80753bb61b77380168aeb3940fbe3c8017a98edc201b63f86570e50d75edf016a15641da0543f7680ea1f8103d4687e7e74d5f99fbfa2f3c38dbe2a46836740ab57961ca0d90cf86c9fedb37d60fbe4e167fb6c1fdf3e79f8d93edbc7b74f1e7eb6cff6f1ed93879fedb37d7cfbe4e167fb6c1fdf3e79f8d93edbc7b74f1e7eb6ffdbe67df4033cb74f1e7eb6ffc3e6b716416b11b616d1473f89b64f1e7eb6ffb716b716496bd16e2d3aad45f7a31f46db270f3fdbff55ebb516fdd662d05a0c5b8b516b316e2d261ffd486c9f3cfc6cff276dda5acc5a8b796bb130245cb616abd662dd5a6c3efac1d83e79f8d9fe1fdab6b5d8b516b9d622df5a145a8b626b516a2dcaad45a5b5a87ef4b3b17df2f0b3fde75badb5a8b7168dd6a2694878d65a9cb71617adc5656bd16a2dae8cdbe6831ff293879fed3fdc8460d7adc54d6b71db5adcb516f7adc5436bf1d85a3cb5167badc57e6b71d05a1cb616471ffd9c9f3cfc6cffd976dc5a9cb416a7ad45a6b5c8c2033c0f9e0f2f301ae91ebc105e042f86977cf4a37ef2f0b3fd171bbc36bc0ebc2ebc9e21611fde00de10de08ded8f0f012de04de14de0cdefcc31ff893879fed3fd5e02de02de1ade0ade16d0c09b7f0766216c2cb8930849787578057845732242cc3abc0fb606fcdff110fe1d5e0d5a5fd2121a3cff6db1bbc06bc263ca1dc39bc0b4342917b2d7857265a28e035bc1b78b72f487807ef1edec3c73ef97f9987f01ee13dc1134b601fde01bc437847f08ee19dc03b85978197850ff87f509ee167fbe506df871fc00fe147f0e3d6e20ebe187e059a857e1b7e077e573452f83df87df803f843f823f863f813f8d38f5d9dff9b3c843f833f87bf80bf84bf82bf86bf81bf357feee0e7e0e7e117e017e197e0cbd85484909f72f25fdae057e1d7e0d7e137e037e19fc13f877f41df8c7f09bf451e8a52ea5f91842209fd6bf837f06f0d0985aef7f01fe03f7ee02bfcd7784819e83fc1df83bf6f287700ff10fe11fc63f3e709fc53f819f8590440e021f0110408420411821841f2c9c67f5743d046d041d045d043d0270983018221821182b108435a86818ce9c53309451d1549184c49c26086608e608160f9816ff19fe221821582b52195106c43e2055b043b0439d3e4431e41c170f2d050744b511914119410941154105411d410d43ffc5d3edbb71b8206822602e1d839820b0497085a08ae105c23b841708b4038c680a18955e40d09a7081ed4260c1e113ca524dc43b0ffb1aff3dfe1218203da81c12102a1dfb1a1dc0982530419d3b2e6f30942909c2fa9187a4ac5d04718200c8d01295f597df84b7db62f1bc208618c3041d846d841d845d843d85712860384439a85e108e118e184240ca78c1386338473840b844b842b846b9230dc20dc7ef84bfd477888708730472e89c219e68df4930f3218c5b4c9e712a9189611562815c32ac21ac23ac2865a8c61933a6a7886f01ce105c24b842d84571ffe769fcd3684d7d477c21b84b708ef10de237c40f888f089ea68b887709f0ed2f000a12cc7f7c62c94613d32243c46786248287320a3241449f80790b0f5dfe021c22cf5c908cf248c3c443ea2005168fe8c10c5881223154f10b58d767a84a86344e286da69d4a5ad18f510f5110d100d118d108d114d104d3ffc1dffcf1ba219a239a205a225a2152219af0da22da21d2219ee3ca2024918154db450549e716b514454425446544154a56326aa9184515d49183510353ffcd56cfbd7f310d119a273e3fc7c49c20bc340d7028a44f2d0aaa6a93c141e8a3c141e06a053877fcad72f0d2d2f11b5484b118fd115a26b1378fcf8f7fd7f6b74bc45373419a25b447788ee113d2012f009d11ea27daaa3d101a24344b2b01e233a31517b196ea15c065116315412c61e4918fb2a09e3e0c3dfceb57f370fa9a8c42195c93822afe2d8689e05958471f22c0fad5e1ab78dca9a2763c5448c3be6c391fe2956a568aad668144ec65d1592fe12710f711ff1e0c35ff9ffaad1dcf00e110f118f108f114f104f11cf10cf110baf9646121a120643062ae215cd42bfcd38a117215e23de9084f116f10e710e713e256101b108cfda87bfa36dff621e22165e951157e81d8dabc6357a4261481e46cf4a695ca3521acb42d840dc447c46aec6e7869617a9784c3d37ca4359448d54943bfb2b0a4646418a88e5c3d36760e39f185c1183f115473396a5f606f12de23bc4f7881f10cb3f3d9184f11ed5d1781ff10179180e4512d231130b758f10cb3a7b427594249411cf20ce22011d33a93afac9c3df31548987c4a7599804c6e95241121aa53431d2af80c4988589b404491b49074917490f491fc900c910c9c80433b62a0fe941cd20193ff330992099d285432a16683a86e7486622873ffcf5ffab0dbe0ceb1cc902c912c90a898cc206c916c90e490e499ef189a44012867b488a340b931292b251474748641a5491d490d491349484495325617286e4fcc3dff1cbf66fe521920b2497485a8627079466146b3650716afc31594abce40ac935921b24b748ee90dc237940f288e409c9de0b1dd528a52254ad30d4b49b9487a29dcab4102a864deaa8917058c6fee05330fe0dc37a88e408c931921324c21f5916b368036d0f6d1fed00ed10ed086d3140ae993e4a8df486be99608c76d25aeca3dd46bb4312b6bb2461bb674898d5607d72cec0637865721e1fff9c94c67f250fd1eea33d6068a13d343ccc5294b547868a366a7f4271d796b199a03d457b86f61ced05da4bb45768afd1dea02d83b4433ba792f09984c6381412b6f3d44be5feed02da4552b15d2215db650ac67685ce9bcfa8c6ef1a53fa63aed9ff220645976957d1aea12d746aa02d7d7e86f639da32e29768b70c09ef280c9584f7685fa17d8df60ddab768df3d93b02dfff480f623da4f68efa12d443da0bc6dcb8411dd75f0872418ff4b79788cf689892bf469bf9136267f8dda699e6c8c65513c453b8376161da0e3a1e3a313a013a213a113a393a0d346a7834e97996ec1069dde8b04d454125a61684928f25078286ab050b1d337827188ce009de18777c8bfbda13342678cce049d293a3374e6e82cd059a2b342678d8e8cce169d1d3a3974f2e814cce6fa2cd5516e2cf4ccd6de163a45744ae894d1a93c93502461a78a4e0d9d3a3a0d749a8c097b029ea1734e2a0642cbc30f576dfe7d3ca45221169abfe0ce09dfe4c1085b021b3cac99d0459e824e0463e7029d4b746484aed0b946e7069d5b74eed0b947e7019d47749ed0d97bab8b5a1968192896a165201b9e9b50913aea3e5db59d7d740e3ebc5bfea58dd660e790fa4be788867de7181df97c8a4e069d2c75d12ed0f5d0f5e91aed062677744012da0c524f34cc31ba21ba11ba31ba09baed679bb0db41b78b6e0fdd3eba037487e88ed01d3303b93b41778aee8c3b72ba7374171fdb0f7f220fd1fd56c62d0386dd95918732006b5251a413030cf2c50dd5cbeed6785c4e28ebba3b7473e8ca1016d02da25b42b78c6e055db9ac866e1dddc6f3260c6120b9b742b7a9f40bfc17ac2bf0876cb3886da2a686e7e89e7d06187f6e94c9c00374a5eb2ee8d6ee5ea2db42f70add6b746fd0bd45f70edd7b86e9bd0b741fe8951112fae75447a3a3b4ec5a99917a4f18f888ae306acfc4092d09f7d13d60f4bf7b68787844bd37923b1f2b0f45419507601288b0f7e463b5d33f8e87e89ea29b41378b1ed07ba76ba851c47df47c934333a676da0b289a447b6498616d36521cb1899e9904645a2f442f422f462f41af8d5e07bd2e7a3df4e43e03f486a49fe59e23de4bd63168f15e7384e4071fbd91d9aef1f17df8e737fa637a63f426e84de9b5eecdd09ba3b76064a2b7446f85de1abd0d8313c1157551666f0f6813f664914d98c3ed4987efd0cb3152dfcba35740af4812f64a8c13f6cae855d0ab9287bd1a7a75f41acac35e13bd33f4ced1bb40ef9221ca5e0bbd2bf43ed207fe67f1103de9a65bf4a4bb653c1ed07b44ef09bd3d786d5307d65c436bbeccf0bdb78f9eb403f40e2991848d91e18c68aa22cae8f84e1b1d2d324e47e81d9b76629afcf594265f2ff3cc37e6b5f5ccae45d342bb2b2a6d4c0437cdfe2bafdc27631d1bbd43a3f6bc5c3e7c69f016e6f9a7e8654d5df7d854d464431fe87bef35b86bec57cc77cd4d7837ff4fa8f6f72b432c62502821b640df473f403f443f423f463f41bf8d7e07fd2efa3df4fbea178d0a14837d6943c609c321faa28ee6586026a932521f3ca03f467fc25d1442c2fe14fd19fa73f417868155cac3fe92fb5165e6f457e8afd1df9087d65bd3dfd2441425abbffbc06ef9a378280393433f8f7e01fd22faa5b495d1afa05f45bf867e1dfd06c3f7fd26fad277e754504530f62fd0bf44bf85fe15dd2761c0e882a8ac547bd2d6bf666b0f49d7fe8d69b7c6f339e4bf724ff0ebeb2df2b2f126777a87a8af840c0e55305ad3512eebdfa3ffd05a1cb34c43ff11fd27d3f64cdbff0bcddee1c9dcf3516ece9fe81f58d2722f6c2f9b52f4c387f2fd86beccfb23f4e5b14fd03f453f837e160360e061e06310303cf8520c760aa288520c4687f4ca4427188418442cb5d66e631033676d9060d0e67ec278c7b4b54107832e063d124fe8f79287833e0683b73c1c0c19031313b133fc40d5f45d1eeafaed166fb3df396d5f5fbf5f5e66d76fbb84ffe0fa8dc188c27030c660f28284afdb608ac10c03e9d305064b0c56148c8335f746249724e4604309299c1c6c49cbc18ecc7cd906395a95223fe39e49e61e6290d70ffc5cc0a0f8dce20a9bb07a5032b14ad3c2b3675a5a42aa6c2c182a9a30e3a08c41e5afb1eebb84fcb22945537e2a39ff0466d2bb36a832c36950332e991803e14c03832625e1e00c83738607450c8a3568c4a0718a1abf68284ac705b7320d2eb87f622083db62907020f7bcc6c0ecace72e8a1506327fee30b8678e8748ddc183310e1d0f7be4e1e01183270cf69ea317c2c348e6d5fe0746a12c0fedcafda40bf6e0e02fb56f4d202319ec42de53d5cb2de4181c92845ce78e3038c6e0e4ab6c24214f31c86090c510187a18fa24e43060847d281f22aaac3420af308cb9060b398709866dd33a46785e62d865468ea8b5c31e867d13081991ba2c637384e1c06c803a37fb832b2f789b52d471d24a4861233d4650ad5804f27088e148dffdaf76dd0f52712f15bfaf9b8c2f8d6daab8ffb8cc9cd012f373188e319c908ac32986330ce7182e305c62b8c2708de1861a69fb02c3ad9181d9e730bd4d581bee58e2292a6398637c22a96398c7b08061919b7afd3b0c4b18cabf564833fa45a5ffab64e0b0a63c1444f8f99287c33a79386cd055336c7ea0d7943cfcabc4fb4bb32a9d3dc3330ccf31bc601468280c69617845367e838aae0daf31bcc1f01643198c7b0c1f307cc4f00943b9add0521878486929cce41ec52a5bdc621b1e19a21e93a8c25261a61878c313f253c4a9f0d33ba65075e414716a65a913a78e905447ef68438ac5481db5458bd49789728a61e66fefbd1f62e3e37333b434ebe0df4b4bfa3f445b112d7498c5084cf11d7918f918051885184518c5182518b531ea60d46588a27d8951cf24ac0d98ba1d703b2f4bad25157a65467d8c06180d59e56934c268cc1a33a309134747538c6618cd315a304e483fc29c9e52cbc3d1f22d0f472be5a1f784d19a8f3ada7c5420f1efe4e14f4c29e9942d463b8ca4a3f31815cc32d9e2687d5b2abe69a32246f26719a30a46558c6ac6b33a262d47758c1a9c13a32699393ac3e89cfc14f3d251b4336659374bcbd1059db1ed0ac9195e282d4797e46418aaba6b39296aad68b38e8d56303a2a263239e445aeb8d0fc5d1df83382f1251b2d21a90a192393d6c4f4777112bd6b56ca0b6534af31ba618acce816a33b8cee550c8e1e309271110ec8e8ef73ff8408c3d101f5526e6592eb0fd3e3285634084747f4caf4e486c7189d60748a5106a32cc62009c71ea226b5dfce39c63ec9d6695035151e5a9128b251786843f92f7938161dea808935618471f85199dfff080f7f64328da517624663c709c66d8c3b1877b9648e7b18f7bfafa6be69e301c6438c47188f319e603c65e2cb78465a5a69d9937f9a63bcc078495556c8199d9399e3957252a4a5884ad23256696939395e2b27c71b95939690563cd298349a6ae81b1db5c58a1be32dc63b8c7318e7ffcee5ecaf51d135c349e317f8f5ddcf264f45c6aec024b5b1f4808c4819e30ac6551583e31ac6c28106c64d46eaad6f4618383ec358d6c7adad7a68ea8e0a78c184b581296cd12b305d662c03d1c2f88a396b24e1b5cdde6692daf8863c1cdf52f4758fbecac3f19df2b03b230f7b2d13973ef92813f19b3c1cdf7fabfddec9347e30247cc4f889cbe4780f6301e5190eb9768a293f3ec2f818e31312f2c739393ec5388371161360e261e2631230ec310931893089e97415c37292183d36a0c014553632a2328898b56339a9a232a69d2972d21252e4a498974e71b5e2d1796bc568141d75d2c6a4c354d54917931e26fdbf7339fb4d543406fcb3b3e7673c3ddc383f1930517b32c46484c918930926534c661cc1c95cc5e06481c91293154314cc1a8dc840ff4c0315dc597f82c91a930dbd32932db346273b4c728cd44fa4330b9814750bc5a48449597f9d99311386e92d0f2715e521a95835b41cbee2a1084fcbc349953c0c56888b7f000fbf4dbcefb65f9e4c931a26754c1a98343139e33229e324eba598ef1cb373fad344420a212717985c1a5af648cb498ba2f207c939b9c2e41a931b4c6450ef30b967b2b86f42209307725244a5d2f2914aac884a6fff59484e9e9ee5e4648f425208e9cb6df75f1152cc48918d623732bba0c8e8c8e4c0842b07981cd28b3391e978fc5757b47f8a8aae59c5f51bc62475429a64262621a660206b9f70e914930c265966c970554dc5e0141483530f539f0c144534de43274f31383a64987e1aa4b9325326ac2575ba46a7e17390d0bfc734c254ec5b577774826982695bf55266b10d30ed280fe583e56177a43c9c769f7938ed21a8632a2accece378f817e9f7cb8474b3672afd35c474c48307383663a6f64e2774a04da7ccae98ce98e8d4ef603a675592e90253e959c1d798ca9582ec30cd619ac754ee50c4b444db72fc15720a21a7654c2b985631ad311a39adb30091e8aed6a4ecaec8c96983eaabb52a3de3869d369f8dc9e919a6e78c5b4e8d25393512d2b1519455cb4696bae963dac2547e5466d20dd938bdc5f4eef72f67df62e36fa1e241aab56edf5892ba71be7b4153b07dca14dfa9f044faf0912be6f409d33d4cf7550c8a35d8bdd7cd139681ed16d3d6a243ba46fd4b6e9e980a37a4a38e303dc6f484c50ea7a79866189f089ee81a9d66317bb555821b9a661e03834233117a9687d6652acda5b6090f673e66c1fb3c9c85ff211efef894b2f366664b18488f07cca9173b811b3d976c9d9d19b0d024fb7afc308b1965629dbc166609666dcc3ae6cf2e663dcca42b07980d3193ee1e6336c16c8ad9ec99992f09399b63b6c06c89d90ab335661bee011742ceb6149261ac6e1e1192969056428697ea809dede87a159555c4e32c4742cef2cf6c9c15a8a95a357556a48938935f2c635661aaddac8a590db3fa5f5dcefe12151fbf4dc5373c7c4145d34c20043379972653b46767a62e5e05b373cca42b2e290645791131689da2ce1ab479db8e81ddc06c622ab1bed3ac650e2794debba241183c306b945e1919cd6bba466737340867b798ddbd15c87191a188d93d6966fda5b387e7d085f0d0a5b67d8d87c3e6479575ff9b79f883f369f6c80dd4930663b589e872430e4c7f289f1944920fd2b8580ea8b44445bab3a323f3679175f292323fc840ca05d1a1093ddd312351c678f684999044a82ebf7288d91166c7989dd061e038393bc52c8359167360ee61ee3f4b4821a44c3211928315cd1e21a458927313a5a4ca7a46092966a488c77988798479fcccc679a28904f4a91ac1386f63dec1bc8b790ff33e05e35cc0e16f5bcefe612ace47988f319f603e35f54762e6d6cf6798cf315f60bec47cc5d8a08841e714b579dbb2d4ced79681a6e2e83eeb3b7922517deaa2f30d2384f32d4bcbcc77dc3f31be54d7e83c4712cef39817be9cca9466e31bee69ea8e29f48472423cc7c39729a6c2c377f5d279919e9e8f7099fe233cfcee649a97302fb3a6483832ae6a694393cbbbe33eebe0deec31bbc2bcc2ecde4006be6aceee917950a3537bb231aeed6bb30fad04bf2b8a4d6bf188799d69507287798376bf9f08515b8b26e6d2ce303fc7fc02f34bcc5b1aa8b4849ccb0f5d637e83f92d5340e67724e4fc1ef387571ed7e113b3eae68f1a9f9c3f61be87f93ee6f23af2d7a3576c9c1f1b35555e5366ea29e6f22b59e69dcbec597858f8bf6139fba7a8a8245c045884584458c4a6c64f158b048b36161d8625c48c5f742906173d2cfab42f343618290317035144ddf6255375db94b49039106521a3dfbea341d89f7013d3a480c548bd328b31be22af9816638dc35e9379a45ff2d0a6987e9b87e31071e93fcdc36f4ca6c594ebdf62c6223f2cc0ecb3d088211b794582e5ed19ae2c7ce0c9f0cf5b8b03564a97b5b39f37e5f14c5b2ccc09afa6c95fbd22164b5e292c157b63b116ba929f830b5371fd9ecc1449bbd840f4abc50e8b1c1679b52a45322fe4eb25c80abda86051a5845cd4b0a8d38c14ad5508b968d0a9f31c9694076b62714636ca32b190b9780951b116570c7258355504a3e8a88b6b2c6eb0b885c86d790c11293211e5c1fe221b7f1715bf692862f184c51e6be1491306fa47904161271fb2f7fa89094bec6121b85c7cc294d1ce5653462d0323e9db53266db3e6efc896dce630d9e084e8a28b0c8bac094bfd5b2cc1ac51eb95597a2fbc326fda84a412a594b1c14713afef3dc7f1bfe4a18b1fbee4e1d2270f3f2274f1751e2e839f687f918acb10cb88cb21c7e382ca497c489fcd3266b183f10519d5cbd19b4ab3a18565c2a3b3966d2c3bc6b05c63d9c5b2c7c62a5dc7fc301df15f270d73f07289aaceb2cfa43959713d51775b86d572e7116b5d8ac88d57580eb01c62295f1c6339a1905c4eb19c6139c77281e5124bb966ad845c6e4848b121455f15f128faea58aed962b9c3527e2b8fa53c7f11cb1296652c2b5856554d15c198c82bc81d64e01b5836b13cc3f21ccb0b2c2fff4c2a2a0397f2d857585e6379c3cd4ac2c08ef4b950e50ecb7bf5c70ce45d1eb07cc4f209cb3d2cf769d28fcf540bb59b27a8881e617960d41ce9ab431ecdcb018a189c105db42da379c45c9960ca5c99a1f4a1fcfac9373446cc42ca37ab942e4f1927ec0e9e7968b720becb431bc79f54b1cc9087fe0cedfe9fc1c39f62e06f61e3322bb4a175be0259174e8dc33ac2cac3ca67a69b106915601532bb572467d7ecfbf4662c961e8386447c82955c1f6395d0c72d7f12042ff00758b5797da7c430d4aa6388dae13de5ce2bb1d63614b3fe155523599b8593ab1e567dace48b43ac468c8eacc6584db09a6235e3fef1d906abb91252231ff2d30bba73564bb271b5c26a8d955c269f7758e5b0ca6355a09a1a8d281857f2d3f25265ac2a5855b1aa6155e79eac5503abe64750f13bda295667589dd30e64d5c90e5617585d62253d7385d535932e56378c30f596584927df6175cfe8fcd4a73346186877f1da42a3e6805eb132684d481b1dd12fba7a505db457648470f588d5931a8423e9f6bd6f6f8660f44f94526ea4689acdbe4375d288187cc343eb2f7d99d7f69287abfd0f0921bee0e12fd3ef9709a94e1aa1cd01c3448331779489c812a127b24b245e542167847b42bcd5215647e49bd0ac53a6eab23a367b5eaeb13a61ca2f0fd31a529ff16fcc9f432282af4eb1ca188bff891e70a1e82a4be5476e28b7253343662d0a27a787b2049093913036a16db906d61ed63ed601cdc8b52011d631d6098f85127d352e330e696d48118f83952aabeb36d61dacbb58f7b0ee633dc07a88f508eb3105e37a42c138c8633dc57a86f51ceb05d64bac5758af79fd37a21a3fc2c6df2b12d71bacb758ef18126495d72c8bf7ac7358cbf3174cce93bc69d1047b9f343abf2ed1cbed9f71ef9261a031056fb02ed3292a62904647990bae6837b23286d209158edaf4d4ec60b2950e4de1ed75f507aadf4f4827a7940e06cfc6e14b1e5a3f8d48cb3779de2f79b8ae996cef7fda656a78f81b19f8b36c9449b3ae63dd20e54440891a2966ba6895eb26e59eac9122cd44b2097fd66764ddfa9c0413bda5bbc7a8eefa8219f7ccf73da526b3be34194f97fcc0fc4399f72d5e2097adaf68f477851ee6f83b61af3073748cf50dc5a688d6d1807a917072fcc88540342559aafd2b3a8448c85bacefb0be678872fd80f523d64f58ef61bd4f7d3599d1805ccbbb1cd2c53a30e1c7f59161a3fc843cfc29d619acb3d8001b0f1b1f9b4005e3a0844d48ed6e1361136393b070cea4834d1b9bce3f4bc52f44e2a68b4d0f9bfe33030379f80136436c46aa888e1eb019633361aeb68dce6fa64c13b52141cb403105792a68df8a4131f8b98b570c8db151526465dccc98ad264366374f044fdcc12424dc48fbfe1e0826f108a958ed62ac110b310e5f3a691c0f592daaf976df93f7441e5afb303934a1fcff120f7f908d9b25362b2e8af3f2b3cee95f536a094944ee6dcc39e6324e42a4a96197302dde72e1dcac397262488c324c38146566b361930ff2573abbc78c3bc9659b2d8b2688c223df25635bdcb726641e9d60b37bcb498a5f635bb66fe8ef111b75b1a6d6bac96193c7a6804d111be14f199b0a365526346f6ad45785906240da349d518da6a3b07153c7a6814d139b336cceb1b9c0e6129b16d96805e3e60a1b79c81b6c848d77d8489fc8e4967779c266ef63a8b8d9c7e6801543c8405b61648acd2136f23ac7544427f216271a1814457473aafe98685f4f7de91b066e323405bd6d6b31a45354b48ce894659da46365c99351ee2626461f7240397669def6564cbe1fad68f8ac94f6d7f4d0d02b53339b0f4d529b90d0c50f5d7ea9db07fcffc2c3efb271eb61eb3fdb7b62a98be6b90d98d12b524b7415618b0834218fb0c8bb23f1b6217dd92c96be331b40976607da18de3ddb3632e72d1b2b7f1bf39fb609afdcb6f92d4b4e61a6dc6adbe16d45600eda1495f25bf28b2278c5501142f6f2d87619d8f4629aa95e917e236fcc08cab6876d1fdb01b6436c47d88eb19d603ba578dcce545f15ebd1b1713bc77681ed12db15b66b6c37d86eb1dda960b4aed46d0e5bf9c502b6f282256ccbd856b0ad625bc3f69be1feaf51f1d7b4d36d03db26b6672c034b066e58386b7b8eed05b697d8b64c52e1817a44b7d215d7d8dea83fa67d4977a89581e1be31052fa988f6ed99132b8ac1ed2dfb53c4e0e08af52c44b59185759a31e74f649ecf9fd8defd301926dcebe4578cd5f7c84df75b99030fa64d4948cb439bd7f6233c0caffff98df9ff140fbfa4a2205b61880cfc1e5d2c62f8893812fd530d3f7382b965a04830117d947b1943bf1da9257c133b7e3132352a334c38e4a1762bd332f4744b1390478be478cda4c8b556be25e414de9296c29903de9606c9d6a8b2232324db547d45079627911521aad29214414d07acaca939fa93443c6e0fb19589788ced09b6a7d866b0cd6207ec3c9e616ac5e3ce6782ce7243368aa6ba0bb00bb18bb08bb14bb06b63d7c1ae8b5d8f8271d7c76e80dd10bb117663ec04996237a35ab89b63b7f827a8b85b62b73247971b06764dfdf2dd1abb0d765bec764cbb175370f4488fa853447b1be6c7b4e5a572cf0c8c8ecdd64153da70c7b0133d70a2f0ef0a5ce0c4c217abbe57c4ce0cab3da7deeaa2bbd24f1d558f5d9995d7ac524a0f4d9fb5f38484a2a4ec2ad855c94652b1cab46fe1a1dd7f68eb44591e4e1316ec78c9c37f3c94ff0ff2d0b151fedcd578acf9aede5ad4b06b50fac9a4df3539fb65784627af1828e3b43b237364b4844bc23d0694eee8d19edd60778edd05d75131ebd9f22c1d3bcfb1c93f8992234daef427a4288fddcad10720b41c65c9c925484851629936754b42526bbda00ebc361ea095c96f14292db36777496d6ad7a23f89e73c17e876dfc9dcbac64e9ee416bb3beceeb113ca3d9a79f0a4d6e3c4c76e8f6cdced6377809d50f408bb63ec4eb03bc52e43f96305e32e4b1d3507e43ce47cfa5173017221e31cb9e85b16e3af6ba78681b918b9845ed0b0ca8277c9c254a0939f6e23d741aecb24fbf13e6312620ae67a0c0ce6fa9a1f933321c1fe90c5d47243e636e546ccc4c88d4dbaf60ab98911835376a058fb2206a56f450d1195444656c6c2fa45a7117253e4663fb7c3238ca8940ab5ac52daab2a096535240f2bc8cd898848141eda7dc0b905bf22eccd2d599f26b7e2fe431bc75fedffd77928d22fb7a60034f44b5b0fb90de58f0c0c5d2fc6dd2264103125a24f744e211e599752aefd409ad19336fb4e0bd7da725bc3cf2cbf2be39ddb195adef1b6424811aa9690b1a712525456b1247339da9062b7e4f27c3c993ab258c81c72d6a32857ed36bc5b2415e606e40ac8c9fc2b2157464ec6be4a454894a25c8dca6a5053368aa69aab23d740ae89dc1972e7c85d2077895c4b0563bf451d357785dcb509cdc99537c8dd227787dc3d720fc87d3ddcff6b3ccc0909e5cf7d66a50547a662729ff9063999a687c81d998da0f2bbc7340517c7cc505beef1ecc1dc09f363ec260961605232dbe76f99bd14dc3399a97d45c5c18ac1f8d8745d426b5cd6b89db1ea5f9e0a9a3b452e835cf67595baefd534f26a4c317739a5b3875418a62494269ff36001451189c243a1ebd8e7f6a8ee947513fb5b26e28cd6c87b7f360fa93d7ebdfd0803857e79ff25fd900fd216221f715464ea0bf7568f947ba23d0a43847b421b1924ffded4ffb9453e463e6193b533df7ed51268b3170c4bbcd87e4bbeeec8f952660aab85db8e90b22acbef52653d45be63c4e30879135096d5c1b27163669268d1c103fdabed0e3d7ec2c6f008f91ef27de407c80f91972f8e919f203fa56f80ae82335556693a5e918df919f273e417c82f915f212f5db4417eab82d13a6ff23be473c8e7912f205f445e5e4abe5841be8a7cedaf52315f47be817c937179fa423766d7729989e9f933e4cf91bf604c62d12503b9076d435370d46135271b18cc5f3224e8184867cc3d5d599e492accb7e8708e8f986e2166b6749a283b748a8ed8b12206658595fee778c99b5e237ff3ba54e4d6d62e4a2b777c8587a294b2f8cd13f2b7544aa5abf3772f84e193f2706b3414e161a7ce00a35cdf39230f3b07c8df9387414267cfb0f947f2f0db0cfc2e21df13802f1868db83f19a6cb8a94cd44e2183688fa249d25e9f290349aa947b34e27fb8398a5a66bea4a5d0db1252745af9b9bcf1958bca2a4aaf8847cb46792a963f19d19d435f42c869e4954d2832a1412b0bbc3a724accf5f16e5b8b3dfae5f3322d64a2ef232fc37c88fc11733b648a58d33188958d1d21ed31f227c80bf333148cf92c0aa02bd566a586e774de143c147c14021442161a2c44dc5854885148de4985fb111e16da2874e8bf5dc8e72e4b2d8b165a30bbb40a7d1406280c5118312a388ac9c0ed150a636e95e8ad79f0a04dd41645d4d63224038d338689da1e77cc0c22d30f1b86645d9e9aac62d281d2938509c5a03d12944323379fa23043612eeaf11b1e6a19b16736be158f2cb22692cd860d0b0b0abd574a69ca432167c1948ae226fd31d36e0a661330eb79ef58bfd4f1d0e7a17a28acff0c1efe1403bf64a37c786101be47bfb4153674bac8d21867280045465906be21e1cf32f06bb47432d311d269ad227b6579766ca447e791ab83b05164a3886b3156c5a4119daadd35e901c7ac5614839ede65c498e73047bb51d4b0a884c216851d0ac2a23c0a0514648a97c8c65eddb0718f6ca4a62a3d5046a1824215851a0563a14eff4da1c188bf75de0ce46e4d14ce28150be7285ca07089420b852b83cba4b979b57fea5d2a166e5190b9788fc2030a8f3cfca33d62561acf1158b29c8748e0c2130a7b28ec332a68dda12341e4bb87281c99fa31f6ccb39666875a06062366e4fb97a28832d6ea8b2e3a673f2c3b5419d6374ca2106d62744af3db8a41b10bac4b26dca0708cc2097c59686431f2bfc643c7c6d7fb1e27a490534a0b866f6f9452f2708ffa0883190d86f8c316373db9e452c743b133ff201efe32036dfbbe007cc3c32c75429181c2016bf809316830a43cb4ba6811bf81876f9ae5a4f0dc12527ebae8bdc34659bcb76dda8df4ad6f9fd55406398c4f759570c92ffa5453a7472806288628469c94c5184579f8368a1d14bb28f6a83b0dccb127968da2a9ce368cfe17fb280e501ca23842718ce2843146a1a208469151ab228a53146728ce515ca0b8447185e21ac50d8a5b16412bee50cca19847b180a25c5c42b1cc6d1cc50a8a55146b28d6516c30252d09a9850a0393a9297f7c46a95b6ca27886a27cb8a03b54183859d01dba3945f112c51643f3f1929563b468c51119689d31cc983fa322ea8d994cef4d98fdcbdd33304bd5099d5ec52b3adba865a487f24aff17af51bc31e57081e22d8a77a29a7ec9c337547cc9461e08dd3e349ed2639343337feba171c6a1f476dfd46bebafcce6c37bf250be3b0e78bec5b4c7faa5f4f7f4ff0c1efe1506be1680df67a06dc57b141f68a45112fada848a6f44e26f27e19772d21292fa6a5edd39f254c2c6d5131566b15a197b4cd5d4a1394d8193ec5c1daa9c7642a747e39028b100642873f790c1ebe2138a7b28eea37880a25c73644a33f4186856d9686a0288d1583c46f1044599fd1914b38cf897402a3209ae809287928f528052885284528c5282521ba50e4a5d6e84ef1ca1d4e3e7529f7f2e6fb48d8be654d60a7da13627c62fb0087220f719a034446984d2985be685813620b138615470d4a52918eddb03cf749b12f70af6b953b43f620919cf87278f3431d59cdaccb967c2601a9d17cb5fcc7e51f24b532aff5cf2e64cda2ecd509a2b09a5c9dc2b2d505a7e69227ec9c3e7565ad1cccb2de87a91fe94ce7c97870c24deb3cc3e8f7c3245314aeb1745846d719ad73cfcc7b73ebde0e12f0b40c3c0172ed01f63a06da50d4a5b4e7afa4e5cf355243e4bc5e4efa5e24b2149dacf5459b5a6a3b071638cc676cfa4ecac291845d19279667554b1186db05104a3588c62144515664e7a117371261b967b28ed50caa1944749185544a964121d8d6c945962d9582aa354414966987caea3d440a9491d7527ec3a633eea4cbe788e92f0f312a5164a57285da324aa4493871f8762b399a3c8a5c9671e8a7cc2121574c364e8891106f2f00fe30eedcb776f51ba43e91ea507941e9f19b8dc6354b0b37d71eee780d9a10c09de9281c198b97edcaf34626050de7130a6cb8ad6729d8a68778f8a8328a2b278c92a26fa8e138339e1e4535a153ee561ff11a53d94f6d3a21b3fc8c303860145be494f8ab8db4edff2503ec85f05145129ab9ef4b65c690f99111ef62e9f83f8cb8cf2702c6bd3e1c7f1f077a8a03fc740e5a12ce1c7540565c6330c986513fdf0251b858a3fcb43ee559345f7849919f33ced10f93ccdd22bf0e3841495d8b1516c57d1a9ac9a5a3a558b717df9ec4a95c9b73ee32c0c67d451d74deaa8dd48238da50cfd37a52cca403c45d943d94739d0cad3cf9a6a86d1ff724835b51ca11ca39ca0dc46b9837217e51ea38bd100e53eabdd94073c376ebd663c83c7928b5dbd652b0fcdd1c879c621622300fd9d39ce112c739cb47893f208e531ca136e9977b969e52919381dd319539e3147941e51bb5fbe681878afce98f29c196adca4766914d13e7572d1086c7e8c280b34a75becabf6bdc6063928f2bb0b9497afce62b0ad27f75ca1bc367bacbeaf9a6a6befd3d2e3eefb21d732310e450525f7def070caa0e2b06af24e1fa9c7dae0a1f07030240f6d10bf77c57a6d96871fa397fe820afa05037f8e84b4074c2b6f50de52e00466930b8f507e4883846968de862ebe4d1bb9a0bc433987721ee502ca45944b289751aea05c45b9c6cfb1e075941b2837513e43591645f9f3e2fbe251f4647924958d19e6caedce985be78fd479233aaa7fc31c202b15c36366a8d3465a9b1d5b3eb77189edd416f25ca2dc42f98a4504cbd728dfa02c9d70a776a3e84ec2c6f53e8dc6dd1ecaf2520fb418cb8f8c6a94851e02ee934b7df9d68139c72a6f0e6fdc986d10639ea314d6f57471c14500b68be6e00d21b6305c7ef418e513944f51ceb068853a63527728cb37855a3ca61bd89306cd3625980dbb22062f680ab200c29e49136d6b6d5f7a446fb82a6d4dc82736815fa78896b3a800150fb9ec3bc7a2d8e6fb544d73eb1fe561c5a74cb3bbeffdf92ba5545a25d00f5ba3fc770f794da74e0dd6f2d0062dfa5b54420de25b1e5622c6423e266ef19346e01bfafd1c091d036dabc4a824265a30d1f4179b0ac36c9897e2d1d735f565eb4f4906fb5974d74a1b950e2a5d547a18dfffc0cb4f528ad651e9a332a0f0fc9a0149813ce3c3e4cca1422399584375ded8a846654473d1517175f4ec47152a56c6ac1b402a26d4eb2a1354a6a8cc5849a932476581ca92ce06a6650d54c5dad418f7afc8cc58a3b2a1f3a6229366874a0e953c33e092d6f33973c98235fc83229b3bc3b8232f556019d5ad7ca5888a3c4619950a6b376d4eb8498249143d8a4131052b552de62ba660a5668efb2c9181cb0353a06400bfc5132678d6d20d33fb4411e5e99f317371572726e121478d7dbb6fcce9342c613bb0223ddca0fbe0dde3896ccb1b139107ecbdc3c377a858696ac4829d76a83ca43c4ca9f85229e5c14f0d0d5a88081ddfe80ee097418b7991496d3efe601ebe6704fe3409df30507978868ad0ef4a3345adefd426a3552e4cce9a212703be8fa4c14b7ac848779ff82d2712bd3b542e5169a1f20ba50d841bd7accd5eb96111947735589958be39725d1e461e3578a4fd3394297e4b7371d07e45c5a8ca9a7ff3ed3315c55c5cc626f966c46ccc8a3ced3d2a0f2cc45a7944e509953d54f65139307b766a9c55a2a6b27be58243c6182b47a8c8e713c3c653543274a5da0ae2c2497b4823c969ca520d4a867e595481aa87aacf22a2ab1b16117d199348f25ac5d01ebb4b4574a00109af856ac00451630a72abc462c50d28cb440bfb6e66d405a89f6718e0910e917194c172aeb5d92dd7b86a886a846a6cea857f8587621c895e5a4dde75d5bcc3c36a9bee16e676f7a8760a0f3568b1a74d7acf0ac35e4dcfe5b6ce52f956b5f3eca4e1e187a993c6f2d0abff793cfc2215e67792d0b66a973e49d164589af251e34b3296f2a7cd0b1595b5daa376faa54814a43079feab0cbf58265519f8c15fe9141e3e551da23a42758ceae49d1f951f124d551e8c4fbea3535e968097549405c2eea2b252d12aa842c5c582e1352fa0ab835a5f0ed529aa3366ae4c5a2c54559da32abfbe642e4e75c5195635051dabd2b68c40e4ce1963acee5095efe6512d302bd595f797261faa45544ba89651ada05ae5c104b66c4cb5866a5dd3d3aa0d549ba89e694cc22aa27adaeec80624e80e0d27a64ad08531058bba6d57de6bbe6356039d3123faae64eca42ba44364986cb0574cf4ea39aa17e6acd503542f516d31bcf95591f888aa3cf9f50ff1b07ac3d4d0d93d95086ef6add23eec9e29155dabde9a74b69aeec4ef34a9c78a526a4f0216a5d43a691c0f57fba8de99fdf81fb2efe91b0c7c1d8af815127e8381cac37b92cdee21143d53ac0b7b8c1637c2c86c93de94117afa51ff8ac8abeade5fee179faf56dd374de6d021aa47a81ebffd2d518699799741f58416238b1a1dbda2a2e86c622b8e06b415a7235618105b71b1682d0e4cd9ab22f7a7c77ba89eb238723563d898d5c33caa59d4809a879a8f5a805a885a845a8c5a825a9b89a6b50e8b6ed4baa8f550eba336406d88da08b5316a13d4a6e618829ea9207ac8f4b4da0cb539b3b4c70d3a4547fbcfc7ee520c0ecc36a5be61e0b8b578e0e3d11933663abb988293a679858132d0a6a78dcc7e259b032c5de1dc69e106b5056ac625d333adb64261ce5efd2a0f3d0accdadad4c2f99e6a5adbd0d1221aa6cd65b33ca41d68a8681b35d57b158676e7a1350e5d469b28a5c9c52b278d3f639d9bdaf6cfe0a175c31806feed249456db194fcce839776c15d1f6a8e550cba35620196ac59ff094d6fea2d399e91a5cb99587a6d5ca0865d25750abd2ebf0f217e9c8d9198dfa94abc9aec8cd53eb6b8616ad07b55643adae1ed461ce5211e30bba3a3cb333488cb15a03b5266a67a89d7367c36ef7aaea71ed02b54bd45aa85da1768dda0d6ad26f77a8dda326847c44ed09b53dd4f6cd2903c7ac5c484a5f90815444f7a98b4ef79f372b4d85ab07acd1ec9f213aa018f42e69b86e720c48b072cc23f749f4762ca3363de470c86ac295c56c1714a5c332d0bba729c8586b6a1d6c65ed3844ed48c5a02937cc26cbbaa89dbeff2d13b1764c135114d4ef8ac4da09ab4231823fd09dbe8e8aae9184d5e713660603631cde6bb9445b1eeaa571689da5e1357ad71fcdc33414e1dadf4e42f2f094e3376ed1d890592ba35ecba096451d9603dc9351f77e9487c3b23b75e4171a35d2fe9e3921dc7bc5c3ed93e1e716751ff500f5f0151b455395a5a41ed17f2316a3988beb0bb3a09c70eedab8a2dda5b1ec3098c15dc51103df2c513786df668e985022e8a31ea39ea06e4ebce299103d9e0329429247d0a527798c4d1b98e33d26e6743ab940b847f686fc9663e0e801f50e5d322e51dbd650b35b25c446952580e7498cd41d3aafb33caca8cdde8dd19f232de94b27f0890624c8c053cdc5173bf9a5bd50efd24d5def19761dbce261ff89e2aede4f0f127f8f87f501ea434e896ff3b03e427d6cc4da98a71ada0a344239e6d3dc3f374bc2376569ecb643d1696de4b03ea1526a334bc538ac441fcdc32f18f86d1efe36124aab4f519f311e2073b47d8dba0ce702f5e53307ea2b4aa12f8db42fcd453315fe5a8f1ccbc3dbb3c4d903ee19e4399951651475f96b45960621dee655d82331e9e9dc916c028ceb4bb38bf29c545c25d4e8b8edc0507199382ad2ee9a6ce80bf1fadcc2276c8c657e6cc9c651cc1c170a3473e895689842339ed0da32a797a58d1be4bb3c4a8979a187b403ad0cb40cacef2806451775a52beab9e70c35c6245af04518ca5c14e957625cde0b51cf3341afdd51064e4f5fc940bb1b465ed629a2a286d40ba817512f712ebd2ebf6f7878807a99ffcaba1b5f1189d2b70519c1ca777828c661bd4a1e8a526a2b233a9168d9683fd8e3b80b190ac37a8d9143310ead52dadee716fe7a9d4ae91b274d34fbb8faa5c613f3e324fc3e0f7f9c84e46103f526e3ddf533d4cfc9ba9782883c7c2fc427cbf0eefc3d1e5efe85ee985a9a1913e50bd594e7ce833b861c22d32b58a2de42fdea151b1902bda7d0886ae688a2b22aa86fa8d86e5341ad5f1b27ea13772a885ae827e814e8ba8ce59f6e90e48c78bc252719ee33e5096d63718a0353b4f780f8e684dcabd668078a162aa6a0c8c0d113cb69db149997a52be8222a322e1fdca37ec7dcb4fa3d53b48b11439ded1b6e22e166cbf273505eb550938e2f2ff832d9b0fec0a86cdd64f9d76511d97b87876ca06a4a967e4d35dde3059499deb7a858dfa7409bb6f5a451aa9dfd17f5a00eb510862083071586aa94be38d3c2462cde18871fccc3d414fc0061a8b24516cb43d48fde325079f8858384410b9fbe01e6bebd0cf45da1fceb1e67a33b995fdcd5cc5f5faba6dc0d605453fbd8d29681b9ec80d908f513d44f5f198d950be3fb1d9b7272665ffffae695826aa92852d1efb516fb46108d2897b88ff686c7c4d7338ce9d5b3ac4bdf0049e5cea29326b22e778c86c7261f847862012e8e78cd66428fa868a1e326fd313636684a5770cf2e43f3d0ecd07082866fdca1fbdca95419ab3386e9411774027347a8477ddbca4061a0dd2a615be9048d008dd090e4d82c522218fbaf8ec1703c14854b58da88becac39e71d548a3ccfc3a0f1bb149efae9862a4a658b0a5a228a8f668a7be5556ab465a0e986d234ae9cce7575ea695be310e8587d53b13b4f889aa1cbf9587ef91f0d779f85324fc91d6782fa98dfbebefcd165ebc5c987f9d84acc590fa48e5d9b8db6dfa4a359557b3aaa903d9454683b56f2d6c6cb4d1e8bc6263def8f4c562ec15e9441d0de9412dfa68745921b2d1a382dacb715fbf171acf4d9e5e4ae64ff7b9c12f3a6044a1b3e3c956ab7bf2aa3c658d50a125dd9ec7e60897277ec8f5e883291c907e364bdbe5888a749daf2966e91185392fc48604739a9b164e99982ecfe3cd68a50f6e28036d34825bd2727c0bcb40d7db621e4f4a4c51ea65cdc14fa6e0b7d760aeb6289f7aaef01bd5741fb5352fe87ddd5523baab5cf30d578d18878d3eb9c4c3d5ea0c1ece8cd013ca8dcc61a3b6c95f2d09ad30b47bf06d1a8d4d6713a5d4452c5e1a87c2c37f3ca9ed5b3cfc5348481e0edee1e1dcec4b6a0ccde68c146c8cbec534522bfeeabfbed5420f08ca84f852351d1cbc4058d88b06b665afb4c6188d091df72f4329c11373c4596ee7863aaaa87cdd4713cc301e541e16304eabfd5f1ac1784de78da8a9b9913926fe8e392e4cb9be60b84fd8d5ef9166b93e4f895c9aa394c4f69b8eb94342f44fb130ed5ec1780f8d29cdce948194b7db43fa69f32d7a89bae6dcf9a882c6cc6c1c395519280c1c5fa131d7f409a6dabfdc02ba87d91d1a0bc396d747d0e46f18272491bee4e1231a4bb67778985251be5e5e9bf0c65778580dd1305b9644be313f6668b2730768acc9c697cd9250aee934cd9e43e329952f5229cdaa30eccea9940ef69f95d2de076cc6ff381efe3809eb32729b777828c6e1a4c8d831b7d23b1e6ebff9b6be991f5f96c4f35f070cad83d45a8307af40eaab4635758849a0d3cbecab4927888810bbb1b17b959463d9b8d970ae0ff3dc1914ce583e90fba4626e5d9f3499aae2f760020646529d938d9ec7981e8f649107c8d1ba63b8ef8ab4145593f542f7198867e9de4b3d5b57a45f644eb01b1d92c936397b2e066ac76c962fd30e14092c0cf44cb5d85dd314d2be65565a30e5ea268a067784e68d486f3fd32f6aa09143236f56b4e3774ea1c9fb543ebdf6575c357d5a802c0bf0351efabca051b07f7d87878d22fd9ced638ab8e846a9680b07bf699684a2918a65680b43f52e34a7d4e676bf148663a17789c290c6e1479d7ff8bb78f8db49c8c05de1fdf8c41824a150f1250fbf57809df346ac94d7f54e481b1171b9f5cbdf352f3b35ed053fe94a8d5faaa6fc57a3c1ea65f60539358dd7a15146a3425fe24bb3560caded01ad2f56a61b52156cdf6a94bf5135c1baa209f45f9aed8b1786398f94638d9ad9f1d02727c5c6e34624232afb83f47c48d11deae49e9fa805c8523145d28f46e093c603c522e5593d3d7354c1319f843bb94e59f79546e01d555059355e31d090b0d130b98d53d2e66ba74109c768e35dbeefaaa9ef314228bdf75557cd13d55ad14e7befbb6ad068d2b4a3afe5d894eebea1da69d9f8b209427064b6263e3d870dc53274c230efbd12865629fd8843d7becac35ff494fe933c6c9c69fdd2d18bbcb3c6f977784803cfea3c2fc9b9a06249feb4d9dc4f9b3d38aa73be02df534dad066b5f30670d8c2dfba47181c6251aade778234dac191a579cfaa311d9d8b8261b6dfa9ba8a995717a28953931ae714309d6b845fdde6c7bf769da8970131bcf9eeee8b5a8c1da53221b77e6a0c83a73b2c5fc6b88095da2d929f7112330a932bd8e07164494c9b68ebd4d881123f04b47a8330583056a25b248b44a79f76f9cca264879456fcd7b3c34ab55cb88bb6f64d544683c7ccd55431e8a34e3b9bf3e3966a9d85f918d9690f683208d47c62ae89e797a1686a3b9562b7d230cab77a6e4d42ba5f4dd8a387f040f7f8352fa5324a471f8958c36d19a5626c99b652c2c096596ec7f4f1e72678dcca45720931e1f6999581e3a2ae6d69ae0fef279c8319f33c621ce6b9af2d0f495119b227b3536e3a37180c6e1ab57b08938fe986523da5d6337822e9c41cc3db5a39cd11b23731cd50b424625fa7218720ce0774df2e7b971b496cc31ac2b73aef50537c88bf239b8e43e0fd1789789ee94ef99123bfe88f906cc532fbe5241bfece7a12c0147681cb35293cc8dda9a7f7e8387364e58b3cae717f250ba5ac49d10f51bae9ac609d9ce41799787a768644c82e81939d66b926cc246d13f8590b635b204e59f9aa07bc6af3c0bc3976ed2a5ff56187a8faf2b794fad1fee1f60e3efe3e1df210ca535dfcba4e14624732e97e85132952dd8f47fa41c3a2917b49d6a4a3fb83c95e890f2676df5dc848df252b2f6f7a07f4d296a679bd1480d629cab546ee57ac7e197c146f7ee9518cd00cd10cd179aaa8dfeb38ca771ab762a246454a5e998d418de1009c9805ed59cac2a94be36b49c8394db377e9d4b52ce9dcdea1579252b35f5e902dd5df26e724fff868ea2d5e333fda40f6d65ca77b7598b71db8c919c5b8f28fb4db841474be13b07068bd814a117b4df9387c794751a99f80a151b1113bea9bbbec7c366422275a70c060a15a973fad451453652057dd40f8290a567bcac73a6c230dc71b7a18d197e290cdb7da394be340ea7ae7da376e3bf90873f4b423a69de739626664bae4c269bdc68c11f4b2b25f168e6a94787e2ae67323972c63df0b2d507e4a14c0bea632ff065a0f4631ed640be6ee69f917e16a90f4c77198f8e8859697213db9a6d738acb02cdce3b2fc5ca038f1a751cdc1877ce9339d7b16d94c9d01cdb18d392ec46a4999879425169932d15ce97c7d409f7341dd4289fbb33d24f56ae7065aa9064b5cac19b4278cd2e9a3d34fbdc2a41633b3644722740ed995df3ab37a723bee561deec24ece1bd50bec79d4db56f46f3f33e79d8c3bbae1a34078c37b40f4d458c803aa790adbf31a5130d27ed0769220919b86f53896d0e5f9c63f13a66e8846178f5c53a3efda2fd5d82f10fe7e1119aa3f7792892707c451e8e4d442bdca039feb177f69d6a6a3879436af58c9c943fdf50d1e6bbbfe621fb41c0e6c4b18e97e54cd4cb215a7acc542293dbbe6c3649a0394573f62af4ff4665e5664b63000b7f849622ca7a4516c31e24dcf120eae52243a7eb68680e753ca69db9be66facec8165c1db3e8e3c816a4bc632fd922232f63805fb6a634592396681ab269f1ef17e740490f8834fbb68928fd204cabbd17ca97c6f5cb3a54bf9e55434f4ff2aeab06cd358924c2ad63cacc3437a66e62c092a4c249d704115cae11126a024dea9eb1c270da4773cb98e12c54cbf0ad87c67f8f877f979afaefe4a12872fe2d279928573b93f556effef8193d66de505ea1b97b2658df9aa3af79281aa9ccb937f290a4dd270fadcc9426976d1fad6c7ca6a25c231a9de8726f7848f595914c7eab9943338f66e1d9a7fa663387a325f71fe7b5fa38cfcfc9d036a67c5b52a1b5a7eed8c40691787299ad4329c4fb5a22ee97ce986611cd92d90478f9aa0e2ad9985291dabb4945fe9689f86876fd46e65b5f5091ab55c9ecf7fd1a0f4d78439372bee46119cd0a4925aae6f8864ca30f46085945b346eec99ff25766bda52474c58247eb678dd491309aa539346fc215eff3f06f62e31fcec3e9fbf35226dcf2c8d450cbe88e9bef440e5ff3b06facbe661dcdc633bbe4c5bf544da50d4c6cfa0d152dbb7cdfa9a644e4af0e31aa29955e6ee3bc79c54393d8c5c710a16ab5d6a64c8b3334cfb9e77831e619d4cd6f56cd79a917d882c8b6baa43b5ce06bc4a3c9778966eb0b50da359a37667db9258596c11715c18d6064fe6d8b2ff86d13b1b4249f656d7ad7447cce7dfb8acb54d638d278ff1d1eae6bd42aad6acae4980b53a5c610d235f92bf3d70e58fc4248d8bca36bc716a1b124ec0c95844e237d2776ff2d1efe76a3f1cfe6e157b7ff4eb99bc15a3b32ff9af73f7552176740798de6039a8fafa49c4c2f3aebbe504d99d1e6bfa39ad62baf5453bee0e533d2b3e18dcbb73c94bf0a69b9c1ea4979680dc8e6139ac24061c281296ff56354fcb926f73f44f3086d13746d1ea37982e629cf57b4b533ad5f4ae4951869ef56e6a7f7f8cae89cdf3411e575446cd201f69e6a5a2fab72fbd58d882bd650dc3ebd270f33a493a897e3c06c5f3a346aa721a46bdc51716cfee980296cd3e41509df48c2f74988342cfc2354fc0d82f15fc8c3d01c212af692d84ea280090fd7a29364d3579a7c372f891c683cd097f0867242b6e29d2a9cae5118f67186b7a05838321d9d6aea594fcfc93342723e1ae7e1e53baaa94c7469325fdf3872282d8ded7ae651427ea9964f4ad8deb1d2dcfb06de05ce7c9c05efffab68bf6721cee4cf186709a6039cb55f5573a7f00fb8f9483aff5d1eca0a225d51dae3e76fb96a7c9299bb7edfe3a1bca3dce19db251290f85edc24361e3973c3ceb30f82e223139a0eb45d8d83115102d276d93cf82c83fd968a1084faab2af49c862505f25e18ff3f07751f1cfe521b7ff362aef4c26df9070b3a699349a50073beb3e93507ab6ddff6e6a127fe2ac47da084f9cce29cc2139976ff929443aebbfe5a7583872f14b6f8df561bc14924593e62674b5e2f1a56aca485a59c5e31b1e5a6d96de8e15ce842a439c8dd815a2b54a3b1bff8fbc336b4ade79defe8bc97917fb7208ee22fbce19b8032ea8a8f8ea9fbea62793c92420e2f2bd7fffa76acac2881893f9a4af5ea687aafc75114fdadd21559fa8fa1c5a8ac5f8556ea8d2a4ea0b55970089ff65f92babf0064128d353a976febf6239e4d7f897954015a73102a1129c238074d60d0abe6d0e9952e6102ef41a0e518a34500b11ddb6c2547da5db1c88621377a51cbfd90a400a9332f8359b41f621598edac5dc468e4a96c21b6e7c646f05a12ef457e33b34febb1c52f58daa7195a5ec164a3cf0e254f5146d51d54f424c2aaa24e2f4b3980dcfe30fa07590d01c0a8a3c33aa256c781256a1ea477798584e5683a7235c9db935466a0259d29427d389ea07e148536600c41ec670c8170a29909952777e3eb35a468382ea1e55f7a97a40d543f42838cda3f89619ab1ea9ddcb5ac0af7a4cd513aa9e52b542d533aa56a95aa36a5ddf5c064f720f783dd266592a16562a43082bad58754335fe60cbcfffe694826d4c63513c517ee03cce1ecaf2287e08ae599baf7ffdacaba481b3de628a4cc36206b44e1fd160c61ba90a9b14c0e3c12f78f091498a6eee6139a578cd865045473742f8b97318e5f03b34feaf71c8a2f4a98d6d09ef0bbac3e2418ebd294038f6d4c62333bbff64ec1a16aab27d6ba23518a308186c148f689ad082d3468edfccd6cfe613d0925a3f9e08a883667b098ec8c09199cb21cf66d47fb525c911e250ac655518b6ea0acc00a5475465e4da1887ef54ed50b5ab468faa7d9c7f7510ba71e6e6f2ef82904b4dbb1902e4878a2de1c45a7811cba1807a920d6feb1d328c2ae639c763ae3c8e72a831e3471e7e714da806ff6049f52871381ce2398bb5f34f30741355a486ac602a18fc2d5b4b6978a117daabb5857e5446c9a5cd8a69770e77a3f11fae6bab0e637a168e1fe11c5eaeb0425c76a739bbd17431879eba49f0bf7d0ecf637a8d507544d504f45535a99a35581c3224acca0e1211697a05689d280ecf15369e10b786bac811ac036ac324ca871b0e71dc57b6510e5147de068ab11cf24f11906ce80b655f5ebe0b13e5b8b27ba62becc21cf2c0a3e700a711e550c6d85f3321aa550ca3ed22f263053531498bc3108d008fff10707d8db18708d5cc611257d1aa1a5f9aa232a9ad72ad610eb14cf451af1564a9594d2100c3ee9f3009f616ea5b6506abe950a65e27093f5f4eb1bd73b801c52f4553ff650e3331a2f4d2436de451170b88d0daf4892aa54094c2ed3ec545f773b2ea1e84da1c50a54c557e18e79468bcc35c39b5d429e0998125275121b55a3c339c442203664b537ce6c83dc2bcf11f42623acca1e8d82ac570284120348998c770c817e7504514510216e190079386ec42229ec31365ee98e4580ed90cca1bf801217ad5b89146a9e2f35b2a9e19e1500da088f59c7c7a571a4b87433c4ad45dde10aa41055c3252da76a91eaf2d40c52273f20a1a792cc754cd63f00b1e6206a5ff5a90a6df7241d3178ce1660eb7378cfff07a8b6885f7b5da3c78dcc56a71ec82a6b6b33c3cd32e9f7078a1f6cdf2d9a36a419944db1816a94654f3b4b0dcefb9d294ad416d8c691a95a63cb91d690acbd00c62a458c6fa2a0c041c0a9c557239648aaa2a498018cf853bf0179b307a510e3d49998c7032b11c4adae0f43096437c8b297ea1656ad41e4e942d625928b11c83a20c29eb630eb193763c87ba088e1d3c349b19c570084adbb84a6ec1b715aae1df45c4959cbe1828c060eda3d646d0ec4359bc27b87f672b3df8351378fffe251bb8b331dccce19634fe17eb80b7e4f0b0e472f8d0a2f7155ab83387ab6b7f5bd9a4e6909d43bee817e209b4f441753f824bccf7af36a1dab9a64e9073a4294f622c458d444d31f5ef5c690a0977174a1b626bdb67606c38e4f9ca735a78b339844954868b4d659443660ff192927eed700859db5239f7380e79f02f1ec882c9883d04660d55d4928ce7b0acae098b73a9d77338c450e1507e4f205913110e95137bac7cdd2887fc86137889916cbee150addb38582a7fd2e2b0c60faf823689b89b97eab1ab6ca3195ff00363c742a9df3f45f15f5d8f5fbb727b25de1de89ed9c2e1f514f5cab56b7105b57358bbc13d600ea7ed780e6bb7549b526d16a850788349d745c483fcce8d9a6a1959721389f0fdc23152e90f6fe72a98344906381c0a4e558ae150a4a9543c4775e97e573b69fca3580ea59c1a65ae711cc2deaafc5e2c87d0847baacdcc753c87680afc8aff5a42ac663f703b6c035ff19aafad3a818834e56ff9af2312935cc3a12a57424df928cce19c6e6aca6a9d086992a9c223d88c4f12129f8852b5bee4e739dc4ce39739fc239358bb73db619c174020f6337903879779044b6bf7be9638099c43e61029c4380e214a1fa8f6187028314f9835cb21e4d7ec223ad214e1d092d27b89d0c1b3ae3e6838e4d923ed03ed1829ece1cce510b6f755c316b587423ed31be590876444f81c6239d4beeb553c8700f50267be8e43fe2878ce47f11c2ec505552b126d0e83f8aa02122b27daa608cea5117f62a09ccc351cf21baaa41a94584d316a0bb4877a3a0f4ca2dc7adcfd213411bb275b571ac78ad25fe5701d8dff5dbfb62f71681bc3bb7dcde125abca277df9ec208dde2ac4e7b0f64cb5177f2ca9f60a42d8d4d4dea8f64e357ec4b25d2df96f28536d8f6a7cbf0fa876188653c2a1cfca677ba3d909d58ea8764c357e71eaff3a7f4e856a6754ab52ad061b683834aea06d0ccbaa725560732094213db06339145bca0f8b580e7185958fa7a4a9cb21a2355990665c4487437e0fff2e9ff33a0ef934f8d7a5462f86431559955c259f6134ab81368a43adbad771883710e9456a620cebd800ebb68a75bd2a122e7929a0c810f21cf81e84c618fe368751147f81c31f41b1da0ead091af7b43164089fda485db02e9d3c51ad11e31caaadb3d670d8a45a8b6a6daa75ac831b46976abd90f5abf5a936d8ee77650c80ae24f4459a3a1c02bca5ceda3b1c221ea3fcb4722786435ca5928a49266338e471a08aada5898ec3218a63e7f829ffad580e5147da80629f5c8738c42392f5ff886a09aa25d5332b45b574dc3f5e568fa40cd5f89197538fadb1ea01eba3c806f34c55e4aee390df8095fb647198c7eee5cca157442537dfe8cb7d3f363e068ddf82507b86bb71b8038a368dbbf411fe3193b801c55a219cae286945ca1c22647a8fc575574c4531e41cc67258a76072d43daa8fbf4291fcd64473583f57c6f3abbf7e41f54b5d54c9bc4539c4fe2a8950f6c2d843fea327aaf2269643ac4b5071cb0887b8475a0c27e239c4c5bf44d8691d87381f9500140ef957ea5754bffef2bf1f1a69aadf307bba930d9f3f9316da14d1e6d0c3a3044e35423554bfa58f11467d8ab5bf6727585a3193e4840ecb7d0742a348ff924343e3260effc224ae43b13e0b2044e7887c00218ff7151289f539d5ef629c4397c3fb8d903ce0695d7fa4fa428d27aa3fc73de0db08a24e87915fe7b1a4fa2bd5dfd4afbf43ebd657915f3fa5fa878ebb38d214e0f9b045399495078771ba54a4e9812a4888b587fcad14793ab7553844427f068bba8643dce583a4ce22f29bebcf9b2ee3971f4c25b5aaf8423cc0351caada7a256b1587659a5c6283d10f0f1d6898c3f9082fce3f7097bfdb676d6c43f837d2d41e3b72f8eb28da1c5e0fb02fa22852865036a64793bfaab4400f713826d95a593b8d6b392c517d4fe7e531dddf42397abef7f57da5b8ccd4b956faca9e4c07aa60cd8fcdb0e9387cb56abef9130e2db7f305124eba7746a5a98a2b86a4a9cda13872124175381469ca2302a1be47675d8958c67028c571a6c02dc61e8ed509bfe23584a8c3d211d58fa97e42f55378c2f50ad5cfa85eb5061fa9e1d9c48f3976a4eb75d730f269c30b9585d115bfd634cc21ff88ff057647eb0db5af285be613ec5dc1040a87d2261855a63b0748e321fc8f38fc0d14b7e7308aa2cd215ab6bc610887b2f9aed7a7f767f1077479f7c761c0e1c593c56133461dd586e1dc8314af846b68d8d4ac7323ebadd0fa26899a4acad124f401733b645ad947125750f0abdb1f3e0ea46908c2579d42e0730b206c5b67d25555781701879501d57b2a50b4b7c673b3878a4bb1ad6366706216873ca07b55b69d2d58f01755cfb5e54453c4306f08d5a0c14f0e5e2ebf4607e163eb730ef121481125fc3c47c54feb5b9b758b3daf0fa048cb046378778cb617676a0ba7f91c0dda6e1fa89ada0d42478efe5fe4f0ab28da34d6adeec0e3071843db1e9ebf60117065121fa47938ff84439ebb4e8e9e01d87b7673f44c573d620730deb5590badb44860769a83b2aa98cd2c5b86e0ef26b42b28a0da1ce22970a0a5a9c321d8533986780e93f840ac9c541cd6d7454db6918b699cadcde189ea445acf586f534f0a592455529b55f07f64b288b14ba52a4a08a031540217c47e1aa2777343856a12a185c5125095cdba99e17a96ea39f20a88d04c4fd0335f38c4968673d843f4d87fa6c5ecab66d00ecc7c9fc3efa06871f88fa0c8e3681a24f1d9399c1e8438c42e7c2bd8c3a79ee6d009d2a8aa428bc37c78b625d47477cab8932a78387039c42428b8f39599915a169b43e68a359e1c9444854c62b4c4b58c002a570fb434b5394460f3c25deb6438e4e92ed5a4510e6baa8ae05065f3f9c4820ccaaea35e341ce2feb27a84d3ebffb441c1924559e52c1ee6060ef79106c447c9fa0cdbc796c206bec8aba1b3c03f58b8787c450d8f1a6328d28b67d8c3f1b36ed626dd4ad12bf15d2dc37f127fe413092a3b08adc7ef7f92c35f41f1a81a6c008c9ad202086c4c749086bf7d2c83c3c679d35e666182340e878d8bd03c6b5cba108a3dc4a3fdcd2d1fe5af8dabf04c552dde94df15234d91eeb38ad75046d3a28615636cdc28a537733994d649fceb538ae150d61089348d7288751b6af57ae3d63a5e81d967ec8f9b088ab01e467d6c5b3d6bac513f578edc43e81771d37d1711eada7a8e9cde85960e8b83ca67b58143fe1cf97f8543fe7073a3f1d3535cb7c97594439de1e00bd29852630602d9187e289f7071ad396463383d43a7e0eb2c16e6a3ff4565736642558a5ffedb1cfe9249fc2a8a8d79d0fafafe114294f11363b8f7a8396cdcc9568731411a97c3709ca6f110c3a1a02875d5f641548df5c21ce67411a9c8c8d04a8b842e16b3ebb9f948e3d1b236af4a89295c6d0e550d9a82edc88550b377a1daba2463382cab04037f60cd02a6b1d07747078112a1208d09d5f0adc1d2ca25bc3ef3bbd882c297a6a79227341c26421c4ed42a4a3eb88143e93cc0a62f669dd4089f76a63a38afe3b0f1047fa1f10c63d8e0ff6b490d7ee2bc51e35d1bc327b5cbafec6ae88d68fcb4c91b045dffcb1cfe298aa7e360e5219aea167c4ba89c43d1a58d9574d1575514af88984d5b1a429bc3f11335c219bf93b8a66c3c30dd2fddf2516689e7a89d33ac4ffce5114bddf02288915ee8ea67c3e1892ac2ac5953bcbed4bcb111733814db72183186c221cfc5632559a31ceeab02319c6739f0f4f45639ead6a02227aba3a60e87889a1eeaeaa246490f3ee10fbfd91c7f78cdf20f27d7210ea5258f08cb751cf2182bbb8acdb6221cf290ee24b3985e8cd4e007ae0a5f37f6b1e57de340ed0e708eedb11a87d438a2c631354ea8718a9e34d21c71b261af98b140f8bfc0e1efa9d3ed693cbad43b9661c78521c0139328106a0e2b74bbf4393c454384a373b43f70385ccca87116e2d06933632327ab10a2e5dd0d3bd692d4c82119d80e49d372473783b0ed21561b4f2d3355534d2e4a60c3e110ed4c1f41f2346ef92f4eefd277651d7b3851667ca0ea57e460c92c3e5479c223fc74bf1be2d054969e26f44f9d60a970c8ef44e19ef973ddc838560e70e478bdae070ad65f61f4b0363f11b3540a953d0dbdcb88cb619d1a2a90d36852a305089ff9a971821ee78f1f00f2f602fb0e34d86de9508395540feb80c76b43a35fe2f02f43a65fe0f0ef503cf42b4bcfdf5056fad0d4281a0ecf7942f735879707aa1190e210edf4cefdda6e15bf39bfa086558656bf8e8750702aabc51351695ab33844d1e95c77fe9640a52d4dc1492b244d99d8869dfddf572d12156f0e8712a141b0e7317ecda118bd587b0851cd7fc88aeed61f554598e2f0c46fc01135862bb515397f327f422c87481eee1a8095c1ff17da9f8b4318c7211fe7ff8bff503454d3485023498d1435d2d4c860af38ec6a7e85ed3a5e736a53d71a985c5e604f01ef921a8c2e8bd83c350a1b44e9ff08877f80e2661a0d87e34770f83ad4f8c940478c7b6a1475129f9d4369ddc5d2f4f11806d07078b98ffe084dabaead5659cba196a617312d12514b69e6f76528407a60ad339cca2650972169cab370cfae44d90f6a4a9b9e6b0f8f5536ffac1bc3a148532cf8788de11031c912359d92bd8e2af4292259caa77d5b64a791c627d49ca8c4661b0f827a068f0979fa4836dfe1b0f4ed18ace439f842d9ada56c0ed125718929e170d83c473ca67941cd4b6a5e51f39adece6832c06e028f254038ddc7f6a9f7f718f36bc079a3846bf3869ab7d4e4e7d08c9a73abe8f4f27f8dc3ff16c5e69d5f565ad01c8a491408c121bfe75e6d06a6383c7dd4fdb998c3db67f884c2e1d339f69a6cdac1c0cc260e25c27910eea48880cad2e270147078d6d52b0f6d8790a7141fb4a52993e9708810e82c1489150e459a1eaba6a6f16b7f2f7467803087b8ec224d9b8fbba0829185a9671463382c85ce3f3a9a0b8cd81ff138562e226b63e9c518e550ba2d63e185c3e1133612bd7da2e6b3c26849ab5b583f3186b7d7d8cce36e0f9ddd91c7ea6156f003faada9b6947cc26e59fc2bcd576a3299efd45c51f3834eef7f95c39d515ccfe1dfa0184b63b3a49dc3f103387c7fd728cae0d78b0235cbd4dc036cd7fcccdbd71ccafe929357b44b40f53dc1756c1e6ccba1387e48213442011854a8453814152aed6d9c36c130898980c3c3579743668cb56bc332d486431dec3972213cd6893815b089ea52b5e010dd2ed86e1c224eb31b8dcd23e5468639b46bbbf960a4e5a97a006543fddd9c38cd4c55fcf0994b36df6da531c295440b0cab3771f3989afc810324249a7c132b3086e3398ce1fc8aee73d8c5f1a548cd3334d1643f85096c56916466e7852709cf99c73d6c75ccef6729dbac611bac669d9a0d6a36a9d9a2669b9a1df45c6ef27ceb51b3ff7f90c32fa3e8d0785856a2b48f4d54aea7b8a0cc9e3df87237f9d93f544ee0a9ee6069389cb6d0cf6baad218cd11352d55595b0fa149e8c3c4cdc21cc6d943e9e0846647e176dde2bf890c2b7762383445a4b11c1eabca6c533d63735856abec19c5633b23fa165cc02ad6b06bdbc8e7d94ce20952676392a2661aa351a366064b2beb4f4836d60f903974a0adbf47ec6125f8e971d285102d4f55f55939ba2546c021ce8aaf09f284712d6d70d1aed476030221b39743a2c22b204fd8cc53b300cdc9c670baa7b6a353c6904ddf4303c6902194357108e6a5304378cef0131c8b543ff02d160994e9ad43b74318d57bc5f3356bd722b50849b296877d290f9ea835a6d6845ae73cbbfe190ebf87e2ee34b62e74e6902f225f4abea66212cd68f095bac4936cec216dc8cee1e969c0216bd19b3b94d7b0a3d8baa296f538af472a696c63286821a06a558a6ee650fa703abdbae1c8d1271c325ab5760c877c7cac96b1470bbb919fb850905b4f96d68d5c3a5c6dfebb2759f28bbc9b4e79b7241824646a776ae37f64662d65662c4db76fcda1953fe4ff25caa13878535a03a1b2871feaf4bc351c225cd408b6916addd2f414556cad2936156dcde8f586a665bacfd26b01c690bd4151a4a8e8e80510b2e7e240789ec76e28b21f56e50ecb74d860de26b06bdd79169ff9a8b6b2835d3dc7fe451f356acda97547ad7b6a3d50eb915a0b6a319fcfd4da76c78b5d39945dfefe111479b4963a48b3542b9e5649d7243eb5a9f54aad3788cfe35e0c877767e093696cbd536bb589c3508da8bf5385740ddccca16056d9d3e904db219c2a93250e67596d8f11e59091b3eb36112cb1d2860c1bd3185d60b1afdad28412210fc1753b9d4b754b3c87ba3f5dd7e550c2a476d14feb23c46168c5534494f24035f623864921463944365f953db44a7876c89892e610eddbae706e620c5b65fa18528b9fbf27d4daa7d6810ac0e4b4312c957578868de151176ea1ac01308a94270ccba8e901a89b0cb134e7bd885d6bafced0035e7683c48690af105cfc090c36fb9cad436a1de1f3a7fb9a6afe109e840c70eb985a7c26a7d4e267c419b5aabfc6e1ae28fe0a8dad1aca4a5fee711df991c6cf36c724f2356ad5a9d54086b05a8028b539c47e40a7689b77c57aa349ad96cb61943d7b48ecd15ec414e530a4422f42bd49a7a4730cb2d3d33a0ee1885a6986c65500219f8074958fae7212695aaf05bf783a0aae9b772dc1de180879483096cf279e432bb952ef8439dcb3106dc7700869dad1b987751cce92ba5f965d1481cef97e93c58abf1b6cab438b1b2c716263e825a8d5d5c6503cc3ab8a56a46f96226508f71ea148c52d647ec418aeae106238cee9cd212f4b60af3c4487b1eb81ca4efb35ccec043d97002ad38bf4581e9fffb1af3dcf855ae2c34678c1cf881eb5fabfc9e106143772f8f328b6d4357a684154088707be3ae551bec1956af10d1b8143367ac2e1e9a3e6f0e61e8944760ec16122c461adf30984a236a10c2fd7c44b3321e4d0cde930d4365fc2a188f4cce2e33476ff0be37ad555d37ee3224a50547f54326c0f1378b3feb48a8aa39aeb96542535656a2e5c0e85bd03d505dce6d0ac39ac5ae2534abd030eed759869bde829cc21fe9c6a97ba9ec3843ac39b902fba6f381ceacbce6f6ba5a0485f8e68b9a416dfc18c3286efd8f3d83b84a414452ae199cd8a7475a9d6c715f14c6f65b5317cea00b9c953fc463d9f8e525e0526fe130e7f08c56d696ce5d4dadf0bc8063689fc7813696a3864f9f1c6f630affa73bd82c3a373cd2113282fd8395ccca855087358f99c4331899565204d6d0e6b87210ec5e2890ab51b04e3d9efef5dc14ffd2020990e2df66d5a91d89a8a7606d9c2816e136c0f3ed22a06bfd2a6d07543df2af9510965b1510ef924cf549223ca61cb5e4b15d6a5b0c0762ce70315e4c76a5f2a630fa59f4de5622d872c4a91de2c079fd3b2b6194616f11417bcedc13364457a9386286d8f11e77c4dc318b26768361e6745badf82228d85d028d2f60410b2316443375b50a50563c88af4b2b8d51ec9d171cd9f79fe9bfee11fa2f8398dcc21bbcbac28f852429ae60393283482c326b52f6238e4af92481c3f51fb92da57bb70c8e750a560655388c3b7902e9d2a8f0b4b19aec25d4955b1a8ac6fb239acf7431ca228d48a46d613d09c2c11a577f8c18b5e6e8f00e9180b2342eb688f10f9b0af5b288f9f527d3a3ef02127b2b8f1009fd958a876e3077a546748f1873a5f9d86da254a87a87ad88e19da71c20f2a18fba843b278a1068a90f6a97d8d2e21b15d6dd836da1cca0658ed1b1d9e593d61d56ffb963e1ada189e3f537b1a1843168aec164ab5a3ed161edd21ac60c233acaae0e094d4d6d18fda18a2fdf44ec6b03dfbe538cd9fa3b88946e67032c245640e214d1587621265c045bca7e33492f8676f210e2baae61b3b72a5a93da7f61db5edf516db71283d638c950be9d28ebb899a54ba9c755d0ed93ec8c113aba14673a163aa4682b61f42abddb71c75552e675d345c4fb427dffbf247b99f7c183286c2219f2732f5dffbe4d05f2928b369b70057ebc8da8ff009d9184ef819ba4082818de16a42f336d20cf30e3c3771db8c5b28c690a74728461a09cff08cba7fc4f3fd92edfff52e109ed59b2f995f0a99c671b819c53fa0b1fd840718385ce09ab2cce0e79c83222b93f633387cde8773281c4a618dc46cd84eb659b92dc31c7e6cc5a14853c9a73b1cf253bc9273a569e54217d694edee4f17bab0e6d4129f3c9bc7e3506744f44a9a864a433f1ffb5837c89f13e61017f3f00d366a773c1e54cbd3b1cbe14a5581d6dfbe5b6b8a51829c463569644b0cbe146dbe6b6f688e78fc46ed7718c3c70f9a3dd0790e614c49183e96113b59e7168a226531755f74c333df51a487756aaf7e2f85b886c3bf45d105b2fda1f6fa2de26aaeae7416912fb4ad4e5999b44b210e272a7b613864e7b05dd630b7f7f0b127afdb4238557ed7a14a0f3a8150d997cff10fcb93408506632289f5408896559925d619bd86a2a3a76a1bc6f63e72e8303b1fe152323577f920ffa88ede8d2a2872848fdaefda10eacba82b758ed40aa6f267549c6239059a38bd2305c2ffbb64dba31cae94f93d4850fb0020f1e7b70f556f9b8bb5e53b389e8296c699f36f1d21ca5551fb4c45b7a6691f539b1dc2536a57b0d8b77d46edaa4abb4f50a7c6c670917715a9d439da6e2114e932ac480b3f109e59f003a2f6aba9fcf51c7e1bc5dd696cd7f10c6351c17e3642358a43631205c5a32eb51b6887b11c033cd6a218297f77d83a5288eda6cf614b135eb9f804bf5020741e2a1f152b27fbf2496ed000b6affae122876e71680eda0e6159ed3953ee84384440e830a68aaddcd19d328ec39bc9ecab427059a918e5f043ed8ec8a09a088d33a40c3db6471bd28c87a16d2d429dbc55b69d7fea242dcc38551d0cb08229122c9581561a4738e7180edbb47f888748bb83329a36dfdf1ebd66b4319c3d861286d16c21bb85b18a941fe8ac48b5311cef680cdb7dd4be6d5de9f6d31cfe5728b607b8827c29c5455caa1635c6248a3a6565d2e69b3752fb339feafd996567663189e030e17398d41c1e277507a758f61cb5290118ec7c980c628cd24d90679b7d9550ad229ba8cd035d2a98554d918d6f12657b7a7b85a1bcaddc8974ce9fe8d5ee91125c9c0f56212762389c5c6bb3c63ffa885df8ab4aaef9dbd85e89d8ad71be767b19d917c46c8768776a4355da353e79355ccb21dab7eda992eef08e34ed14ddded17e46d94376ecf945965e07b4c8d15b8d6e8e600cdf2c452a6e61f926523a1355a42a3c2309c3ddc23307396ae79c851abfc36179fcab287ed963140e5957084592cdb74d225f7d76d3db796a17b0b249e4a840283ba4f391698bda45b56fe90375acf8beaca9dd667ca84d20f0fc0ecf57d91ec3d9a86c72adb76d3a4eea72edca05fe17a12eb087b266376773a8fcbad77067449f43ac545cbaf6500083e2cd91b5e96f600fa512c08bdc2cb9a128255f2ae911b587278010027b1cc3e16aa8174ff2f128873c26c2e1682d8733f53f328a3a48e373d8f1e8a94f9d317526d439a7ce05752e5177f671469d2b650cf341c2709d5bb859919ebfed1823ed5cdb0ba60c8dbfc3e17750fc691aa973838bc88f347111259bcfc2c3e6901f8a9d5bea4cb13373c0e1871a451c613bd999e1ce75e6d4b9b38dc6e728b269e213e6d936559b3785259ca2abe4ce6369012833582ce4b16a82845d229621eb57b9d0752d666553596d9f24e438556c467fda109a078aaab97121141b58517d74a210cadd94538a42a8777acae1a362b797c17f7485afb11c96de74ce730387f204c1c20b1fc277be8ff76830b3e017fcd07ca4ce02c6f0fe0ec6f0569592ea7a6ea5480d8476fd9a31862ca32a775a917e3f3cd37aa0936594c3cd86f17b1cfe098adb00499d2770c857f35d385c06d27475ada335fc50ecf0b3ea45731840f8a1a529385c22c6dd79a5ce9beb82562e3670a826b41ab01e0335ef2de4641b2348d0b03d11661cbd073f73663b84aef50bf651f35d416b68fd59d98b72a8a235680e10c3a1a4ecf911f011d70843a4e9692278bed81c1a27306a0c97ea3ac89a2cc733140ec5454479da3a0e5563a8b1920f81317c47af27be6ba5257556d4f9a04e09c6903dc37107d564a69efbfd0d6e21d64fbcc7242a4c095b9030ec51a50a6338eeef6409cbd4d98b85d059c4f8d31c7e13c51fa2913afbb88eec673387ec73eb6cbe254dc16101d9a4ce01f4a73186e53e06bfd01c1e2a7b7844d537f74f602a77e2398420f4a7e66aa8770b8e6ed309072c224d9925efdabd9e6ad322ed076a697aa5e7ba19a281a3053496fe0c1943234d51c51ab7e9efb1ea582555dd510ef97f9702b7d85e18e204cabfef70b81aea608c6d0fede54e52f48396506b381417f138a97b07778ea9dc4343ee490a26b1c377ff541b4359ecfbd684223dea6a456ad616da101a457ab00084d184e10ec6f09afde1c20608a38b897f94c3cd28feb4618c05923a15aa3ce3826a1771a8a5a92412d924f2b3901f8a2f45ea9c051c3281f33b0c3189932bea5471f33a35ead46368e739ba19429988e58edee321842236698993a65731fe24c2a1477ce9b4243e561d81a5f985cfa1326e09ab33a2af4b25b62435dffbee0e168aed6cd09acdb9b0a8b6e9c440b852a5e1c2b603a1708893bc52ef0c43687a964ac14d2c8713b56eab3c8e17a5b08109ed3fe3a7cc61833a4deab4687145377ca7dad4e9d0f9133cc3fb9c2ae9f6ebb99130b4dc4214731bb7707dc2d0aee7fe9a31ec52a747e3631e5b7268d3f8131c7e1fc59d68344052a78fe7596780cbca1cae2e914534d2544c223f14efefa933f439fcd010f298adc0e1e331754620b693a04e32def03a8ea203a10c04604a815235c8496ad1414e7cb6a834e537cb416160bfab8be61c697af81a48532344259720d576d1c4bd5af81703218c7342c7455d63a8ce4a7a69c736a4514ea00a11c77128c198c9753c87d2e47bbfbb9e43f53ce23fcdbfd8e67b9442e9cc451b8df1610fd3a8a1b9eec11896cab8c5e55b881aa348d7b9853f1b9eb9a8502723106e407173438d9fe0f04750dc9546eaa8d278561741a866a94da2e1504a6a3ab9180e61128b681ed5516feeb0492caed5c0958b60d3a5288432350fd4b26057bccd61529c2c9ca850e1d91e62d042471e03696a5cc1d3c3409a86384c88fe74eda1c026cc38d77035d20577fc66d718aa7f734ada74c770a88a01f89ac47228c2d55bc3a1ac819282ef351c6a61cf5fbb8462eedb2afad0cc87d4f5a83bd66152ac096c05094356a40642c72d14456a270c837aeef28e8ab4d9b1215c47e336ed6dbecde1a728fe1e8ddd0974055f537111a5e0db4853536eca72a57b0e0eaf525a945e6730449a560ad4bdc0ef762f1d0e1d0bacd3ebf83602a14853e956ea36143c65e4e2a5e978ec1e94b8883de9fd6867284b216c47b3142806cada4b9c42290af1031d6328038504af311c96c73a83e2fcd7266d58eee8a8669443d1ea530a5c44a71dc67e573b90eb38949636dd2bea5ec318ce966ac79801756fc87b823144e78b048ca1ad48e3dd424b91b280b213861ff51d1386dd5b6cb718c7a143e396cda6b6017223873f88e29768ec4ec1210b0c961952558322892b375ae3f5a83b0387c639140e79f0b7c2213f29bb73eade6dfa73fb6a9fa958088d1645cc731263274f5e639cabd370e3333928711d3b2ce9bb762114a5fec649dcaf46ba41636cd69ed1e55f897288d34ee8b8a80ba1bab36c9311228a405842584b67021d0865e09191d02ea20da170b81ae9874e3448a3874ab176efa9fb803ad2db3b6c53c134761fd12378f6a0abd84c3db73186f6b22603a109cf18452ae199dd1469294fddc5660e0d8adb73f8298a8a432708f15514bf44e33640769f10ece2679b846a10325d04d2d42412d967e83e236fc11c1a081f26f82a2e62f7054fcaeef2f3bf28c52222c962a56925e74a53891c229916793fb364773d13eab4d5b295ed910e4b4e64976c61b2e116d088b094bf155f3d9308aad83ec2890a59f62132d5e1b03cd691cf380ef153d9cb2d9643fe1cc93dc472b854db989727f1c6504235fcd32ea3f886dd452f3ad83aa6fb4edd155a39798728e9becf07256ca68854d7af596ea194b099158676c27087f0cc7196ba1f0ce1961c7ed5246e08e1f81c6e46f1670de3a734764b78aa3187d77d1daa8995a6fc98ec96a9bb177078fb84c128f2b7dd7dea1ee026750f3f81104f6e2596d6a1587a931a9490411369aa77bd0ebf591610bbfea44f9d3922a905f94c118a65697f1896a6c61be4130867edb534357ee0475c3529b6b549c640f871a24b5b27d72e84522e23b1ab28877ca156439d7b58bbf7a82a1e5a6b0f47d43d82b8ed1e6373dff3264c62f7043d825fb3da18ae6ea04851cf5d088a481db7d028523b6128e199dd12865dbe98e75fe270e756a8eb39fc3e8a3bd018cb64b702892fa11a7611ef7d1751a4a9e190b50a383c7339e4a139ac2a0e6b9f708809a4ba684a10621d8dd21ad03189076ac7eca834051863973a87e48f9390912cfb853822779d84a11015ceda6b0ecb63bd163ecaa196a6f3780e459aca3f15e5908f8fd5db1c63283ea138d5cb35bd12e5818282ef380ebb75eaaae63ddd2636159df3911675dbe8d4c4c670f688c4bdad486d084dfd9a2852e979611286ddceee2b0cc70b51a45fe570fb98cd86ca9b30873f82e2ce341a20bb5da80bbeb2c64534d2d4b88892bab8dba36e4f074bbbec0ab2af3fc466eeed233dea7c834768235f9dea604695707c7ca236546b63ff2679674ddea652e7663a321268043ac64ed7fc51fa33276834584fe2330f54fb0c233ef933eb1db55f7ccb3a872bb4d0af9febbde0f7f2c18f360cd99b1e7defafe2ff7a5b6d2027ec9daaade03ea2dbaa8d75edb5e06a065ae3f455e3c6113e99cfb0be8f7fa7ac9e44e8537c88bf221710ff4e112b9e6c0ef9470dc29b6339aca7d445f63796e113e826f039d17fb39ba46e8aba696d0c6fe46086de573a3cd365ad98a32ebb6d85f06d2d528fa8e7516f1c6a00b59b223dc8516f6220dc81c36d32191bea51231c7e8ae21fd0d83bc7356599212ea22cbc70a4a934ade10767ef021cf62ed57c6a51ef8a7afc0937d4bba5de947a33eacd31cff8e6b54a018732b3eb9720e7f04d6d8b7d87b90220dfb47dc0f2f6117eb7d6a3690288361678ffbefab677a7a66f0dcb8545dac9afd7abd849827f85df80b9dec7b7f52e7ed494d50c87584a2fa3bd8f3f87dfdac7c9608cb05f227fd4714bfff5c6837adb18834f807f8bcf049fa9febaa008f7f24abb8b36877217c4e8d96e61bda2a67b021fc867c89fdfb851a7d15667a59e1d7cb9f8a7fcf8c03fa210aa97825c8570c81f1ecb21ff0bfc8663b5e1f66aa4af7f5d3da77af7d47ba0de23f516d47ba2de33f55ea8b7a4deab3686fccede9b4e18f6defddbbaa21edfe512f5cad4db535ff78122de7cf0dd15868b0bea1dda10eecce10614372fd188e3f00751dc0dc8de11425e08992a17f1a185ba41c3219a9a7ef835dfccdbb1e2503dbc7ba7749dc46069daab50ef0cefec55e19bb119a9a933613b23cfd403e53549759519f2206743c41cf22ce4d7550a42177a17417f1c08781faac34543cfe3c975509252b6d613c9d4e439ed48d39a9ad3356b09bc44475b1ffa24ed6ce199dec549a55b14c0d3842f4d55e745074209dbca820f73efd8c6b6d54e6c3a8074a42500632657469a382efdb529b2189f8d67fb482f2f341cf2f1d8dec16db5ea979f38fc5a1e7c8d1b2d4a7b351a8fe016f6eaf82bbd06f59ad463d2da30862c70844351a4bd8efab61b2cb4c72ab68956a43da6ba0f3b198467764a18f60654d9ff290ed7d1b81387dba0f87b34f68678b6f1c59d2d826c7eac34f5f84ea8a2b69e42a29744ad70c0610ab793399c5ceb5ed786c3da9b36623684d2581a2116352f9b0a5de33b2d27ba4d46c0e152a3256b5b658983d1a807cb500847a06ddc6892cd6a06366e2e876ab12c9f616d14ca164ed45633f2b72444046c1e3487b2ae3296c3e3a4a9eac6e7406a1e5a2128157191b09348fa533f5dc14710f954f5a2c717f8118b6a9b43d9cb691d87fc3843e5b7bae0ac08f89dec19de2ee0c9df1d534fb5aeebb1a2c9224c7afe8c92ee8786cf610131d25e4e7d9b8f710ba584ad57c0900650bbad3084222d3a107e9fc30dd5a75fe4f09768dc06c8be6ab7cc6e37eb8d56562fbc70a4a970c82e44dfa3fe98fa13ea9f8340e6900773d8bf00872c6ffa97a10f97693156d35af6be8c192a665357ee13db2519b521d4264b4773845f8b3d54bd24d47aa8241ad8c09f3c539dd748ed3e5f850264ef0b6f56b53b7644a43ad366cde6900d114f5cf9ebcc39ab5033d05ead871732d7d17b1b6909558e73a4718d5e70f9914474daaa07871d5592c7071e3d9ee230612d38541908292be51ff1df351cf2bf36b55cc4580e25e255afe9f7f7afa8cff7f786fab7d49f527f46fd39f5ef90332c9551d27dfee2ebd277481eb675dda29ba80862a485503d7769f56563c88ab47f1f85f0dfe3704b1477a0710390fd07d537b1a75cc4c22617919f9afd47ea2ff08cef3f6908c5243287fd671464f45fe2395c8df45ed0eb501425f6f978d0b981d68d0e2180c3a4bfc76052ed73e887289a93d02a5b1e7bcf4afd26dd8825d3bbcd5f670e83d0a85a9114bdce1f277a774725adb5f9351c4eaeb5b5e4d76c27db47a1b4a114a34b530cf1f11c0e8d8b18cba1287ff4daca507fb9f6bfe8bf52ff0d89fb45417328297bdcd6f7108492b537256cdf5c61d85f4515e9bfcae16fd31805b2afba188c7d1751b2f9b1d2945d880e5fcd12dcbf7ed987304dfd3d3aeb61e52138dc8fe790ff297bb7bd288a00a9e64e68691b113a7f55f8562df9526d2ff02759a98abbc8afd988018043bd8e3608c9bee8108893364033d25ae8c2ea3446476f05611a64e850f3892e3773ae6dd92f4097d316356b7328944aa45439b14185f772a26bb2e55fb039e40bce1cca32ae68e360e1509674cc54bfe0fe01f50fa9cfc81d53ff84faac81d912b2853ca3be7ae2f46b30862c70f0baaeeb66d8fdeb37b4221508df9d12b66f240cfb4deab76221fc0d0e37a3e8f7a759574ab2038a3bd36846bf4dfd8e0a992a1751b2f9b1d2147bdcf1d5ec525fc53ffb7d40c883699c318103ac1fed0f314d11f09c2af1e673084956d98422f6cd6d69908c6294ee4f9ab489eebacde72c66adf11062499ab5c9b7fc4ee150a226e66d126e61f16927f1f877d93facb7428b1e0486c9b5e6102b332ef53242a5459bd2ac6d12d7365f8cdee45a73c862d8f67b652192cfa12e300aaabae7fa1914e2b00a14657db3db182a0951cd974e2fad5424f7f97cfaa89b791ad3fdab122c09ea27e119f6556cac9fd609435c8d9cca127f503fa36e6b56bb85fc2c964515d2249f15693f47fd3cf50b5f3686357edcc7b885bfcae1061afd7dd7365475fd3d8d03a281879cacb888a6e03bd64564cf7e30a6814a030ece030e071734b8843d1c5ca9449cca92f17fcaaf85437bd7cb581a255e7adc0caadee41299ce8292096ca8297bdcd291c6e36430bf51847da4aedba98e52d60ef5fa3d838108c57ad75d025f1b6a60a28b7185e49a18a8f3c0d4974d315a844318e73dbddecae150aa49c5458c722855dd92ebb739948bd32ae980aa0de1beb2fc5de5f14acf72dc9a6b1adc00c28b3656fd3e4c68704b83293cc3817a320ee6ba840dbfebd7cd0ceed48fee3584665145e519cfe8c1036eebe0719784e1604183a7ff84c35814c31cfe068d3b0039e0cbf402bdc1aa63b0c4c32f244d875a9a8a8b78d4a501df9237ed690cde69c0ec7dd0a04483320df668b01fb852ab91c561229e438322f26c130d493d15e4f77886c916f36d950e61a896ca3234151848faa9741c8f7a472506f783d20209541e5f859e7de28822a8731ef026b996b6ca3a067f5d0d3e014948d6275afaca28bd85a4a97d0b241e53ee041c3a775ca2c48643bb8046dae4d8ba9485289e2c5dffb43350dd3c580ec8ff32f357184aab0189660f0e687048037e714c83131a9cd2a0428333ffc655758c54383c5763e0fbd5ec250eea34e0676e530dc6cff7de079daf43c873a64733da99c3dd52171b6814fff03474577e03c52f01090efb8a43cb4534d2d4d47c0b87cd2a0d063418d2807f314183645022235193410accf014977267e190678cb31b7b2c8d678f2ab1ae2a5aeccf046c55784112129430469530179be350418f4c4a86e7f44e73c8b353a22646ebf22ce7f3a9d780b76df7f803017cd5ad104211420570b2536a272ac4f08afe5c45aad826aa519afcfb6cc9eddb2de7c0a714e510eb09c76a2de228c42196fc8e705525aedbf66b7d70ad3efcb61749edc10ed234c8d0201b13a1610f7090a3415e270c3faa0187a864bca44181064508d45e3f7c5b1f694834f46838fe1a844b14733384bfcde136281a1ac16128a3f507347e0ae47042677b0882898b680abe63a5e9ea9c863c2e54063f8dde0ac34b7ce56f8757687439bcc6073a7f22ea1c6eb68db257a6119c6c859c8717ff54ca569c700b1b13a9d2740e4a3827a4367d4118ea176a1db4d9e05f9785854eb6b0f4e637351dbb1cc247dd8bbfd7aba1ca6a74f429b9ab2b869ac3d885bf7c7ade75385463d5944ed402cbe10d9635cd47749ba55bd69f031adea237e97d0e897bf61dcca28acbbcce52d8cb9ade8b6e1736164ad29274dca7e1f46b1c76d90e3ffd3b1ccad8c8e19628ee4ce33a2087331ace3587ec224a369f1d03bbb0462f475421d3459e867788911a0e798043b593e9f081868f91bff299318c0552fa3ef057ccf58ecbe1c9ab0e2d3aa646d634d8d495defc0e8b1687d219c0ed8fa60221d1150fe58926b93c7639d40d8b231caefc2d87e338d4d2544e295ad82deb3fa21082c3137d86b18d30440f0f17347e4619cdcd19cdf9e63ed1f0199b8ace1ed17e06e199824e18462114b7d02caa3009c3dd7a5e0c5f9a2fef02e13fc9a1dcc275634b1abf03a4c3a46cbdc6979b9f7ca6e05b4ca2bd1cf1e80e55a6f7f734f433164ce0ed025ff9dbe12beee5f08d86ef2e87eb8234dba0286d3ca5579209e1484f4176fc9cf92dedc9740ace1f62d04c9a4ea6becab66b60ecb481e99f6d8fd29b5ef5bf5411143b30234530b62e0d5214a7ba278d7392c18360e2fe212997995cebd2992887e204ae46f11c0e57ca1e7e20523a3ea2f91c4b9c862518c3eb5b1a9691ab308ad45e652f890a815062a4df4f181ed669b86720fc2739744235ff218d3286fb501dec229e5ee882ef75d254aa4c87077476177088e2297e7da84a9f7a343c7243171b82349f0e4151622d365db09347a14c83206756afdb07459a3aef943513369c2bbfdb67d44649632bb30d68c824ee050d3b9c5b23b56fb11cca563c51db2b825c121b0e842247a5fc35cae1f0181d688627343c45e78bb363d038acd0f00cfba82dce91b8bfdbc77edaa2486d088d22650825462a09439e0f3c2b3eea5f4e182e2e6858b521fc2739dc6c0f7740f19b400e6b78e0b10f60423551692a1cb29819b33de4475d23c421046a13bf386cd17bb8d7a8720e9b2f591e3ba2381be9bd681c0e459a3a9906097e8a18767c3f479acaa23ed715bcd0b6288c874e36d8a898ff4ef7f08f7028d2f438e942a8ab494f74f56c944313f98c42288d30e489e01ac3b6b27e1d1a7669d8a3c535cd5e69d8c7e6be374750315e2fac48e320d4ad100bee0ac32f2b52764a87ff34877add9a991f3f4ee30e400e47b8d62654232ea24853b7b0260f2f7fc8775dc56904c2aea7bcc414124dc3349d66d671b81b8af8adc9754c27a58f13bdfd836b27e72115baeee06aa42da78d81a4e0ed83267c225d2d0c2ac2928e9afac977874351981f27311c0af3b6edb50233ba8f4eec02fcd5506f0215823043873dd4730fb37454a5610efe218c21bbf479f4806615d39868453a3d0841288af460a1dd425b91eeb6c2b0c58f838203e1bfcaa1b92bdba0b81b8ddb03392cd248557bb38b28d97c7e224a4753579ae6116a5be469e4690e19c2a9aaeb1f8d6934a1d1398d2e3670b8238d3cff24001391a66ed8534bd3b92b4de5a08db1eaec8219ef2027a908070f693f510eef33b1f417d74b3ed0b9f872e324c1e84068d4f27e3796431d8fb117e09b00e93ca55b451a08cba734ba44e319e670a4aa7f46d7e07074036378ab5ae5a31b622150a43684a67ecd56a43baf3064453abafd12843f92c7ff36877f40e3a7408ea6349ae1a24b36dfb888d1c21a7e944aa86634d71c3284c2616949a33b1af18f1e421f0e51978d1d5f4351bae547a56934ec69c22aced4771a4ff0af7bd7ae0a95cf14065c364e43fd0b0d8a467f462194788c6b878d3b3ad27ee0326e7b43d1ba710b0e75870ec3e1e811fd4859858e9f69b440bfbcd1138df8f58bf20cf3c855dc3fa8c633d758502aa9421b4251a4f6a28a9df7301c2d692ff73fc2a164c39c1bb3258adf043216cbd12b8dde10aa312ee25a69aa4235ecf18fde61090d873c18cbd10a3775f411fa70cc9b780eb7a7514b535917eb5cb4b19f27705468399ca6e7192c076deaca639d907032e912d471c050f633244d0d24b258b13c76395ca9558527afeeed367f4b608b72c89f29eb1ea3ab2b66ca18ca9a606d0c4bd891f289a19dc2450484651aedd1db111a934aaec256a402a12cf0bdb7200c12868fd831668726f9cf656ac428d27f98c3e8d3faef693463b44f95393c01934574b217c6244a367fcc46ef804687210ecf78061ce1fda3e35010ff330eb7a571a62a45e77e3ff900b944bc3415db651b3a593fb10a872845523ac112e66d12d965491a8196e3d209cb895e946443688624186339940a98a83114d88c8be870b89c6841cb1c36cf11249ba8fd2a1ec688918ef886329c153408bedb43ae62751e52a406c2e35ca048838d44ad96a4e5af34801a9dd1c88d91fecf72b8038d3f02e4a8a639942ce260192f4d2554c322677e4da3bae6f0ea195f791e8c1a4077d40c7df2761c7e0a247e54eea890fd3040519c259ee80e5da242a307c5a0d970ca4ea6368433d5653876b7b3c9b5aee48c6614646b9a28841256711224e66f49f0d3b18786ed6315957120343dda70d75a346aab7d7ed4fe4d3729a40d471d1a75e9ad8ac6a40f0de42a58914ac2d086d0760b6314a94a186ecfe121eba01ecdbc1d38fc9120cdef70b81b8ddf0172d48733a05dc40dd254b9887c5f47031a0d6934520ddafcee6623f65592344a61811f9ae7071c624ad586aa1ed2af47adf7b066772f1f0b2a962645cb236b6aa741c6129ddd2e23b5a03d5d867a7ca155285fe7b6ea2525f37e96d4bbc4d824d455396be92d4482845ef8169cc69d46749c1ee922ece81d91f200e96a651e0dd80ee024be331d5a48ed6bd9298b3962384ce033f9d28dd268c156b7dad58d3234cad22847a3bc5e713f528b7d47454a10253cdc237967b740893125269438a7c4c556ff66e2727d8cf49e1257eb20fc873974427f3f4be30e4026aea1438443c95ec44a5371111337a8034edc52624a891925e694b8a304df89074a3c5262a1bb9b098a33d5af85271c33c328a259db480dbf651bcf3c44eac31c9e64b16697c7deb31ea8f6ee612aeb162c2d9465a363c503eab675ef8c8cae113f48e81a4e9b43c90738c613a77a15aae71493283af3b8a17bb7c99015b7b5362892d1507ffde435e0706955bd9ab891e150e2b1b81435d59a6d8c955c4c94fc8fd5192e91be7a08e4e0845d5daa6233f28189274a3c53e285124bf4bf48bc52e28d12efea472b4a7c205791506ba613655cb1c41e25f62971408943f542e83aa6044f80534a54287146892a25d4c28b449d120d359a9468a9d18e87f07a48add10663f84f7238b9fe1a87dfa1717b26131db4fd61d75c5c445de0e64bd38756489a26d41a9c442fd0a5c7377891603807546338fde57cc2211a8ab67816c6d8bdfa39deb9dffb5caf8ae1c25240d54ee2b8ad53fc3c296d6d292d61f82f9a193f3bb174e050a734020e5b98f48e0a15e1e71c641e0ed582afea3446970a8708632603148dbf6a73288b09f969b2f4abd8cae1c0ec4152ae093e410a4d1d0e4fa5751d83c402a148375514d03c74b005502241892425d4f924d208cf2432be35cb6a396a179126546fa8443e2861dbe7fbab4c68a2b8ad224d9282f07f8e435d2becd752fd0d8d9b994c7a941c875c44c95e38d2747509699a9cc01e26cf2979a1394c5ee2ebe890925794bca6a46a1ec313ee433589504b90e2e95a2a995a7bdb9643d6f35885d452daccf7278d8cd4689da937289b26cbf66447241dad51bb4dc9a43fbed20659ea726c18f85b73d0c0261c4a5b0d27c3de562d64cc6208fbcef227c8b34338ecaaa783f973fc42fc40f387ce1e35ed9263e4bfe518433e92bc85187e9c91c713ab86a4c5f40ca9a3e4941e4b9454922139875b9854d2bab7722114b730798f166cc907dd854d7a5e241fbfc0617241c9a7ff590e2585688710fe184807cb245fd01774a4fca8855cc41869ca1c2ee166245f29c913e25d8d95ffe283923c0fca6a5e7ee093cf742bd1f580b18f74b62d87e828051317fa912c235e8df4c5942ebdd2d3adae1a93b2273655cd82d9753c79c3aa7f7ecd47ea6a5d2c8b4367a9919820a977b179d31c9e6bb9682715b4833ad24d8da5ef9b2cd845dfb7b3804374b252123d183ddda28ecf1663a49f62337f71a3c361f994927b94dca7e401250fb10a74c02f18bc634af2ade49faacec5fcb8bce49ba5fe74b21a40c8eaa672a7131512237576d5de9ec34e9992351fc25d8234ff1887ff2d8d78bed629d9d0a19ad28795bdb06a4d8d344d36b772eb794a95deb4cde17939e329ebfa819ac3066dcd614a94a4fbd3fdaeaef6823d546ea17c8b08cac1c69354f44655e8ccdfa42dcae134a1fbc4d89edb3617842f05ffad2d3bd38143d406582ea29fb84fb628d9d64ef26844c90e1a61f0d764176da092fe2aea645f759d496a0e0542a3484d1d69b4846d4b0ecb7c1a030bc2ff510e3f221555bbd1f85340268728621217514bd3d79034d5cba08608bb75d92be019c0732249c91425d36a642899a5648e92795d6f19e1304aa3e1506511b085cb671caae08a5db33af365a484fbeb6ae6c92a75d9b35eb63ac44e126a8e361ea9b2c411930c9404a0d18a465b3abbbb08877b795d351a6a9aa674e97e572f2c3457b5ac167048e7f283a53abd7d0469cc1b7007476ebf9cd5509f83e4429793b03154fe5bff09d73659a4d20b96fca688521e4aba1f1a94526d355213889794f2c053170184922d348d67a25dd852975b7198baa2d4f5a710fef31c1a1df553347e13c8d40dee043f148fea813495a8a9bd0c6ab280b3c14fe2d42da5a6949ac1337ce8a83801df9b391d5d53ea4ef7565bc3a14d63c0a178928dc7f8a422f0aba9f72bd18558a22d4d479a437ed150bde555298fde29cd583969f4563f0f1d7c506b1744853ab94159866fbe95fe54d34478f191c5a194c83c841743208aa36cf2992a706bdde0eaa98abf6048ed9ba9cea9aa6dd8843da9be329f96baa794eab3965205b729369bef947aa2d433aad8eef6b0ae22f5a239e49b955a061c1ab75014e960a91755f01db74bd85e542429f5ba09c2b326a5deb63186ffe31c7e87c6dd984cbd439630879f4ad3d44adda70f4a9528550e384ced516a9f520794526189c67033877a180e67496debe0da8539943ef3f5225e37fc30c66ce84a5350a79ee58dabc0d0490d8dcda1388476f65c88b53790107324189b23959c0ec646fb530887aa498cf2e8c28b920c871fbecbca67e2686003bc6e763cd31c8a45d510f2879c50ea585d7f7e714aa90a565aa4ce28554515dbea865235ecd98437d4a15f520dcda1a95fdba048b5a1537e47aab5b61b0d2b5294ce78dfe7f05308ff0d0ebf4fe3f64ca6da94ea2054c31cda51d368423fd5d57d84523c03fa941a58634829e97134d18be8b7e350bf6e9574c00346e312dfde1675eb6e48cd4bf026cd97e46d4885b7fdd10d3a791fbc6851671b3ac3a1084bdb2209b1f60612b1d21479ff7d8d5c5b754f753954d89423bbd50b87d203d2ed0d37421e12bb061ce0111374a69b9b2a36ed22b2224d25e8698222d2946cd4a1faa00f56944a512a4da90ca5b2c19669a91cee572aaf3934106a451a5e5461d773a70a9452bb3ba589d25e5c095b2f02e17fcce1f610fa1c86da0d455a30fc36901bb04c8f293d813e91ecc566699a3cc343377dee6e94d79f207697bea0f4a5fed82f710809b71fea4a26bc356e546ade377dd5123609ac9f85df06e18ae395a596b246d71915ea7388992da9b980ba84ab42e5a074c837a68f7f4be29ffc74906c61c0e19956a1d175ba7a4ba623edecc5d703a9de702839cae8cd9bec0516fc81e92b64890ede90a5485f53fa86d2b76ebbba7e036d48d36a7b8ff40cf72bd5d51cb2a2e90cb42235256c50a4652a5fb9256ce939a5ef1487f731a533e9873fe3f0c78da1c5a10c49e54b21ff57c74f01698ff423a5177834dad2b4d20aa4a9f4359515fa5258b328a0e03bfd04517a53a5c919346afa19adc1d22ffa63916a5f43e076233e6ca3b6bf0e1d997ab295af9bd23086ceb67e0f6a19aec3a144741c692a4dd022956578c484a4a9b511af147fc6ecce9bd4f9c0e88a0d295573623fe69379b6a49794e667e202add399c687311658a4f9e9f94ee9152eb8acab403db7aa2395bdec0f165a8e066ea1a54865db26bee3cce19675a4c7594a7ffc1484ff06872b2b99bb1b8d3f0e64ba84aa9acdd2549b445558233bcfa4cb0187fc22bd47697ef4fa1d2b300bbfc561fc28a17d751839a52dd11ab4628e6814c5d085e6fd48c73c1d15eaacbeb5898d1222414e4782ce463ad9101c0fb6aad79d6c62384cfa7e609443354fd2ac5a13747e81e6dc3216b7943ea4f4117ab12df228257d68ea4515b297bd10284314692b1bb442942e6c2c7ff88e6f59cfbd6099731c07e1ff250ebf43e34f01993e51a19ab1ce5e44a5a9bdfce25c366363ea4e35878b6b7c4d5e52ba42e933fd9998c1bfc0e14c252a1c63cb5ab4a28abced83534fc76066c91087a8b677ac9fa54203433712db1b8387940a3b211991a6ba1e2d0421cef9e344af2a8c2eda902e38d12a36f9c07495d235baa882c0f91d4ad8265794ae53ba815e6cab1bacabe0dbc13785bd06af1f03a1bdd6de2caa18f7bfb0d237b968be5cfcffc1e13769fc2690e926eecaf9dbdaa8a969b9afa5691e3320dd8225140eb5346d53ba6338d4c6eac7876e0f113e285d7d9d839281108fd1ccfba8f5b3a5a94d42b0ee364cc872e24b56074565f7602a47ee98a7fccf4fb81c4a7876358ce130ddc589a57bba67ecf90779ec16b20bc74ee300eb2ac6f75804632b5221b07267b985be22351b897e49913e75293d5c03e1ff550ebf4fe36e4ca6d90f492817d197a6dd4e204d9d1a375916dce4e77492d229cd210f48d3341d357fd71eb2955ba9a57dce71c5864bbea7362d931558e2a78949940d926c128204a005c33ce5b7668a10a29708ba1c6abb17e570e6af5a9e0d5d1475ac75ecfe896186d219154863df2c07b7f026850587e93ca50bd851f4728595be78265e69456a43286ea1a348a5846d7b458ac84d713d84ffb739fc4120b7c732bd50d97c254ded5a537bf945b0f585dfe13b43c04f386420331e65c694517f1161771544e1f1e3d2b4dc8991a6402eec948a345d8d82f7082d93707b42a342ed84841c54ab905c426643fd09510e252423b43bd2147533237f078184f5a7958195f3094cf129b552e8089c39a7cc05652ec1e17804699ab9c28afbfb3cc233aba4dad1de52a47c9b04425b91dacb7cbfa44833d794b9f97108ff530ecbe32f73f8e3406e4034730b17d191a6b189447111b13c9f399c06f690c7b44e99191d64f487a3cb93171a3f8522760b7555a88e8544a5a9771db693432d2c43d66fa457fd45a3a3a6258ccd9b94c2448fa3c6e0c40f17bbd2547d7e2284a2f95bd2a4c3a09e9903c28b0e65eef0a3cc3d36ae600e330f94794457041d9e092b52213080d052a4d278e64b8a34b3a0ccd37f620c7f99c300c52f72f8db34f2c83cabc7e453246a6a9944bbd614edd95f28c363a908ac61b06dccbc524677220bec61747c539ac6aad0e544f57d091dd475734e08871f106eef898456a1d1788934b0704ddf5097a4b9290a159241fc33620f25c083cfb7b625b77d5113837d4f52e61d1c2ef949b7c207be33991f6ab07dcbe9b61708cf2c03456a20346ee17714698d2d6159dda97f57947e83c3b2bf5f8284ce761bbfc2e11eee50549a46a335469ade3f60bfeeccbee6f0ec042f32079439d413771d84df07325685cec46f8ce42d65f3d0f883b6e61cea2688210e877e7e2fc2a1a48223290a958a98681b1b40a8b6dcf9108b3d8ca0a876d758f9af53f7b0849522da22668e28734c9913b8889953dd10717c0fbfc08e911a08c52dfca6223d2c52a64299b38d1cae85f07f8d4393a7facef8310eab6873c0cfcb75d2d48ed698ec055cc49a16a5cce1d931cc63a64e4fa79b8ce1f78194dc3df08848535895f09b1ffaae9de45f7f500b1a02a75171581e87a5694227f1a2056b623f5dde4671d2d4a26e9ef2bdca6100a74471845edc8806659ae09021bccd628d2f8eb428d3a64c07dd811fcb78025ee603456a4368dc423b46fa51ffa222ed52a6e7df977fd739fc3687a5b8bd44be09e477d31eec84f455d56f589a9e5e04b53512ad395804d274754399019216c2e1531faf33fc141f7d0dc21dc88caa50d1ab48183a7066f56228fbc3459a221be985688cdd4322c80a86bd41e9951a1b92d1d274e85a3f1d8ff121343b79ccfcd841260157502094186946e569327c928768e52ce119c9da9b558542a0710b610c7755a4f53965d29f41f84f3887dfe6d00e9aff388d3b6399c9f82ea2254d63a335469abebf5126ab15a97008699ac3ce19dfe77033a29eea46614b53a10b7a75e8be5f56453a07a5c0d0fa4c102b9b9c3a12549ae747a5a938fc31598a643824630ddddc356e674844cb585f14700d9f26a071aad2f7e943ca14294bd8c950c23368cead14e93a08f9b96967edb3de1762a4d9b1754dfebfe5f03780dc92ccec048f4c7e70965611696a456b2a77be345da2ac915dc4ec79c0218f748ab217bfcba10c59a117e2d3d3693ae79d3a56990a1d944216e7a08eb20c43bcc9d2874868d40a81464ca26c95e14028fbc949f622b663321bdeec256ce075065f6f17c8ddf72f287b45d96b84679edad8b689c588b42195a84c144253472a1b896eaf48b33794bddd82c35f740e7f2958ba2b87bf47e33a44b35344c9ca975a9ada356ef1d19a219a9a2e33949d8538e4d7d9f9af4338b37cbc305daaab77f8cd9e5a323f1bc51d0c43ab0aaf8355c8b351449a465c41f016e6507a58e93850c4244a7427ca61f60e3fcade03c2d90a256c8fc7b49851f681b28f70c5df57a89e6119d29e68b7d0106820741569f90b8ab47547d9c5af1ac37f80c38f935d38fc4b20cf3a9455debc444dd924f28db44da21dad3189c4f13d659f7590061c4ef022fb42d9e5afa3a8a5690824df1b8c93a68ef19c7ada6a85384ce9504df0ad02521a9a4479d32150274531d429c18834c5a77da8288e0be12b65df28fb8e9d0c99c3f3221d9d537645d90fca96d0f6e2b18cea197ef0b1223dcee91d0b0d84adac86d0285259e6ebac30dc30166c75cbee93eeff26871ffe662f3b70f8fb4c628af457b86db6348d466b6491be49249659c9ec51765f73e81581e203237df01726d1f1f1a66ba4e92c4e9a8a45c5764ee17796de42cee4ccfef56104b964589a86edde43dfd1a5ba1f8f642f0c84cd2c650fe110668f28cb4fb113ba7dc21e32e7ccc629652b08cfb02bbe4a6a45fad00af213b631341b188a22e59bf805457a1652a49b38fc2744e9b73994364aa682f19be34bca73c34f319388b255dc12234dc52406d19ab04994680d3fa179966455f642381c8f904eccd671cf7e9bc3a80a9dc53b7eba838663279981f224569aaad84f30f9740847bd532faa0a12f7929d1f39c8e159202199687454163a05c6b041b3374465b24d1a3e52b6852bc9fe61b68d1eead37dbf7ac6d33152d9b1d08150ba3ff113939f9b08cf2845baa531ec9429dbf9be31fc12879f42d57c59f0881cfc0d0e7f8ac66d98b4d7a1c67098521c7611b6e68768d6d3d254a2354e6d8d3189224d7996647b94ed071cb249cc0e28ebd7e9ff1e8a927e700ae8e21d3f4f7724713e41ac5668fe992c5f78fec9af9bffc834bcd2ae60c40f94651c224d1d152a9a4843c866308176c0b868aa90a0b18707d90d6399a27107e199fb07159e59e8d299901c356ea19fb5e7fbc5befdf6315228d2b47b597e42943ac87d89198170cbf1431cfe2c8db1582e27f11beec998a7fcebf84efda696a648e85bd11a59096527304cb4861fd5d90c6555028327d3585542b279ac37dc5bf81b26312a4da7b18e1fb4a5ab42a7caa2ae46e199e7ef1be39cfc5c367e8ace4b64059b66cb2a1b4569b711ddc14af4b0f099cd01c2db076c2c79ca2a340f17315ba06c11ebaa513dd3455c7a751552a49a401f42be2902a128527e866ebf87618e50ccbd2d879bf05b272cbf6ab8becae1964c4638fc88ee22f29b40ce55d65b1ee7f1c670185cd69ca7b3179248149358a9fa2ba1c2e5a6fc7836d23437d62e22ca913f0064fa70d363f5a73814cf2d4ad7e43a469a96c3d5e7334f8171a2a466082dfd998e3445bfb64ae47f49f959fbe0ffd2a672a572fa31298a91aec5c94dd0768d2164e7f03a8d084dab43b973ca5d50ee12d533d8d3b7802b6c62a45a888621341b181a45ba658cf4ac49b9abaf1ac3a8adfb412fee9b1c6e00f28b1cfe0690f2d45f0de37f3ab59e733975fff8693aeec3d1dff75015652730ec0d30245a23d23477a3a5e95825a0f9ebe48c72b71b6fea0f30b9c9f173f4aa684b3c772282739e72cf472f23740e9ec4fcfaccf35b81446dc5c837b65665ac91a6c93ae5a6a89b91947d6989654d39b54b4f6e4eb93be4849edaa81f64d16114a94da00da19db5dfdf4e91d6ae29771ff7748b979a7f134df91908bd17193693bb72f883400a87a69eceb88bfa346c0e1fd01448a4e9ba688dddcacd48d316cfaa47ed22f2ac9abdc324e6165b71f81d2c67142f4d63919ba9065051c1591ebb76404c59f4d75d112b63e84bd630877c843f1906d01cf47f85cfad7b45b92714aff1e5e28b76935259fb3dcab1567cc1e226596ecf8f39a3486d0205c268d67e4b457a58a4dcd258b95faafffccf39b481541c96c21bbc7c89c3ef03291c4aab223922a7a1037dd6d4d9cba1439e98445b9aea684d9c491c3ff8d2f455bb88ac4b9943946575b63589df1a49edf8d9f2692e952bce3b5351152a8233224d8791cff4b4040d49539f2e5de0163189e20bc498ca21e5dea8dda6fb57bd79963742da905fe7de75ef195b919a6edc510825462acdb9b757a4b915e53e76c82bfcb631fc250e79581c1a1477e3706726b52eb59a97c9421bf15e9c29922ba9ec854ae89b688d74dd771218d7ea390d69bad4d2f4c997a6cce15c02a7f5dfe730a5556898ae38c78f6254e8ccf3db52840fda5e9f19a22302022dded649537c78f8fd8327ca957126b93dd8c0ab14209cb69033cced53ee006db8eef675c29021acdcb910569e0161346bbfa52265c9933bfc6d08ff5b0e6d452a2713e650c6f739fc12938643e3224ae4462fcc73383cc2ad0aa4e94693c853446a6b5e8748e8e7fc6cbe7008abc873ebe49739a46d1d3f319e1a0c6b8840707f3d569a2662b812fba6256b9c34b54c25667cee940ed42dc89cc0069eb22f9aa6ca019dbd51aea21386afaa45a514737706f110ee5c479a3bdb2dc9fe8f8b52835cec39afe3d0140dff1c90ebe044be3bb2e44a8e44a7ce70488775c81b89d64413184e4e5fa235e86bcad2b41ab88858bfc38ffc1ae5fec02426234985b5d234aa42752c74e6403bf47bdbf81f8891929ec59ff2163295f8910f61659fae935499d1aa82d0e8e903ba3f4daee8bc4db90675aed01a581a40f1d3cd760bf982cb3010caf2c2afc648c70b2a15ff4d08bfc4a16debb639f9380e635a2dfc0e8d8649535217761163a6144c62534bd36d4c223fb08f7348608cbb946b0559c4b93f72d320a7ff5b43652fdca4422a5a1983a117dd870f0295b8dc7d142ddd8d2e72d1244f1bc9ad195753cff85c1b9708a1d10efe68ae8b74057398eb51ae8f84a15e61b80c1215864003a128529da8f84a1de953975a8d7fd6186ee0d050e79fc9974f7e4b0e7f194829fb90508d1c51cb9dd670a89eac6212f91ea3dcb41c2430d699c48faa92a683c0457c1ad37913af7fdd2492ffaf850fea661311e3e9aa50d231e4e8c118af4f29fce845936c44ac34555b622808873ab95aee534e65747309046918c55c52270c5fd51a6b51a44854442ca1bd67d3971469b945b9d4df40f87d51ba01bcddea57bfcae1ef0029ea48aa6ae48824f1a3711a7098c63d630e8368cd7a93681218fc08674d95cb84a42973c85f1138fd6d2f319a54a0786f30d096c1417c1b28db8d68495224e6ba797e4169c4244a548c1569f25271d8875b78fb44b92ce57294cb53ae40b9225ae0991236a3486dfc6c63f8d4d1dbc56caf48f3c4e7f06f1ac3e0177de4ec0bf8d5b19ec3d5f0eb1cfe2890c64534ad90449dce86c1cc33b370d0d3d90b234d25a72f2b30d69944f667eef629efe90550224d99c3db0730b95b2e71ebb126fd908a73fc62a529c539789e5f3bba5d364202609109a4572ae6c780104fa81a02a4a525e527943fa7fc05e52f69dec10a4356a4ab2b84be8c228d4268777fda5e91e6afa8dfda19c21fe7701d759bc77780f439b451fc1a873f84a5bdea4a1f1cfa3d5afc69a75d2c4292d74853db24caa2c47526f1324ff96bcadf84a4e96d1634f291dfcd25525cbd0bc5e524480b75dbf4094561158a1b19e7f5e90e17ceafcfd4b6aaeab83b1bf89df95bca4fd5bab03ed4c1d13912f7ec2bf25fcccfb097a8a3484dbb277b0c965a9156aa5f5bd954bba66667072df7b3101af0f4648bdec1adc70e46d2e2d0d0f82d0e7765d2751113b28447a5dafc4ba30b2089f2734853c7249a4589eb4c220baad50de5ef108ae039c78f7f6d1255d7a3fcfdaf9a445c1037404af1dee02c15ad80d114392a54a4a93b4ba28532fe71e03d8c99ee7cc7f30f947fc495b94e2351c1ba945fe417947f42099b74614306481215853808fd5d44bfbad6beb4f80e84bb71e87fbb8ebacf9eaa3fcd6484435d8e98fc2114b7c67239d155044bd308d0f31701686d609179a1a529cb1e89d68849941652b649e4f92126f141adc0b82f509e55d08b368986431e4c667e199ab53f3b7444c451a1293ffd10be7f7a7d7df4a0a342e3bd3ebf443ee20aaae79d3bdd4fdee9fd166b7c9317d8384df216d719cabf62c35056a4b2a84262a4523ae32852265056369918e9f6fd484b79ea7e8bc36df10b89cccf0af4ff1cc8751cfe38849fc1394fe9821ebdf06aa49ff7ca45d45710d7c817ab469a1a9368ba9b3a26512a4ed9a561c7e69235d81be5dfb54964cf50a4e9ec0d406607a826597b29bfc521ce5fe766c3f72f829c06261a0b0d3b78fa9d928075de294d68fc3f64dd6feda606733dbfa2c9291e406c81f36acfa6d347ca97e89e9f5665caefa1e78534c9f7fada2d940db4dd61c548b757a4cb2ce56362333f620c4322d32e67779a06fd1b406ee0d0da0fe86f8629ac53cea1ba8812aa49594f32bf934af7037e85485359a4efe4129d45186212db131428e70f22d11a85227b8cf9c32f5dd32f5d7dbf8e2cc64645de6fb2fc61baa42946e813b2f1d254ade58d99df2a281d7ccba66ff24af923254d8f0161996508937942f953143fe82e6c8b2051610ca03d7653a4f90a1d9fff148438124bdda77d9f7f92c91d81dc86c3d11f3169a4e93c2573480c60e8f92d1692bf0e7a58161c6b124d2e31b454df37892b7ef09f51beea466bd0fde10c76325ffb2514719f64e56114b9c88a9e3869aae98a391895a62ae01c33c555d31afd3a778ab66bcce12485029a0e2b73d57826dfa07c13e1197e6699acbd242a243de858c2dd14697241a5a79d8d61d8b58bdf293db431f34f01f90b4ceec0e16f028995e0da45b4c233d2e09dfc69943247a87beba7809549e419609bc468c0464c22d25f3ccf5a6a65f044476b6e1fc0213a553f50bebd519d7e63f004d2aa3b7c5c6f0f1ab193b1d234ac42f53bad83c1034b49d30887feaa8e7c07aee0fc8e2ee734bca4bcda5734dfa36a8af27d28d2d54d102335890a40181946916edf21bf7547f9c1f610865c3bd3a82ed24c609bf1634cfea86a551c2e23fb10c28dd9cce10f02990c5e88345d0536d077110d87b68b78a4a3a6fc00b64de2be170ad8040ddd7c93785f403f457bf9854853e6106344f9d8d509df1d5a9ac27c6d81dc2c150d90ead686b3f88361de4816acc44c747ef3132bcf119e44373518c3db05be85344d503e49f9141655b022bdcc8714a9583f67048a748ca7e1368a744de98ccda1ebdad94d3da23d047662f2cf81dc8643bd93c40e1c7e9bc9877ec0a1f411434ccfe770838b587a42fed748d3ed4d2292d1f768f51d3289596d1279309ff9f4af98c4991717204d457d3c1dd7890648d5c5713f360e39897ec54953862d43f92c52f6e71ff009994664297294cf53be804515a248f942b98a343c76dbb32975152de6f61fb211ea368f7f0ac86d99fc944343e38e1cee84a59f30d4af552d81c5a1eb22ead6808e34b54da2e9f92d26d1046c90c350269185d6a24079553b123589cb3c802cfc06847e1d59549a467cbca8e02413209da7ec23e69d91991d6327f5a3ade051618cb66bb315b285b2c77d614285732a5c84b2f692a88885d028d22fed22ca8ab493096e6ed0eb71b8712efd334cfe0e90711ccad66b3fc0e17670ea3fa75e4bf622c421c5bb8852f256b8f4a58e1fad899ac44a35c624f2242b5c51e13ac64bbc39038a48634468f9993174ca65b48d8aa98c49c5074895b275d18a788378bf72f55d0e73ea040a37289d292de9e61e5f19c5c22d15a6ba15a251a4c62d646d1fab48bfd482ed7a488519fe23afb2fed1fce914fa0b267fc6486eed43fe3d8791a193cef26d52d7d6855456d66f921b71114b459dd037397d4631eb0526d156a78e49e4a77e61ae5b0cdb81533689952268f48a54b8fb050ebdb825ce31d2947cc1192656e23aa918e4c2d254c5f113aa6adc3a58b84754a6f04085472a2cb067d3e44af5053ea4c293de3b4d76f365456adc42be74326c456ac748b74c541478bce840cb6c9b34f5b799fc1f01720d8701187fc2a1bd1dca7262fca2e0618fb968b988ca7fd031d5c232de249a1cc6511ddaa9db41c0c636893cdb0aaf58a41f1b38952d6fd962fcb4a3d8943a324cb2f0c18837182b3841972ac1ddc61bc40c503dc57d08dfe00db2f52bbc233a5ae0231f7495c642a742890a65acb57f7fd76bede116aa6c215b42c321bf96216ee19714e9d93e15f64253dcb376cbf96d26ff6d20377368fe8d5fe6506feb677f6b95d1cc3cff32b95944bc6e14e820e77a899b0236056d125717aadcb41574ddb74d224bd38b8e76147f348dd194d5b7e1dc7dac34b504a75384915521e588d7b70a2e5a705c95ece2c5f1397a5b9c5fa0e54c611f7fab7080c633de2915d8181ed1c7bede2e46ea488d5bc817cd7028c356a45b66edeb732a1cc7cf6f4da35de7f84d26bf6524ffc887dc89c35f0532e9872efc6f259f16085192ab1358c8a92f4d674a9ae6293089fbbe3ad528fabd1565531a09d888493c58e0d95f38a1c2a90ad858e535d333a0281bc1f36bb493fa05691a76fcf06d6c58c5cae2041724569afa79d7f0712d4da950a1bb337ade47f1da2c4dfd032a9c81c3ce1475a48b736c1723fd4859919afa35464e86cda1de386deb18e9e2820ad54f26b7673621ffff1148c5e143641bd0b51cfe069609bf9b83ffadda25d38d91aac6bbb6853462354824da390cd33543da0d4becd4a8533189fce02fd4d0eddb9844591f2c390c761119451e6c240b3f89a22d4d438233927ed03e5e5885aa83c998008c0a74c548d30fb6780d349b6163c8de209a7327a9d004f6851615da6885e8f5827ea4d2fa4916134639b415e9962dd80a1d2a74b799e26b68dc12cbdf52ad7f00a4cfa1d96ac28cad38fc112615877a5eaa23baaecd3280e2225a1652ee997611bb0bca7483bbbe8d3ae549265ee2eb900a3d2af443390c3b60c31cdedeff54bd5b485a87b5a5462e0ad23a69aa44acfbce68429f3f960feef5d09ceebc88f687b70bba519b5ef11d2f0cb09b2f2bd2fb0262c8fc60e2c793c9161a080d8a2c28647921b2f657349c6e01215fe1d19726ba1fc2d9bc56ee7f10c86d39b469342b71771c5fe430544ce7effbb5c1459cf97de0c5bca48fad720d65128d3a353dddcc96893c9960124b084588492c24fc6d837d756a0236cce17c0e77b1b0a0821b1dd97900cb2833532fbe180d17272e403afd3c51a1f01e51817dc2343cc3490a10b2496cb256cc50214bc372b0a5363f984ca2c28150065f3d40b87531371469eed3184974baeb10c0e734fe8b40ee601ee338d489846f72b83d968998221e4b76da0630e4225aac52ab817e8a8e4974d4a964f6d924cabe34fcc8e739a74d226356d814b06114f97521be87ca2e1c321e4a74449173bdc13869da94847ef4d76768611a3a9267cfb04845a2a2a797353184a52515c7549c6079a16ec1a614a94954c442b843c38be239152fbeca616860f2983e29ff6781dcc061e24739dc307c0e03177168fd936103380b056f42ac162fe34da2d35ed14e27569eb5495c66a87885fa12b32d94a028011be430e61ac5e275ec529d5d38dc5e9a4ebd980029ffbaaab6097328ed18fdab747a0fb7b07883cb5bbc45c38b99720efb7b549c52e739680abcba08252ac6aa2e37c4a152a4fc2cdb7e7961f6898ab3afceeccf69fc9cc99dddc8ff8cc67f81c391e6d0774af5a9fbb25357fd4e43d2d47111d5837f1fe51a8e4974d4a9bda137d46941f73865835078a5c669a04e9d74a23689731cc9b95668471425ec398d485355f31db593b101d21869aa1ae168f9509cc3f4dd3ec12815efb0daf0791f35a5c57b2a3e608daf6c53e1262a1efd6171681215ac32b6710beb736ae5bf300d76a3f1ef81dc78aa3b03b99ec379ea0b17f19b1c06c1a184e670ead91cea259e9b5dc45211dda0eda960a3e8a853899df2f41293c8926c7543c547ecc766ab538362a04ee738588c6fe5f06593a824807b3c927ef0a56934402ac99ef052a05942ef7e517c42c9e879912a052a3ea31954a18e6c61f1858aaa8be4ddbe760b255111b8853e87c624dac5dcdbb88587ac845f779f129fd398f839207795ac3f6a213fe3d0dbbaf2fd3b433a3e04c1a1942d3bad15686b5c4413472dbeb913623fe228da0b85797af1cc132ff1324fc577ec74bbf08b4e9dd8a9a078e5014594bcfd80a38893b756c73737788333bb2986a7ef9ffaf5c8d4516da686c748d68f0942947dc2b3b992a67c89d8189668f608b7d06ce52b8ad4ec558890b2c5e10ec5dcc532f293db5b981da6bbd018bb63cacf03f9ebe6712387f1fffc6f8c8455d73af40598969dc17a50df45b42d64c845acec53712f34219cd8a9e328ca827db6036212bd1e15f775c0c656a726b32f8e22a3c840f21bbe8d627cd8332c4d7df0bc506ac720a7f778b2e7933a583ca08b051df7b0e2feaa4ec54364f0ba47543c22ef10b5b5d2754614a9242a243718e5f0abc5dcc5639adf6f1127ff092637d0f8c7407e8f46c5a1d9efe5530e7f8bc984553f30d436306876e0afd1d675fa2987cc50a6313970a7456c1ac36e763a5113914de2926898a0e20902364e66df2eb2111467af78cff750f48b45872e9caa9241fdb3233d394470865b5a36653bfbd5283c8d864a94b2feac20713fbf838b787a4cc5332a56a958d39db96545c5c142bb85129b8972c8afa5ebcc968a74c18e687d0b087f94c9cd34fe3c90bbd0b819488b437b0326b306621beff947c80cf296099f437f27f738173144a62d561357d857dde1709da368d4e96089903d9bc4c6848a0d2a3681a29dd98f3a8a8c22bfe6b7e50fbf1341c5c9e3529b2508a358e4941b998d1e24e9c66d1f6441586c51a645c5364c2273d8df53a19a0e15bbd82b86dd42a95f3bce410818b7d0406838b413155b96ce147b7472b89debf573643a349add8a7e06c8bf308f711c1a1abfcae177b00c5cc404e852d4690ea79eed2286380ca4a925568bfd189318cd28da690c9e85ec20b142c36eeff7541c60a585761423eda40c8a47298d62915daf6d83a8c6c1f3c14b451ac68efc83ce844885d64c9b83ec0d9a059c6536836cd293544c51314d67477ab38aec0b1533f456f79b91e675d719c72d743814455a5a6dab4891a8c87e2328f253d6321198932f03f947e6716b0e25abfe1d0ebfc6a7e5222af09a3a1b960d0951bd7c3b20d3ff4ceb3dc51c75caa1f9319cea12f0d87a3751a712b0c176627b54cc53b1a0d5a9e328daf56e6c126fef703cb3a462d1e36702b9a5301abca9ddee212423d5bf938cf1f1ece5d131d2d49f37624e757ffe245f172c2f3c3df668e2d139389c5c51becd1e2dbd35d1ed42b2852651216b0b1d0885435d3af38515151e5d6e9cc7df67f2cf68fc6bf3f85f70180fa7bf10d1e7d0501736809e6d218d1ba90bbefdf7781409eb39ead4ae7793221b9e7cec26c97a28afc7b2157419479151348ea241915dc42bfe5b37389eed33941e4da959c23aa900bc91035e64a8fba47738b4903b66c6ae43c8c1dc4de8ec31d89d4ee72d46b2771a1469f64d38a4ec018df6a9724917552cebe896e9a8ab8a48955b286b7c4db69091eb76421c763b5f2d9df1686e29d21dc62f3169d1f80f9bc7cd1c26fe8e431efef50a62a4818b1892a621eaa6316ea44777e883b21945bd56b81c52a7ad2ce628cbb6bb3d8feeb53a1547d18ed98451c450eff1e8c1a3478f161e3d7d615256f6a8fde0a3e8cf80e34baa4e838de8f4c106d52f81a87db04a54eb519e9f02cf585f3fadb310f5e8051867efd88ba56c05d9d1bd479d2dbc2fba6e61944349546cbd7ba147af1ebd7d2587fe834c6e43e3488b8ecd40fe77346ee630f993987d6e12930e87c6218cba883675515619548fde63664c6cccc64e639cab4d69d824be0e3d5a79f41172144d72dfce64088a2c530fdea8f4e251c9434f6cc6789faabdcfeea2bacdece0318707cbd0bd3f9dd3f8842a17f64184641afccef02c612cbb098f0eb029051b7096ca8f47b4c70f85438f8e3c3a266f8faeafe9f612198b45014f1928520b421906c2afaef13dcb7a74b27e127f1fce9f6252d1b88d79b40396213e7f4eacfec31c26fc38edd0262a223b53510b1975233d3a7503a751146d4791d5a97494ba2c2993b8a47386aa42e927cb51b4c2a7e74d8fceb48b383da1d5823ef8949e69c6bfc552b046737e43dda38647fca2b5e9eef2b7072f541b871ed86c1e5b1f54595a65f7ea9dd3048edb2b45f96b8d9f1a6d9492c26857d439743cea7ad4236f4e7c31c64d3a7f6cbed49a2f877499a1eb1b9a3dc05df4fa5a971a0e7533d2add7f8965b1ef5b783f0fb58fe08902357ac9a6546525f29cdac6523401d42fb75d75171388b9408f91cea29fe471c0e837c49383013e322468237d1f77814c9250a8776f8d4a068ab533617b25fe2dd1e8addd8241a47f1b0c736d0239ef7ec958d68f94a4fef74d9a2c3735a9cd24d1a4c7ef0c4670395a4db8be60b73c8c639ed518686474187585b70f2a5aee460e8ca9360174a9e07876f54ff80b594cdf0e4a69c75a9f64627afc13bd3ac84f99fcd7994c773c12be0c49ec71e15c8634898a806bf100ee9f19d5edef8ace8ba4dde3e3f2ce8f9909e3fe8e2044f1f3b51b1a522f5881e4fc246e30f98fc0e8d236d18053cc0368a19b2f5d82e7a75171a7d0ecd8470511cbae9ff5fe550e74b920e51b601d415dee1c08c2356c5487a3c479cf21a1b453b7c6a3b8aa24e1ff75507fe26eaa1473cdbc69e37f1bc73cfbbf0bc4bcfbbf2bc6bcfbba1c7b186f071422c1a794c2e611b27fc9e5bcf9bd25d89962c08cb9e37f3bcb9e7dd79de3d25ebfede4ffe95ff38a556890e2dba78c01be4c7cd18af655d188f7de6f01076529ed959e68a4fec81ea49cf7b54357705cf5b78de93e73d375ff829a34ce269aff9b254f67004937875040e6fcfc9ebd2c5215d146891a69b7dba9fa3e4cd53cfa6ad207ca1dcf34ed1c89f62723387fedb8cf513f6ec96d9b2f1263fec640884b245fc77bdc72fd018e6300a6484c398c29c9f4431e96bb088ec8c8991465cc4c87b3c6f890a8f4f51b4b76d2b7dc02cb0495c5da3feeb9c3fe4d5f3de3cef9d16279eb7f23cb677250f68ed0142368302e1e40de32d4def27304a6c1b674bcfdbf7bc037a7ea7fd0b624e2e339e77e879479e77ec79273ab621b3642f8fc08c6c8aac75d1044672ef597f2b6a96bfd64b08cca8777ade29bba69e57f1fe5f75e7d59cca0eb4ebfbf3334edfab9c439d2b70c006279ccddd646000639b60a8fafefbe9566b349ac880edbdf7b7aa8bc22ce28c9e793b49822b806b801bb1c437bf1560b72727c821eb617b722dc0123032396c4f76148a288cf2bb89e0517873fcc962fe40cbd5784774792af24e6ff1b272b722c4fa29999581d46f4e0d4606632596da7e973674e82814b310fe318d051c6aabbc7dc7ef901946cb7bf713499795216251a511e85f5e9468068a8c22724819425945f49694cfa8d545ff8406e5e73da083070f008f62fc0cf00480b72f00af006f04219a8da0a233b325ac73a27129bd567459fb88ca16c0368d72d61cff82983c455ddd01d805d813a385b80e284f73bb27ea8f89f8e4f459dc76283dc3b10a0f856b21eebaa28f711ffec0033144a40f8164f0985843e5b6acf664286a23d24367246aefe2b3dd9ee09f673187931949e24c88f75b61f5e94a815fafe78aaf85683d88d101f9e48d27aa3762a81c7e90a780474933798e9f553c58ff84c94821e280d94877f1e132af6259ab0864b6c1f3ef695cc561053dfc4d3ed9350db7b2ca9614c01521a29aa0202f936039f12a5269142581dce04643ed9e72898b6d6abf7426d402363b10f347b1e8a16280e582e581e5831580d505ab07561fac10ac016920b12721fc5c90a148a2838ad1e3744e285a43b04660bd0bd4c6f737921d70c4c0133d5f7807e203ff770cd6077178e1a9f1c486702272cd861a613c32d035bd7d04eb13ac2fca122187d6042c7c267eb7195818fea137fe24393c11b0a43ccd39faa8782acf047ab093397188deb244b13d699330a2240681f818894b0cf67cdae2627e47cd370b871a1bfa67e4a5072fb2c44f8da6607dd3663515138f559834ff34358d4338d35408f79618e87a5f776d1b0019cdbcab9a59fd3d1a5772d8f9450e2b81aa7e466ef857dce0a6565294afd548877245c6dd29588b047e7851e7f40c7aa12363ad9aef632aaf79871416d26a115dd10bc4fc5ad8afe2037db607b0d02345006a60d5c13a010be13c03eb1cac460c617720c68ef8bca2d0d1be240ef10e65535fc142602e857b2ca618582ec4a945ab157e2d69f487f8864db05a605d81750dd68db83e93dbdc07e26e4caea91a825123eefd12ac5bd179a080b0df127d7ced1d586db0eec17a10ce908c381c0afb5db49e8533165f1792c3baccd36c218a9443b21e9146c9a12ba6bee89ed1a581c5107d72744d47bcbcf7a19a1e45c7ca02eb09ace7fc693ab903f73db320a0f9bf9ca2649f90dd421dad654de751f0680c8c7e23ce30e75a451a15d899cc6ab8fd0fd0f8dfe250c2c6df75c74cbac48b79c41be2edd30f805634832ba24e1dd0edf850bebf0052d7ea2a5f945a253fd3e57b5eab66d6a1d186630e1560784a92386f53cdcd6fd2001de0284796de28496375c0da026b1b2cd4db5db0f6c0da07eb00ac43348230bca25b8410a3440e20316274bfc03a02eb98a84614dd06254564084a0c60e888cfb2016c0b6c1b6c076c176c0f6c9f50c45871d95428e2383edb063b00bb4b6bc90d5e4972ed1ed87db043b007c2f205e0a56724d02787810a0e97751934de925f7a366614c5c70ea1e87c88e1adf0f68587cee7037d2b144378a6f5a3bebf456328161ecdccc0ab151eb4dd2db08709bd32f163a24c23129a69e33415dbd4ce79025b399071ce59d2627ee2ba4026c6ccaac2e31fd0b892c3ad7f9cc38ee2d0744dd58ca7b7b60a14f7559123e14bc8eb196f2a9c7e1c476db40dc6a98c73cce6529e0dcc9288a3cd9273825007be17a256539285cee7cc21d5b2dfc11e83fd4121a2fd09f617d813b0a760cf005dd3cf2b05e108c1f8067b41628851228ae4f49b3cd58b39d84bb06b6023159e14c3232ae579289b0bb04fa8226f9f9270612419e0b5e315ec33717b0af639d80db02f003576ef10eca66823b12df1d1c5f71453fc025762e0081b2f2bb7c4a137a3e0109d52e75d7c35c5702993a5f820feef3dd8d7c2db451a6589ff81f2a55648c9d25e8732342c86f8c552624835465f5c1e8ab727ba2e6833632a1af176aec9fd4f951148e6805e74d4e34540e662b94c360fe45e02aa00a93687ad587b8c80fc551a5772b861aae687ae697427da108fa953cb2b6ec7ed08ecd5c46b4c45474a576395ebd201fb06ecdb2853eae7d40c4d495cf84a1271388e46b4cceec781ec47f1da1344fa0e75056c1ccd0f603f82fd043632f902c4cc1bb227ed5b0c90ed90989c5c508503f944c7f5fe84b05ce033f12ba10bfd49c5f4e91e410e6760e39bef80bd0bf61e95f55087e7f8fefb621bffeba03d7915e879da08e111d8c718605219c5b15072c1b1c171809609961cc29d724a5b975439b470d422722331fe06c713ee99700f0945782449b4faa2f12ee6f8db7d31ac9318bedf912f803f7ff616af5e437bcb7c8aa6239a1605a886113fdc51c0fe27e9763e8a2693bce0bfe19a3613a056a171d149b4da523522af12b812c8c14e9eafb8aa13202ca8ba6f44237318259dfe250e25721de5e59393d051d4694dd3291cf63c135a176d899172475918e396880e38beb809148a9c20cd95448c12491297b1240e1e2961335e8a564f8c6a524feec0092865ea74c1e981d30727046700ce109c11a0044908c11903ba7ca18c15d13b452ce7bbc2ffa46a87ff090eda17f088c737070f9c29383370e6e07c8b69482ef1e0019c05384b706ae0a02fdd04e7049c53944170cec03907a701ce053897c41e4238da15ee2939a520a872282b16edc95404be18b854c48777516f138ad63d72084e532c9ec843c62b02ca72b741aef8b82ec3634789e1e8988e4cf00a4e0b9cab1484ca169db8bf87522676e27f8b50347ddae5a5c96155266b4653eb6027ae04560732676191b5802c66721d1a4d0e0b68fc1b0e951ba9c1c363aa2faee46f7462ad63ea74f6656a67b25b86479a5a175ca7d1f07d2e71d45ec799520c1a5112f55a35e6f26d14254e29718a0152e3898626d73066bb9465f9d8c5310dce0d38b7e020906d70eec1416070583f81f30c0ef289a3f643da9b18be8aaf5762efeb458c518e302694b50d7ca48f08e105628b72b3e39644715bdc2363327142ad678816b28d8ab707ce3e3807403de81762811f7144b57be7182c4b468343b2480cc5574bd8ef24a15fa83328e9f7323844bfb443a99a7a1bdf9e9c521443041ea35f147ce78b9c702d86f5ae5a38035f8ec7c717e26244bdacb946b059c656b69d7c5c534c32bd49212da2311fc8452731e2f17417e57572818c93ae9bb5e654d0c96a346639cc02f9c6b9905f068f363fc91c6808c8063b713991a9d3ab0c9b8950f6ec9553f1a6c0d3256f7570e53b70b27b7949cd30ae954cd81892480b642425111d3354061c9a28898844f04ce5b5a92f00af1723706d701d705d703d707d700370bbe0f6c4d7409c34c0ed138168cb6dbac510f1eb99bcd3494be6545f54d00847e086e00e44fb16df19dc21b8f8ceefa27925bc6f7289ad4770c7e07e80fb09ee9718f489c3700aee045cbc45e19d910c2284ee9e70f785fda422c3da3bb7958aaf0b724a510fe1012551a2f84ed91a746dfd0be15fd2070d1ee85a834e388aa1256748e915bed1691f3c813b2f84908d0345c5a15c25a0084593495d8cc9c49625402698546323724d57265a55ea480f922a75856a349ae5378e8fc2f215902b71a8edad64ddc55257f34d1d1aad78d20a8f6c7c99e4239b0c02590353d4711b4422cede5615a784dfcf4b15d33900f75b9513fd2861a317c86049bcdf17ada1eced7aa3b1c8b5441ca0bd2d31bf21071263b920a0410cf7e02ec05d5292c6ad815b07f704dc5370cfc03d0774f66a2d702fd0c4f08dec73416d37bd193d82042296a34bf25a3168aca3fee165a2092ebee40adc6b706f28ad8a1fdadb02f716dc3b7051c4ee45b7293bb991c007a06d70f6093f7247f7549a94b4b42dec172d86d4566ae1d5e13292c419b9a61819bae754ccec4ba99f3f9026bf4769520c8f7917448f265e808b1c3eababa4692914f1fc6a495c4a0e539a99b1446c8986c05448f324878d95ac8274d261648a46358a4a06fccf84315b120fb5ea16d2f8530e6333c1e3cc55d28548f0c66748c5eb05417c22388c82c0e565320edc52c268c481eac9e907a312d3610fdc97a4771ad5305812f5ae6c24894023524b22aad3d79242291cbe9309a51c6109ee2bb86f94a471117264661bdc1d707701c1381d88fa9798ef294325b4cec926c4276149de6948c1e4e7b7e85d8b7794be7d700fa84cef1e12ed2853e82bce8ec145d93c064f88de8020f400f00a42496029839c237586f488f4480500952b500c31324431b47ab2784885118a12cf8ec4e49362dde51dfabd949e698c68fd286f21dad7717a068fc3f2465c85e0d93910e662b9e824bcd3123fd68c2d3587788a8b43ca5c2015fc9ac365c67d65027543d28a94c9dfd09860d2882a23abc261673578ba59362f984ee08767eb72a60cef678f389f065e73c558e43be18ec671a0218cecf1673d5285b4ae32bd81e780e7c6dea9da39f826924499b0e1bdbb6d3922dfdbb124c2b918ed53ee74bcc0e08ab4a53602cf03cf072f00af4b7ae8f5c0eb8387c37700de103c7cc2bb18fb68248f5c63f41c22135dd3cf2bf0c6144652f206c4b009de07789fe07d813711bd3792a9e70e78532a54a00b8a21a53707f42411b611c68d2e150c511555e1fe44d52ae0be3d3915b69c63a13994924891217eed1990b0a3bc0f7c6a57189e50df82358ad23353f248eb78ac1680feb979caca0dcf9de19dd2092df76699497e894ad83457e67852402adf475723cd71a83cd2b702e7f0dfa0310fce2a1cf21a2a7a958748f1cc2ef5b5f0636bb964784745f976da696102a75179caa48e3fbd280e8cddd74e9c4333e381f71740d272bdd3d41634a809ce218dcb915c851e910890b13a5514becec5cc22efb41e0a62ef043cbc458f149f700e5e033c04e6123ce4aa05de95f86e8ad9940cc345c40f657086b236a6fba887fe9e08af297f33a4b5fdc1bb06ef06bc5bf0eec4cb58ec9d81d706ef1ebc07f01ec17b229f13eec81d255ff48edc51d94d4a5ddd80c1e79c6a866091185286863b4bd93a949e813149fa6c97ba85460724f5f33bca4851e636f248f1205878a09ec17b499fbb942551548950be86e2c1e7053e72fd586d7882b48a66d3ada540aa6a64a227aea31ed4d326ca2b73ff2a8d1cc79572a8e689749404e5361c1510183b9f2902193fd3ea8f318db928b2dc2582c3adf85aa0008b82438e451361405459e2897c913082f79ae39df254e054a71b4ae2f737357991771a08e740ccf6d157a406948f5d6a4c41f7cfdb010fd503856b0b3c7c73fc7317bc3df0f6c13b10e7afe01d8ac504bc23344adb50e31b7a9837e4a0865780ef306a9148765bc247fc8e29318388a142ee5c51f35af71a7c0b7c1b7c8720ac8d88409641d93aa3a638715838b8151f36a5672484141c4a3d24f5864731b8a32601ce91ce0ea860c8e91974bfb5474acdeec7d4bfe6bb8aa5721453582ea23d4b6461b0d0892d4ab7dac18aec4e1645dd4b60e6ea2ae52dff111a57a9a2e6507e15aeda2d231d3311e2287c63fcb204227e29e34f49990e1e38fb626a5d0e755170c81a18b73e6d2592da3268041f2ffbb31845ce9d2aef544a2202c3091b94c4a04fde29ba6ded2bca2bce6fc83bb506b23deda83d399765ba63d1ad83ef831f6070087e17fc1ef87df043f031503c047f2896e88ee2e32342919234d762ba20bfd45e906b1ade08c71357cfe22200ff1dfc31f81fb42d31f573ef89dd1bf03fc1ff12d31d6ae326fcf036c43f6563b78290c342d9d51d7ba42a3874cfc8231d5f895997facbb547ba3c551e29e748f157d79662e708fc49cc52f6025a8ee2325245bc634a62812915d59268e678ca99646f0b6f75871abbb8eb55d82bd2f84b09d57c0e75bed83c5e598af0967e6d31811be0d71709c347b2de0b046ae3141d079a2919f63ce31efc380e54b922d57511293cb73bca07c19f8aabfd44a0c8dea94ed868ef1463249e87e12d6815509a9ef749658cd6a7800f3985af4e51d9b226823bf067e0cfc1ff067f21395c825f03bf2ece3df04fc03f05ff0cfc73595d1c9377ea37289b3a98919b3abaa219fddd11087cce05f897a490037c9326f82da08502844ccf4823025f2831e38cca2154332dea7d6a61738fe90ad23fa14a0c7ada735930e41c295e71a866f38c4703fc6b737d003ac559144bb0ac4705273e11c57e6c6ca6776ae739b1290879b0f147730924d5325a348df0bf47a3e4307538ca4152bf3983df0f096c0e94e17d7c72ea0a4a1c1a09d2b8081be54239144969a0ce9e717c3888e6d7c429b54bf06fd281229713adcc3c8cc690bc538ca0165df24eada1acecbb94b399fae4ec51367229860b113880bea58f40b6c1bf07ff01fc476978fd46ea9ec1c74bc02b0a23a9e27800fe1ba1b84489c6abc3841eece3cbb7a84cef6fcbc5e090c01d99f9444f75176f113fd24024903ab997b2991b7d5d592db4c7e48e6a19fcbaa45bca918ec5644a330ca98fd497cd3a81ca91a2cb4deb9a2e49fc691db7b9b8ba1157577422b867850dcf75398aa971c2ae879af36eaf8e2d2fb6d7c8f1d03894576dee0728eae4d619a0b569fc4783c62487d541d2aab5f28515f1636b9d28c3ff324f92e250ffc8ed98c6b8814676faea24b5d64015e236d5b0e013a0a3f903272e639c0a5ae7050345d33bbddf8fe761608c8728b6afa92394cb89e89d5231d0a5886bf28500102736deee091bf1db07ff009d52f0d1294537ef58fe1a80c012df57627ea0509cb420b021704815272df24ec3292d2e13b8107810f810041074913756bff6642827343d1381f63b2d3fc3891986b0652902a9706f73cd50ce756a531f69f04449a6c183fcfe6d99238dd635e5d699e015821ea083cae7cb4491e761e9535905451d28b277ba32d9635620f1b5d96012eff39b5f6cc7c9982a532b7281fccf048d1187d541625a2c8b8c83ba0d04b0083fb6e61619dd77d569a8e73501ea5ca839154d7b9e9c95d1a91aa981320831e6cb70e473fd299a900e1453e544e59d02e54e3950c4411cf4c83b9d3f52451139f9bc17a72efa8414b6a1771a84100c2018423082e01d8231041f107c4280c01f413011f34308a610cc28833af6c510a99b0bcfa1cc4d7720f61a107c43b0806009418d6023f0dae482a23181f60bcdf1857b71fe253e6cfa68544285df031b4168ddab4205cf6cfa5ad23747ef9aabf6e86cf37617f81b4763b1f308413d71e2f02cf0c164145988b2968b22d72418453b88f92c31469725919d4f7dade74fe1e0a84aef68d114a7d4f4a5bf75532ba12839acc29282678bf06b3662c33fd9932c22b0440073f16363cef59b5f6c17fe60ed919a95091d1ceaa96eac81b477fca5f2648c0721c04fbf8f666378e498e9ca7ec23bfda074226d1be8c826cc134afacff629e7d17ba306b199454ba1814528766b109c427006c1390408d505049710342140f5bb12a748e6b5f8be86e046ccf721b8a54091e875284af41c5a152e68030a2c4d997f25e4be6b8a3dc26f80e12807845427c44fe4e635091eb13746861fc95c216a63ea3a701bd43a33bfa6b0900b15a9b0102f3a18243fe195e2297dd688016b358a7970aa646691679be5d0443755f6e080a8bc7d746379fc576934382c21500ba049e0d538362487b32c1b08a0899f4960fc715bf47df227a7747273a1391ac88fab56b8669cec8ee6dd40f09c988dc181626eb31bba70184de108a6497a871428f63aa43318287a73d9b1d910c3256532d14125145f809c3dfc880e045b106c43b003c12e047b62893e27427820960e048794bc098e08c5e0507c3d41700c5d21eb108e6c16bda35490c3bd3234078a7d51d9c6edcb807026979fa1f651d941daa1d986f865bebe69d938fc7a0b5b8585e8577358c8cddcdcbf4661e1490e845914e9003ee69cf1229de484b6f66c57667ab4371bd512d34dde2b9bb9abd398caaffe4b284a0e8b08d4025844e0851f1bfec9715d0981550430f559fc71786b07793fd5380acc189f183d1d46aaa5ea28d01ea9298c3a687c7f812ea8c5dd348a66a0c8533116aeaaec2f76e438ee51dfd9f792321fcebe387da34a867f81aa4878d823e1d6114571f6065d0bba36741de8ba24895d0fba3e740371d2846e17ba3de8f6c57207ba217407d01d4277045d6a8b11cd670affd05acf64349fb02d06b72c839c1a559918a8f35c0a32a8cba9f75bb40c54f04861e1cc5761a1ae16a283dd18aab0102f3a57f8d1e37c08d92050282ee5a1cb3ea108452e63688657469517db8a136332c0ea69c115815c49e3bf11312639ccbaa05508bcb833cc5734961058845f2e81daf08b99e58a1484268d9cadc9c681ac81ba078a27daa8bab0ccf70caf69555c730d1bced9e86d83e3bed3a5f24ebf17547c0bc734c44743aa077cc9e66985e21ba9a2b705dd0fe87e42f70bba93f604556e0add1974e7d0fd86ee02ba4b2027761fba75e89e88193e7e0add33248dea10835b659f5200311484a18c0647aa77943231247de482d21cdf3335bd9016bf688bd19e9c5141612174cfe3feb593b10a0bf1e222c342f17623ae82b4e7c2196c6d9a106ee32e81368965c23ba5d6e282a8922b815ca02e68effe431a75f4f88f0b63c4e10f096c1d248c3dd58d0934f1d39fc592184fdc2c3d108c59dc711a952bb493c31ea96c2ca63fa3693bd06d40f7224691d2a746cec60c1439778ade293c53ac853a33f02967f3b14f5572381333f41eb789169a0d38872014bd47e1a1ea5e228dd045194455bc82ee35746fa07b0bdd3b298c6de8dea38e11c35f0d9a4acf86ece1ad33961a38e286b5a845a64ed4b98768b2a3e09c57a0a1052f3cb9100e7caab0906754b897f4b517db2a2cc40078f004dd07b13ba5218b83218ba2c9a4aed47155b01c456d29ef3415617258c8e7376fca45a5b988bf4be32f34c4ad4123d7f17f89c0b3a9b2e639dd328dd55dd05cfccccf0263b9e59cc963da8c23a59bc5f998728198cfaef648f5bc55990a07df85ee638ca2993ea59ccd51dc02ce8122af28c5950c44d16f52ce66e66048065d647e5b66508418a2ee3d43f7457ccdc418a97b852e3aab1de8a25a6e43173dd25d49e39eecff1c492db5e4ba322302cfeacaa6ed37245039a2f0205a4f14014ee634f383edec883ad7fa4bb5ea0c5d0ef083f6a9170ffde77934c717af20e6b4a6ee01740f1374554731c56d098af8b659ef94b32f8a8a667ec74cf9648b3fa5b1b041fc9751643d3cf911811a3f2690ed729f0c1fc197d0dbfe8c40fe387ca679a0f32792151c2f5dc41fa8d55012936ee4834a184f511c8ec475238162f01a2f9f612e63c3fd6e18289ede534dbc5617e31a15f7470331edd39c8c7e8d5044f9a2e9480fd03d869e10f8fe2347345e69e9fd9e053d1b7a0ef45ce861d0c8753fa97804704d4a1ffa9f356e9121025b2f948ca9b781963fdd95e2a90c09a45b9a1b39a64fff5a50d3cfec80d623e5dc8cd9448a782f6fa01740af4b63805bc3345d09472683a2ec82502140360f57c4a46ed0594611bb7e93f2c98aff228db5f92a6dfc098a1d83c3bf2010edea49196b6396c08af8991f87e7d2ec6e5541e02a08358a6657fe523503a9a0512dcd70c9352be8f5a0d78f51e49637d5677394ced98c8e687c8fe57cf65e40053a44f1d4a2f4e9a02d2613e9a09e51bdc1dd15180df642e1be118ac309f406d01b426f04bd77e88da1f711b5a1c9feece60bdd69be44b3071f984059129c93eef98db491a77a2a73335d9a683f3b5213edf5126cbc15e98cb60186de27f4bea03751bc992852f076526814ae471471cea64442359366c286f33d4c60d1848c52795c3b74dc8046fd5575e8f837c21871f84704a29dcf94e11338ccdb8c4036bc1ff5b81a87fe32ae555481d09caba613a75c69e486725bb6bdf4a6d09be5a3a82746c5e95399b35974a9becf287a7289b78f3d42115d4459d36b4f5e695535caca84d09b8bde8378df17e36341999b4be87d436f411329be1ad05bca42bc2dd56f162ff1c4ab1e62f827d7e4968493c9fb7712c2279a40eced53fe367ca792bdcacd3ca9b98536e257131d54c23af44e44ad23f62fa077aa742f42910e4b36c55d826209843265aaa6776b02d925296a3a2d07722d795c97c612615c41e3e6284a0eff82c018bf3036fc933dd575034ef3b39a8d9cd53496c9a5bbaa40686aa39e45a5a7cf486184de19f4ce731c545645b3cf66b14d19486b44e9531cf71ac5452f8122d429f3e90c450f9d5284ed02634542717020c66df185e4238d4de8b5a07705bd6be8212db7d0bb23fcd00b450d44025b8f8c1cadb6463d6b91d1566a4f54c0748f55c97e7440b9194e90b6d1256e8b165e5fee45ab2e2c684f049ab05bc212d07b80dea30252ab22d35511457c55ca8f35f1338735cfd3cf2de5ff2fa231df59dd10c5a88eaf52290d038f559998b508bc1691d5e896b5b14800f3f1333eab75925e50e3d498c5bf018745b6e840ef298da2779c4051afa0c1133270c4bf2324c784e2c04f38a81245caac7cd894b9714f64b8f82c2e8ec4722906285f67e2fd009d55e1a230be00b18ada85df610b7adbd0db81de2ef4f6a0b70fbd03e81d42ef087ac7d017728f8a36413803310dc4ec55f47ce88338fe86be057d1bfa8eb87718bcac2193c23b13a36fe17e40df85be270e2f44e7544dc4c9f65a9828725191af629cb3512999668ca8369e45a1f3f3258d35e59315ff88c6b5dcd4b2d0716d1a937dde7c80184886642d0235848504d644eb5519fdef39bdf35a04f2a7e01d3a9106813acae7549e79683686906d770c7d3fdebc2d1745bdbedbf8845084674211850851c4f0cc47d51a52daa67b1aa3480d37e864de884f8f7a6efa81687c8af7908491697c0fa1df857e8fe4b1df873efe3980fe10fa23e8bf8bbd67e88f45f3561c5fd3dafb7de4e713fa5fd09f407f0afd19f4e7d04708172877f9ecc1a5703fc54728fc1dd1fb14dd1dc068133ae2c3a7fdbd6b5371b705fd1ac0beb8fbcc41d16452a3a8279a65c58409d43d1e258da99bc9e3dfd1982b8ccb6846c1f2b2401bd743b160be0503a94552a52b3723b09626f0e221367c02a755d70d38f1413c9d26814623a29a54fa7308b9f1ff18c7683db14dcd4a149d09150918459a9631a4baa27f49394c706551e18c16d4b0df857f4685fefe09f491c6334adea0838a28a22193235bbcf72590e7d06f40ff02fa97d04732f3e95a69a2ff203040eddf89feb5086734a96a7a289c36ed37de1b8b1ef27c251c0924d248705e8bce23f46ff251e49e0d9eae9d1dafda0b0523a75ad28253511eff5d1a799a8e8685f37c752baf01600d14f3e65b647bdc748b2932c9a89438a2b10066343026d05576b64db7f81ca6b18abb1bd37eae7aa0529315f5995b360be76557e1d0dc9f688143ffb61045734ec654c428c6aa7820a7fc7d5289bfe70a6f8fdc485a91cd973ddc4fc2d9126e0dfa77d0c7c7bf63614c0229de7bd0bf87fe03f41fd7c3efe299740fa11a5e8825d0da70fd4b9a5d857ff606e2f19e980cd179eed0dee31f3dd1bd11ef360189afc23b6f28b94fd07f8eda7d157eaaf650a41e75b902bf99772daa6a6c208fbf42e37a28361361adf9f5d48200326598d0c6aa2826e75b5499b5a4e73d51995e32b331816c171e19dec1e7b3cfb99ac0e8b3e88a30cbd7735d265e5efe144269d07f81feab383f4e36be45257e7369298c15cf0e9583aa55f17b292647c2f914ed1beeb6a1950be1918a13b449e88970b6a1ff26025b7ca07bd9115f5315319af62e81fc42cf1325149f8f7ab52b5e4ec41045ec5ea65ec66c14f205a8b7be402943d8be2f69e7a9e994ee2c3bb4f9d4e2354163bf05fd3d92c7ee95e8bd933c7ea088dd92838ac288408ebea45aee43ff403ccce2e27bae715f0477866443ca9232631579ac183a16d3b8913046cbc4945f2cf4bce4aa34a6f33415662d15cd99e0ec0e3aaecc8f82a45695c0d654d9d996bcf34abc15a57cb2a85331c35d711db9d88e37d3dd084265d701a9a24651b783eb6e9b742fb8938815e19ca6f08f97545e77d1c93c94e9cd86ac4f0c694aa1752bba75d103e1218a475218f772680ccfa07f0ca180106885b8d0a2fd6d429bb63d45adeba3e2bdd1d68bbc6738de8e5fc4e4829648f53ff369c4e70f2fe5fe6db40607d1d81b097450c36f258fbd0f726519c8600f420742571c3a6a8cdad1fa973ca649344e923d1b05399eff75342ea2a5d252ad3f8c287f1c3f596f7fa4685c81625e9ff766b396f441e78c2bfbae488ea27115816817f7ca9846ae7314e57b4cb1a50fdaca9fb1a5bf3fb780f055aa62585888623d4edba00dcfd4cc8c271c34f7d4f8a6e7ef338ad648eedf16a118be53e66634a024eaa826604cd53f9a1e31a25985b0a0e44dcf82d013bd27087d3100caa6eaa091390c0308bb10f620ec43184238807008e1889681a305fc5f84754efb84cf7769eb454da3771ed3f8d8a67de0960d452302ac69b4be207c57f288d1636f5ff9abdd6b11ec886097f23acd0b08c7800e393b6c3c12a81cf5a442064e89f35c99ea4096ccde28d29f3569dc3c682cc9dfd4d5c60de9da46bc19d90a14937dde3f2430db0fa02b13880a2b1b0b23a2984b60f32c367afc21470073dd5d7c9036afcee097fae65cefda18427650c34f71d54ba0c8b3f897b734494acf1be6cd6a6865fe235943efd214f8de16cd57fcfea4350be113c22fde8194c245eb5eeecae4d0726cceb6f89ad33a37e144845d6a10ffe898da08e114c219847308bf215c40b884b006619d68b417691a71b4a5685c5a62d220fdc45b6412c5f3be4f7fe2fdc527fd49ff2b6573be2dea42caac441483c96e93d4127dd7774bec1f418807f6964e349d5cd7b0073a415ca6e2fe8d950ab9b13cae1f37fe5ed0585ad8d0282a37b510c5a8cf3b5743f2bdd0551ddbe5bd325c9cd051255124b59121bc9c2b6b7694119f6e1abf984033dff3409f98faf2b95f9b1b8e37e3900feb2e4ac1a95a602a35390351e4d53468e3cee446dfe33a95f8fba7e2d1a7d2a25edb063c5acbd0ea538d1ec3c5c1ad2c69a08f7a22ba35f18983f8517828fb37b2e81f62940884e239840d0851972e216c42d882f00ac26b086fc469281ab3348dd639dd5f6ef10e8db48e38ed948aaeef276d241e3d9396fa476835b1289e1248086f493939a4ec85e4c1ba0f82ae057710b621bc8fe37ce5f2443492ddc5c3831d253529a7b1a13cae4563b5ceb83261fc49c5bf1a8d06874532f853024b2bf53a3b1aa75eb695422284e7736548269de68755d1a62b2fbd055fdbfcc296a582c635c5d0dc8f9af6184ea148e1a24ca2365dcadc703d8357d3a877e38d4d0781f05b72566e87a6e7ce5eb58f2a6a633999704413f0f1fdbd1d3119a09b2adc2d31c0b388fe2abeea01c24708d16b7d86f005c257492386881dda5a03cfeb101fbc81701b42fc7317428ce8f621447a0ff1562c77c4d2a6953896dbe0bcd10e8d8399daf146d2183bb448e3744e34b254da515459bb148b1772624f8e48211bf82947cac15157552fa6112fa0ba830a0dafbf4a27a5547266cec4f21fa0b162d0f817c2a8b68a48bba992c3950456f4423720d02c51a472a45a00f174b2a74a7eec7602451d6aea68934eff34ff9291f5992dd95c3ab5d7134313c5f058ada6919fb93952cbbde935a646ef34fd6f2e77ade936a89e31dba7eaa2fd4a6dd9c39adc5cf18e8471e0d28cfbef9a7086b44271e0894f4fcc30489b5314894123ca54ed0a90cc810d0307062e0c3c18f8b45cea208041572c5df181fef0544e2faec3a007833e0c427a1531b92fea5f068de3048ddaa1456f76be4334eac0d2a411fdd5e1250c063018aa1043c7fc711a5c248604fb32daafd140529755a8b0c4a7f1c480b568ac52e1f8278531db7c630e9e64d06870f817046edc1397530b895c53d51627dfdc7c9a99fea1e7340abf6aea7be24fb383d54a98c721a13818a9c58853e1222f6f930a17797206868bdc865aab53b8f82597d5182f55332a0a234d1d74e496bd355a08e3ab2577387c10b581f8fe80c1bb78f00889f72ff0cfc5770b06635a036e80fff54946ebdf7c89da8d58a0078e7c7e291afd210c26d0251a613085c18c69a4fde1c25d5ae7df0b634f55bba94c6322b09c128718bb0e3a30c0ebc2771ce16769c4d37a11add5408c19fe6a2e8d0c241a3e9951641af59d1fd2b8819bfa47c2a868d41c6e4660c9c8fe95aed492f40c6753532de3fab3e823e4fff2441bfd43f8fb177d49fced8bceba102adb3b81c12281a2e9a3f2f236ca479573ff666f346591e74985639a293f3ba2eaa2dfa45affd739ad118e11237a8c7e43ceb4b028955a1b09079507e5ae26fc5d4282b655944b0f4f173040c51bc3e08416bf199cc2e00c06e73068c0e00202d44c54ad2f18342361641af19953e5a60e505aaf6170c36e2ad19812468410a417faf942c5fd8f90dae22ea7f2f0cac09e7d962c907872b97b912e79615ef4f890a4310252fb356a401ea8eb2fcf68d54c56af70fc4784313b7ea6b6c1e1df696049a768593b4e49435c141c529af43cb9408ef105284f3b8b6b3e5cf6d1e57e5de4d0bf823af8a2a0712d0e51157d949ddb048a6649837d54ef282ef4eb9e9be91ecd94a7a55097e4a37e1cd05a3254d5d8077450bd3d18b4a9dc0f23f1d584c13d0c1e803627fe242fd1f1447f24fc6de1dea001923fefd3b2a8836718bcc0e0551a2a36aad6160cb681a63b93304a0955c2a8dc546f64048d1f72cbd40695f8c339150fbd81b0f1889d09b834da743cb9b4e1a3bc2c4639b6148da887bc38030f064ecbe5e7729234928f3a3632ab0d3554748331bf2d9f387a5ac4e46f048d9b08e35a28460d3aed89daad359a8f5f9e8cd958034b085ce982e674023ce4d721f1718ef5f3e597e649250e5f74581333a7f4f920565bedc9079ae81f0beba23d598850881078ffe368cfba2dd5bf1a0596201092dd443dc39c2dc5ebbe159534d0477de80be78036756361c488717947abcb34de297f738a9c2393fbe26842ad330d97e234741751b2c26ba98a53a271b80b8303181c8a192a247aaac7d420d0bd852188da1d0c2d18da30746829714671e8c2d083a10fc340dcefc2b04b0d34769338bf78164bd4c026f5e5e027c29b9e2a458d727840783ca92545eee82c2432de5c7cda8e992107d54b848e591a133561b3f078aeeac96c9a46d53a721ecd1988d60de45957ebbaa97f248cf5688742dd0b9df956490e3726309b89c91258dd055dd90d97cecd7011d255b38db3e4e37d9a1c7469e2979839959ab4712177e4ebe3b0b32af770a2eb3811cd37717e2da6a970919337754adee839c46ab1a9a55a6cca14c6619d6afd248cdfb4456120579d1a5fc1b007c3be9a2a817e69ff525ccc49b530841b5dca5d3146b4263f6c8bd1b55c1dfc0886210c07301cc270241afb307c87e198dcd7e1070c3fc5cda178f3c4912d2cd980ea3c284387130d093420543f102f4ce10e2f3c19775dd2742776200f148dcd8ea29189e253402937237a4ca5554d1a29c56a943af06d75d0a869d4c3c944918167f9e5ccb9298c7ce7d785313b9551ce3b515ac71fbdca7336d6a7a9e2886e16076e4e60855638b30d801d21ee8ccb7eeec55d342db5183fb3559597a55a8f4641bd9d0d10a38fb48faa57ec1f8dd5d26fbcde945e59430b23d5fa8d88d17e85e1170c27e2ea239623f743b6652366326582c1db1cd50cbff3a1f868d1568aecaca23c06288373723e5d94be6f182e441d083c36c48f2d0be14d170d864b71e188bb3a893f4ff6e181a8fbbcd4443963fc681a9143dd334c51e2348e1b7369d4401266e62ad56122a79aa531258c4c23effba0c77d5f4454476a79a9264cfc5418f59ffc3e1cecac39ad84e3c35529fe9510aeccc4fc90c05c01d404ea161cd329e28c79ea43f9044350865faa4fb52517fc0bd79c5e74e788ab4cb8c866c94de759183979b3f0d48429bdf49b16c6198a580df0ce969f78ff70979ab0ad06f5b5745b54ca436dc488113dd5cf050c4f8076f6f569d79ada250578ad50ccb6c9db7c77ca20948e280ccf60782e8e5d9954906e278f189d44387d52577d3b8826e2641665a78111352772b39b3e53d9cc6a421b1fe2c08fe712645338ab85b19118fd7d618c5bfdce8d446079398b074692c6148a6dbdcf270f959cf4caaac6a00c8a11871b8782ff0502532d38bafa8ff7a986514b7f227e2bcb2a9ba591ed2e920d711828ae81e2188fc649dc149e0a1ad14d1d455bbbe50ae35b1d8511860d9ae93bbc48bfb9edd30488ee0e31f611884f3c71b2ef6cf14a4585d91795e07b380e9a945f4127162dc521e2c77750fd3ce4ff1e10e6bd6e62965d6a54e83f79c221cffad52dddd9d9897db96c29f74e510c6fc48d253452bd510373277dd45442b5581855f9d18f01a8cb65e979c4c66194b108bd92dc46f413222cd9713d35b63ae579cc4d639fa58a6d7a152a9fc67a6deb3aa2ff0c815504d0c4efa2adec6ca28cfebc971dadc98fa36be7a08cbd9c8ea2815c57caab8aa205a28103a5401831683423c6f7fb781f9b110672a84b2d185ee57ac5a27f4faee9475fcd0fecde5013f6bb257a23c0d81209b477147e1a429343a57bd7946ed9bb9299a70e799ebcb6854a39d8e9e5d5358a1187722da9adfce18806d1bac04d49da7974a652349a9e2ae757cd3a472a85b3521855b5230200cf1abe0f478c3a8b9e12468d62e2371a0b58f3f2140957b991be36993fbf5c18f3502c5eaf6d2d088baa117f4460ae009af89d7c913587ca4e9fc9f07fe94c275b5279ae86c6afa89b2f71a9da22c5b0d21a5548a3838ee24d3e8ac3334aa5ea8851a65261780b430ceadac571e9987042a1431aeda6185f281aaf86c29722d970c9c9fc94c811789f0461b8a4c9f871e1c19319e0375ee99c88c29f7f3556adf0451cf2c8d37e290259a20ca74f71184981d934f6538a68a45c4e9468a18a949b9f502d12467c49a20b674bbd8f1eae39284640eab6673d50a905ef2029a177f41c72b3cfe3c74d203768978d39fc890cae5b0ffc4502b5ff594420e3777248761d2a2385bc8fbd2026535f44cbf3c6e6f1a1348055d15315b743d168269a51cd6caafdc9c208c37bd1be07c787e1c38a37eccb702e45236a20fe2967035392330829ddc24092fa5dca628c276b303b8a40b9b7990a78f8da1c31a6b42ec7066a111ab5ecda49616864ab4d42e9adf0bfe8b87989a8c1a49151649678809147eae5d4368a68e4528766004fd0d9342795aa872e0fd1d4a43cbe8f0fb2b49adce29f4c6922dd10c5a5ea697e82c9cac21871583e43623347f457085ce982160920e3a709bcb1c8fa5bcaf011e5afeacf72e3135938872b736d6ad2ae1b5568a462c3f995f87c4a73f8e18ac73a0c1fc5ee050c9faae766e90d4d1a4903efd3b20997307c168b96f8eeaa4d79599d2a5a2a3da84d3fc1cc16a6b2f9fc3473a2304759a424d98a4554ae48e45ac2fc2030951dd5c3d2acfb3384fcbf7aa0f238a48ff31296fa265c6b4949284f4528af9de84aa92e9cb0075b228c090effd011cdadc8ff1981590134f1bb7b23bbde26bb75c8f0417cd5f93c4eb4b6e4352f6785d5d2a381ff8583ac424e55d8dbe253c0f045b46ae2c3139fcfe2fc4cb4f0301e57cf0025dfb025eb7b97054fb028f0e3c59afe312b592f83af029c7da998f9cc772993899654b4a6561bf4d5f8e43903095b95e9c9fde8a208b324c84ca962b18f6a70f8a73298db10f3170456c1efe194ecba4f765ba35b7c02be55ec329da97a63497f42f64a84f7f17a4f34ae556ffc07cca2dea030da03ebdfe5108dbcb8bc186fa5e8a5498846ac3e3b3ceae26b7db11f9bfad0f25264616c5901c26ac91bc9e11fc960ae235ad610531a07e61258510073f143bb7921bbfb50868fe36bf19d39cb8a5f492ff150d29690faedd442306b4ff6ff7b34b22d545ef49fe79097ae21b12acdb8145191b80e86aab8af8753495740c9dc8e2a7e66ae30a650ccd2b8661ed5e4300961c5e6985f71447f97c01201cce2f7f04e76bb24bb7923c307f125f856f4fe5ff495b8e458fd57f3c9c6434c7daaff451a8575f1b7fe6a76b9411c9abc7046c5fc67ea38c7d34de550c9f694afe898fb3d61dcd83b2d459139fc990cfec411fd53024b04308bdffd92ec7948d63ba65b52c86da9908772858e0775ce5634a327eb22780ec2adff268d3277daf97d6de4ac0c57cff5d227e584301bf161f4d4c0e031609685cd446bee64ab9631f5b14418abc78abf8e621e8d06871503a1b8566374fd95c86095507025812bd330e504a604b004bf9b67b2fb1ad9dd3bddd2832f4a21591ef5b9acd200d48a960898daff611a7feca9f28e34948011920143b28af48a38d123419feb437596d9f8bcf32558b564b4d3658f3f12c68d7dd48d6afddce7bd66a376ec95d57e5f064b32316b1158248029fc10b32c7ed625d96d479a27ad434fa3f7399559d68e71824b5bcfcd15e8f0f8e090ed6f981afd53234f75b0b39a463bdab99e8bfe97727e3d1e8d44f75246b5142a1df5bffaf4f159e333c8213d3d28cf2f9f6b4da346b19cc6a235018a44b8bc41e71ff4510d0ecb7dd1fca4e8fa32b8d211fd45028b0450ab1f135888df1ed9c319d9dd58190389ef891f8adf509ff51478d985e77432f64c4e3f0be1afd1da84c650a85dca1939b94fab6a92c653cf0b05e1afd64d119a162d5cfa0e3ec850e1a9311d133e3bf8279f2f0ee057d2981246a6f18f84f19ff4512314230eab54264a92a29bc9607547f417094c0920e2c70426d42f89dfed8eb839277bda226bdb745f2b645fba5545e0e9c0c66c796580fb424e2c5ed759b5b813ad7a635d25026962a1a046d3c51b8d0c3a7d6d3af2789cf908332d2630fa5ce02d3d81e97a57475b3b1d7887cf02fe179f972a342ac18c68dccc4d4d75ae6a1a53d31d2b76ae16a1f8c39246cce1da32980be1af3aa2bf4860d605cd11c00c7ec89e891fb28776df25bb3d26bb99cbdb737a15be39d73cf4e048fd22b3d747ff3a1a581d3af2b57965a816742ef16d9b727d3499041230590f397afe82fada10b953b979289d7deef0d2f3e5efe9eb315d0c0c339302061fc1e3a98f2447d468f8201f6d3c326bd1a851d7c2c8345677533713c6eac99baa3eea7a999b88c37fd217cd95c1724754d7033726b04c0023ff33ab7e29fc903dc2ef91ecae4b76bb2ded919e86ef762347a7e9a1a5d24ba966576d3492e4dcabf7170ad50cb468163c3e52978d5a78c44ca140a3717946e79b37b7ea835436901da43b940ee5653b1075e567dea9ecff6585e00a1fc49fc331761133f85f74303d753c7f48a3e63c4563b99bba56c4588ee25ff8a8d9891a1914b9bff4577dd16cc6e217653037175a9dc08400eea505308b5f2c7d117b0c5e1bc86e1fa4a1263c90e11dfc2f7c397e168db3b7c4af30bb5bf52fd266ba7cfc423c0e78b83818339f937a66ae23a787ac997ed4d7855c31c9765dc7a16f9b0e3833c3d8a4e4911ee4e399a49181e4e39fa5913367256f9beba65611c69f448cff7cb898e070dd2e998d7dd18a32984b204398ad46a408cc16218a0834fd4f1dfb95e3a7d963fc6e9fc8da16d99d4f767b2d1f017a37fc1af80df578d214f16fd1c6579675cd7c872c9f1af854a05531d64ae9c9a5d4613ed45911c33ff960e2ada2d153346a79ac4263d6075ee9a6ea5f51924afd398a7f1f2ef2be6b2b6bf41bf9a2d593a259192c77448b08acae8129024d01d4ce6715fc62f6d0aea4b5c8ee84bcf5e9e5f85934e66a31423cd4cc068394f10f342df769e6fb64f9ccad0a54f7f1b2b304f17ff10d4d72f00e1e733cc81427ef28c73e4b63ca53e50be57d943f5bcb4d2dcfdf940be3aff8a8e5258d4d518c38ac0861795eb4a440bf6e34982b83b9a1606e2e3497c02217d40cffccc02f763eb5e79995be147b37cac24bb29b1b32bc83cfa1f7f4e41736e8d2adadda78941759f6f9b9a09a6466992c1fd0b940eaa1ccc24897bc1a1d527d0943c3fb1bd368068db96e6a49c4b8168a268d8528baff3c8a3cdf625556a6a87de48729999268702d19341dd1742626a3815917b45000f3d42f96be883dc6cf04efd697f6aceca6a38cfe6cd167d1588c069f369deecfb767fae6f8a3f097a65e98a53405672e9645f53a13484eccf28378ab5e2e41c2a34787eb51e58df95a5646634116a78a9b6a6686aa478cebfaa8ab9be0fe10c588c3df0d08cb7dd1a2da60151934db62528ea8598dd88cc054ea258d5f247d59f64cf01472b6b47bb28706d9ed476cf4846bfa1acc9556f212c39fc35fef4e7e731adf9dc438be374836f934c94c8dec845af6e3ffc55b3eb07c9b0aedf4a7e051bdefaa10ba3a8da9a0d14ca8a6dcd48d85b1bcdcff47999b9fb5bf490eff14c2a2027d6e4a665d19cc3aa2a96260ae175a48a0218045ea97c62fc55e06bcf636d95da0ec4128bb6dcadb7bfa2cfc62f8b5f93a9232ad1ef8d3e84b3e290f59a76709839db815563b7b7c2711893d27729894d43d5366966d72fd49131bf33df196ae111d196c1f2bcba5517f50118d2937b54818aba452b33eeaca5affaf646eaaa298b34455c4e1cf21ac529ca89e924995255232b8d2114d1503ab10582e8045f869dd4bb197a50ead7daeecce53767b22ad496f821f4a40ee4585cd9479f40d392e45e330551b7e7ffc21f80359f069f41f47816ea457fca77626b30a56d1a5cc8a185f1ce9fe333d9f2a37d1db6669cc0d1a7325375718737d542d8c157dd4ff1e8a5cb73021ac9c1adda038510e61892f5a5506f31cd12a04a63530e37f9ace670abf5cf64cf012c8a17d47d6356c46464fb355cd837f8b36ea136059be4adab5b214a27c4d8995f354b9dcf4ab650c7c97742999498d4d9a9cbdd5e498912a75fcbdd3cbf9f86b14d33416086349c4985b63fcb98f9a6d0d5f9144ad5ccfa886a2c1e1cf21ac1e10aeeb8ba692a2e53258140a56d5c056023f2d8025f8a5d84b806722378b6caeacdf49190c5fe9710692b091bdacf4139ee2642c1b5f26b840a22c0927fda22b45a6c65233a9b2c1db0991ccf52a73e1c94db7e48898248a5eb593278cd5f02e12c65c1fb53a8a2b0bfd1bd4333645f1fffecffffb3fff1fe8219226</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>doneHere</sender>
+ <signal>clicked()</signal>
+ <receiver>AboutBox</receiver>
+ <slot>close()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/aboutbox_impl.cpp b/muse2/muse/widgets/aboutbox_impl.cpp
new file mode 100644
index 00000000..9ea20aad
--- /dev/null
+++ b/muse2/muse/widgets/aboutbox_impl.cpp
@@ -0,0 +1,10 @@
+#include <qlabel.h>
+#include "aboutbox_impl.h"
+#include "config.h"
+
+AboutBoxImpl::AboutBoxImpl()
+{
+ QString version(VERSION);
+ QString svnrevision(SVNVERSION);
+ versionLabel->setText("Version: " + version + " (svn revision: "+ svnrevision +")");
+}
diff --git a/muse2/muse/widgets/aboutbox_impl.h b/muse2/muse/widgets/aboutbox_impl.h
new file mode 100644
index 00000000..4584de9a
--- /dev/null
+++ b/muse2/muse/widgets/aboutbox_impl.h
@@ -0,0 +1,16 @@
+#ifndef ABOUTBOXIMPL_H
+#define ABOUTBOXIMPL_H
+
+#include "aboutbox.h"
+
+class AboutBoxImpl : public AboutBox
+{
+ Q_OBJECT
+
+public:
+ AboutBoxImpl();
+
+
+};
+
+#endif // ABOUTBOXIMPL_H
diff --git a/muse2/muse/widgets/action.h b/muse2/muse/widgets/action.h
new file mode 100644
index 00000000..74635f0a
--- /dev/null
+++ b/muse2/muse/widgets/action.h
@@ -0,0 +1,32 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: action.h,v 1.1.1.1.2.1 2008/01/19 13:33:46 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __ACTION_H__
+#define __ACTION_H__
+
+#include <Qt3Support>
+
+//---------------------------------------------------------
+// Action
+//---------------------------------------------------------
+
+class Action : public Q3Action {
+ Q_OBJECT
+ int _id;
+
+ public:
+ Action(QObject* parent, int i, const char* name = 0, bool toggle = false)
+ : Q3Action(parent, name, toggle) {
+ _id = i;
+ }
+ void setId(int i) { _id = i; }
+ int id() const { return _id; }
+ };
+
+
+#endif
+
diff --git a/muse2/muse/widgets/appearancebase.ui b/muse2/muse/widgets/appearancebase.ui
new file mode 100644
index 00000000..7c9a3e97
--- /dev/null
+++ b/muse2/muse/widgets/appearancebase.ui
@@ -0,0 +1,1764 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>AppearanceDialogBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>AppearanceDialogBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>591</width>
+ <height>597</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Appearance settings</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>TabWidget2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Arranger</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QButtonGroup" row="0" column="0">
+ <property name="name">
+ <cstring>ButtonGroup3</cstring>
+ </property>
+ <property name="title">
+ <string>Parts</string>
+ </property>
+ <property name="radioButtonExclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>partShownames</cstring>
+ </property>
+ <property name="text">
+ <string>show names</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>partShowevents</cstring>
+ </property>
+ <property name="text">
+ <string>show events</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>partShowCakes</cstring>
+ </property>
+ <property name="text">
+ <string>show Cakewalk Style</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="0" column="1">
+ <property name="name">
+ <cstring>eventButtonGroup</cstring>
+ </property>
+ <property name="title">
+ <string>Events</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>eventNoteon</cstring>
+ </property>
+ <property name="text">
+ <string>note on</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0">
+ <property name="name">
+ <cstring>eventPolypressure</cstring>
+ </property>
+ <property name="text">
+ <string>poly pressure</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0">
+ <property name="name">
+ <cstring>eventController</cstring>
+ </property>
+ <property name="text">
+ <string>controller</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="1">
+ <property name="name">
+ <cstring>eventAftertouch</cstring>
+ </property>
+ <property name="text">
+ <string>aftertouch</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="1">
+ <property name="name">
+ <cstring>eventPitchbend</cstring>
+ </property>
+ <property name="text">
+ <string>pitch bend</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="1">
+ <property name="name">
+ <cstring>eventProgramchange</cstring>
+ </property>
+ <property name="text">
+ <string>program change</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="0">
+ <property name="name">
+ <cstring>eventSpecial</cstring>
+ </property>
+ <property name="text">
+ <string>special</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>GroupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>Background picture</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>currentBgLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>bg</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignLeft</set>
+ </property>
+ <property name="indent">
+ <number>-1</number>
+ </property>
+ <property name="hAlign" stdset="0">
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>selectBgButton</cstring>
+ </property>
+ <property name="text">
+ <string>select...</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>clearBgButton</cstring>
+ </property>
+ <property name="text">
+ <string>clear</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>arrGrid</cstring>
+ </property>
+ <property name="text">
+ <string>show snap grid</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Colors</string>
+ </attribute>
+ <vbox>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QButtonGroup" row="0" column="1">
+ <property name="name">
+ <cstring>aPalette</cstring>
+ </property>
+ <property name="focusPolicy">
+ <enum>NoFocus</enum>
+ </property>
+ <property name="title">
+ <string>Palette</string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <property name="selectedId" stdset="0">
+ <number>0</number>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QPushButton" row="0" column="0">
+ <property name="name">
+ <cstring>palette0</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="on">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="0">
+ <property name="name">
+ <cstring>palette1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="2" column="0">
+ <property name="name">
+ <cstring>palette2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="3" column="0">
+ <property name="name">
+ <cstring>palette3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>3</number>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="4" column="0">
+ <property name="name">
+ <cstring>palette4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>4</number>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="5" column="0">
+ <property name="name">
+ <cstring>palette5</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>5</number>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>palette8</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>8</number>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>palette9</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>9</number>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="2" column="1">
+ <property name="name">
+ <cstring>palette10</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="paletteBackgroundColor">
+ <color>
+ <red>238</red>
+ <green>222</green>
+ <blue>222</blue>
+ </color>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>10</number>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="3" column="1">
+ <property name="name">
+ <cstring>palette11</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>11</number>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="4" column="1">
+ <property name="name">
+ <cstring>palette12</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>12</number>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="5" column="1">
+ <property name="name">
+ <cstring>palette13</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>13</number>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="7" column="0">
+ <property name="name">
+ <cstring>palette7</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>7</number>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="6" column="0">
+ <property name="name">
+ <cstring>palette6</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>6</number>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="7" column="1">
+ <property name="name">
+ <cstring>palette15</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>15</number>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="6" column="1">
+ <property name="name">
+ <cstring>palette14</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>14</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>addToPalette</cstring>
+ </property>
+ <property name="text">
+ <string>add to palette</string>
+ </property>
+ </widget>
+ <widget class="QFrame" row="0" column="2" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>colorframe</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>rval</cstring>
+ </property>
+ <property name="maxValue">
+ <number>255</number>
+ </property>
+ </widget>
+ <widget class="QSlider" row="3" column="2">
+ <property name="name">
+ <cstring>hslider</cstring>
+ </property>
+ <property name="maxValue">
+ <number>255</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel3_2</cstring>
+ </property>
+ <property name="text">
+ <string>B</string>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel5_2</cstring>
+ </property>
+ <property name="text">
+ <string>S</string>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel4_2</cstring>
+ </property>
+ <property name="text">
+ <string>H</string>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>bval</cstring>
+ </property>
+ <property name="maxValue">
+ <number>255</number>
+ </property>
+ </widget>
+ <widget class="QSlider" row="5" column="2">
+ <property name="name">
+ <cstring>vslider</cstring>
+ </property>
+ <property name="maxValue">
+ <number>255</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>textLabel6_2</cstring>
+ </property>
+ <property name="text">
+ <string>V</string>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>G</string>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="4" column="1">
+ <property name="name">
+ <cstring>sval</cstring>
+ </property>
+ <property name="maxValue">
+ <number>255</number>
+ </property>
+ </widget>
+ <widget class="QSlider" row="1" column="2">
+ <property name="name">
+ <cstring>gslider</cstring>
+ </property>
+ <property name="maxValue">
+ <number>255</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QSlider" row="4" column="2">
+ <property name="name">
+ <cstring>sslider</cstring>
+ </property>
+ <property name="maxValue">
+ <number>255</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QSlider" row="2" column="2">
+ <property name="name">
+ <cstring>bslider</cstring>
+ </property>
+ <property name="maxValue">
+ <number>255</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>gval</cstring>
+ </property>
+ <property name="maxValue">
+ <number>255</number>
+ </property>
+ </widget>
+ <widget class="QSlider" row="0" column="2">
+ <property name="name">
+ <cstring>rslider</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ <property name="maxValue">
+ <number>255</number>
+ </property>
+ <property name="tracking">
+ <bool>true</bool>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>NoMarks</enum>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="5" column="1">
+ <property name="name">
+ <cstring>vval</cstring>
+ </property>
+ <property name="maxValue">
+ <number>255</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="1">
+ <property name="name">
+ <cstring>hval</cstring>
+ </property>
+ <property name="maxValue">
+ <number>255</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>R</string>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QListView" row="0" column="0" rowspan="3" colspan="1">
+ <column>
+ <property name="text">
+ <string>Items</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>itemList</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>true</bool>
+ </property>
+ <property name="resizeMode">
+ <enum>AllColumns</enum>
+ </property>
+ </widget>
+ </grid>
+ <spacer>
+ <property name="name">
+ <cstring>botColorSpacer</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Style/Fonts</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox18</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>QT Theme</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Windows</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>MusE</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Metal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Norwegian Wood</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Platinum</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>CDE</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Motif</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Motif Plus</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>themeComboBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>190</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox6</cstring>
+ </property>
+ <property name="title">
+ <string>Fonts</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Family</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>TextLabel1_1</cstring>
+ </property>
+ <property name="text">
+ <string>Size</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Font 1</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Font 2</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Font 3</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>fontName0</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>fontName1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>fontName2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>fontName3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Font 0</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="2">
+ <property name="name">
+ <cstring>fontSize0</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="2">
+ <property name="name">
+ <cstring>fontSize1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="2">
+ <property name="name">
+ <cstring>fontSize2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="4" column="2">
+ <property name="name">
+ <cstring>fontSize3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="3">
+ <property name="name">
+ <cstring>bold1</cstring>
+ </property>
+ <property name="text">
+ <string>Bold</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="3">
+ <property name="name">
+ <cstring>bold2</cstring>
+ </property>
+ <property name="text">
+ <string>Bold</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="4" column="3">
+ <property name="name">
+ <cstring>bold3</cstring>
+ </property>
+ <property name="text">
+ <string>Bold</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="3">
+ <property name="name">
+ <cstring>bold0</cstring>
+ </property>
+ <property name="text">
+ <string>Bold</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="4">
+ <property name="name">
+ <cstring>italic2</cstring>
+ </property>
+ <property name="text">
+ <string>Italic</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="4" column="4">
+ <property name="name">
+ <cstring>italic3</cstring>
+ </property>
+ <property name="text">
+ <string>Italic</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="4">
+ <property name="name">
+ <cstring>italic1</cstring>
+ </property>
+ <property name="text">
+ <string>Italic</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="4">
+ <property name="name">
+ <cstring>italic0</cstring>
+ </property>
+ <property name="text">
+ <string>Italic</string>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="1" column="5">
+ <property name="name">
+ <cstring>fontBrowse0</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="2" column="5">
+ <property name="name">
+ <cstring>fontBrowse1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="3" column="5">
+ <property name="name">
+ <cstring>fontBrowse2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="4" column="5">
+ <property name="name">
+ <cstring>fontBrowse3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>textLabel7</cstring>
+ </property>
+ <property name="text">
+ <string>Font 4</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="5" column="1">
+ <property name="name">
+ <cstring>fontName4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>textLabel7_2</cstring>
+ </property>
+ <property name="text">
+ <string>Font 5</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="6" column="1">
+ <property name="name">
+ <cstring>fontName5</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel" row="7" column="0">
+ <property name="name">
+ <cstring>textLabel7_3</cstring>
+ </property>
+ <property name="text">
+ <string>Font 6</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="7" column="1">
+ <property name="name">
+ <cstring>fontName6</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="7" column="2">
+ <property name="name">
+ <cstring>fontSize6</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="7" column="3">
+ <property name="name">
+ <cstring>bold6</cstring>
+ </property>
+ <property name="text">
+ <string>Bold</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="7" column="4">
+ <property name="name">
+ <cstring>italic6</cstring>
+ </property>
+ <property name="text">
+ <string>Italic</string>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="7" column="5">
+ <property name="name">
+ <cstring>fontBrowse6</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="5" column="2">
+ <property name="name">
+ <cstring>fontSize4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="6" column="2">
+ <property name="name">
+ <cstring>fontSize5</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="5" column="3">
+ <property name="name">
+ <cstring>bold4</cstring>
+ </property>
+ <property name="text">
+ <string>Bold</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="6" column="3">
+ <property name="name">
+ <cstring>bold5</cstring>
+ </property>
+ <property name="text">
+ <string>Bold</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="5" column="4">
+ <property name="name">
+ <cstring>italic4</cstring>
+ </property>
+ <property name="text">
+ <string>Italic</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="6" column="4">
+ <property name="name">
+ <cstring>italic5</cstring>
+ </property>
+ <property name="text">
+ <string>Italic</string>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="5" column="5">
+ <property name="name">
+ <cstring>fontBrowse4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="6" column="5">
+ <property name="name">
+ <cstring>fontBrowse5</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>applyButton</cstring>
+ </property>
+ <property name="text">
+ <string>Apply</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>okButton</cstring>
+ </property>
+ <property name="text">
+ <string>Ok</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>cancelButton</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>rslider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>rval</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>gslider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>gval</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>bslider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>bval</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>hslider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>hval</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>sslider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>sval</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>vslider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>vval</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>rval</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>rslider</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>gval</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>gslider</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>bval</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>bslider</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>hval</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>hslider</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>sval</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>sslider</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+ <connection>
+ <sender>vval</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>vslider</receiver>
+ <slot>setValue(int)</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>TabWidget2</tabstop>
+ <tabstop>itemList</tabstop>
+ <tabstop>palette0</tabstop>
+ <tabstop>palette1</tabstop>
+ <tabstop>palette2</tabstop>
+ <tabstop>palette3</tabstop>
+ <tabstop>palette4</tabstop>
+ <tabstop>palette5</tabstop>
+ <tabstop>palette6</tabstop>
+ <tabstop>palette7</tabstop>
+ <tabstop>palette8</tabstop>
+ <tabstop>palette9</tabstop>
+ <tabstop>palette10</tabstop>
+ <tabstop>palette11</tabstop>
+ <tabstop>palette12</tabstop>
+ <tabstop>palette13</tabstop>
+ <tabstop>palette14</tabstop>
+ <tabstop>palette15</tabstop>
+ <tabstop>addToPalette</tabstop>
+ <tabstop>rval</tabstop>
+ <tabstop>rslider</tabstop>
+ <tabstop>gval</tabstop>
+ <tabstop>gslider</tabstop>
+ <tabstop>bval</tabstop>
+ <tabstop>bslider</tabstop>
+ <tabstop>hval</tabstop>
+ <tabstop>hslider</tabstop>
+ <tabstop>sval</tabstop>
+ <tabstop>sslider</tabstop>
+ <tabstop>vval</tabstop>
+ <tabstop>vslider</tabstop>
+ <tabstop>applyButton</tabstop>
+ <tabstop>okButton</tabstop>
+ <tabstop>cancelButton</tabstop>
+ <tabstop>partShownames</tabstop>
+ <tabstop>partShowevents</tabstop>
+ <tabstop>partShowCakes</tabstop>
+ <tabstop>eventNoteon</tabstop>
+ <tabstop>eventPolypressure</tabstop>
+ <tabstop>eventController</tabstop>
+ <tabstop>eventAftertouch</tabstop>
+ <tabstop>eventPitchbend</tabstop>
+ <tabstop>eventProgramchange</tabstop>
+ <tabstop>eventSpecial</tabstop>
+ <tabstop>selectBgButton</tabstop>
+ <tabstop>arrGrid</tabstop>
+ <tabstop>themeComboBox</tabstop>
+ <tabstop>fontName0</tabstop>
+ <tabstop>fontName1</tabstop>
+ <tabstop>fontName2</tabstop>
+ <tabstop>fontName3</tabstop>
+ <tabstop>fontSize0</tabstop>
+ <tabstop>fontSize1</tabstop>
+ <tabstop>fontSize2</tabstop>
+ <tabstop>fontSize3</tabstop>
+ <tabstop>bold1</tabstop>
+ <tabstop>bold2</tabstop>
+ <tabstop>bold3</tabstop>
+ <tabstop>bold0</tabstop>
+ <tabstop>italic2</tabstop>
+ <tabstop>italic3</tabstop>
+ <tabstop>italic1</tabstop>
+ <tabstop>italic0</tabstop>
+ <tabstop>fontName4</tabstop>
+ <tabstop>fontName5</tabstop>
+ <tabstop>fontSize4</tabstop>
+ <tabstop>fontSize5</tabstop>
+ <tabstop>bold4</tabstop>
+ <tabstop>bold5</tabstop>
+ <tabstop>italic4</tabstop>
+ <tabstop>italic5</tabstop>
+</tabstops>
+<slots>
+ <slot>new_slot()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/bigtime.cpp b/muse2/muse/widgets/bigtime.cpp
new file mode 100644
index 00000000..16cfe071
--- /dev/null
+++ b/muse2/muse/widgets/bigtime.cpp
@@ -0,0 +1,442 @@
+#include <stdio.h>
+#include <qpalette.h>
+#include <qlabel.h>
+#include <qcolor.h>
+#include <qlayout.h>
+//Added by qt3to4:
+#include <QCloseEvent>
+#include <QResizeEvent>
+#include <values.h>
+
+#include <qtooltip.h>
+#include "globals.h"
+#include "bigtime.h"
+#include "song.h"
+#include "app.h"
+#include "gconfig.h"
+
+extern int mtcType;
+
+//
+// the bigtime widget
+// display is split into several parts to avoid flickering.
+//
+
+//---------------------------------------------------------
+// BigTime
+//---------------------------------------------------------
+
+BigTime::BigTime(QWidget* parent)
+ : QWidget(parent, 0, Qt::WType_TopLevel | Qt::WStyle_StaysOnTop)
+ {
+
+ tickmode = true;
+ dwin = new QWidget(this, "bigtime-dwin", Qt::WStyle_StaysOnTop);
+ dwin->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
+ fmtButton = new QCheckBox(QString(""), this);
+ fmtButton->resize(18,18);
+ fmtButton->setChecked(true);
+ QToolTip::add(fmtButton, tr("format display"));
+ barLabel = new QLabel(dwin);
+ beatLabel = new QLabel(dwin);
+ tickLabel = new QLabel(dwin);
+ //hourLabel = new QLabel(dwin);
+ minLabel = new QLabel(dwin);
+ secLabel = new QLabel(dwin);
+ frameLabel = new QLabel(dwin);
+ subFrameLabel = new QLabel(dwin);
+ sep1 = new QLabel(QString("."), dwin);
+ sep2 = new QLabel(QString("."), dwin);
+ sep3 = new QLabel(QString(":"), dwin);
+ sep4 = new QLabel(QString(":"), dwin);
+ sep5 = new QLabel(QString(":"), dwin);
+ absTickLabel = new QLabel(dwin);
+ absFrameLabel = new QLabel(dwin);
+ QToolTip::add(barLabel, tr("bar"));
+ QToolTip::add(beatLabel, tr("beat"));
+ QToolTip::add(tickLabel, tr("tick"));
+ //QToolTip::add(hourLabel, tr("hour"));
+ QToolTip::add(minLabel, tr("minute"));
+ QToolTip::add(secLabel, tr("second"));
+ QToolTip::add(frameLabel, tr("frame"));
+ QToolTip::add(subFrameLabel, tr("subframe"));
+ QToolTip::add(absTickLabel, tr("tick"));
+ QToolTip::add(absFrameLabel, tr("frame"));
+ fmtButtonToggled(true);
+ connect(fmtButton, SIGNAL(toggled(bool)), SLOT(fmtButtonToggled(bool)));
+ //oldbar = oldbeat = oldtick = oldhour = oldmin = oldsec = oldframe = -1;
+ oldbar = oldbeat = oldtick = oldmin = oldsec = oldframe = oldsubframe = -1;
+ oldAbsTick = oldAbsFrame = -1;
+ setString(MAXINT);
+
+ configChanged();
+
+ QFont f(QString("Courier"));
+ f.setPixelSize(10);
+
+ dwin->setFont(f);
+ setCaption(tr("MusE: Bigtime"));
+ }
+
+
+//---------------------------------------------------------
+// fmtButtonToggled
+//---------------------------------------------------------
+
+void BigTime::fmtButtonToggled(bool v)
+{
+ if(v)
+ {
+ tickmode = true;
+
+ barLabel->setEnabled(true);
+ beatLabel->setEnabled(true);
+ tickLabel->setEnabled(true);
+ //hourLabel->setEnabled(true);
+ minLabel->setEnabled(true);
+ secLabel->setEnabled(true);
+ frameLabel->setEnabled(true);
+ subFrameLabel->setEnabled(true);
+ sep1->setEnabled(true);
+ sep2->setEnabled(true);
+ sep3->setEnabled(true);
+ sep4->setEnabled(true);
+ sep5->setEnabled(true);
+ absTickLabel->setEnabled(false);
+ absFrameLabel->setEnabled(false);
+
+ barLabel->show();
+ beatLabel->show();
+ tickLabel->show();
+ //hourLabel->show();
+ minLabel->show();
+ secLabel->show();
+ frameLabel->show();
+ subFrameLabel->show();
+ sep1->show();
+ sep2->show();
+ sep3->show();
+ sep4->show();
+ sep5->show();
+ absTickLabel->hide();
+ absFrameLabel->hide();
+ }
+ else
+ {
+ tickmode = false;
+
+ barLabel->setEnabled(false);
+ beatLabel->setEnabled(false);
+ tickLabel->setEnabled(false);
+ //hourLabel->setEnabled(false);
+ minLabel->setEnabled(false);
+ secLabel->setEnabled(false);
+ frameLabel->setEnabled(false);
+ subFrameLabel->setEnabled(false);
+ sep1->setEnabled(false);
+ sep2->setEnabled(false);
+ sep3->setEnabled(false);
+ sep4->setEnabled(false);
+ sep5->setEnabled(false);
+ absTickLabel->setEnabled(true);
+ absFrameLabel->setEnabled(true);
+
+ barLabel->hide();
+ beatLabel->hide();
+ tickLabel->hide();
+ //hourLabel->hide();
+ minLabel->hide();
+ secLabel->hide();
+ frameLabel->hide();
+ subFrameLabel->hide();
+ sep1->hide();
+ sep2->hide();
+ sep3->hide();
+ sep4->hide();
+ sep5->hide();
+ absTickLabel->show();
+ absFrameLabel->show();
+ }
+}
+
+//---------------------------------------------------------
+// configChanged
+//---------------------------------------------------------
+
+void BigTime::configChanged()
+ {
+ setBgColor(config.bigTimeBackgroundColor);
+ setFgColor(config.bigTimeForegroundColor);
+ }
+
+//---------------------------------------------------------
+// closeEvent
+//---------------------------------------------------------
+
+void BigTime::closeEvent(QCloseEvent *ev)
+ {
+ emit closed();
+ QWidget::closeEvent(ev);
+ }
+
+//---------------------------------------------------------
+// setString
+//---------------------------------------------------------
+
+bool BigTime::setString(unsigned v)
+ {
+ if (v == MAXINT) {
+ barLabel->setText(QString("----"));
+ beatLabel->setText(QString("--"));
+ tickLabel->setText(QString("---"));
+ //hourLabel->setText(QString("--"));
+ //minLabel->setText(QString("--"));
+ minLabel->setText(QString("---"));
+ secLabel->setText(QString("--"));
+ frameLabel->setText(QString("--"));
+ subFrameLabel->setText(QString("--"));
+
+ absTickLabel->setText(QString("----------"));
+ absFrameLabel->setText(QString("----------"));
+ oldAbsTick = oldAbsFrame = -1;
+ //oldbar = oldbeat = oldtick = oldhour = oldmin = oldsec = oldframe = -1;
+ oldbar = oldbeat = oldtick = oldmin = oldsec = oldframe = oldsubframe = -1;
+ return true;
+ }
+
+ unsigned absFrame = tempomap.tick2frame(v);
+ int bar, beat;
+ unsigned tick;
+ sigmap.tickValues(v, &bar, &beat, &tick);
+ double time = double(absFrame)/double(sampleRate);
+ //int hour = int(time) / 3600;
+ //int min = (int(time) / 60) % 60;
+ int min = int(time) / 60;
+ int sec = int(time) % 60;
+ double rest = time - (min * 60 + sec);
+ switch(mtcType) {
+ case 0: // 24 frames sec
+ rest *= 24;
+ break;
+ case 1: // 25
+ rest *= 25;
+ break;
+ case 2: // 30 drop frame
+ rest *= 30;
+ break;
+ case 3: // 30 non drop frame
+ rest *= 30;
+ break;
+ }
+ int frame = int(rest);
+ int subframe = int((rest-frame)*100);
+
+ QString s;
+
+ if(oldAbsTick != v) {
+ s.sprintf("%010d", v);
+ absTickLabel->setText(s);
+ oldAbsTick = v;
+ }
+ if(oldAbsFrame != absFrame) {
+ s.sprintf("%010d", absFrame);
+ absFrameLabel->setText(s);
+ oldAbsFrame = absFrame;
+ }
+ if(oldbar != bar) {
+ s.sprintf("%04d", bar+1);
+ barLabel->setText(s);
+ oldbar = bar;
+ }
+ if(oldbeat != beat) {
+ s.sprintf("%02d", beat+1);
+ beatLabel->setText(s);
+ oldbeat = beat;
+ }
+
+ if(oldtick != tick) {
+ s.sprintf("%03d", tick);
+ tickLabel->setText(s);
+ oldtick = tick;
+ }
+
+ //if(oldhour != hour) {
+ // s.sprintf("%02d", hour);
+ // hourLabel->setText(s);
+ // oldhour = hour;
+ //}
+
+ if(oldmin != min) {
+ //s.sprintf("%02d", min);
+ s.sprintf("%03d", min);
+ minLabel->setText(s);
+ oldmin = min;
+ }
+
+ if(oldsec != sec) {
+ s.sprintf("%02d", sec);
+ secLabel->setText(s);
+ oldsec = sec;
+ }
+
+ if(oldframe != frame) {
+ s.sprintf("%02d", frame);
+ frameLabel->setText(s);
+ oldframe = frame;
+ }
+
+ if(oldsubframe != subframe) {
+ s.sprintf("%02u", subframe);
+ subFrameLabel->setText(s);
+ oldsubframe = subframe;
+ }
+
+ return false;
+ }
+
+//---------------------------------------------------------
+// setPos
+//---------------------------------------------------------
+
+void BigTime::setPos(int idx, unsigned v, bool)
+ {
+ if (idx == 0)
+ setString(v);
+ }
+
+//---------------------------------------------------------
+// resizeEvent
+//---------------------------------------------------------
+
+void BigTime::resizeEvent(QResizeEvent *ev)
+ {
+ dwin->resize(ev->size());
+ QFont f = dwin->font();
+ QFontMetrics fm(f);
+ int fs = f.pixelSize();
+ int hspace = 20;
+ //int tw = fm.width(QString("00:00:00:00"));
+ int tw = fm.width(QString("000:00:00:00"));
+
+ fs = ((ev->size().width() - hspace*2)*fs) / tw;
+// printf("resize BigTime %d -> %d, w %d\n", fs, nfs, ev->size().width());
+
+ // set min/max
+ if (fs < 10)
+ fs = 10;
+ else if (fs > 256)
+ fs = 256;
+ f.setPixelSize(fs);
+
+
+ dwin->setFont(f);
+ int digitWidth = dwin->fontMetrics().width(QString("0"));
+ int vspace = (ev->size().height() - (fs*2)) / 3;
+ int tickY = vspace;
+
+ int timeY = vspace*2 + fs;
+ int absTickY = tickY;
+ int absFrameY = timeY;
+ barLabel->resize(digitWidth*4, fs);
+ beatLabel->resize(digitWidth*2, fs);
+ tickLabel->resize(digitWidth*3, fs);
+ //hourLabel->resize(digitWidth*2, fs);
+ //minLabel->resize(digitWidth*2, fs);
+ minLabel->resize(digitWidth*3, fs);
+ secLabel->resize(digitWidth*2, fs);
+ frameLabel->resize(digitWidth*2, fs);
+ subFrameLabel->resize(digitWidth*2, fs);
+
+ absTickLabel->resize(digitWidth*10, fs);
+ absFrameLabel->resize(digitWidth*10, fs);
+ sep1->resize(digitWidth, fs);
+ sep2->resize(digitWidth, fs);
+ sep3->resize(digitWidth, fs);
+ sep4->resize(digitWidth, fs);
+ sep5->resize(digitWidth, fs);
+
+ barLabel->move( hspace + (digitWidth*0), tickY);
+ sep1->move( hspace + (digitWidth*4), tickY);
+ beatLabel->move( hspace + (digitWidth*5), tickY);
+ sep2->move( hspace + (digitWidth*7), tickY);
+ tickLabel->move( hspace + (digitWidth*8), tickY);
+
+ //hourLabel->move( hspace + (digitWidth*0), timeY);
+ //sep3->move( hspace + (digitWidth*2), timeY);
+ //minLabel->move( hspace + (digitWidth*3), timeY);
+ //sep4->move( hspace + (digitWidth*5), timeY);
+ //secLabel->move( hspace + (digitWidth*6), timeY);
+ //sep5->move( hspace + (digitWidth*8), timeY);
+ //frameLabel->move( hspace + (digitWidth*9), timeY);
+ minLabel->move( hspace + (digitWidth*0), timeY);
+ sep3->move( hspace + (digitWidth*3), timeY);
+ secLabel->move( hspace + (digitWidth*4), timeY);
+ sep4->move( hspace + (digitWidth*6), timeY);
+ frameLabel->move( hspace + (digitWidth*7), timeY);
+ sep5->move( hspace + (digitWidth*9), timeY);
+ subFrameLabel->move( hspace + (digitWidth*10), timeY);
+
+ absTickLabel->move( hspace + (digitWidth*0), absTickY);
+ absFrameLabel->move( hspace + (digitWidth*0), absFrameY);
+ }
+
+//---------------------------------------------------------
+// setForegroundColor
+//---------------------------------------------------------
+
+void BigTime::setFgColor(QColor c)
+ {
+ QColorGroup cg = palette().active();
+ cg.setColor(QColorGroup::Foreground, c);
+ QPalette newpalette(cg, cg, cg);
+ setPalette(newpalette);
+
+ barLabel->setPalette(newpalette);
+ beatLabel->setPalette(newpalette);
+ tickLabel->setPalette(newpalette);
+ //hourLabel->setPalette(newpalette);
+ minLabel->setPalette(newpalette);
+ secLabel->setPalette(newpalette);
+ frameLabel->setPalette(newpalette);
+ subFrameLabel->setPalette(newpalette);
+
+ absTickLabel->setPalette(newpalette);
+ absFrameLabel->setPalette(newpalette);
+ sep1->setPalette(newpalette);
+ sep2->setPalette(newpalette);
+ sep3->setPalette(newpalette);
+ sep4->setPalette(newpalette);
+ sep5->setPalette(newpalette);
+ }
+
+//---------------------------------------------------------
+// setBackgroundColor
+//---------------------------------------------------------
+
+void BigTime::setBgColor(QColor c)
+ {
+ QColorGroup cg = palette().active();
+ cg.setColor(QColorGroup::Background, c);
+ QPalette newpalette(cg, cg, cg);
+ setPalette(newpalette);
+
+ barLabel->setPalette(newpalette);
+ beatLabel->setPalette(newpalette);
+ tickLabel->setPalette(newpalette);
+ //hourLabel->setPalette(newpalette);
+ minLabel->setPalette(newpalette);
+ secLabel->setPalette(newpalette);
+ frameLabel->setPalette(newpalette);
+ subFrameLabel->setPalette(newpalette);
+
+ absTickLabel->setPalette(newpalette);
+ absFrameLabel->setPalette(newpalette);
+ sep1->setPalette(newpalette);
+ sep2->setPalette(newpalette);
+ sep3->setPalette(newpalette);
+ sep4->setPalette(newpalette);
+ sep5->setPalette(newpalette);
+
+ setBackgroundColor(c);
+ }
+
diff --git a/muse2/muse/widgets/bigtime.h b/muse2/muse/widgets/bigtime.h
new file mode 100644
index 00000000..5e173cb0
--- /dev/null
+++ b/muse2/muse/widgets/bigtime.h
@@ -0,0 +1,55 @@
+#ifndef __BIGTIME_H__
+#define __BIGTIME_H__
+
+#include <qwidget.h>
+#include <qlabel.h>
+
+#include <qcheckbox.h>
+//Added by qt3to4:
+#include <QResizeEvent>
+#include <QCloseEvent>
+class MusE;
+
+//---------------------------------------------------------
+// BigTime
+//---------------------------------------------------------
+
+class BigTime : public QWidget {
+ bool tickmode;
+ MusE* seq;
+ Q_OBJECT
+
+ bool setString(unsigned);
+
+ QWidget *dwin;
+ QCheckBox *fmtButton;
+ QLabel *absTickLabel;
+ QLabel *absFrameLabel;
+ QLabel *barLabel, *beatLabel, *tickLabel,
+ //*hourLabel, *minLabel, *secLabel, *frameLabel,
+ *minLabel, *secLabel, *frameLabel, *subFrameLabel,
+ *sep1, *sep2, *sep3, *sep4, *sep5;
+
+ //int oldbar, oldbeat, oldhour, oldmin, oldsec, oldframe;
+ int oldbar, oldbeat, oldmin, oldsec, oldframe, oldsubframe;
+ unsigned oldtick;
+ unsigned oldAbsTick, oldAbsFrame;
+ void setFgColor(QColor c);
+ void setBgColor(QColor c);
+
+ protected:
+ virtual void resizeEvent(QResizeEvent*);
+ virtual void closeEvent(QCloseEvent*);
+
+ public slots:
+ void setPos(int, unsigned, bool);
+ void configChanged();
+ void fmtButtonToggled(bool);
+ signals:
+ void closed();
+
+ public:
+ BigTime(QWidget* parent);
+ };
+
+#endif
diff --git a/muse2/muse/widgets/canvas.cpp b/muse2/muse/widgets/canvas.cpp
new file mode 100644
index 00000000..ef5ee0de
--- /dev/null
+++ b/muse2/muse/widgets/canvas.cpp
@@ -0,0 +1,1405 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: canvas.cpp,v 1.10.2.17 2009/05/03 04:14:01 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <stdio.h>
+
+#include "canvas.h"
+#include <qapplication.h>
+#include <qpainter.h>
+#include <q3popupmenu.h>
+#include <qcursor.h>
+#include <qtimer.h>
+//Added by qt3to4:
+#include <QKeyEvent>
+#include <QMouseEvent>
+#include <QWheelEvent>
+
+#include "song.h"
+#include "event.h"
+#include "citem.h"
+#include "icons.h"
+#include "../marker/marker.h"
+#include "part.h"
+
+#define ABS(x) ((x) < 0) ? -(x) : (x)
+
+//---------------------------------------------------------
+// Canvas
+//---------------------------------------------------------
+
+Canvas::Canvas(QWidget* parent, int sx, int sy, const char* name)
+ : View(parent, sx, sy, name)
+ {
+ canvasTools = 0;
+ itemPopupMenu = 0;
+
+ canScrollLeft = true;
+ canScrollRight = true;
+ canScrollUp = true;
+ canScrollDown = true;
+ hscrollDir = HSCROLL_NONE;
+ vscrollDir = VSCROLL_NONE;
+ scrollTimer=NULL;
+
+ scrollSpeed=10; // hardcoded scroll jump
+
+ drag = DRAG_OFF;
+ _tool = PointerTool;
+ pos[0] = song->cpos();
+ pos[1] = song->lpos();
+ pos[2] = song->rpos();
+ curPart = NULL;
+ curPartId = -1;
+ curItem = NULL;
+ connect(song, SIGNAL(posChanged(int, unsigned, bool)), this, SLOT(setPos(int, unsigned, bool)));
+ }
+
+//---------------------------------------------------------
+// setPos
+// set one of three markers
+// idx - 0-cpos 1-lpos 2-rpos
+// flag - emit followEvent()
+//---------------------------------------------------------
+
+void Canvas::setPos(int idx, unsigned val, bool adjustScrollbar)
+ {
+ //if (pos[idx] == val) // Seems to be some refresh problems here, pos[idx] might be val but the gui not updated.
+ // return; // skipping this return forces update even if values match. Matching values only seem
+ // to occur when initializing
+ int opos = mapx(pos[idx]);
+ int npos = mapx(val);
+
+ if (adjustScrollbar && idx == 0) {
+ switch (song->follow()) {
+ case Song::NO:
+ break;
+ case Song::JUMP:
+ if (npos >= width()) {
+ int ppos = val - xorg - rmapxDev(width()/8);
+ if (ppos < 0)
+ ppos = 0;
+ emit followEvent(ppos);
+ opos = mapx(pos[idx]);
+ npos = mapx(val);
+ }
+ else if (npos < 0) {
+ int ppos = val - xorg - rmapxDev(width()*3/4);
+ if (ppos < 0)
+ ppos = 0;
+ emit followEvent(ppos);
+ opos = mapx(pos[idx]);
+ npos = mapx(val);
+ }
+ break;
+ case Song::CONTINUOUS:
+ if (npos > (width()/2)) {
+ int ppos = pos[idx] - xorg - rmapxDev(width()/2);
+ if (ppos < 0)
+ ppos = 0;
+ emit followEvent(ppos);
+ opos = mapx(pos[idx]);
+ npos = mapx(val);
+ }
+ else if (npos < (width()/2)) {
+ int ppos = pos[idx] - xorg - rmapxDev(width()/2);
+ if (ppos < 0)
+ ppos = 0;
+ emit followEvent(ppos);
+ opos = mapx(pos[idx]);
+ npos = mapx(val);
+ }
+ break;
+ }
+ }
+
+ int x;
+ int w = 1;
+ if (opos > npos) {
+ w += opos - npos;
+ x = npos;
+ }
+ else {
+ w += npos - opos;
+ x = opos;
+ }
+ pos[idx] = val;
+ redraw(QRect(x-1, 0, w+2, height()));
+ }
+
+//---------------------------------------------------------
+// draw
+//---------------------------------------------------------
+
+void Canvas::draw(QPainter& p, const QRect& rect)
+ {
+// printf("draw canvas %x virt %d\n", this, virt());
+
+ int x = rect.x();
+ int y = rect.y();
+ int w = rect.width();
+ int h = rect.height();
+ int x2 = x + w;
+
+ if (virt()) {
+ drawCanvas(p, rect);
+
+ //---------------------------------------------------
+ // draw Canvas Items
+ //---------------------------------------------------
+
+ iCItem to(items.lower_bound(x2));
+
+ // Draw items from other parts behind all others.
+ // Only for items with events (not arranger parts).
+ for(iCItem i = items.begin(); i != to; ++i)
+ {
+ CItem* ci = i->second;
+ if(!ci->event().empty() && ci->part() != curPart)
+ {
+ drawItem(p, ci, rect);
+ }
+ }
+
+ for (iCItem i = items.begin(); i != to; ++i)
+ {
+ CItem* ci = i->second;
+ // Draw unselected parts behind selected.
+ if(!ci->isSelected() && !ci->isMoving() && (ci->event().empty() || ci->part() == curPart))
+ {
+ drawItem(p, ci, rect);
+ }
+ }
+
+ // Draw selected parts in front of unselected.
+ for (iCItem i = items.begin(); i != to; ++i)
+ {
+ CItem* ci = i->second;
+ if(ci->isSelected() && !ci->isMoving() && (ci->event().empty() || ci->part() == curPart))
+ {
+ drawItem(p, ci, rect);
+ }
+ }
+ to = moving.lower_bound(x2);
+ for (iCItem i = moving.begin(); i != to; ++i)
+ {
+ drawItem(p, i->second, rect);
+ }
+ }
+ else {
+ p.save();
+ setPainter(p);
+
+ if (xmag <= 0) {
+ x -= 1;
+ w += 2;
+ x = (x + xpos + rmapx(xorg)) * (-xmag);
+ w = w * (-xmag);
+ }
+ else {
+ x = (x + xpos + rmapx(xorg)) / xmag;
+ w = (w + xmag - 1) / xmag;
+ x -= 1;
+ w += 2;
+ }
+ if (ymag <= 0) {
+ y -= 1;
+ h += 2;
+ y = (y + ypos + rmapy(yorg)) * (-ymag);
+ h = h * (-ymag);
+ }
+ else {
+ y = (rect.y() + ypos + rmapy(yorg))/ymag;
+ h = (rect.height()+ymag-1)/ymag;
+ y -= 1;
+ h += 2;
+ }
+
+ if (x < 0)
+ x = 0;
+ if (y < 0)
+ y = 0;
+ x2 = x + w;
+
+ drawCanvas(p, QRect(x, y, w, h));
+ p.restore();
+
+ //---------------------------------------------------
+ // draw Canvas Items
+ //---------------------------------------------------
+
+ // Draw items from other parts behind all others.
+ // Only for items with events (not arranger parts).
+ for(iCItem i = items.begin(); i != items.end(); ++i)
+ {
+ CItem* ci = i->second;
+ if(!ci->event().empty() && ci->part() != curPart)
+ {
+ drawItem(p, ci, rect);
+ }
+ }
+
+ for (iCItem i = items.begin(); i != items.end(); ++i) {
+ CItem* ci = i->second;
+ // Draw unselected parts behind selected.
+ if(!ci->isSelected() && !ci->isMoving() && (ci->event().empty() || ci->part() == curPart))
+ {
+ drawItem(p, ci, rect);
+ }
+ }
+
+ // Draw selected parts in front of unselected.
+ for (iCItem i = items.begin(); i != items.end(); ++i) {
+ CItem* ci = i->second;
+ if(ci->isSelected() && !ci->isMoving() && (ci->event().empty() || ci->part() == curPart))
+ {
+ drawItem(p, ci, rect);
+ }
+ }
+ for (iCItem i = moving.begin(); i != moving.end(); ++i)
+ {
+ drawItem(p, i->second, rect);
+ }
+ p.save();
+ setPainter(p);
+ }
+
+ //---------------------------------------------------
+ // draw marker
+ //---------------------------------------------------
+
+ int y2 = y + h;
+ MarkerList* marker = song->marker();
+ for (iMarker m = marker->begin(); m != marker->end(); ++m) {
+ int xp = m->second.tick();
+ if (xp >= x && xp < x+w) {
+ p.setPen(Qt::green);
+ p.drawLine(xp, y, xp, y2);
+ }
+ }
+
+ //---------------------------------------------------
+ // draw location marker
+ //---------------------------------------------------
+
+ p.setPen(Qt::blue);
+ if (pos[1] >= unsigned(x) && pos[1] < unsigned(x2)) {
+ p.drawLine(pos[1], y, pos[1], y2);
+ }
+ if (pos[2] >= unsigned(x) && pos[2] < unsigned(x2))
+ p.drawLine(pos[2], y, pos[2], y2);
+ p.setPen(Qt::red);
+ if (pos[0] >= unsigned(x) && pos[0] < unsigned(x2)) {
+ p.drawLine(pos[0], y, pos[0], y2);
+ }
+
+ //---------------------------------------------------
+ // draw lasso
+ //---------------------------------------------------
+
+ if (drag == DRAG_LASSO) {
+ p.setPen(Qt::blue);
+ p.setBrush(Qt::NoBrush);
+ p.drawRect(lasso);
+ }
+
+ //---------------------------------------------------
+ // draw moving items
+ //---------------------------------------------------
+
+ if(virt())
+ {
+ for(iCItem i = moving.begin(); i != moving.end(); ++i)
+ drawMoving(p, i->second, rect);
+ }
+ else
+ {
+ p.restore();
+ for(iCItem i = moving.begin(); i != moving.end(); ++i)
+ drawMoving(p, i->second, rect);
+ setPainter(p);
+ }
+ }
+
+#define WHEEL_STEPSIZE 40
+#define WHEEL_DELTA 120
+
+//---------------------------------------------------------
+// wheelEvent
+//---------------------------------------------------------
+void Canvas::wheelEvent(QWheelEvent* ev)
+ {
+ int delta = ev->delta() / WHEEL_DELTA;
+ int ypixelscale = rmapyDev(1);
+
+ if (ypixelscale <= 0)
+ ypixelscale = 1;
+
+ int scrollstep = WHEEL_STEPSIZE * (-delta);
+ if (ev->state() == Qt::ShiftModifier)
+ scrollstep = scrollstep / 10;
+
+ int newYpos = ypos + ypixelscale * scrollstep;
+
+ if (newYpos < 0)
+ newYpos = 0;
+
+ //setYPos(newYpos);
+ emit verticalScroll((unsigned)newYpos);
+
+ }
+
+void Canvas::redirectedWheelEvent(QWheelEvent* ev)
+ {
+ wheelEvent(ev);
+ }
+
+//---------------------------------------------------------
+// deselectAll
+//---------------------------------------------------------
+
+void Canvas::deselectAll()
+ {
+ for (iCItem i = items.begin(); i != items.end(); ++i)
+ i->second->setSelected(false);
+ }
+
+//---------------------------------------------------------
+// selectItem
+//---------------------------------------------------------
+
+void Canvas::selectItem(CItem* e, bool flag)
+ {
+ e->setSelected(flag);
+ }
+
+//---------------------------------------------------------
+// startMoving
+// copy selection-List to moving-List
+//---------------------------------------------------------
+
+void Canvas::startMoving(const QPoint& pos, DragType)
+ {
+ for (iCItem i = items.begin(); i != items.end(); ++i) {
+ if (i->second->isSelected()) {
+ i->second->setMoving(true);
+ moving.add(i->second);
+ }
+ }
+ moveItems(pos, 0);
+ }
+
+//---------------------------------------------------------
+// moveItems
+// dir = 0 move in all directions
+// 1 move only horizontal
+// 2 move only vertical
+//---------------------------------------------------------
+
+void Canvas::moveItems(const QPoint& pos, int dir = 0, bool rasterize)
+ {
+ int dp;
+ if(rasterize)
+ dp = y2pitch(pos.y()) - y2pitch(start.y());
+ else
+ dp = pos.y() - start.y();
+ int dx = pos.x() - start.x();
+ if (dir == 1)
+ dp = 0;
+ else if (dir == 2)
+ dx = 0;
+ for (iCItem i = moving.begin(); i != moving.end(); ++i) {
+ int x = i->second->pos().x();
+ int y = i->second->pos().y();
+ int nx = x + dx;
+ int ny;
+ QPoint mp;
+ if(rasterize)
+ {
+ ny = pitch2y(y2pitch(y) + dp);
+ mp = raster(QPoint(nx, ny));
+ }
+ else
+ {
+ ny = y + dp;
+ mp = QPoint(nx, ny);
+ }
+ if (i->second->mp() != mp) {
+ i->second->setMp(mp);
+ itemMoved(i->second, mp);
+ }
+ }
+ redraw();
+ }
+
+//---------------------------------------------------------
+// viewKeyPressEvent
+//---------------------------------------------------------
+
+void Canvas::viewKeyPressEvent(QKeyEvent* event)
+ {
+ keyPress(event);
+ }
+
+//---------------------------------------------------------
+// viewMousePressEvent
+//---------------------------------------------------------
+
+void Canvas::viewMousePressEvent(QMouseEvent* event)
+ {
+ keyState = event->state();
+
+ // special events if right button is clicked while operations
+ // like moving or drawing lasso is performed.
+ if (event->stateAfter() & Qt::RightButton) {
+ switch (drag) {
+ case DRAG_LASSO:
+ drag = DRAG_OFF;
+ redraw();
+ return;
+ case DRAG_MOVE:
+ drag = DRAG_OFF;
+ endMoveItems (start, MOVE_MOVE, 0);
+ return;
+ default:
+ break;
+ }
+ }
+
+ // ignore event if (another) button is already active:
+ if (keyState & (Qt::LeftButton|Qt::RightButton|Qt::MidButton)) {
+ return;
+ }
+ bool shift = keyState & Qt::ShiftModifier;
+ bool alt = keyState & Qt::AltModifier;
+ bool ctrl = keyState & Qt::ControlModifier;
+ start = event->pos();
+
+ //---------------------------------------------------
+ // set curItem to item mouse is pointing
+ // (if any)
+ //---------------------------------------------------
+
+ if (virt())
+ curItem = items.find(start);
+ else {
+ curItem = 0;
+ iCItem ius;
+ bool usfound = false;
+ for (iCItem i = items.begin(); i != items.end(); ++i) {
+ QRect box = i->second->bbox();
+ int x = rmapxDev(box.x());
+ int y = rmapyDev(box.y());
+ int w = rmapxDev(box.width());
+ int h = rmapyDev(box.height());
+ QRect r(x, y, w, h);
+ r.moveBy(i->second->pos().x(), i->second->pos().y());
+ if (r.contains(start)) {
+ if(i->second->isSelected())
+ {
+ curItem = i->second;
+ break;
+ }
+ else
+ if(!usfound)
+ {
+ ius = i;
+ usfound = true;
+ }
+ }
+ }
+ if(!curItem && usfound)
+ curItem = ius->second;
+ }
+
+ if (curItem && (event->button() == Qt::MidButton)) {
+ if (!curItem->isSelected()) {
+ selectItem(curItem, true);
+ updateSelection();
+ redraw();
+ }
+ startDrag(curItem, shift);
+ }
+ else if (event->button() == Qt::RightButton) {
+ if (curItem) {
+ if (shift) {
+ drag = DRAG_RESIZE;
+ setCursor();
+ int dx = start.x() - curItem->x();
+ curItem->setWidth(dx);
+ start.setX(curItem->x());
+ deselectAll();
+ selectItem(curItem, true);
+ updateSelection();
+ redraw();
+ }
+ else {
+ itemPopupMenu = genItemPopup(curItem);
+ if (itemPopupMenu) {
+ int n = itemPopupMenu->exec(QCursor::pos());
+ if (n != -1)
+ itemPopup(curItem, n, start);
+ delete itemPopupMenu;
+ }
+ }
+ }
+ else {
+ canvasPopupMenu = genCanvasPopup();
+ if (canvasPopupMenu) {
+ int n = canvasPopupMenu->exec(QCursor::pos(), 0);
+ if (n != -1)
+ canvasPopup(n);
+ delete canvasPopupMenu;
+ }
+ }
+ }
+ else if (event->button() == Qt::LeftButton) {
+ switch (_tool) {
+ case PointerTool:
+ if (curItem) {
+ if (curItem->part() != curPart) {
+ curPart = curItem->part();
+ curPartId = curPart->sn();
+ curPartChanged();
+ }
+ itemPressed(curItem);
+ // Changed by T356. Alt is default reserved for moving the whole window in KDE. Changed to Shift-Alt.
+ // Hmm, nope, shift-alt is also reserved sometimes. Must find a way to bypass,
+ // why make user turn off setting? Left alone for now...
+ if (shift)
+ drag = DRAG_COPY_START;
+ else if (alt) {
+ drag = DRAG_CLONE_START;
+ }
+ //
+ //if (shift)
+ //{
+ // if (alt)
+ // drag = DRAG_CLONE_START;
+ // else
+ // drag = DRAG_COPY_START;
+ //}
+ else if (ctrl) { //Select all on the same pitch (e.g. same y-value)
+ deselectAll();
+ //printf("Yes, ctrl and press\n");
+ for (iCItem i = items.begin(); i != items.end(); ++i) {
+ if (i->second->y() == curItem->y() )
+ selectItem(i->second, true);
+ }
+ updateSelection();
+ redraw();
+ }
+ else
+ drag = DRAG_MOVE_START;
+ }
+ else
+ drag = DRAG_LASSO_START;
+ setCursor();
+ break;
+
+ case RubberTool:
+ deleteItem(start);
+ drag = DRAG_DELETE;
+ setCursor();
+ break;
+
+ case PencilTool:
+ if (curItem) {
+ drag = DRAG_RESIZE;
+ setCursor();
+ int dx = start.x() - curItem->x();
+ curItem->setWidth(dx);
+ start.setX(curItem->x());
+ }
+ else {
+ drag = DRAG_NEW;
+ setCursor();
+ curItem = newItem(start, event->state());
+ if (curItem)
+ items.add(curItem);
+ else {
+ drag = DRAG_OFF;
+ setCursor();
+ }
+ }
+ deselectAll();
+ if (curItem)
+ selectItem(curItem, true);
+ updateSelection();
+ redraw();
+ break;
+
+ default:
+ break;
+ }
+ }
+ mousePress(event);
+ }
+
+void Canvas::scrollTimerDone()
+{
+ //printf("Canvas::scrollTimerDone drag:%d doScroll:%d\n", drag, doScroll);
+
+ if (drag != DRAG_OFF && doScroll)
+ {
+ //printf("Canvas::scrollTimerDone drag != DRAG_OFF && doScroll\n");
+
+ bool doHMove = false;
+ bool doVMove = false;
+ int hoff = rmapx(xOffset())+mapx(xorg)-1;
+ int curxpos;
+ switch(hscrollDir)
+ {
+ case HSCROLL_RIGHT:
+ hoff += scrollSpeed;
+ switch(drag)
+ {
+ case DRAG_NEW:
+ case DRAG_RESIZE:
+ case DRAGX_MOVE:
+ case DRAGX_COPY:
+ case DRAGX_CLONE:
+ case DRAGY_MOVE:
+ case DRAGY_COPY:
+ case DRAGY_CLONE:
+ case DRAG_MOVE:
+ case DRAG_COPY:
+ case DRAG_CLONE:
+ emit horizontalScrollNoLimit(hoff);
+ canScrollLeft = true;
+ ev_pos.setX(rmapxDev(rmapx(ev_pos.x()) + scrollSpeed));
+ doHMove = true;
+ break;
+ default:
+ if(canScrollRight)
+ {
+ curxpos = xpos;
+ emit horizontalScroll(hoff);
+ if(xpos <= curxpos)
+ {
+ canScrollRight = false;
+ }
+ else
+ {
+ canScrollLeft = true;
+ ev_pos.setX(rmapxDev(rmapx(ev_pos.x()) + scrollSpeed));
+ doHMove = true;
+ }
+ }
+ else
+ {
+ }
+ break;
+ }
+ break;
+ case HSCROLL_LEFT:
+ if(canScrollLeft)
+ {
+ curxpos = xpos;
+ hoff -= scrollSpeed;
+ emit horizontalScroll(hoff);
+ if(xpos >= curxpos)
+ {
+ canScrollLeft = false;
+ }
+ else
+ {
+ canScrollRight = true;
+ ev_pos.setX(rmapxDev(rmapx(ev_pos.x()) - scrollSpeed));
+ doHMove = true;
+ }
+ }
+ else
+ {
+ }
+ break;
+ default:
+ break;
+ }
+ int voff = rmapy(yOffset())+mapy(yorg);
+ int curypos;
+ switch(vscrollDir)
+ {
+ case VSCROLL_DOWN:
+ if(canScrollDown)
+ {
+ curypos = ypos;
+ voff += scrollSpeed;
+ emit verticalScroll(voff);
+ if(ypos <= curypos)
+ {
+ canScrollDown = false;
+ }
+ else
+ {
+ canScrollUp = true;
+ ev_pos.setY(rmapyDev(rmapy(ev_pos.y()) + scrollSpeed));
+ doVMove = true;
+ }
+ }
+ else
+ {
+ }
+ break;
+ case VSCROLL_UP:
+ if(canScrollUp)
+ {
+ curypos = ypos;
+ voff -= scrollSpeed;
+ emit verticalScroll(voff);
+ if(ypos >= curypos)
+ {
+ canScrollUp = false;
+ }
+ else
+ {
+ canScrollDown = true;
+ ev_pos.setY(rmapyDev(rmapy(ev_pos.y()) - scrollSpeed));
+ doVMove = true;
+ }
+ }
+ else
+ {
+ }
+ break;
+ default:
+ break;
+ }
+
+ //printf("Canvas::scrollTimerDone doHMove:%d doVMove:%d\n", doHMove, doVMove);
+
+ if(!doHMove && !doVMove)
+ {
+ delete scrollTimer;
+ scrollTimer=NULL;
+ doScroll = false;
+ return;
+ }
+ QPoint dist = ev_pos - start;
+ switch(drag)
+ {
+ case DRAG_MOVE:
+ case DRAG_COPY:
+ case DRAG_CLONE:
+ moveItems(ev_pos, 0, false);
+ break;
+ case DRAGX_MOVE:
+ case DRAGX_COPY:
+ case DRAGX_CLONE:
+ moveItems(ev_pos, 1, false);
+ break;
+ case DRAGY_MOVE:
+ case DRAGY_COPY:
+ case DRAGY_CLONE:
+ moveItems(ev_pos, 2, false);
+ break;
+ case DRAG_LASSO:
+ lasso = QRect(start.x(), start.y(), dist.x(), dist.y());
+ redraw();
+ break;
+ case DRAG_NEW:
+ case DRAG_RESIZE:
+ if (dist.x()) {
+ if (dist.x() < 1)
+ curItem->setWidth(1);
+ else
+ curItem->setWidth(dist.x());
+ redraw();
+ }
+ break;
+ default:
+ break;
+ }
+ //printf("Canvas::scrollTimerDone starting scrollTimer: Currently active?%d\n", scrollTimer->isActive());
+
+ // p3.3.43 Make sure to yield to other events (for up to 3 seconds), otherwise other events
+ // take a long time to reach us, causing scrolling to take a painfully long time to stop.
+ // FIXME: Didn't help at all.
+ //qApp->processEvents();
+ // No, try up to 100 ms for each yield.
+ //qApp->processEvents(100);
+ //
+ //scrollTimer->start( 40, TRUE ); // X ms single-shot timer
+ // OK, changing the timeout from 40 to 80 helped.
+ scrollTimer->start( 80, TRUE ); // X ms single-shot timer
+ }
+ else
+ {
+ //printf("Canvas::scrollTimerDone !(drag != DRAG_OFF && doScroll) deleting scrollTimer\n");
+
+ delete scrollTimer;
+ scrollTimer=NULL;
+ }
+}
+
+
+//---------------------------------------------------------
+// viewMouseMoveEvent
+//---------------------------------------------------------
+
+void Canvas::viewMouseMoveEvent(QMouseEvent* event)
+ {
+
+ ev_pos = event->pos();
+ QPoint dist = ev_pos - start;
+ int ax = ABS(rmapx(dist.x()));
+ int ay = ABS(rmapy(dist.y()));
+ bool moving = (ax >= 2) || (ay > 2);
+
+ // set scrolling variables: doScroll, scrollRight
+ if (drag != DRAG_OFF) {
+
+
+ int ex = rmapx(event->x())+mapx(0);
+ if(ex < 40 && canScrollLeft)
+ hscrollDir = HSCROLL_LEFT;
+ else
+ if(ex > (width() - 40))
+ switch(drag)
+ {
+ case DRAG_NEW:
+ case DRAG_RESIZE:
+ case DRAGX_MOVE:
+ case DRAGX_COPY:
+ case DRAGX_CLONE:
+ case DRAGY_MOVE:
+ case DRAGY_COPY:
+ case DRAGY_CLONE:
+ case DRAG_MOVE:
+ case DRAG_COPY:
+ case DRAG_CLONE:
+ hscrollDir = HSCROLL_RIGHT;
+ break;
+ default:
+ if(canScrollRight)
+ hscrollDir = HSCROLL_RIGHT;
+ else
+ hscrollDir = HSCROLL_NONE;
+ break;
+ }
+ else
+ hscrollDir = HSCROLL_NONE;
+ int ey = rmapy(event->y())+mapy(0);
+ if(ey < 15 && canScrollUp)
+ vscrollDir = VSCROLL_UP;
+ else
+ if(ey > (height() - 15) && canScrollDown)
+ vscrollDir = VSCROLL_DOWN;
+ else
+ vscrollDir = VSCROLL_NONE;
+ if(hscrollDir != HSCROLL_NONE || vscrollDir != VSCROLL_NONE)
+ {
+ doScroll=true;
+ if (!scrollTimer)
+ {
+ scrollTimer= new QTimer(this);
+ connect( scrollTimer, SIGNAL(timeout()), SLOT(scrollTimerDone()) );
+ scrollTimer->start( 0, TRUE ); // single-shot timer
+ }
+ }
+ else
+ doScroll=false;
+
+ }
+ else
+ {
+ doScroll=false;
+
+ canScrollLeft = true;
+ canScrollRight = true;
+ canScrollUp = true;
+ canScrollDown = true;
+ }
+
+ switch (drag) {
+ case DRAG_LASSO_START:
+ if (!moving)
+ break;
+ drag = DRAG_LASSO;
+ setCursor();
+ // proceed with DRAG_LASSO:
+
+ case DRAG_LASSO:
+ {
+ lasso = QRect(start.x(), start.y(), dist.x(), dist.y());
+
+ // printf("xorg=%d xmag=%d event->x=%d, mapx(xorg)=%d rmapx0=%d xOffset=%d rmapx(xOffset()=%d\n",
+ // xorg, xmag, event->x(),mapx(xorg), rmapx(0), xOffset(),rmapx(xOffset()));
+
+ }
+ redraw();
+ break;
+
+ case DRAG_MOVE_START:
+ case DRAG_COPY_START:
+ case DRAG_CLONE_START:
+ if (!moving)
+ break;
+ if (keyState & Qt::ControlModifier) {
+ if (ax > ay) {
+ if (drag == DRAG_MOVE_START)
+ drag = DRAGX_MOVE;
+ else if (drag == DRAG_COPY_START)
+ drag = DRAGX_COPY;
+ else
+ drag = DRAGX_CLONE;
+ }
+ else {
+ if (drag == DRAG_MOVE_START)
+ drag = DRAGY_MOVE;
+ else if (drag == DRAG_COPY_START)
+ drag = DRAGY_COPY;
+ else
+ drag = DRAGY_CLONE;
+ }
+ }
+ else {
+ if (drag == DRAG_MOVE_START)
+ drag = DRAG_MOVE;
+ else if (drag == DRAG_COPY_START)
+ drag = DRAG_COPY;
+ else
+ drag = DRAG_CLONE;
+ }
+ setCursor();
+ if (!curItem->isSelected()) {
+ if (drag == DRAG_MOVE)
+ deselectAll();
+ selectItem(curItem, true);
+ updateSelection();
+ redraw();
+ }
+ DragType dt;
+ if (drag == DRAG_MOVE)
+ dt = MOVE_MOVE;
+ else if (drag == DRAG_COPY)
+ dt = MOVE_COPY;
+ else
+ dt = MOVE_CLONE;
+
+ startMoving(ev_pos, dt);
+ break;
+
+ case DRAG_MOVE:
+ case DRAG_COPY:
+ case DRAG_CLONE:
+
+ if(!scrollTimer)
+ moveItems(ev_pos, 0);
+ break;
+
+ case DRAGX_MOVE:
+ case DRAGX_COPY:
+ case DRAGX_CLONE:
+ if(!scrollTimer)
+ moveItems(ev_pos, 1);
+ break;
+
+ case DRAGY_MOVE:
+ case DRAGY_COPY:
+ case DRAGY_CLONE:
+ if(!scrollTimer)
+ moveItems(ev_pos, 2);
+ break;
+
+ case DRAG_NEW:
+ case DRAG_RESIZE:
+ if (dist.x()) {
+ if (dist.x() < 1)
+ curItem->setWidth(1);
+ else
+ curItem->setWidth(dist.x());
+ redraw();
+ }
+ break;
+ case DRAG_DELETE:
+ deleteItem(ev_pos);
+ break;
+
+ case DRAG_OFF:
+ break;
+ }
+
+ mouseMove(ev_pos);
+ }
+
+//---------------------------------------------------------
+// viewMouseReleaseEvent
+//---------------------------------------------------------
+
+void Canvas::viewMouseReleaseEvent(QMouseEvent* event)
+ {
+// printf("release %x %x\n", event->state(), event->button());
+
+ doScroll = false;
+ canScrollLeft = true;
+ canScrollRight = true;
+ canScrollUp = true;
+ canScrollDown = true;
+ if (event->state() & (Qt::LeftButton|Qt::RightButton|Qt::MidButton) & ~(event->button())) {
+ printf("ignore %x %x\n", keyState, event->button());
+ return;
+ }
+
+ QPoint pos = event->pos();
+ bool shift = event->state() & Qt::ShiftModifier;
+ bool redrawFlag = false;
+
+ switch (drag) {
+ case DRAG_MOVE_START:
+ case DRAG_COPY_START:
+ case DRAG_CLONE_START:
+ if (!shift)
+ deselectAll();
+ selectItem(curItem, !(shift && curItem->isSelected()));
+ updateSelection();
+ redrawFlag = true;
+ itemReleased(curItem, curItem->pos());
+ break;
+ case DRAG_COPY:
+ endMoveItems(pos, MOVE_COPY, 0);
+ break;
+ case DRAGX_COPY:
+ endMoveItems(pos, MOVE_COPY, 1);
+ break;
+ case DRAGY_COPY:
+ endMoveItems(pos, MOVE_COPY, 2);
+ break;
+ case DRAG_MOVE:
+ endMoveItems(pos, MOVE_MOVE, 0);
+ break;
+ case DRAGX_MOVE:
+ endMoveItems(pos, MOVE_MOVE, 1);
+ break;
+ case DRAGY_MOVE:
+ endMoveItems(pos, MOVE_MOVE, 2);
+ break;
+ case DRAG_CLONE:
+ endMoveItems(pos, MOVE_CLONE, 0);
+ break;
+ case DRAGX_CLONE:
+ endMoveItems(pos, MOVE_CLONE, 1);
+ break;
+ case DRAGY_CLONE:
+ endMoveItems(pos, MOVE_CLONE, 2);
+ break;
+ case DRAG_OFF:
+ break;
+ case DRAG_RESIZE:
+ resizeItem(curItem, false);
+ break;
+ case DRAG_NEW:
+ newItem(curItem, false);
+ redrawFlag = true;
+ break;
+ case DRAG_LASSO_START:
+ lasso.setRect(-1, -1, -1, -1);
+ if (!shift)
+ deselectAll();
+ updateSelection();
+ redrawFlag = true;
+ break;
+
+ case DRAG_LASSO:
+ if (!shift)
+ deselectAll();
+ lasso = lasso.normalize();
+ selectLasso(shift);
+ updateSelection();
+ redrawFlag = true;
+ break;
+
+ case DRAG_DELETE:
+ break;
+ }
+ //printf("Canvas::viewMouseReleaseEvent setting drag to DRAG_OFF\n");
+
+ drag = DRAG_OFF;
+ if (redrawFlag)
+ redraw();
+ setCursor();
+ }
+
+//---------------------------------------------------------
+// selectLasso
+//---------------------------------------------------------
+
+void Canvas::selectLasso(bool toggle)
+ {
+ int n = 0;
+ if (virt()) {
+ for (iCItem i = items.begin(); i != items.end(); ++i) {
+ if (i->second->intersects(lasso)) {
+ selectItem(i->second, !(toggle && i->second->isSelected()));
+ ++n;
+ }
+ }
+ }
+ else {
+ for (iCItem i = items.begin(); i != items.end(); ++i) {
+ QRect box = i->second->bbox();
+ int x = rmapxDev(box.x());
+ int y = rmapyDev(box.y());
+ int w = rmapxDev(box.width());
+ int h = rmapyDev(box.height());
+ QRect r(x, y, w, h);
+ r.moveBy(i->second->pos().x(), i->second->pos().y());
+ if (r.intersects(lasso)) {
+ selectItem(i->second, !(toggle && i->second->isSelected()));
+ ++n;
+ }
+ }
+ }
+
+
+
+ if (n) {
+ updateSelection();
+ redraw();
+ }
+ }
+
+//---------------------------------------------------------
+// endMoveItems
+// dir = 0 move in all directions
+// 1 move only horizontal
+// 2 move only vertical
+//---------------------------------------------------------
+
+void Canvas::endMoveItems(const QPoint& pos, DragType dragtype, int dir)
+ {
+ startUndo(dragtype);
+
+ int dp = y2pitch(pos.y()) - y2pitch(start.y());
+ int dx = pos.x() - start.x();
+
+ if (dir == 1)
+ dp = 0;
+ else if (dir == 2)
+ dx = 0;
+
+
+
+ int modified = 0;
+
+ // Removed by T356.
+ /*
+ for (iCItem i = moving.begin(); i != moving.end(); ++i) {
+ int x = i->second->pos().x();
+ int y = i->second->pos().y();
+ int nx = x + dx;
+ int ny = pitch2y(y2pitch(y) + dp);
+ QPoint newpos = raster(QPoint(nx, ny));
+ selectItem(i->second, true);
+
+ if (moveItem(i->second, newpos, dragtype, &modified))
+ i->second->move(newpos);
+ if (moving.size() == 1) {
+ itemReleased(curItem, newpos);
+ }
+ if (dragtype == MOVE_COPY || dragtype == MOVE_CLONE)
+ selectItem(i->second, false);
+ }
+ */
+
+ moveCanvasItems(moving, dp, dx, dragtype, &modified);
+
+ endUndo(dragtype, modified);
+ moving.clear();
+ updateSelection();
+ redraw();
+ }
+
+//---------------------------------------------------------
+// getCurrentDrag
+// returns 0 if there is no drag operation
+//---------------------------------------------------------
+
+int Canvas::getCurrentDrag()
+ {
+ printf("getCurrentDrag=%d\n", drag);
+ return drag;
+ }
+
+//---------------------------------------------------------
+// deleteItem
+//---------------------------------------------------------
+
+void Canvas::deleteItem(const QPoint& p)
+ {
+ if (virt()) {
+ for (iCItem i = items.begin(); i != items.end(); ++i) {
+ if (i->second->contains(p)) {
+ selectItem(i->second, false);
+ if (!deleteItem(i->second)) {
+ if (drag == DRAG_DELETE)
+ drag = DRAG_OFF;
+ }
+ break;
+ }
+ }
+ }
+ else {
+ for (iCItem i = items.begin(); i != items.end(); ++i) {
+ QRect box = i->second->bbox();
+ int x = rmapxDev(box.x());
+ int y = rmapyDev(box.y());
+ int w = rmapxDev(box.width());
+ int h = rmapyDev(box.height());
+ QRect r(x, y, w, h);
+ r.moveBy(i->second->pos().x(), i->second->pos().y());
+ if (r.contains(p)) {
+ if (deleteItem(i->second)) {
+ selectItem(i->second, false);
+ }
+ break;
+ }
+ }
+ }
+ }
+
+//---------------------------------------------------------
+// setTool
+//---------------------------------------------------------
+
+void Canvas::setTool(int t)
+ {
+ if (_tool == Tool(t))
+ return;
+ _tool = Tool(t);
+ setCursor();
+ }
+
+//---------------------------------------------------------
+// setCursor
+//---------------------------------------------------------
+
+void Canvas::setCursor()
+ {
+ switch (drag) {
+ case DRAGX_MOVE:
+ case DRAGX_COPY:
+ case DRAGX_CLONE:
+ QWidget::setCursor(QCursor(Qt::SizeHorCursor));
+ break;
+
+ case DRAGY_MOVE:
+ case DRAGY_COPY:
+ case DRAGY_CLONE:
+ QWidget::setCursor(QCursor(Qt::SizeVerCursor));
+ break;
+
+ case DRAG_MOVE:
+ case DRAG_COPY:
+ case DRAG_CLONE:
+ QWidget::setCursor(QCursor(Qt::SizeAllCursor));
+ break;
+
+ case DRAG_RESIZE:
+ QWidget::setCursor(QCursor(Qt::SizeHorCursor));
+ break;
+
+ case DRAG_DELETE:
+ case DRAG_COPY_START:
+ case DRAG_CLONE_START:
+ case DRAG_MOVE_START:
+ case DRAG_NEW:
+ case DRAG_LASSO_START:
+ case DRAG_LASSO:
+ case DRAG_OFF:
+ switch(_tool) {
+ case PencilTool:
+ QWidget::setCursor(QCursor(*pencilIcon, 4, 15));
+ break;
+ case RubberTool:
+ QWidget::setCursor(QCursor(*deleteIcon, 4, 15));
+ break;
+ case GlueTool:
+ QWidget::setCursor(QCursor(*glueIcon, 4, 15));
+ break;
+ case CutTool:
+ QWidget::setCursor(QCursor(*cutIcon, 4, 15));
+ break;
+ case MuteTool:
+ QWidget::setCursor(QCursor(*editmuteIcon, 4, 15));
+ break;
+ default:
+ QWidget::setCursor(QCursor(Qt::ArrowCursor));
+ break;
+ }
+ break;
+ }
+ }
+
+//---------------------------------------------------------
+// keyPress
+//---------------------------------------------------------
+
+void Canvas::keyPress(QKeyEvent* event)
+ {
+ event->ignore();
+ }
+
+//---------------------------------------------------------
+// isSingleSelection
+//---------------------------------------------------------
+
+bool Canvas::isSingleSelection()
+ {
+ return selectionSize() == 1;
+ }
+
+//---------------------------------------------------------
+// selectionSize
+//---------------------------------------------------------
+
+int Canvas::selectionSize()
+ {
+ int n = 0;
+ for (iCItem i = items.begin(); i != items.end(); ++i) {
+ if (i->second->isSelected())
+ ++n;
+ }
+ return n;
+ }
+
+//---------------------------------------------------------
+// genCanvasPopup
+//---------------------------------------------------------
+
+Q3PopupMenu* Canvas::genCanvasPopup()
+ {
+ if (canvasTools == 0)
+ return 0;
+ Q3PopupMenu* canvasPopup = new Q3PopupMenu(this);
+
+ for (unsigned i = 0; i < 9; ++i) {
+ if ((canvasTools & (1 << i))==0)
+ continue;
+ canvasPopup->insertItem(QIcon(**toolList[i].icon), tr(toolList[i].tip), 1<<i); // ddskrjo
+ }
+ canvasPopup->setActiveItem(0);
+ return canvasPopup;
+ }
+
+//---------------------------------------------------------
+// canvasPopup
+//---------------------------------------------------------
+
+void Canvas::canvasPopup(int n)
+ {
+ setTool(n);
+ emit toolChanged(n);
+ }
+
+void Canvas::setCurrentPart(Part* part)
+{
+ curItem = NULL;
+ deselectAll();
+ curPart = part;
+ curPartId = curPart->sn();
+ curPartChanged();
+}
diff --git a/muse2/muse/widgets/canvas.h b/muse2/muse/widgets/canvas.h
new file mode 100644
index 00000000..f25d1b2f
--- /dev/null
+++ b/muse2/muse/widgets/canvas.h
@@ -0,0 +1,185 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: canvas.h,v 1.3.2.8 2009/02/02 21:38:01 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __CANVAS_H__
+#define __CANVAS_H__
+
+#include "citem.h"
+#include "view.h"
+#include "tools.h"
+//Added by qt3to4:
+#include <QWheelEvent>
+#include <QMouseEvent>
+#include <Q3PopupMenu>
+#include <QKeyEvent>
+
+class Q3PopupMenu;
+
+//---------------------------------------------------------
+// Canvas
+//---------------------------------------------------------
+
+class Canvas : public View {
+ Q_OBJECT
+ int canvasTools;
+ QTimer *scrollTimer;
+
+ bool doScroll;
+ int scrollSpeed;
+
+ QPoint ev_pos;
+ bool canScrollLeft;
+ bool canScrollRight;
+ bool canScrollUp;
+ bool canScrollDown;
+ protected:
+ enum DragMode {
+ DRAG_OFF, DRAG_NEW,
+ DRAG_MOVE_START, DRAG_MOVE,
+ DRAG_COPY_START, DRAG_COPY,
+ DRAG_CLONE_START, DRAG_CLONE,
+ DRAGX_MOVE, DRAGY_MOVE,
+ DRAGX_COPY, DRAGY_COPY,
+ DRAGX_CLONE, DRAGY_CLONE,
+ DRAG_DELETE,
+ DRAG_RESIZE, DRAG_LASSO_START, DRAG_LASSO,
+ };
+
+ enum DragType {
+ MOVE_MOVE, MOVE_COPY, MOVE_CLONE
+ };
+
+ enum HScrollDir {
+ HSCROLL_NONE, HSCROLL_LEFT, HSCROLL_RIGHT
+ };
+ enum VScrollDir {
+ VSCROLL_NONE, VSCROLL_UP, VSCROLL_DOWN
+ };
+
+ CItemList items;
+ CItemList moving;
+ CItem* curItem;
+ Part* curPart;
+ int curPartId;
+
+ DragMode drag;
+ QRect lasso;
+ QPoint start;
+ Tool _tool;
+ unsigned pos[3];
+
+ HScrollDir hscrollDir;
+ VScrollDir vscrollDir;
+ int keyState;
+ Q3PopupMenu* itemPopupMenu;
+ Q3PopupMenu* canvasPopupMenu;
+
+ void setCursor();
+ virtual void viewKeyPressEvent(QKeyEvent* event);
+ virtual void viewMousePressEvent(QMouseEvent* event);
+ virtual void viewMouseMoveEvent(QMouseEvent*);
+ virtual void viewMouseReleaseEvent(QMouseEvent*);
+ virtual void draw(QPainter&, const QRect&);
+ virtual void wheelEvent(QWheelEvent* e);
+
+ virtual void mousePress(QMouseEvent*) {}
+ virtual void keyPress(QKeyEvent*);
+ virtual void mouseMove(const QPoint&) = 0;
+ virtual void mouseRelease(const QPoint&) {}
+ virtual void drawCanvas(QPainter&, const QRect&) = 0;
+ virtual void drawItem(QPainter&, const CItem*, const QRect&) = 0;
+ virtual void drawMoving(QPainter&, const CItem*, const QRect&) = 0;
+ virtual void updateSelection() = 0;
+ virtual QPoint raster(const QPoint&) const = 0;
+ virtual int y2pitch(int) const = 0; //CDW
+ virtual int pitch2y(int) const = 0; //CDW
+
+ virtual void moveCanvasItems(CItemList&, int, int, DragType, int*) = 0;
+ // Changed by T356.
+ //virtual bool moveItem(CItem*, const QPoint&, DragType, int*) = 0;
+ virtual bool moveItem(CItem*, const QPoint&, DragType) = 0;
+ virtual CItem* newItem(const QPoint&, int state) = 0;
+ virtual void resizeItem(CItem*, bool noSnap=false) = 0;
+ virtual void newItem(CItem*, bool noSnap=false) = 0;
+ virtual bool deleteItem(CItem*) = 0;
+ virtual void startUndo(DragType) = 0;
+
+ virtual void endUndo(DragType, int flags) = 0;
+ int getCurrentDrag();
+
+ /*!
+ \brief Virtual member
+
+ Implementing class is responsible for creating a popup to be shown when the user rightclicks an item on the Canvas
+ \param item The canvas item that is rightclicked
+ \return A QPopupMenu*
+ */
+ virtual Q3PopupMenu* genItemPopup(CItem* /*item*/) { return 0; }
+
+ /*!
+ \brief Pure virtual member
+
+ Implementing class is responsible for creating a popup to be shown when the user rightclicks an empty region of the canvas
+ \return A QPopupMenu*
+ */
+ Q3PopupMenu* genCanvasPopup();
+
+ /*!
+ \brief Virtual member
+
+ This is the function called when the user has selected an option in the popupmenu generated by genItemPopup()
+ \param item the canvas item the whole thing is about
+ \param n Command type
+ \param pt I think this is the position of the pointer when right mouse button was pressed
+ */
+ virtual void itemPopup(CItem* /*item */, int /*n*/, const QPoint& /*pt*/) {}
+ void canvasPopup(int);
+
+ virtual void startDrag(CItem*, bool) {}
+
+ // selection
+ virtual void deselectAll();
+ virtual void selectItem(CItem* e, bool);
+
+ virtual void deleteItem(const QPoint&);
+
+ // moving
+ void startMoving(const QPoint&, DragType);
+
+ void moveItems(const QPoint&, int dir, bool rasterize = true);
+ void endMoveItems(const QPoint&, DragType, int dir);
+
+ virtual void selectLasso(bool toggle);
+
+ virtual void itemPressed(const CItem*) {}
+ virtual void itemReleased(const CItem*, const QPoint&) {}
+ virtual void itemMoved(const CItem*, const QPoint&) {}
+ virtual void curPartChanged() {}
+
+ public slots:
+ void setTool(int t);
+ void setPos(int, unsigned, bool adjustScrollbar);
+ void scrollTimerDone(void);
+ void redirectedWheelEvent(QWheelEvent*);
+
+ signals:
+ void followEvent(int);
+ void toolChanged(int);
+ void verticalScroll(unsigned);
+ void horizontalScroll(unsigned);
+ void horizontalScrollNoLimit(unsigned);
+ public:
+ Canvas(QWidget* parent, int sx, int sy, const char* name = 0);
+ bool isSingleSelection();
+ int selectionSize();
+ Tool tool() const { return _tool; }
+ Part* part() const { return curPart; }
+ void setCurrentPart(Part*);
+ void setCanvasTools(int n) { canvasTools = n; }
+ };
+#endif
+
diff --git a/muse2/muse/widgets/checkbox.cpp b/muse2/muse/widgets/checkbox.cpp
new file mode 100644
index 00000000..3cded268
--- /dev/null
+++ b/muse2/muse/widgets/checkbox.cpp
@@ -0,0 +1,58 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: checkbox.cpp,v 1.2.2.2 2006/10/29 07:54:52 terminator356 Exp $
+// (C) Copyright 2004 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "checkbox.h"
+//Added by qt3to4:
+#include <QMouseEvent>
+
+//---------------------------------------------------------
+// CheckBox
+//---------------------------------------------------------
+
+CheckBox::CheckBox(QWidget* parent, int i, const char* name)
+ : QCheckBox(parent, name)
+ {
+ _id = i;
+ connect(this, SIGNAL(toggled(bool)), SLOT(hasToggled(bool)));
+ }
+
+void CheckBox::hasToggled(bool val)
+ {
+ emit toggleChanged(val, _id);
+ }
+
+//------------------------------------------------------------
+// mousePressEvent
+//------------------------------------------------------------
+
+void CheckBox::mousePressEvent(QMouseEvent *e)
+{
+ if(e->button() == Qt::RightButton)
+ emit checkboxRightClicked(e->globalPos(), _id);
+ else
+ {
+ if(isChecked())
+ setChecked(false);
+ else
+ setChecked(true);
+ emit checkboxPressed(_id);
+ }
+}
+
+//------------------------------------------------------------
+// mouseReleaseEvent
+//------------------------------------------------------------
+
+void CheckBox::mouseReleaseEvent(QMouseEvent *e)
+{
+ if(e->button() == Qt::RightButton)
+ return;
+
+ emit checkboxReleased(_id);
+}
+
+
diff --git a/muse2/muse/widgets/checkbox.h b/muse2/muse/widgets/checkbox.h
new file mode 100644
index 00000000..26209987
--- /dev/null
+++ b/muse2/muse/widgets/checkbox.h
@@ -0,0 +1,45 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: checkbox.h,v 1.2.2.2 2006/10/29 07:54:52 terminator356 Exp $
+// (C) Copyright 2004 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __CHECKBOX_H__
+#define __CHECKBOX_H__
+
+#include <qcheckbox.h>
+//Added by qt3to4:
+#include <QMouseEvent>
+
+//---------------------------------------------------------
+// CheckBox
+//---------------------------------------------------------
+
+class CheckBox : public QCheckBox {
+ Q_OBJECT
+ Q_PROPERTY( int id READ id WRITE setId )
+
+ int _id;
+
+ protected:
+ void mousePressEvent(QMouseEvent *e);
+ void mouseReleaseEvent(QMouseEvent *e);
+
+ private slots:
+ void hasToggled(bool val);
+
+ signals:
+ void toggleChanged(bool, int);
+ void checkboxPressed(int);
+ void checkboxReleased(int);
+ void checkboxRightClicked(const QPoint &, int);
+
+ public:
+ CheckBox(QWidget* parent, int i, const char* name = 0);
+ int id() const { return _id; }
+ void setId(int i) { _id = i; }
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/citem.cpp b/muse2/muse/widgets/citem.cpp
new file mode 100644
index 00000000..2974196d
--- /dev/null
+++ b/muse2/muse/widgets/citem.cpp
@@ -0,0 +1,93 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: citem.cpp,v 1.2.2.3 2008/01/26 07:23:21 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "part.h"
+#include "citem.h"
+#include <stdio.h>
+
+//---------------------------------------------------------
+// CItem
+//---------------------------------------------------------
+
+CItem::CItem()
+ {
+ _isMoving = false;
+ }
+
+CItem::CItem(const QPoint&p, const QRect& r)
+ {
+ _pos = p;
+ _bbox = r;
+ _isMoving = false;
+ }
+
+// Changed by Tim. p3.3.20
+//CItem::CItem(Event e, Part* p)
+CItem::CItem(const Event& e, Part* p)
+ {
+ _event = e;
+ _part = p;
+ _isMoving = false;
+ }
+
+//---------------------------------------------------------
+// isSelected
+//---------------------------------------------------------
+
+bool CItem::isSelected() const
+ {
+ return _event.empty() ? _part->selected() : _event.selected();
+ }
+
+//---------------------------------------------------------
+// setSelected
+//---------------------------------------------------------
+
+void CItem::setSelected(bool f)
+ {
+ _event.empty() ? _part->setSelected(f) : _event.setSelected(f);
+ }
+
+//---------------------------------------------------------
+// CItemList
+//---------------------------------------------------------
+
+CItem* CItemList::find(const QPoint& pos) const
+ {
+ rciCItem ius;
+ bool usfound = false;
+ for (rciCItem i = rbegin(); i != rend(); ++i) {
+ if (i->second->contains(pos))
+ {
+ if(i->second->isSelected())
+ return i->second;
+
+ else
+ {
+ if(!usfound)
+ {
+ ius = i;
+ usfound = true;
+ }
+ }
+ }
+ }
+ if(usfound)
+ return ius->second;
+ else
+ return 0;
+ }
+
+//---------------------------------------------------------
+// CItemList
+//---------------------------------------------------------
+
+void CItemList::add(CItem* item)
+ {
+ std::multimap<int, CItem*, std::less<int> >::insert(std::pair<const int, CItem*> (item->bbox().x(), item));
+ }
+
diff --git a/muse2/muse/widgets/citem.h b/muse2/muse/widgets/citem.h
new file mode 100644
index 00000000..c58b6bb1
--- /dev/null
+++ b/muse2/muse/widgets/citem.h
@@ -0,0 +1,90 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: citem.h,v 1.2.2.1 2006/10/04 18:45:35 spamatica Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __CITEM_H__
+#define __CITEM_H__
+
+#include <map>
+#include <qpoint.h>
+#include <qrect.h>
+
+#include "event.h"
+
+class Event;
+class Part;
+
+//---------------------------------------------------------
+// CItem
+// virtuelle Basisklasse fr alle Canvas Item's
+//---------------------------------------------------------
+
+class CItem {
+ private:
+ Event _event;
+ Part* _part;
+
+ protected:
+ bool _isMoving;
+ QPoint moving;
+ QRect _bbox;
+ QPoint _pos;
+
+ public:
+ CItem(const QPoint& p, const QRect& r);
+ CItem();
+ // Changed by Tim. p3.3.20
+ //CItem(Event e, Part* p);
+ CItem(const Event& e, Part* p);
+
+ bool isMoving() const { return _isMoving; }
+ void setMoving(bool f) { _isMoving = f; }
+ bool isSelected() const;
+ void setSelected(bool f);
+
+ int width() const { return _bbox.width(); }
+ void setWidth(int l) { _bbox.setWidth(l); }
+ void setHeight(int l) { _bbox.setHeight(l); }
+ void setMp(const QPoint&p) { moving = p; }
+ const QPoint mp() const { return moving; }
+ int x() const { return _pos.x(); }
+ int y() const { return _pos.y(); }
+ void setY(int y) { _bbox.setY(y); }
+ QPoint pos() const { return _pos; }
+ void setPos(const QPoint& p) { _pos = p; }
+ int height() const { return _bbox.height(); }
+ const QRect& bbox() const { return _bbox; }
+ void setBBox(const QRect& r) { _bbox = r; }
+ void move(const QPoint& tl) {
+ _bbox.moveTopLeft(tl);
+ _pos = tl;
+ }
+ bool contains(const QPoint& p) const { return _bbox.contains(p); }
+ bool intersects(const QRect& r) const { return r.intersects(_bbox); }
+
+ Event event() const { return _event; }
+ void setEvent(Event& e) { _event = e; }
+ Part* part() const { return _part; }
+ void setPart(Part* p) { _part = p; }
+ };
+
+typedef std::multimap<int, CItem*, std::less<int> >::iterator iCItem;
+//typedef std::multimap<int, CItem*, std::less<int> >::const_iterator ciCItem;
+typedef std::multimap<int, CItem*, std::less<int> >::const_reverse_iterator rciCItem;
+
+//---------------------------------------------------------
+// CItemList
+// Canvas Item List
+//---------------------------------------------------------
+
+class CItemList: public std::multimap<int, CItem*, std::less<int> > {
+ public:
+ void add(CItem*);
+ CItem* find(const QPoint& pos) const;
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/cliplisteditorbase.ui b/muse2/muse/widgets/cliplisteditorbase.ui
new file mode 100644
index 00000000..272c578c
--- /dev/null
+++ b/muse2/muse/widgets/cliplisteditorbase.ui
@@ -0,0 +1,168 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>ClipListEditorBase</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>ClipListEditorBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>480</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: ClipList</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QListView">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Refs</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Start</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Len</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Data</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>view</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Clip Properties</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Pos:</string>
+ </property>
+ </widget>
+ <widget class="PosEdit">
+ <property name="name">
+ <cstring>start</cstring>
+ </property>
+ <property name="smpte">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Len:</string>
+ </property>
+ </widget>
+ <widget class="PosEdit">
+ <property name="name">
+ <cstring>len</cstring>
+ </property>
+ <property name="smpte">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<includes>
+ <include location="local" impldecl="in declaration">posedit.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/comboQuant.cpp b/muse2/muse/widgets/comboQuant.cpp
new file mode 100644
index 00000000..4a81bc8e
--- /dev/null
+++ b/muse2/muse/widgets/comboQuant.cpp
@@ -0,0 +1,61 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: comboQuant.cpp,v 1.1.1.1 2003/10/27 18:54:52 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <q3listbox.h>
+#include "comboQuant.h"
+
+static int quantTable[] = {
+ 1, 16, 32, 64, 128, 256, 512, 1024,
+ 1, 24, 48, 96, 192, 384, 768, 1536,
+ 1, 36, 72, 144, 288, 576, 1152, 2304
+ };
+
+static const char* quantStrings[] = {
+ QT_TR_NOOP("Off"), "64T", "32T", "16T", "8T", "4T", "2T", "1T",
+ QT_TR_NOOP("Off"), "64", "32", "16", "8", "4", "2", "1",
+ QT_TR_NOOP("Off"), "64.", "32.", "16.", "8.", "4.", "2.", "1."
+ };
+
+//---------------------------------------------------------
+// ComboQuant
+//---------------------------------------------------------
+
+ComboQuant::ComboQuant(QWidget* parent, const char* name)
+ : QComboBox(parent, name)
+ {
+ Q3ListBox* qlist = new Q3ListBox(this);
+ qlist->setMinimumWidth(95);
+ //setListBox(qlist); ddskrjo
+ qlist->setColumnMode(3);
+ for (int i = 0; i < 24; i++)
+ qlist->insertItem(tr(quantStrings[i]), i);
+ connect(this, SIGNAL(activated(int)), SLOT(activated(int)));
+ }
+
+//---------------------------------------------------------
+// activated
+//---------------------------------------------------------
+
+void ComboQuant::activated(int index)
+ {
+ emit valueChanged(quantTable[index]);
+ }
+
+//---------------------------------------------------------
+// setQuant
+//---------------------------------------------------------
+
+void ComboQuant::setValue(int val)
+ {
+ for (int i = 0; i < 24; i++) {
+ if (val == quantTable[i]) {
+ setCurrentItem(i);
+ return;
+ }
+ }
+ }
+
diff --git a/muse2/muse/widgets/comboQuant.h b/muse2/muse/widgets/comboQuant.h
new file mode 100644
index 00000000..0031fa33
--- /dev/null
+++ b/muse2/muse/widgets/comboQuant.h
@@ -0,0 +1,33 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: comboQuant.h,v 1.1.1.1 2003/10/27 18:54:30 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __COMBOQUANT_H__
+#define __COMBOQUANT_H__
+
+#include <qwidget.h>
+#include <qcombobox.h>
+
+//---------------------------------------------------------
+// ComboQuant
+//---------------------------------------------------------
+
+class ComboQuant : public QComboBox {
+ Q_OBJECT
+
+ private slots:
+ void activated(int);
+
+ signals:
+ void valueChanged(int);
+
+ public:
+ ComboQuant(QWidget* parent = 0, const char* name = 0);
+ void setValue(int val);
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/combobox.cpp b/muse2/muse/widgets/combobox.cpp
new file mode 100644
index 00000000..35959636
--- /dev/null
+++ b/muse2/muse/widgets/combobox.cpp
@@ -0,0 +1,74 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: combobox.cpp,v 1.4 2004/05/06 15:08:07 wschweer Exp $
+// (C) Copyright 2004 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <q3popupmenu.h>
+#include <qcursor.h>
+//Added by qt3to4:
+#include <QMouseEvent>
+#include <Q3Frame>
+#include <QLabel>
+#include "combobox.h"
+
+//---------------------------------------------------------
+// ComboBox
+//---------------------------------------------------------
+
+ComboBox::ComboBox(QWidget* parent, const char* name)
+ : QLabel(parent, name)
+ {
+ _currentItem = 0;
+ _id = -1;
+ list = new Q3PopupMenu(0, "comboPopup");
+ connect(list, SIGNAL(activated(int)), SLOT(activatedIntern(int)));
+ setFrameStyle(Q3Frame::Panel | Q3Frame::Raised);
+ setLineWidth(2);
+ }
+
+ComboBox::~ComboBox()
+ {
+ delete list;
+ }
+
+//---------------------------------------------------------
+// mousePressEvent
+//---------------------------------------------------------
+
+void ComboBox::mousePressEvent(QMouseEvent*)
+ {
+ list->exec(QCursor::pos());
+ }
+
+//---------------------------------------------------------
+// activated
+//---------------------------------------------------------
+
+void ComboBox::activatedIntern(int n)
+ {
+ _currentItem = n;
+ emit activated(n, _id);
+ setText(list->text(_currentItem));
+ }
+
+//---------------------------------------------------------
+// setCurrentItem
+//---------------------------------------------------------
+
+void ComboBox::setCurrentItem(int i)
+ {
+ _currentItem = i;
+ setText(list->text(list->idAt(_currentItem)));
+ }
+
+//---------------------------------------------------------
+// insertItem
+//---------------------------------------------------------
+
+void ComboBox::insertItem(const QString& s, int id, int idx)
+ {
+ list->insertItem(s, id, idx);
+ }
+
diff --git a/muse2/muse/widgets/combobox.h b/muse2/muse/widgets/combobox.h
new file mode 100644
index 00000000..99bb382c
--- /dev/null
+++ b/muse2/muse/widgets/combobox.h
@@ -0,0 +1,49 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: combobox.h,v 1.3 2004/02/29 12:12:36 wschweer Exp $
+// (C) Copyright 2004 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __COMBOBOX_H__
+#define __COMBOBOX_H__
+
+#include <qlabel.h>
+//Added by qt3to4:
+#include <Q3PopupMenu>
+#include <QMouseEvent>
+
+class Q3PopupMenu;
+
+//---------------------------------------------------------
+// ComboBox
+//---------------------------------------------------------
+
+class ComboBox : public QLabel {
+ Q_OBJECT
+ Q_PROPERTY( int id READ id WRITE setId )
+
+ int _id;
+ int _currentItem;
+ Q3PopupMenu* list;
+ virtual void mousePressEvent(QMouseEvent*);
+
+ private slots:
+ void activatedIntern(int);
+
+ signals:
+ void activated(int val, int id);
+
+ public:
+ ComboBox(QWidget* parent, const char* name = 0);
+ ~ComboBox();
+ void setCurrentItem(int);
+ void insertItem(const QString& s, int id = -1, int idx=-1);
+ int id() const { return _id; }
+ void setId(int i) { _id = i; }
+ };
+
+#endif
+
+
+
diff --git a/muse2/muse/widgets/comment.cpp b/muse2/muse/widgets/comment.cpp
new file mode 100644
index 00000000..ef727859
--- /dev/null
+++ b/muse2/muse/widgets/comment.cpp
@@ -0,0 +1,86 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: comment.cpp,v 1.2 2004/02/08 18:30:00 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "comment.h"
+#include "song.h"
+#include "track.h"
+#include <q3multilineedit.h>
+#include <qlabel.h>
+
+//---------------------------------------------------------
+// Comment
+//---------------------------------------------------------
+
+Comment::Comment(QWidget* parent, const char* name)
+ : CommentBase(parent, name)
+ {
+ }
+
+//---------------------------------------------------------
+// textChanged
+//---------------------------------------------------------
+
+void Comment::textChanged()
+ {
+ setText(textentry->text());
+ }
+
+//---------------------------------------------------------
+// TrackComment
+//---------------------------------------------------------
+
+TrackComment::TrackComment(Track* t, QWidget* parent, const char* name)
+ : Comment(parent, name)
+ {
+ setCaption(tr("MusE: Track Comment"));
+ track = t;
+ connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int)));
+ textentry->setText(track->comment());
+ connect(textentry, SIGNAL(textChanged()), SLOT(textChanged()));
+ label1->setText(tr("Track Comment:"));
+ label2->setText(track->name());
+ }
+
+//---------------------------------------------------------
+// songChanged
+//---------------------------------------------------------
+
+void TrackComment::songChanged(int flags)
+ {
+ if ((flags & (SC_TRACK_INSERTED|SC_TRACK_REMOVED|SC_TRACK_MODIFIED)) == 0)
+ return;
+
+ // check if track still exists:
+ TrackList* tl = song->tracks();
+ iTrack it;
+ for (it = tl->begin(); it != tl->end(); ++it) {
+ if (track == *it)
+ break;
+ }
+ if (it == tl->end()) {
+ close(true);
+ return;
+ }
+ label2->setText(track->name());
+ if (track->comment() != textentry->text()) {
+ disconnect(textentry, SIGNAL(textChanged()), this, SLOT(textChanged()));
+ textentry->setText(track->comment());
+ textentry->setCursorPosition(1000, 1000);
+ connect(textentry, SIGNAL(textChanged()), this, SLOT(textChanged()));
+ }
+ }
+
+//---------------------------------------------------------
+// setText
+//---------------------------------------------------------
+
+void TrackComment::setText(const QString& s)
+ {
+ track->setComment(s);
+ song->update(SC_TRACK_MODIFIED);
+ }
+
diff --git a/muse2/muse/widgets/comment.h b/muse2/muse/widgets/comment.h
new file mode 100644
index 00000000..f3fbd547
--- /dev/null
+++ b/muse2/muse/widgets/comment.h
@@ -0,0 +1,53 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: comment.h,v 1.2 2004/02/08 18:30:00 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __COMMENT_H__
+#define __COMMENT_H__
+
+#include <qwidget.h>
+#include "commentbase.h"
+
+class Xml;
+class Track;
+
+//---------------------------------------------------------
+// Comment
+//---------------------------------------------------------
+
+class Comment : public CommentBase {
+ Q_OBJECT
+
+ private:
+ virtual void setText(const QString& s) = 0;
+
+ private slots:
+ void textChanged();
+
+ public:
+ Comment(QWidget* parent, const char* name = 0);
+ };
+
+//---------------------------------------------------------
+// TrackComment
+//---------------------------------------------------------
+
+class TrackComment : public Comment {
+ Track* track;
+ Q_OBJECT
+
+ private:
+ virtual void setText(const QString& s);
+
+ private slots:
+ void songChanged(int);
+
+ public:
+ TrackComment(Track*, QWidget*, const char* name = 0);
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/commentbase.ui b/muse2/muse/widgets/commentbase.ui
new file mode 100644
index 00000000..a4bed010
--- /dev/null
+++ b/muse2/muse/widgets/commentbase.ui
@@ -0,0 +1,116 @@
+<!DOCTYPE UI><UI>
+<class>CommentBase</class>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>CommentBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>387</width>
+ <height>205</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Form1</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>label1</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Track Comment</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>label2</cstring>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>12</pointsize>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Sunken</enum>
+ </property>
+ <property stdset="1">
+ <name>midLineWidth</name>
+ <number>1</number>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Track 1</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QMultiLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>textentry</cstring>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>12</pointsize>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>WinPanel</enum>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+</UI>
diff --git a/muse2/muse/widgets/configmidifilebase.ui b/muse2/muse/widgets/configmidifilebase.ui
new file mode 100644
index 00000000..4ba53d7e
--- /dev/null
+++ b/muse2/muse/widgets/configmidifilebase.ui
@@ -0,0 +1,259 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>ConfigMidiFileBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>ConfigMidiFileBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>548</width>
+ <height>353</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Config Midi File Import/Export</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>midiImportGroupBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Import:</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>splitPartsCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>Split tracks into &amp;parts</string>
+ </property>
+ <property name="accel">
+ <string>Alt+P</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Split tracks into parts, or one single part</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>midiExportGroupBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Export:</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>copyrightEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>96</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>192</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>384</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>divisionCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>extendedFormat</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Enable extended smf format (currently not implemented)</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="4" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>twoByteTimeSigs</cstring>
+ </property>
+ <property name="text">
+ <string>Use &amp;2-byte time signatures instead of standard 4</string>
+ </property>
+ <property name="accel">
+ <string>Alt+2</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Copyright:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Format:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Division:</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="5" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>optNoteOffs</cstring>
+ </property>
+ <property name="text">
+ <string>Save space by replacing note-offs with &amp;zero velocity note-ons</string>
+ </property>
+ <property name="accel">
+ <string>Alt+Z</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="1">
+ <item>
+ <property name="text">
+ <string>0 (single track)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>1 (multiple tracks)</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>formatCombo</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>ConfigMidiFileBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>ConfigMidiFileBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/ctrlcombo.cpp b/muse2/muse/widgets/ctrlcombo.cpp
new file mode 100644
index 00000000..26512639
--- /dev/null
+++ b/muse2/muse/widgets/ctrlcombo.cpp
@@ -0,0 +1,56 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: ctrlcombo.cpp,v 1.1.1.1 2003/10/27 18:55:02 wschweer Exp $
+//
+// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "ctrlcombo.h"
+
+//---------------------------------------------------------
+// CtrlComboBox
+//---------------------------------------------------------
+
+CtrlComboBox::CtrlComboBox(QWidget* parent, const char* name)
+ : QComboBox(parent, name)
+ {
+ const char* ctxt[] = {
+ "No Ctrl", "BankSelMSB", "Modulation", "BreathCtrl",
+ "Control 3", "Foot Ctrl", "Porta Time", "DataEntMSB",
+ "MainVolume", "Balance", "Control 9", "Pan",
+ "Expression", "Control 12", "Control 13", "Control 14",
+ "Control 15", "Gen.Purp.1", "Gen.Purp.2", "Gen.Purp.3",
+ "Gen.Purp.4", "Control 20", "Control 21", "Control 22",
+ "Control 23", "Control 24", "Control 25", "Control 26",
+ "Control 27", "Control 28", "Control 29", "Control 30",
+ "Control 31", "BankSelLSB", "Modul. LSB", "BrthCt.LSB",
+ "Control 35", "FootCt.LSB", "Port.T LSB", "DataEntLSB",
+ "MainVolLSB", "BalanceLSB", "Control 41", "Pan LSB",
+ "Expr. LSB", "Control 44", "Control 45", "Control 46",
+ "Control 47", "Gen.P.1LSB", "Gen.P.2LSB", "Gen.P.3LSB",
+ "Gen.P.4LSB", "Control 52", "Control 53", "Control 54",
+ "Control 55", "Control 56", "Control 57", "Control 58",
+ "Control 59", "Control 60", "Control 61", "Control 62",
+ "Control 63", "Sustain", "Porta Ped", "Sostenuto",
+ "Soft Pedal", "Control 68", "Hold 2", "Control 70",
+ "HarmonicCo", "ReleaseTime", "Attack Time", "Brightness",
+ "Control 75", "Control 76", "Control 77", "Control 78",
+ "Control 79", "Gen.Purp.5", "Gen.Purp.6", "Gen.Purp.7",
+ "Gen.Purp.8", "Porta Ctrl", "Control 85", "Control 86",
+ "Control 87", "Control 88", "Control 89", "Control 90",
+ "Effect1Dep", "Effect2Dep", "Effect3Dep", "Effect4Dep",
+ "Phaser Dep", "Data Incr", "Data Decr", "NRPN LSB",
+ "NRPN MSB", "RPN LSB", "RPN MSB", "Control102",
+ "Control103", "Control104", "Control105", "Control106",
+ "Control107", "Control108", "Control109", "Control110",
+ "Control111", "Control112", "Control113", "Control114",
+ "Control115", "Control116", "Control117", "Control118",
+ "Control119", "AllSndOff", "Reset Ctrl", "Local Ctrl",
+ "AllNoteOff", "OmniModOff", "OmniModeOn", "MonoModeOn",
+ "PolyModeOn"
+ };
+ for (unsigned int i = 0; i < sizeof(ctxt)/sizeof(*ctxt); ++i)
+ insertItem(QString(ctxt[i]));
+ }
+
diff --git a/muse2/muse/widgets/ctrlcombo.cw b/muse2/muse/widgets/ctrlcombo.cw
new file mode 100644
index 00000000..f4f5b2ac
--- /dev/null
+++ b/muse2/muse/widgets/ctrlcombo.cw
@@ -0,0 +1,22 @@
+<!DOCTYPE CW><CW>
+<customwidgets>
+ <customwidget>
+ <class>CtrlComboBox</class>
+ <header location="global">ctrlcombo.h</header>
+ <sizehint>
+ <width>50</width>
+ <height>20</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ </sizepolicy>
+ <pixmap>
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
+ </pixmap>
+ <signal>activated(int index)</signal>
+ <signal>activated(const QString&amp;)</signal>
+ </customwidget>
+</customwidgets>
+</CW>
diff --git a/muse2/muse/widgets/ctrlcombo.h b/muse2/muse/widgets/ctrlcombo.h
new file mode 100644
index 00000000..8aa134e3
--- /dev/null
+++ b/muse2/muse/widgets/ctrlcombo.h
@@ -0,0 +1,22 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: ctrlcombo.h,v 1.1.1.1 2003/10/27 18:54:30 wschweer Exp $
+//
+// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __CTRLGRP_H__
+#define __CTRLGRP_H__
+
+#include <qcombobox.h>
+
+class CtrlComboBox : public QComboBox {
+ Q_OBJECT
+ public:
+ CtrlComboBox(QWidget* parent, const char* name = 0);
+ };
+
+
+#endif
+
diff --git a/muse2/muse/widgets/dentry.cpp b/muse2/muse/widgets/dentry.cpp
new file mode 100644
index 00000000..61c0d096
--- /dev/null
+++ b/muse2/muse/widgets/dentry.cpp
@@ -0,0 +1,243 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: dentry.cpp,v 1.1.1.1.2.3 2008/08/18 00:15:26 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "dentry.h"
+#include <stdio.h>
+#include <qtimer.h>
+#include <qcursor.h>
+//Added by qt3to4:
+#include <QWheelEvent>
+#include <QMouseEvent>
+#include <QContextMenuEvent>
+#include "globals.h"
+
+#define TIMER1 400
+#define TIMER2 200
+#define TIMEC 7
+#define TIMER3 100
+#define TIMEC2 20
+#define TIMER4 50
+
+//---------------------------------------------------------
+// Dentry
+// lineedit double values
+//---------------------------------------------------------
+
+Dentry::Dentry(QWidget* parent, const char* name) : QLineEdit(parent, name)
+ {
+ _slider = 0;
+ _id = -1;
+ drawFrame = false;
+ QLineEdit::setFrame(drawFrame);
+ timer = new QTimer(this);
+ connect(timer, SIGNAL(timeout()), SLOT(repeat()));
+ val = 0.01;
+ connect(this, SIGNAL(returnPressed()), SLOT(endEdit()));
+ setCursor(QCursor(Qt::arrowCursor));
+ evx = 1.0;
+ }
+
+//---------------------------------------------------------
+// contextMenuEvent
+//---------------------------------------------------------
+
+void Dentry::contextMenuEvent(QContextMenuEvent * e)
+{
+ e->accept();
+}
+
+//---------------------------------------------------------
+// setFrame
+//---------------------------------------------------------
+
+void Dentry::setFrame(bool flag)
+ {
+ drawFrame = flag;
+ QLineEdit::setFrame(drawFrame);
+ update();
+ }
+
+//---------------------------------------------------------
+// endEdit
+//---------------------------------------------------------
+
+void Dentry::endEdit()
+ {
+ if (edited()) {
+ if (setSValue(text())) {
+ setString(val);
+ return;
+ }
+ }
+ setString(val);
+ clearFocus();
+ if (!drawFrame)
+ QLineEdit::setFrame(false);
+ }
+
+//---------------------------------------------------------
+// mousePressEvent
+//---------------------------------------------------------
+
+void Dentry::mousePressEvent(QMouseEvent* event)
+ {
+ button = event->button();
+ starty = event->y();
+ evx = double(event->x());
+ timecount = 0;
+ repeat();
+ timer->start(TIMER1);
+ }
+
+//---------------------------------------------------------
+// wheelEvent
+//---------------------------------------------------------
+
+void Dentry::wheelEvent(QWheelEvent* event)
+ {
+ // Avoid unwanted wheel events from outside the control.
+ // Tested: No go, can't seem to determine where event came from.
+ /*
+ const QPoint gp = mapToGlobal(event->pos());
+ const QRect gr = QRect(mapToGlobal(rect().topLeft()), mapToGlobal(rect().bottomRight()));
+ if(!gr.contains(gp))
+ */
+ //if(sender() != this)
+ //{
+ // event->ignore();
+ // return;
+ //}
+
+ event->accept();
+
+ int delta = event->delta();
+
+ if (delta < 0)
+ {
+ if(_slider)
+ _slider->stepPages(-1);
+ else
+ decValue(-1.0);
+ }
+ else if (delta > 0)
+ {
+ if(_slider)
+ _slider->stepPages(1);
+ else
+ incValue(1.0);
+ }
+ }
+
+//---------------------------------------------------------
+// repeat
+//---------------------------------------------------------
+
+void Dentry::repeat()
+ {
+ if (timecount == 1) {
+ ++timecount;
+ timer->stop();
+ timer->start(TIMER2);
+ return;
+ }
+ ++timecount;
+ if (timecount == TIMEC) {
+ timer->stop();
+ timer->start(TIMER3);
+ }
+ if (timecount == TIMEC2) {
+ timer->stop();
+ timer->start(TIMER4);
+ }
+
+ switch (button) {
+ case Qt::LeftButton:
+ return;
+ case Qt::MidButton:
+ if(_slider)
+ _slider->stepPages(-1);
+ else
+ decValue(evx);
+ break;
+ case Qt::RightButton:
+ if(_slider)
+ _slider->stepPages(1);
+ else
+ incValue(evx);
+ break;
+ default:
+ break;
+ }
+ }
+
+//---------------------------------------------------------
+// mouseReleaseEvent
+//---------------------------------------------------------
+
+void Dentry::mouseReleaseEvent(QMouseEvent*)
+ {
+ button = Qt::NoButton;
+ timer->stop();
+ }
+
+//---------------------------------------------------------
+// mouseMoveEvent
+//---------------------------------------------------------
+
+void Dentry::mouseMoveEvent(QMouseEvent*)
+ {
+ switch (button) {
+ case Qt::LeftButton:
+ break;
+ case Qt::MidButton:
+ break;
+ case Qt::RightButton:
+ break;
+ default:
+ break;
+ }
+ }
+
+//---------------------------------------------------------
+// mouseDoubleClickEvent
+//---------------------------------------------------------
+
+void Dentry::mouseDoubleClickEvent(QMouseEvent* event)
+ {
+ if (event->button() != Qt::LeftButton) {
+ mousePressEvent(event);
+ return;
+ }
+ setFocus();
+ QLineEdit::setFrame(true);
+ update();
+ emit doubleClicked(_id);
+ }
+
+//---------------------------------------------------------
+// setValue
+//---------------------------------------------------------
+
+void Dentry::setValue(double v)
+ {
+ if (v == val)
+ return;
+ setString(v);
+#if 0
+ if (setString(v)) {
+ clearFocus();
+ if (!drawFrame)
+ QLineEdit::setFrame(false);
+ setEnabled(false);
+ }
+ else {
+ setEnabled(true);
+ }
+#endif
+ val = v;
+ }
+
diff --git a/muse2/muse/widgets/dentry.h b/muse2/muse/widgets/dentry.h
new file mode 100644
index 00000000..58f1ef6f
--- /dev/null
+++ b/muse2/muse/widgets/dentry.h
@@ -0,0 +1,79 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: dentry.h,v 1.1.1.1.2.3 2008/08/18 00:15:26 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __DENTRY_H__
+#define __DENTRY_H__
+
+#include <qlineedit.h>
+//Added by qt3to4:
+#include <QMouseEvent>
+#include <QContextMenuEvent>
+#include <QWheelEvent>
+
+#include "sliderbase.h"
+
+class QTimer;
+
+//---------------------------------------------------------
+// Dentry
+//---------------------------------------------------------
+
+class Dentry : public QLineEdit {
+ Q_OBJECT
+
+ Q_PROPERTY( int id READ id WRITE setId )
+ Q_PROPERTY( double value READ value WRITE setValue )
+ Q_PROPERTY( bool frame READ frame WRITE setFrame )
+
+ SliderBase* _slider;
+ int button;
+ int starty;
+ bool drawFrame;
+ QTimer* timer;
+ double evx;
+ int timecount;
+
+ virtual void wheelEvent(QWheelEvent*);
+ virtual void mousePressEvent(QMouseEvent*);
+ virtual void mouseMoveEvent(QMouseEvent*);
+ virtual void mouseDoubleClickEvent(QMouseEvent*);
+ virtual void mouseReleaseEvent(QMouseEvent*);
+ void contextMenuEvent(QContextMenuEvent*);
+
+ protected:
+ int _id;
+ double val;
+
+ virtual void incValue(double x) = 0;
+ virtual void decValue(double x) = 0;
+ virtual bool setString(double) = 0;
+ virtual bool setSValue(const QString&) = 0;
+
+ private slots:
+ void repeat();
+
+ protected slots:
+ void endEdit();
+
+ signals:
+ void valueChanged(double, int);
+ void doubleClicked(int);
+
+ public slots:
+ virtual void setValue(double);
+
+ public:
+ Dentry(QWidget*, const char* name=0);
+ double value() const { return val; }
+ bool frame() const { return drawFrame; }
+ void setFrame(bool);
+ int id() const { return _id; }
+ void setId(int i) { _id = i; }
+ SliderBase* slider() const { return _slider; }
+ void setSlider(SliderBase* s) { _slider = s; }
+ };
+#endif
diff --git a/muse2/muse/widgets/didyouknow.ui b/muse2/muse/widgets/didyouknow.ui
new file mode 100644
index 00000000..005fa7b6
--- /dev/null
+++ b/muse2/muse/widgets/didyouknow.ui
@@ -0,0 +1,102 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DidYouKnow</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>DidYouKnow</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>494</width>
+ <height>249</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Did you know?</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QTextEdit">
+ <property name="name">
+ <cstring>tipText</cstring>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>dontShowCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>Don't show on startup</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>121</width>
+ <height>31</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>nextButton</cstring>
+ </property>
+ <property name="text">
+ <string>Next tip</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>closeButton</cstring>
+ </property>
+ <property name="text">
+ <string>Close</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>closeButton</sender>
+ <signal>clicked()</signal>
+ <receiver>DidYouKnow</receiver>
+ <slot>accept()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/dimap.cpp b/muse2/muse/widgets/dimap.cpp
new file mode 100644
index 00000000..1f87358c
--- /dev/null
+++ b/muse2/muse/widgets/dimap.cpp
@@ -0,0 +1,308 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: dimap.cpp,v 1.1.1.1 2003/10/27 18:55:11 wschweer Exp $
+
+// Copyright (C) 1997 Josef Wilgen
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License, version 2,
+// as published by the Free Software Foundation.
+//
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <cmath>
+#include "dimap.h"
+#include "mmath.h"
+
+const double DiMap::LogMin = 1.0e-150;
+const double DiMap::LogMax = 1.0e150;
+
+// DiMap - Map a double interval into an integer interval
+//
+// The DiMap class maps an interval of type double into an interval of
+// type integer. It consists
+// of two intervals D = [d1, d2] (double) and I = [i1, i2] (int), which are
+// specified with the @DiMap::setDblRange@ and @DiMap::setIntRange@
+// members. The point d1 is mapped to the point i1, and d2 is mapped to i2.
+// Any point inside or outside D can be mapped to a point inside or outside
+// I using @DiMap::transform@ or @DiMap::limTransform@ or vice versa
+// using @QwtPlot::invTransform@. D can be scaled linearly or
+// logarithmically, as specified with @DiMap::setDblRange@.
+
+//------------------------------------------------------------
+//.F DiMap::DiMap (1)
+// Construct a DiMap instance.
+//
+//.u Syntax
+//.f DiMap::DiMap()
+//
+//.u Description
+// The double and integer intervals are both set to [0,1].
+//------------------------------------------------------------
+
+DiMap::DiMap()
+ {
+ d_x1 = 0.0;
+ d_x2 = 1.0;
+ d_y1 = 0;
+ d_y2 = 1;
+ d_cnv = 1.0;
+ }
+
+//------------------------------------------------------------
+//.F DiMap::DiMap (2)
+// Construct a DiMap instance with initial integer
+// and double intervals
+//
+//.u Syntax
+//.f DiMap::DiMap(int i1, int i2, double d1, double d2, bool logarithmic)
+//
+//.u Parameters
+//.p int i1 -- first border of integer interval
+// int i2 -- second border of integer interval
+// double d1 -- first border of double interval
+// double d2 -- second border of double interval
+// bool logarithmic -- logarithmic mapping, TRUE or FALSE. Defaults
+// to FALSE.
+//------------------------------------------------------------
+
+DiMap::DiMap(int i1, int i2, double d1, double d2, bool logarithmic)
+ {
+ d_log = logarithmic;
+ setIntRange(i1,i2);
+ setDblRange(d1, d2);
+ }
+
+//------------------------------------------------------------
+//.F DiMap::~DiMap
+// Destroy a DiMap instance.
+//
+//.u Syntax
+//.f DiMap::~DiMap()
+//------------------------------------------------------------
+
+DiMap::~DiMap()
+ {
+ }
+
+//------------------------------------------------------------
+//.F DiMap::contains (1)
+// Returns TRUE if a value x lies inside or at the border of the
+// map's double range.
+//
+//.u Syntax
+//.f bool DiMap::contains(double x)
+//
+//.u Parameters
+//.p double x -- value
+//------------------------------------------------------------
+
+bool DiMap::contains(double x) const
+ {
+ return ( (x >= qwtMin(d_x1, d_x1)) && (x <= qwtMax(d_x1, d_x2)));
+ }
+
+//------------------------------------------------------------
+//.F DiMap::contains (2)
+// Returns TRUE if a value x lies inside or at the border of the
+// map's integer range
+//
+//.u Syntax
+//.f bool DiMap::contains(int x)
+//
+//.u Parameters
+//.p int x -- value
+//------------------------------------------------------------
+
+bool DiMap::contains(int x) const
+ {
+ return ( (x >= qwtMin(d_y1, d_y1)) && (x <= qwtMax(d_y1, d_y2)));
+ }
+
+//------------------------------------------------------------
+//.F DiMap::setDblRange
+// Specify the borders of the double interval
+//
+//.u Syntax
+//.f void DiMap::setDblRange(double d1, double d2, bool lg = FALSE)
+//
+//.u Parameters
+//.p double d1 -- first border
+// double d2 -- second border
+// bool lg -- logarithmic (TRUE) or linear (FALSE)
+// scaling. Defaults to FALSE.
+//------------------------------------------------------------
+
+void DiMap::setDblRange(double d1, double d2, bool lg)
+ {
+ if (lg) {
+ d_log = true;
+ if (d1 < LogMin)
+ d1 = LogMin;
+ else if (d1 > LogMax)
+ d1 = LogMax;
+
+ if (d2 < LogMin)
+ d2 = LogMin;
+ else if (d2 > LogMax)
+ d2 = LogMax;
+
+ d_x1 = log(d1);
+ d_x2 = log(d2);
+ }
+ else {
+ d_log = FALSE;
+ d_x1 = d1;
+ d_x2 = d2;
+ }
+ newFactor();
+ }
+
+//------------------------------------------------------------
+//.F DiMap::setIntRange
+// Specify the borders of the integer interval
+//
+//.u Syntax
+//.f void DiMap::setIntRange(int i1, int i2)
+//
+//.u Parameters
+//.p int i1 -- first border
+// int i2 -- second border
+//------------------------------------------------------------
+
+void DiMap::setIntRange(int i1, int i2)
+ {
+ d_y1 = i1;
+ d_y2 = i2;
+ newFactor();
+ }
+
+//------------------------------------------------------------
+//.F DiMap::transform
+// Transform a point in double interval into an point in the
+// integer interval
+//
+//.u Syntax
+//.f int DiMap::transform(double x)
+//
+//.u Parameters
+//.p double x
+//
+//.u Return Value
+//.t
+// linear mapping: -- rint(i1 + (i2 - i1) / (d2 - d1) * (x - d1))
+// logarithmic mapping: -- rint(i1 + (i2 - i1) / log(d2 / d1) * log(x / d1))
+//
+//.u Note
+// The specified point is allowed to lie outside the intervals. If you
+// want to limit the returned value, use @DiMap::limTransform@.
+//------------------------------------------------------------
+
+int DiMap::transform(double x) const
+ {
+ if (d_log)
+ return (d_y1 + int(rint( (log(x) - d_x1) * d_cnv )));
+ else
+ return (d_y1 + int(rint( (x - d_x1) * d_cnv )));
+ }
+
+//------------------------------------------------------------
+//.F DiMap::invTransform
+// Transform an integer value into a double value
+//
+//.u Syntax
+//.f double DiMap::invTransform(int y)
+//
+//.u Parameters
+//.p int y -- integer value to be transformed
+//
+//.u Return Value
+//.t
+// linear mapping: -- d1 + (d2 - d1) / (i2 - i1) * (y - i1)
+// logarithmic mapping: -- d1 + (d2 - d1) / log(i2 / i1) * log(y / i1)
+//------------------------------------------------------------
+
+double DiMap::invTransform(int y) const
+ {
+ if (d_cnv == 0.0)
+ return 0.0;
+ else {
+ if (d_log)
+ return exp(d_x1 + double(y - d_y1) / d_cnv );
+ else
+ return ( d_x1 + double(y - d_y1) / d_cnv );
+ }
+ }
+
+//------------------------------------------------------------
+//.F DiMap::limTransform
+// Transform and limit
+//
+//.u Syntax
+//.f int DiMap::limTransform(double x)
+//
+//.u Parameters
+//.p double x
+//
+//.u Return Value
+// transformed value
+//
+//.u Description
+// The function is similar to @DiMap::transform@, but limits the input value
+// to the nearest border of the map's double interval if it lies outside
+// that interval.
+//------------------------------------------------------------
+
+int DiMap::limTransform(double x) const
+ {
+ if ( x > qwtMax(d_x1, d_x2) )
+ x = qwtMax(d_x1, d_x2);
+ else if ( x < qwtMin(d_x1, d_x2))
+ x = qwtMin(d_x1, d_x2);
+ return transform(x);
+ }
+
+//------------------------------------------------------------
+//.F DiMap::xTransform
+// Exact transformation
+//
+//.u Syntax
+//.f double DiMap::dTransform(double x)
+//
+//.u Parameters
+//.p double x -- value to be transformed
+//
+//.u Return Value
+//.t
+// linear mapping: -- i1 + (i2 - i1) / (d2 - d1) * (x - d1)
+// logarithmic mapping: -- i1 + (i2 - i1) / log(d2 / d1) * log(x / d1)
+//
+//.u Description
+// This function is similar to @DiMap::transform@, but
+// makes the integer interval appear to be double.
+//------------------------------------------------------------
+
+double DiMap::xTransform(double x) const
+ {
+ double rv;
+
+ if (d_log)
+ rv = double(d_y1) + (log(x) - d_x1) * d_cnv;
+ else
+ rv = double(d_y1) + (x - d_x1) * d_cnv;
+ return rv;
+ }
+
+//------------------------------------------------------------
+//.F DiMap::newFactor
+// Re-calculate the conversion factor.
+//------------------------------------------------------------
+
+void DiMap::newFactor()
+ {
+ if (d_x2 != d_x1)
+ d_cnv = double(d_y2 - d_y1) / (d_x2 - d_x1);
+ else
+ d_cnv = 0.0;
+ }
diff --git a/muse2/muse/widgets/dimap.h b/muse2/muse/widgets/dimap.h
new file mode 100644
index 00000000..5e9ac3ee
--- /dev/null
+++ b/muse2/muse/widgets/dimap.h
@@ -0,0 +1,55 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: dimap.h,v 1.1.1.1 2003/10/27 18:54:28 wschweer Exp $
+//
+// Copyright (C) 1997 Josef Wilgen
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License, version 2,
+// as published by the Free Software Foundation.
+//
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __DIMAP_H__
+#define __DIMAP_H__
+
+#include <qglobal.h>
+
+class DiMap
+ {
+ double d_x1, d_x2; // double interval boundaries
+ int d_y1,d_y2; // integer interval boundaries
+ double d_cnv; // conversion factor
+ bool d_log; // logarithmic scale?
+
+ void newFactor();
+
+ public:
+ static const double LogMin;
+ static const double LogMax;
+
+ DiMap();
+ DiMap(int, int, double, double, bool lg = FALSE);
+ ~DiMap();
+
+
+ bool contains(double x) const;
+ bool contains(int x) const;
+
+ void setIntRange(int i1, int i2);
+ void setDblRange(double d1, double d2, bool lg = FALSE);
+
+ int transform(double x) const;
+ double invTransform(int i) const;
+ int limTransform(double x) const;
+ double xTransform(double x) const;
+
+ double d1() const { return d_x1;}
+ double d2() const { return d_x2;}
+ int i1() const { return d_y1;}
+ int i2() const { return d_y2;}
+ bool logarithmic() const { return d_log;}
+ };
+
+#endif
diff --git a/muse2/muse/widgets/doublelabel.cpp b/muse2/muse/widgets/doublelabel.cpp
new file mode 100644
index 00000000..c20de1e2
--- /dev/null
+++ b/muse2/muse/widgets/doublelabel.cpp
@@ -0,0 +1,189 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: doublelabel.cpp,v 1.1.1.1.2.2 2008/08/18 00:15:26 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <stdio.h>
+
+#include "doublelabel.h"
+#include <qvalidator.h>
+#include <qpalette.h>
+#include <stdio.h>
+#include <values.h>
+
+#include "utils.h"
+
+//---------------------------------------------------------
+// DoubleLabel
+//---------------------------------------------------------
+
+DoubleLabel::DoubleLabel(QWidget* parent, const char* name)
+ : Dentry(parent, name), _specialText("---")
+ {
+ min = 0.0;
+ max = 1.0;
+ _off = -1.0;
+ _precision = 3;
+ setValue(0.0);
+ }
+
+DoubleLabel::DoubleLabel(double _val, double m, double mx, QWidget* parent)
+ : Dentry(parent), _specialText("---")
+ {
+ min = m;
+ max = mx;
+ _off = m - 1.0;
+ _precision = 3;
+ setValue(_val);
+ }
+
+//---------------------------------------------------------
+// setOff
+//---------------------------------------------------------
+
+void DoubleLabel::setOff(double v)
+{
+ _off = v;
+ setString(val);
+}
+
+//---------------------------------------------------------
+// calcIncrement()
+//---------------------------------------------------------
+
+double DoubleLabel::calcIncrement() const
+{
+ double dif;
+ if(max - min > 0)
+ dif = max - min;
+ else
+ dif = min - max;
+
+ if(dif <= 10.0)
+ return 0.1;
+ else
+ if(dif <= 100.0)
+ return 1.0;
+ else
+ return 10.0;
+}
+
+//---------------------------------------------------------
+// setString
+//---------------------------------------------------------
+
+bool DoubleLabel::setString(double v)
+ {
+ if(v <= _off || v > max)
+ {
+ setText(_specialText);
+ return true;
+ }
+ else
+ if(v < min)
+ {
+ setText(QString("---"));
+ return true;
+ }
+ else
+ {
+ QString s;
+ s.setNum(v, 'f', _precision);
+ if (!_suffix.isEmpty()) {
+ s += " ";
+ s += _suffix;
+ }
+
+ setText(s);
+ }
+ return false;
+ }
+
+//---------------------------------------------------------
+// setSValue
+//---------------------------------------------------------
+
+bool DoubleLabel::setSValue(const QString& s)
+ {
+ bool ok;
+ double v = s.toDouble(&ok);
+ if (ok && (v != val)) {
+ if (v < min)
+ v = min;
+ if (v > max)
+ v = max;
+ setValue(v);
+ emit valueChanged(val, _id);
+ }
+ return false;
+ }
+
+//---------------------------------------------------------
+// incValue
+//---------------------------------------------------------
+
+void DoubleLabel::incValue(double)
+ {
+ if(val >= max)
+ return;
+ double inc = calcIncrement();
+ if(val + inc >= max)
+ setValue(max);
+ else
+ setValue(val + inc);
+ emit valueChanged(val, _id);
+ }
+
+//---------------------------------------------------------
+// decValue
+//---------------------------------------------------------
+
+void DoubleLabel::decValue(double)
+ {
+ if(val <= min)
+ return;
+ double inc = calcIncrement();
+ if(val - inc <= min)
+ setValue(min);
+ else
+ setValue(val - inc);
+ emit valueChanged(val, _id);
+ }
+
+//---------------------------------------------------------
+// setPrecision
+//---------------------------------------------------------
+
+void DoubleLabel::setPrecision(int v)
+ {
+ _precision = v;
+ setString(val);
+ }
+
+//---------------------------------------------------------
+// sizeHint
+//---------------------------------------------------------
+
+QSize DoubleLabel::sizeHint() const
+ {
+ QFontMetrics fm = fontMetrics();
+ int h = fm.height() + 4;
+ int n = _precision + 6;
+#if 0
+ double aval = fabs(val);
+ if (aval >= 10.0)
+ ++n;
+ if (aval >= 100.0)
+ ++n;
+ if (aval >= 1000.0)
+ ++n;
+ if (aval >= 10000.0)
+ ++n;
+ if (aval >= 100000.0)
+ ++n;
+#endif
+ int w = fm.width(QString("-0.")) + fm.width('0') * n + 6;
+ return QSize(w, h);
+ }
diff --git a/muse2/muse/widgets/doublelabel.h b/muse2/muse/widgets/doublelabel.h
new file mode 100644
index 00000000..6698ec57
--- /dev/null
+++ b/muse2/muse/widgets/doublelabel.h
@@ -0,0 +1,60 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: doublelabel.h,v 1.2.2.3 2008/08/18 00:15:26 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __DOUBLELABEL_H__
+#define __DOUBLELABEL_H__
+
+#include "dentry.h"
+
+//---------------------------------------------------------
+// DoubleLabel
+//---------------------------------------------------------
+
+class DoubleLabel : public Dentry {
+ Q_OBJECT
+
+ Q_PROPERTY( double minValue READ minValue WRITE setMinValue )
+ Q_PROPERTY( double maxValue READ maxValue WRITE setMaxValue )
+ Q_PROPERTY( QString specialText READ specialText WRITE setSpecialText )
+ Q_PROPERTY( QString suffix READ suffix WRITE setSuffix )
+ Q_PROPERTY( int precision READ precision WRITE setPrecision )
+
+ double min, max, _off;
+ QString _specialText; // text to show if value outside min,max
+ QString _suffix;
+ int _precision;
+
+ double calcIncrement() const;
+
+ virtual bool setSValue(const QString&);
+ virtual bool setString(double val);
+ virtual void incValue(double);
+ virtual void decValue(double);
+
+ public:
+ DoubleLabel(QWidget*, const char* name = 0);
+ DoubleLabel(double val, double min, double max, QWidget*);
+ virtual QSize sizeHint() const;
+ double minValue() const { return min; }
+ double maxValue() const { return max; }
+ double off() const { return _off; }
+ void setMinValue(double v) { min = v; }
+ void setMaxValue(double v) { max = v; }
+ void setRange(double a, double b) { _off = a - (min - _off); min = a; max = b; }
+ void setOff(double v);
+ int precision() const { return _precision; }
+ void setPrecision(int val);
+ QString specialText() const { return _specialText; }
+ void setSpecialText(const QString& s) {
+ _specialText = s;
+ update();
+ }
+ QString suffix() const { return _suffix; }
+ void setSuffix(const QString& s) { _suffix = s; }
+ };
+
+#endif
diff --git a/muse2/muse/widgets/drange.cpp b/muse2/muse/widgets/drange.cpp
new file mode 100644
index 00000000..5c986403
--- /dev/null
+++ b/muse2/muse/widgets/drange.cpp
@@ -0,0 +1,262 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: drange.cpp,v 1.2.2.1 2009/03/09 02:05:18 terminator356 Exp $
+//
+// Copyright (C) 1997 Josef Wilgen
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License, version 2,
+// as published by the Free Software Foundation.
+//
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <cmath>
+#include "mmath.h"
+#include "drange.h"
+
+const double DoubleRange::MinRelStep = 1.0e-10;
+const double DoubleRange::DefaultRelStep = 1.0e-2;
+const double DoubleRange::MinEps = 1.0e-10;
+
+//-----------------------------------------------------------
+// This class is useful as a base class or a member for sliders.
+// It represents an interval of type double within which a value can
+// be moved. The value can be either an arbitrary point inside
+// the interval (see @DoubleRange::setValue@), or it can be fitted
+// into a step raster (see @DoubleRange::fitValue@ and
+// @DoubleRange::incValue@).
+//
+// As a special case, a DoubleRange can be periodic, which means that
+// a value outside the interval will be mapped to a value inside the
+// interval when @DoubleRange::setValue@, @DoubleRange::fitValue@,
+// @DoubleRange::incValue@ or @DoubleRange::incPages@ are called.
+//------------------------------------------------------------
+
+//---------------------------------------------------------
+// doubleRange
+//---------------------------------------------------------
+
+DoubleRange::DoubleRange()
+ {
+ d_minValue = 0;
+ d_maxValue = 100.0;
+ d_prevValue = 0.0;
+ d_exactPrevValue = 0.0;
+ d_exactValue = 0.0;
+ d_value = 0.0;
+ d_step = 0.1;
+ d_periodic = FALSE;
+ }
+
+//---------------------------------------------------------
+// setNewValue
+//---------------------------------------------------------
+
+void DoubleRange::setNewValue(double x, bool align)
+ {
+ d_prevValue = d_value;
+
+ double vmin = qwtMin(d_minValue, d_maxValue);
+ double vmax = qwtMax(d_minValue, d_maxValue);
+
+ // Range check
+
+ if (x < vmin) {
+ if ((d_periodic) && (vmin != vmax))
+ d_value = x + ceil((vmin - x) / (vmax - vmin))
+ * (vmax - vmin);
+ else
+ d_value = vmin;
+ }
+ else if (x > vmax) {
+ if ((d_periodic) && (vmin != vmax))
+ d_value = x - ceil( ( x - vmax) / (vmax - vmin ))
+ * (vmax - vmin);
+ else
+ d_value = vmax;
+ }
+ else
+ d_value = x;
+
+ d_exactPrevValue = d_exactValue;
+ d_exactValue = d_value;
+
+ // align to grid
+ if (align) {
+ if (d_step != 0.0)
+ d_value = d_minValue + rint((d_value - d_minValue) / d_step ) * d_step;
+ else
+ d_value = d_minValue;
+
+ // correct rounding error at the border
+ if (fabs(d_value - d_maxValue) < MinEps * qwtAbs(d_step))
+ d_value = d_maxValue;
+
+ // correct rounding error if value = 0
+ if (fabs(d_value) < MinEps * qwtAbs(d_step))
+ d_value = 0.0;
+ }
+ if (d_prevValue != d_value)
+ valueChange();
+ }
+
+//---------------------------------------------------------
+// fitValue
+// Adjust the value to the closest point in the step
+// raster.
+// The value is clipped when it lies outside the range.
+// When the range is @DoubleRange::periodic@, it will
+// be mapped to a point in the interval such that
+//---------------------------------------------------------
+
+void DoubleRange::fitValue(double x)
+ {
+ setNewValue(x, true);
+ }
+
+//---------------------------------------------------------
+// setValue
+// Set a new value without adjusting to the step raster
+// The value is clipped when it lies outside the range.
+// When the range is @DoubleRange::periodic@, it will
+// be mapped to a point in the interval such that
+//
+// new value := x + n * (max. value - min. value)
+//
+// with an integer number n.
+//---------------------------------------------------------
+
+void DoubleRange::setValue(double x)
+ {
+ setNewValue(x, false);
+ }
+
+//---------------------------------------------------------
+// setRange
+// Specify range and step size
+// - A change of the range changes the value if it lies outside the
+// new range. The current value
+// will *not* be adjusted to the new step raster.
+// - vmax < vmin is allowed.
+// - If the step size is left out or set to zero, it will be
+// set to 1/100 of the interval length.
+// - If the step size has an absurd value, it will be corrected
+// to a better one.
+//---------------------------------------------------------
+
+void DoubleRange::setRange(double vmin, double vmax, double vstep, int pageSize)
+ {
+ bool rchg = ((d_maxValue != vmax) || (d_minValue != vmin));
+
+ if (rchg) {
+ d_minValue = vmin;
+ d_maxValue = vmax;
+ }
+
+ //
+ // look if the step width has an acceptable
+ // value or otherwise change it.
+ //
+ setStep(vstep);
+
+ //
+ // limit page size
+ //
+ d_pageSize = qwtLim(pageSize,0, int(qwtAbs((d_maxValue - d_minValue) / d_step)));
+
+ //
+ // If the value lies out of the range, it
+ // will be changed. Note that it will not be adjusted to
+ // the new step width.
+ setNewValue(d_value, false);
+
+ // call notifier after the step width has been
+ // adjusted.
+ if (rchg)
+ rangeChange();
+ }
+
+//---------------------------------------------------------
+// setStep
+// Change the step raster
+//
+// The value will *not* be adjusted to the new step raster.
+//---------------------------------------------------------
+
+void DoubleRange::setStep(double vstep)
+ {
+ double newStep,intv;
+
+ intv = d_maxValue - d_minValue;
+
+ if (vstep == 0.0)
+ newStep = intv * DefaultRelStep;
+ else {
+ if (((intv > 0) && (vstep < 0)) || ((intv < 0) && (vstep > 0)))
+ newStep = -vstep;
+ else
+ newStep = vstep;
+
+ if ( fabs(newStep) < fabs(MinRelStep * intv) )
+ newStep = MinRelStep * intv;
+ }
+
+ if (newStep != d_step) {
+ d_step = newStep;
+ stepChange();
+ }
+ }
+
+//---------------------------------------------------------
+// setPeriodic
+// Make the range periodic
+//
+// When the range is periodic, the value will be set to a point
+// inside the interval such that
+//
+// point = value + n * width
+//
+// if the user tries to set a new value which is outside the range.
+// If the range is nonperiodic (the default), values outside the
+// range will be clipped.
+//---------------------------------------------------------
+
+void DoubleRange::setPeriodic(bool tf)
+ {
+ d_periodic = tf;
+ }
+
+//------------------------------------------------------------
+// incValue
+// Increment the value by a specified number of steps
+//
+// As a result of this operation, the new value will always be
+// adjusted to the step raster.
+//------------------------------------------------------------
+
+void DoubleRange::incValue(int nSteps)
+ {
+ setNewValue(d_value + double(nSteps) * d_step, true);
+ }
+
+//---------------------------------------------------------
+// incPages
+// Increment the value by a specified number of pages
+//---------------------------------------------------------
+
+void DoubleRange::incPages(int nPages)
+ {
+ setNewValue(d_value + double(nPages) * double(d_pageSize)
+ * d_step, true);
+ }
+
+//---------------------------------------------------------
+// step
+//---------------------------------------------------------
+
+double DoubleRange::step() const
+ {
+ return qwtAbs(d_step);
+ }
+
diff --git a/muse2/muse/widgets/drange.h b/muse2/muse/widgets/drange.h
new file mode 100644
index 00000000..1ee3dd21
--- /dev/null
+++ b/muse2/muse/widgets/drange.h
@@ -0,0 +1,71 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: drange.h,v 1.1.1.1.2.1 2007/01/27 14:52:43 spamatica Exp $
+//
+// Copyright (C) 1997 Josef Wilgen
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License, version 2,
+// as published by the Free Software Foundation.
+//
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __DOUBLE_RANGE_H__
+#define __DOUBLE_RANGE_H__
+
+#include <qglobal.h>
+
+//---------------------------------------------------------
+// DoubleRange
+//---------------------------------------------------------
+
+class DoubleRange
+ {
+ static const double MinRelStep;
+ static const double DefaultRelStep;
+ static const double MinEps;
+
+ double d_minValue;
+ double d_maxValue;
+ double d_step;
+ int d_pageSize;
+ double d_value;
+ double d_exactValue;
+ double d_exactPrevValue;
+ double d_prevValue;
+ bool d_periodic;
+
+ void setNewValue(double x, bool align = false);
+
+ protected:
+ double exactValue() const { return d_exactValue; }
+ double exactPrevValue() const { return d_exactPrevValue; }
+ double prevValue() const { return d_prevValue; }
+ virtual void valueChange() {}
+ virtual void stepChange() {}
+ virtual void rangeChange() {}
+
+ public:
+ DoubleRange();
+ virtual ~DoubleRange(){};
+
+ double value() const { return d_value; }
+ virtual void setValue(double);
+
+ virtual void fitValue(double);
+ virtual void incValue(int);
+ virtual void incPages(int);
+ void setPeriodic(bool tf);
+ void setRange(double vmin, double vmax, double vstep = 0.0,
+ int pagesize = 1);
+ void setStep(double);
+
+ double maxValue() const { return d_maxValue; }
+ double minValue() const { return d_minValue; }
+ bool periodic() const { return d_periodic; }
+ int pageSize() const { return d_pageSize; }
+ double step() const;
+ };
+
+#endif
diff --git a/muse2/muse/widgets/editctrl7dialogbase.ui b/muse2/muse/widgets/editctrl7dialogbase.ui
new file mode 100644
index 00000000..6d649555
--- /dev/null
+++ b/muse2/muse/widgets/editctrl7dialogbase.ui
@@ -0,0 +1,214 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>EditCtrl7DialogBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>EditCtrl7DialogBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>331</width>
+ <height>160</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Enter Controller</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout12</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout11</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Controller:</string>
+ </property>
+ </widget>
+ <widget class="PosEdit" row="0" column="1">
+ <property name="name">
+ <cstring>PosEdit3</cstring>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>SpinBox2</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Time Position:</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>SpinBox3</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Value:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QSlider">
+ <property name="name">
+ <cstring>Slider1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>controller value</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>EditCtrl7DialogBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>EditCtrl7DialogBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="local" impldecl="in declaration">posedit.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/editmetadialogbase.ui b/muse2/muse/widgets/editmetadialogbase.ui
new file mode 100644
index 00000000..573930b9
--- /dev/null
+++ b/muse2/muse/widgets/editmetadialogbase.ui
@@ -0,0 +1,254 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>EditMetaDialogBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>EditMetaDialogBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>475</width>
+ <height>285</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Enter Meta Event</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QTextEdit" row="2" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>TextEdit1</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="1" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>TextLabel1</string>
+ </property>
+ </widget>
+ <spacer row="0" column="1">
+ <property name="name" stdset="0">
+ <cstring>Spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QToolButton" row="0" column="2">
+ <property name="name">
+ <cstring>saveButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="0" column="3">
+ <property name="name">
+ <cstring>loadButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>Layout8</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Time Position:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Meta Type:</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>CheckBox1</cstring>
+ </property>
+ <property name="text">
+ <string>Enter Hex</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>SpinBox1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="2">
+ <property name="name">
+ <cstring>metaTypeLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="PosEdit" row="0" column="1">
+ <property name="name">
+ <cstring>PosEdit1</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="2285">789c8dd35d6fda301406e07b7e05aaefaae934719c9068dac5cabebab60c3668d34dbb308e03edfab11518eda6fdf71d9f7382a02dd3fa16a407bf716c07f676db65ffb8bdbbd79acdedfcdcb5ddd4deb677abc5d5d5fd97af2f7eb776b46ee37fc7b4f5ceb3d6ce60de76eddecdb50f80254245f447ae1b2731d9af5c909dd888abc686fb11398f5c9493278d63f634388e42c89fc9790879dc58f3f8a1b8b9de06eb2884fc536cc431b9d04ef3face82933869f6d3131bf18c5c24b9eca72b76e232d8c42692fd9d8a9bfd9e90adc98d258fc44e7c1b9cea281a1bf2909d46293d0cf8244ec53fc876d5df5fb9227f171bf147765aa47cbf0fe24a7c139ce955ffa2b14bc9d7e25c7cc4cee28cd77345b691737cfd65e38afb07ecacc8f87edf823b491cc9f839bb137712b212a7e277c179a28de7efe3abe0c225a6ae83d5845d1485235b71c586b7c1d6989cfb50909db596fb53b167c3cbe0b1e9c4327fcd1e6b39ef813813bf2657abbe628fad9c675fecc56f825d9a17b29e3b7125d77bb6d37cdeaa126772fef7e4aa903efc62dbe6fec076969f8772622fcf270faed24acbf977c49958937d652b3eef4cecd98a7e7f3ef3da67349e8a337142f6decaf332622f3e0eaeb35ad7dc7f2fcec40b725d5bd9df5c5cb307f3ff0ff74181853138a8f015e257a9251398825af52d9c632ee01b5cc215e61a730137f01d7e606e3133cc74adaf30f3ad593ce8ffc4f6f29ffde593f3dfc13dfcc2f797b0bf91307f77a31fd6bf6deec5a3f534fd57f01adee0eb2dbcc35d6fcebfd93fc06c9bfbfdd6fefe963cec1fc211e6f1bc9c63eaf736fa1f30fd8df67a7ff0a8ff71954f9421660427708a29f12c6770b6d6ff8c8d7fb77bd88fd6fa43e985d12e354227b4ce2096f7f5fe88528286040cbe52c8a00339147887117e5fe28dfe12ef1d52622f8c0f2157007da594ddd23fa574d518df8f7065ebfd9327fa25a58bab2871d743e554a5140cb05f3ed1b7f4fd0bbbd4388e67826d8fed5a4df0d312c737fa74871e9d88c6a746c1b5d46a8afd1e5e71f8b04f6734c5abb627a2dfef9fe7adbfc6a22669</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="2589">789c8dd64b53db481000e03bbfc2c5dca8ad8e3492c652a5727008ef77121c87ad3d8c4663e327066cc0a4f6bf6f4f774b3c422da139f0797aba5b23c9c5878d56eff4a8b5f161ed76611743d77297f6a6b5512da7d3d5dfff7cfab5b6ae750b7f8ba4a5d7ff5a5b3f5bb45cebf86ae603402154443fc1ea869c47291b66c17114b928a7f5153b04792c4ed99091f310e4c7608debbc1fac3817976227f53a6c9d6aae47fd74d1e43f88eb79066c9deb827c2f766c2027b1aee77d64275112d3faa938153b72a1e57ad48c9de4b27e179cc63a97eb5d8aebf9af1af3bc0bb24d22f16670a6b328b5944fd793d9acc8c8908a2bb6ba0e36da64866e9eba255b53889db832bcbf086e97eda25dd2fa9db86203edcf932c92f349d878bb12b226977991737e2eaed86a145ca47843d8cbda454af9b13813b7c9ae280a478ec4155b55c1363555c2f76fc8b6b1ac4f6b5bae7721cec49fc9aed9bf605bcbebeab231f73f117bb69a0497693b4bf9fefe64975ad6cbda25f73b161b718f5c95567cd4b8a2fd73b167c38f6097392d3eaced3272576cc407e4ca59b169ccf5add8b3613fb8ca2a2d3eaf5df1fe3db161ab3ed95756d6bf37e6ef875db117d3797a63ebe7d1b3bd96f59ddade90bf890d5bd1f78df7853cdf70c3b6b1789bedade77a5f83fbd84fd62bb197e77dca2e4d9b9fdf2d765ff7b9ff17b111d3fbd4efe37e9a1fe6ec524bbd8ed88807b5b9be02b1957e7db6d3f27ef9daf23e9d898d7822b6f27e0d6bcbfb32167bf1885d69797faec4867db6f8f3783b1f541defe73fe53eed79daf73aff75cdd77d5ee6ffdebfdef1fff3bf5f1f2c9418f6cfce071c54e0a10f0370efe763f6250c61046398c014357b196fe47bb8c26c0f73b87e23dc6ff913aceee1066e6121b1843bfcfc1ee30156f0585f77933f810e7c864df842b105dbb003bbb007fb7000877004c77082712af96758fd2b563d806f183bf01dcea10b3fa0073fe10222884143022964cdfc73aabe85b9db52fb1c0c56ee61d50b68430e059cd6f3e3600a16ca62ff901f7ae02ce82e1ca9923ae4ca85bb26f53baac2ea21c7d33cbbaa8fd90738d131d58f21518367e713663fc1fe7bb86717a70fd719a6c1eaea520dd50852357eca5713d80cdd69a273d8a7da940d276a8ad3276af6fcfcd5157e5eaa39e67431b30b87f8772f64cbecd7f513c7ff3fa95bccc21d386d0fcf1a4f9b2a2fb076a496ea4edd3fbfbf6aac96d8b38d95ea68438c79233c758dd90f3c7b93bf528f6aa0ee5fc480a243b17af6fcfcfb71ed3f846c790e</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>EditMetaDialogBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>EditMetaDialogBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="local" impldecl="in declaration">posedit.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/editnotedialogbase.ui b/muse2/muse/widgets/editnotedialogbase.ui
new file mode 100644
index 00000000..e6e01441
--- /dev/null
+++ b/muse2/muse/widgets/editnotedialogbase.ui
@@ -0,0 +1,202 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>EditNoteDialogBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>EditNoteDialogBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>231</width>
+ <height>182</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Enter Note</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="5" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Length:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Time Position:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Pitch:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Velocity On:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Velocity Off:</string>
+ </property>
+ </widget>
+ <widget class="PosEdit" row="0" column="1">
+ <property name="name">
+ <cstring>epos</cstring>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>il1</cstring>
+ </property>
+ <property name="maxValue">
+ <number>1000000</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="1">
+ <property name="name">
+ <cstring>il2</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="4" column="1">
+ <property name="name">
+ <cstring>il3</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="PitchEdit" row="2" column="1">
+ <property name="name">
+ <cstring>pl</cstring>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>EditNoteDialogBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>EditNoteDialogBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>pos</tabstop>
+ <tabstop>il1</tabstop>
+ <tabstop>pl</tabstop>
+ <tabstop>il2</tabstop>
+ <tabstop>il3</tabstop>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+</tabstops>
+<includes>
+ <include location="local" impldecl="in declaration">posedit.h</include>
+ <include location="local" impldecl="in declaration">pitchedit.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/editsysexdialogbase.ui b/muse2/muse/widgets/editsysexdialogbase.ui
new file mode 100644
index 00000000..cfd91cdb
--- /dev/null
+++ b/muse2/muse/widgets/editsysexdialogbase.ui
@@ -0,0 +1,209 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>EditSysexDialogBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>EditSysexDialogBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>433</width>
+ <height>330</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Enter SysEx</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>TimePosition:</string>
+ </property>
+ </widget>
+ <widget class="PosEdit">
+ <property name="name">
+ <cstring>epos</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>saveButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ </widget>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>loadButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image1</pixmap>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QTextEdit">
+ <property name="name">
+ <cstring>edit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Comment:</string>
+ </property>
+ </widget>
+ <widget class="QTextEdit">
+ <property name="name">
+ <cstring>comment</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="2285">789c8dd35d6fda301406e07b7e05aaefaae934719c9068dac5cabebab60c3668d34dbb308e03edfab11518eda6fdf71d9f7382a02dd3fa16a407bf716c07f676db65ffb8bdbbd79acdedfcdcb5ddd4deb677abc5d5d5fd97af2f7eb776b46ee37fc7b4f5ceb3d6ce60de76eddecdb50f80254245f447ae1b2731d9af5c909dd888abc686fb11398f5c9493278d63f634388e42c89fc9790879dc58f3f8a1b8b9de06eb2884fc536cc431b9d04ef3face82933869f6d3131bf18c5c24b9eca72b76e232d8c42692fd9d8a9bfd9e90adc98d258fc44e7c1b9cea281a1bf2909d46293d0cf8244ec53fc876d5df5fb9227f171bf147765aa47cbf0fe24a7c139ce955ffa2b14bc9d7e25c7cc4cee28cd77345b691737cfd65e38afb07ecacc8f87edf823b491cc9f839bb137712b212a7e277c179a28de7efe3abe0c225a6ae83d5845d1485235b71c586b7c1d6989cfb50909db596fb53b167c3cbe0b1e9c4327fcd1e6b39ef813813bf2657abbe628fad9c675fecc56f825d9a17b29e3b7125d77bb6d37cdeaa126772fef7e4aa903efc62dbe6fec076969f8772622fcf270faed24acbf977c49958937d652b3eef4cecd98a7e7f3ef3da67349e8a337142f6decaf332622f3e0eaeb35ad7dc7f2fcec40b725d5bd9df5c5cb307f3ff0ff74181853138a8f015e257a9251398825af52d9c632ee01b5cc215e61a730137f01d7e606e3133cc74adaf30f3ad593ce8ffc4f6f29ffde593f3dfc13dfcc2f797b0bf91307f77a31fd6bf6deec5a3f534fd57f01adee0eb2dbcc35d6fcebfd93fc06c9bfbfdd6fefe963cec1fc211e6f1bc9c63eaf736fa1f30fd8df67a7ff0a8ff71954f9421660427708a29f12c6770b6d6ff8c8d7fb77bd88fd6fa43e985d12e354227b4ce2096f7f5fe88528286040cbe52c8a00339147887117e5fe28dfe12ef1d52622f8c0f2157007da594ddd23fa574d518df8f7065ebfd9327fa25a58bab2871d743e554a5140cb05f3ed1b7f4fd0bbbd4388e67826d8fed5a4df0d312c737fa74871e9d88c6a746c1b5d46a8afd1e5e71f8b04f6734c5abb627a2dfef9fe7adbfc6a22669</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="2589">789c8dd64b53db481000e03bbfc2c5dca8ad8e3492c652a5727008ef77121c87ad3d8c4663e327066cc0a4f6bf6f4f774b3c422da139f0797aba5b23c9c5878d56eff4a8b5f161ed76611743d77297f6a6b5512da7d3d5dfff7cfab5b6ae750b7f8ba4a5d7ff5a5b3f5bb45cebf86ae603402154443fc1ea869c47291b66c17114b928a7f5153b04792c4ed99091f310e4c7608debbc1fac3817976227f53a6c9d6aae47fd74d1e43f88eb79066c9deb827c2f766c2027b1aee77d64275112d3faa938153b72a1e57ad48c9de4b27e179cc63a97eb5d8aebf9af1af3bc0bb24d22f16670a6b328b5944fd793d9acc8c8908a2bb6ba0e36da64866e9eba255b53889db832bcbf086e97eda25dd2fa9db86203edcf932c92f349d878bb12b226977991737e2eaed86a145ca47843d8cbda454af9b13813b7c9ae280a478ec4155b55c1363555c2f76fc8b6b1ac4f6b5bae7721cec49fc9aed9bf605bcbebeab231f73f117bb69a0497693b4bf9fefe64975ad6cbda25f73b161b718f5c95567cd4b8a2fd73b167c38f6097392d3eaced3272576cc407e4ca59b169ccf5add8b3613fb8ca2a2d3eaf5df1fe3db161ab3ed95756d6bf37e6ef875db117d3797a63ebe7d1b3bd96f59ddade90bf890d5bd1f78df7853cdf70c3b6b1789bedade77a5f83fbd84fd62bb197e77dca2e4d9b9fdf2d765ff7b9ff17b111d3fbd4efe37e9a1fe6ec524bbd8ed88807b5b9be02b1957e7db6d3f27ef9daf23e9d898d7822b6f27e0d6bcbfb32167bf1885d69797faec4867db6f8f3783b1f541defe73fe53eed79daf73aff75cdd77d5ee6ffdebfdef1fff3bf5f1f2c9418f6cfce071c54e0a10f0370efe763f6250c61046398c014357b196fe47bb8c26c0f73b87e23dc6ff913aceee1066e6121b1843bfcfc1ee30156f0585f77933f810e7c864df842b105dbb003bbb007fb7000877004c77082712af96758fd2b563d806f183bf01dcea10b3fa0073fe10222884143022964cdfc73aabe85b9db52fb1c0c56ee61d50b68430e059cd6f3e3600a16ca62ff901f7ae02ce82e1ca9923ae4ca85bb26f53baac2ea21c7d33cbbaa8fd90738d131d58f21518367e713663fc1fe7bb86717a70fd719a6c1eaea520dd50852357eca5713d80cdd69a273d8a7da940d276a8ad3276af6fcfcd5157e5eaa39e67431b30b87f8772f64cbecd7f513c7ff3fa95bccc21d386d0fcf1a4f9b2a2fb076a496ea4edd3fbfbf6aac96d8b38d95ea68438c79233c758dd90f3c7b93bf528f6aa0ee5fc480a243b17af6fcfcfb71ed3f846c790e</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>EditSysexDialogBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>EditSysexDialogBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="local" impldecl="in declaration">posedit.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/fdialogbuttons.ui b/muse2/muse/widgets/fdialogbuttons.ui
new file mode 100644
index 00000000..33c79814
--- /dev/null
+++ b/muse2/muse/widgets/fdialogbuttons.ui
@@ -0,0 +1,204 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>FileDialogButtons</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>FileDialogButtons</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>175</width>
+ <height>438</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>pathGroup</cstring>
+ </property>
+ <property name="lineWidth">
+ <number>0</number>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>globalButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="iconSet">
+ <iconset>image0</iconset>
+ </property>
+ <property name="usesBigPixmap">
+ <bool>true</bool>
+ </property>
+ <property name="usesTextLabel">
+ <bool>true</bool>
+ </property>
+ <property name="textLabel">
+ <string>Global</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>userButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="iconSet">
+ <iconset>image1</iconset>
+ </property>
+ <property name="usesBigPixmap">
+ <bool>true</bool>
+ </property>
+ <property name="usesTextLabel">
+ <bool>true</bool>
+ </property>
+ <property name="textLabel">
+ <string>User</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>projectButton</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="iconSet">
+ <iconset>image2</iconset>
+ </property>
+ <property name="usesBigPixmap">
+ <bool>true</bool>
+ </property>
+ <property name="usesTextLabel">
+ <bool>true</bool>
+ </property>
+ <property name="textLabel">
+ <string>Project</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>60</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>loadAllGroup</cstring>
+ </property>
+ <property name="title">
+ <string>Load:</string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>loadAllButton</cstring>
+ </property>
+ <property name="text">
+ <string>Songdata +
+Cofiguration</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>loadSongButton</cstring>
+ </property>
+ <property name="text">
+ <string>only
+Songdata</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>0</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="5310">789cad965b73e2481285dffb57383adf3a3672102021c5c63ed86e5ff10ddfdaee89794824617cc137c0b789fdef9bca3ca5a66dd8d999d9aec6e673294f9dcaca4af8e5cbd2d9c1eed2975f3e8d2732b9cc97f2a13c2e7d29a6a3d1ebafbffdebf74f9f5bed25fd1f7592a5e6e77f7cfadc9b2ce54b7b77b765054c0ad4b07fc603e77623918ae919dceeb48c6f9ce322ed572c6bc669236fa4363f74aee34fc039e213e7b8d1f1f86770ec4ca7ce699cc7c6b715478d6a98bf6fceaae7f1afceaae7fa54b3eb75c0716af3528033677e724e63c98d6f03f7db16ff669c467964fbe307e7a0cfd760e8f30518faf252b3fb49c1c81fad3bd7eb413fcdc0bbce595c783eba15371bd530fd3be7b8403e2681b17e59b3af97392711ce6f1038f3f5cec0b1b3907327ca2c3ff4cd390d7e1ec1c1ef8e731615565fc2c6599279bcdc80839ff3c0d0ffee1cd6e3041c637e2fb0f87ad760e8d37e60ccaf3987f3a51c5cf40be3c2398be07f195cc0ff65c5ad28f895dcb913f2d500073f17e0e0e725b0cfcb2db8c0f30735fbf3abce6904ee83437e2370f0df7456ffc6fc1d1c637ec559e23231be0397d8df57e32abfae0faed72b9db3701fef9d453c9e5a15b7a376a31d99de15b80dbe700ee72702ceb05ecf39cbe0bf012e7c3d3e77ee377d3d3e0becfb61d7135dcffa8d74c1a9331d3a4b04ff78be8eb7f38f9b7123b6e648c7ce69a8f7d839f823ab87583a05fc6f39a7387f8e9c25cefdf901589cc5f493661225b61eef394be9f3bce3dc4ffc7eb1f5af44d250cfd6af3a2d41bd72d3393c2f47c6fd4e86fe543aa791f7031a3bd7fafb6001ef82437d98bfb4d509fde4c039e8c92e38f43fcc6bbcfbb1fca77d9d773f4330fa21df81433fb0fac9da29f22b1bce59b86fe03cd443e004bc06467d8aed2fcbb3507f3be0d08f9e9cfb09ea6dd339c4f33a18f9a0ed8aa52d11cee3158cf397a1731fe74947ce7989fb3732ce05fd487a60c1e74f0a2e31df770e7a72edacfb77bf5bce45e2fa62fefb6d29bd3e64dbb9df44bd5c8213f0917311ee430f9c94beff17b060be6d5c68bcd76b0e1667590797b82f783e477dc92a18f9e43767d5777e059703df8fed2f8f75ff1ebfe29c37715e31389c5fcbb928a187e7cba6b3587fcf0b7ddefd4ec1b89fbc0d0ef771e21ce27939b0fbe33138815fdb4f11e7a87fce9c0b9c978cc1b87f34710ef1fc0816e8399745a8ef6370a8cf1370a8cfa97389f313fb3e512605ea4f46ce25ce5beec1a81fb6ef5f651d4f0c0ee773050ef93d0c0cff53e741c8cf6acd03d3db0427ce6ceb0f923abeeb5cc73f83437e6ec08278fbbc1a0c6abd1138ccf7c103e7dee4ef8f1f3a4c61fc1d1d16eeebc8b9f86b6adee779c0173ce44bbe32b5cb3faf663ad77cc323be35b53b55b9ffe8ed8f766d3a0ffcc8639ef054a39fde790b6ab9be7f5eec137e5ef895df789957f4b5aa11b3de46a6f0555f237bdf5fa8f3c06bbcce1bbcc95baa3851b59fbd6d43ed4ab52ac5aeef748ece0eeff21eeff381aaad73cfbc4dd4d9211fa952ae4ac77cc2a7aa52a9dd7f74643adff88ccff93b373852b5a6a9b9b796aa0dd4519b63554ab8c329677c42fcde91dd27e27312ea534e0595dca0c18cb7095dd0902ee94ab50674adaf1b1af131ddcef34377744f0f9a8f5b7aacd482371af3064d684a4ff44c2fea6cd9f296d02bbdcdcb332dd30aadd2575aa3075ad7517b536707b4c12fb4a9ce5e788526fa7b8bb6a93bd7cf0eedd21eedd381aaf52b35f3e66a3d3ab47d6ed291664df346c7f3fdd0099dd2373aa373fa4e0d555b7de72da2e66cde5467ae1f6a519b624aa8432965c242ea6def83b728e44d64417efcaeebc7a5e4fab54e3ff664b0c09b9d825c2cf2a32a23ab53ad7e19566a7c31e3ed5ddee472be1fb9b29b53d5bcd6aad65897bb72ed6af3bcc9cd423fa32ad655886524a3aa66f59dedf4a7bcedcbaddc2dcccfacca3d9fca833cf0b13cca587fdebbda0f6f32a9fcfcdc41e0e73eb429f752a9e8c8746ccb54a6d59d9227fda6f5aca7f022af959f1f9dad1a9e9fca039fba8a7b511f631d6f3aa6b22c2b36a6aab62a5f7583337e6674d678a84f3d9a8f937a4795974a656a1aebda3d72ce644336e56abe9ff09eaa3da882bdc6418563f5b3255b9ceb8e87b2ad7fefcef7e3990a7f911d5ddd7dd45e54675db3bfab2ac7b2b7c8cfecf9d56afbbabee7055e2a15cddd81f4febb9fd9fe56eff44a63b7b4db1fcba179a954a61ffdcc7e2e7f1cb5b7a91ca8d6b6eea8a73f8fdefb09f5335fe3839a768b4a855e7ff6f3a30e17f999ebed48f6a52b1bc1cfecbdf8638d0f797ba7f2bffb79ffb9f77efcdfbe47fdfb9f9ffe03facd42d6</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="7224">789ca5975973db3a1285dff32b5ce9b7d414ae2889145953f3e07ddf774fcd433748598be54df2a65bf3dfa7893e60ecd83735531386297f017070d06834e13f7e2c5c1cec2efcf8e3db74c6b3a15ff0037e5cf8513e4d266ffffcd73ffefcf6bdd35dd0bfed225b687fffdbb7ef8e17fcc2dedd6d1580dec1e1ec7d8b28502bfc093c0577c177c6dd56c635cb2eb86b4cfbe0bc27a17d05ec7b9d30fe3a70ae0279cdfe119c1bd3a17196143ef01b3835f66b3527ada49b043ff2649cb6f2a02fabe0143c03174537f08bb1ea07f6d63f57bd30bf9c80bdb17b334ecbdcd6f31cd9c6bb7be32c41fb040cbf720b2ec0af91398ca7ccb848ca34700f9c5659e8dfadb9ddaa9fe0f701dc351636ceb03e4e8c7b0987f9b80d8e7eaac836bfec052eda79bb087c0af660328efeb905c6fae9c0b8d1f791a15f820bf8e9804b31bfd0cf13ebcf070d5bff71645f06ee8253314ec1d0a7f5c8a64f6b0d87fe74078ef31f366ced27c69c58fc79a9e64ed2f69d24ecf7a271a7652c621cd7eb5ec1717faf1b367f5d7089f697862d7e7de33c81ff5570f4eb1b36bf1bc645e243feb80c8cf8d043646b27f8672ec379e7edc0badf9db0dfcef48b0e58968d9bfddc01637dee160cff7461dcf8357f4591c0cf7964f8b907c31f97e002ebb17815d236bfb414d9f6c785fedda4e3bbb63f03e36ecb984fc05d633f6ed8ead79a71939f33e3383f4d8ce37c6ccc3a5f18cf9bc63a9f7106863ebf8273cc370063bcdc18f762fd98825363d7332e4ae4ff9331e33cb8d45818fe825edaeee66928fb7c6a9cb68c69cf38477d953730f68b368d39e6530e8ef9f3d8b0ed27e693ac0afb23478175b8d573ee19777d6af158344e0b63bf0e2ed1fe6cacf919e6f3217fb2763c7f3236ce92ccd6b762dc2b2c5ef46a9c235ff9c1389e079e82511fe4ce38c693198cf5f9703e326ee37be85f8c9bf36ffa9ca5f81eee834bb033cef1bda10138d6d391713c8fae30d67cb7f587fad8eb34f30fc0f81efb393837e6c2382bed7bcb67c6bd042cc605f69f5d64e4ffbe715c3faf822bec37fa4b86fc3b890cffc7e0cafcbba38643bb0ff5a327bdc2ee07de834b63be37ce637d5c312e50efe4da58daa8179163be84f179130f5f1ac7f3e847c6bdd2ee079c1be709ee0bc760dc1f68cbb888f5bcd5b0d5bb3370ac77953123df7c381fb9c4f9ddd0388ff97a6b1cfb1319fb58dfb6c088af84f98b6e9a5afef927e33cc5fde60a1cef3bf7c645ccbf6330faf39db1c6d3e667e3389f3b8d6c7e7cf053784d3fbb2f1d1a473fd233d6f369f7416f9c97a83717c64dfe41af88f7870c1cef4b4bc6cd7e0f8c3dea9d84fb84965bf8f19b60dc0ff9c8b8d9bf148cfc924b63c6fd8366c69adf36dfd0d8237ff931b2d53bb76d5cb68d7d381fecd3785e97c029ee9707c6bd14f928c68cf3271be0143c073378135c21ffccbf6fcedbae7119f367a761f317ce9374a33f498d99510f8760e8cb2832f27b6e2c6d7c2f4a7086f62be3983ff4645ce2fbe043be499916c89fc4b888e7c1e62f55dfcefb2218fa7ed6b0b59f8319f57dddd8235fdca5715c3f6d8319fbb704aefa96dfa19ee87695e6cf5d19c77c702330831fc095b1ac1bc7f9fd3318e3651b1cef5f7de312e78ba660363f6e0f1cf36d3932daa15f617d6e2532d663fdcbb81ed93216d4733933f638ffae0d467df78b60064fc118cf6bc625d6434760f8a51de3c6df5a64f89f8133f80df79132cd0a3bbfbe6f9c27761ff5afc645acdfc7c63ed67f06c7ef551519bf5f8d8c4b7c5f09fa65662c8f91719fba05235fa8308eeba12432d6b30fc67adc6ac3fdc0676036f6a65fe529eea7136361dcaf5bc625eebf6e0c8ef5f9001cf3e90d8c7a45a791cd2f9f1b47ffbc0cc6f9a4e7c8e69f7230f2913a0d07ff14c7c77c7c6a38b44b8857a5bf3eda7d4d72638f7ae31e8d63bcfd101cef439b91713ee6e00afbb3631ce34f6370dcbfddc8d6ce1760ac87f71ab6f5c4fed17f380f55e5e3794f8c9b7cee83113f7e01235ff83232f4afc0d077e7c6fd36da058c7cf1217ffb5919eb59c738fa7773708cffa1713fc6a3ddb0cd77038ef979d1b0b5bf80e1d7857ad6ef37e337c0b1ff041cfb57e0bef1e1ccd1fffb065dd69fdebfa28faffffde5ff7ff37ee1a774953e7dd5b96ed4fe473f6ea023076ee8466eac5a3741edbff2f68b9fdacbc4ddba3b77af6a0fee3170ad366dd44af559feeaf3939f997b72cfee45c7bfaada5be36de2e6aa35d5f171d5e2167ffafce467c92dbb157d56dd5a50fbe96dac4aebaab781b7729b414dbef4b3e5b6f5dd71bbaab7e7f67ff1367607aa76a33a87aa74a33f43e9939f2377ec4ef439d567479fdadb993b7717ee527d5db996ba485c5bffedab5a4763552b7df6d375a9cb5ccfe5ae2047440c6fcf24ee8e3c9554519fae6940431ab93e8d43cce4573f744313baa53bbaa7077a54b5139ad2cc9dd2133dd38b2abd8658ddd571235d296165bffaa1455aa2655aa1555aa375daa04db74a5bea8d699b766897f6689f0ee8908e2c6e74fc177e4ee8c49dd3299da9ca395dd0255d510bde6a5709b5a9435dddcf99c6ada2f42ffc64d4a35c7b17ec98982977e7ac171e5a672dc3dce76b1ef0d02d236ed5577e34cac2231ef38d1bf0846ff94ef7fd9caef85e551ef89184a73ce3277eaee316f6f4fc4b3f9af9fcc2affcc6735ee4255ed678e4aab3c2abbca6bed6798356d5db1d6d604fcfbef2c39a9f7ca33bd0e62d3754a56dde51955d7df7546597f7f9a05ea1c66d950feb3d753b7cf4859f327839e6133ed5f72c783ae70b5ee64b7dafb8a537f9367754ad5bdfe1556df0a51ff392718f737d332e6a4f9ab5b5975dedac011211af37db4afab537b9feeca7f6a22a273290a1ebcb4806faf3b8f614cee48daecebcddca8d4ce4b6f6267772ffd14fed8586c1cb5c4f8e56068db57a9287e069122a47e536e451a63293277996177995b78f7e425cb6a2178c3a94f93b4f37561f65d16dca922ccb8aacaadada7b3f7c23ebb2517b91cde0253e732adf7ba2b90cf958b6f4b4eb79976dd991dd0f7e845f65cf2dca3ed53e267220877264754f8ee544f6e454cf75a56f5f867226e7ee814672219b3ac7e54f3fa6a83a575a552a6949a2bf9974825242a974636ce22b67ae2557eabda53a1ff2193a591d1be9492e85779eea0aafff2788cd24be7adf905a457fd1fde007f9b3e8452b5d15eee17d7fed07b51f5fcfb0d17859f7c3da8beee9d88f64e4c7f2e97c453ffec64ffcadbff3f7d18f7ff08f7e5a7bf13359f74faaa25e54e5f9b77e5efcab7f533ff3c60f1effa8df8bb1ee7cbda2b95ff423d5f9540f1b3f2f7ec92ffb155d578ccf4fa555bfc6a77edd8baa78b9fcda0f6fe9be77fc86dff45bfa6ebb0e557af2e5d3a3df08def43bba97bb9fcfd717fddf3f9ffb4cf1363af0f35b9df7dff2afda3fd49fdfa97cba637c6cfffeefbf7ffb0ffbcaf966</data>
+ </image>
+ <image name="image2">
+ <data format="XPM.GZ" length="8120">789ca598d96e23cb0d86efe7298ce1dd4150475b4bdd0872e17d5fe4dd0e7241b25a966ccbabbc0679f7948a3f35b667264890d1e8603e5515fb278bc5629f3fff983bdddb9efbe3cf6f8f139e8c744e87fc30f7477c1a8fdffefe8fbffdf3dbf776676efab768cdb5beffe5dbf7c0733ab7737b5367a00fd09f7c1c9104d4c87f323f823bc6f10d5c36cacc0b606ddaf89d71b301aec19d669eaf87e012fc005670cfb8a5ed6666ac6f378c6505ac1de355e34ec3384e66cc59ffad7337b34470c7380ec0a5cdd7cab9c8619337e75e7bcab4ed5c4a1e873f1db5713d362e8ac2ec9d806337dbd353e36e13cfbf0417c6bae60c7b67cef63c3d07478c5fcfd8c6378c7b4df0c4b9ea647e0217187f0657a5d97b75669bff629cb6cbe66f3a579af533b832fbd20647b1f55bc655c579be369cb5c83c3466c67cc4836b1b977563618d995bc6da8d793c5c642ed3065b3e9abdd2f38f2760e41b5b3ccb76c7f6972d9ea5e78396e0d2f62bbe1b170de4c3c019f13a0257369f768dbb4df33706708578af3adb7a7a0347cc1f19f79a361e09ecfbbf0e8ed84ff8cf8c785e194bcbe2a3b02775cce79bf7a7dc6cb4ca5695b96bece78b3ae0b26de34bc67ebef80ddc317f79138cfc9777638f0f379c2d5f54c105c69be00ae769011cc143e32ef24f8e9d916f47ce96afdc0217164fae8dab66ddcdfe1599d3fea39e5c1bbb7f326f5c20ffc32b389a7e317b697f8df9ddd9e6cb05b8002fced8e66f83715ec2dd8c6d7ccb19fe404f17fb2d9733363d23e31ef24d4e9ced3c91c5a3ac9a960fd40617831c0fcef5a2d5987e32b78dd3fa7cdeb8032ea06fd719faaec138dfbce08cf53be0081e189785ed47ccf169551dc5f952e36e61fe92adaf66cf1f833d3e05385afed39171897850e96ce37c08c679a2ca19fa179dadde9033fca35567c477c519f3efc1a87f7c635cf9f3f7c06effc0989bb61fb40f66e390f3abddf4f3a94d30f2977a60b5f32aafc69e0fe105ec7a4733b6e737c0d1e249985f16d8af0076ff96c1f08f969c31be66ecf9162a30ecd1b133e63f3a233fefc0febc796366ab5f21e747bb727f756c3c3bbfb760b5fb97edf95517f544578c67f79f389b3f72605ce2fcf03318f9129fc0881793b1fb176c3faa547fb35e5a00fb7ee6fea3d3f4fe250c8d5dbfbe833bd68fc82e58d19f60fd6cff0e8d4bdca7746b2c2d7b9ee6fdeaf0cc5e178c7e879c613fdc18fbfed389b1ef07df3a63bf1ec0111c666cf7cdbd3137b17fa5b1429f34c18cfb6a00ae8d25d7a7a2e5f775bc067b7f3631f6fac12bc6b3fb3a800b63da32f6fe451fc1b87fe5d419fb7f67cc5e3f095ca03fb931ae5b8341d697cf5f2a8e0dcb3fb1f5ecfd20bf802be378058e18cff5abdb4afda1f973052e8c65c9d8e34913b0dfef6c2c8cfbee065c9b3ecee7bfcbddcafa1d3e0647f4a3f7c6decfd1e58cad3e3e184b0bf6198ce7c99a7144bec7ec6fafdd6d5a7fc09760f4b7bc0e463f2b6cdcf3f9af60cc27f0acfe88b1742d3fc3b1736df97608463e71aedf3df1fe984fc0de9f75c1e8a7e5ca585aa8df0246becad838c27f2e9d2dde92f3a54cfad1cf457034962de312fd9e3c80bd3f1a1a57b86fe3bcb1f7c3e1085cc3df036385ffd230aebbd093fbb532f967f52c8c8c4bf45f61c338f5d7b63ee743d5f17e93d78c4bf45ff1068cfb5a968d2b8c531fecf7793476fbe1d419fd88b1f6bcbf1163cfbf78615c816507ecf35f8cb9b6faa56cecfb476aacc84f36bdeaf1d1dc4fa4f28878eb8e7185fe4eb7c1dedf3d19b3f77ffbc67e1e381a2bce673871c67d9ffb49d659fde91857decf6d837dbc6fcc35ee778c479c475667dc376733b6fd3f37ae3d3f72fd93e40fdebfda60f40bdc3766ef279b609fff662c2d8c0fc05dac877d7f5fa353e38878874d30ce8be6fc9658a15f8cb63e32fa51d90333c66f8dd3f36dbc04635cfb60e44368187b3cc216d8cf6bbebf53f380faae07c69e3f5280bbc6710cf6f7af0e18efafba68ac58af3760ac0fbbc611e7979e9ca1efd9b86ee17c2f39a39e637e8d7ce28b19db38f40f106fcaf54ca3d78f28e0da584d4f4c7a8defc0a8af1ac0be7e098cfa4a7bc6337f368c5d3fad3bc3bf0918e73fcccfd8f4db7e44d71f72fec5147f7b5e5430ea71b83456bcff867bb0cf7f007bbfe1e30c7dd7c611eb6908f6ffdfb000f6fdd93176bd6111ecf99cf333d6fefead7bc68afe301460d4435d02a3df9567b0afb7e7d7d1d75f81bd9ef6c1de2faf18cffa936cafeeaadfd795b1d70fba00778d95c098af2de3dae78fc1984f6760f81f96c11eaf73e381d723cc1f78bc72fdac937fc8f755b0dfe72d30f62bec813ddfccbfdaf783ec79b53f2f3c817dbf723e0c92bfc8bf36d8fbf575e31af594dec13e7fdf78e0f5f61a8c71da9cb13d2ff71783c12c5f3a608fd700ecf15a339ee97f03fbfa31d8d7d7e081717f12e8fffd66bb9cfef5f12be9a3d3ff7ef9fd3f7c7fa127863a7d06c9cec5ccdaffa8270cd3ca611885cb70956c5d676bff95b62f7aa65ac6e126dc86bb64ed3e3c649e5a7b9c598b4967fcaaf3273d93f0149eb3672fc9daeb4cdb38bc255b8f69bd7b2de1fd87ce9ff4cc8785b01896c27258c92b7e685b4d96d6d22f6ff8d6613d5b935fead9089be9bb15b6c34ed84dd63e6bdb0bfd64e33afdb29fe3f7e6967ed273100ec351380e27e134593bcbdaceb38e46d2d50cadd00e9d50242dddf45b27c56a6ae9673dbd50868a021131092945689beabaa59a067441431ad1255d51da4f1ae798c9573d7443b77447f7f4408f3421726df444cf94bca3d71cabdb69dce82d8ce8dd3cfbaa87e6698116698996698556696da62dd23a6dd0266dd136edd02eed59dca8ff1b3dfb7440877444c7c9ca49b2f651db099dd25958a3736aa41d984f71aba9f91b3d2d6a873bea50415dea51491587646d69aa8d8953eb337d5d0e3b885bfd1b3da905e5417a95bee0218ff892aff89ac77c43ab7c6bdaf88eeff96116b7b5dfe879e4479ef0133ff34bb2f31a86fcc6ef3ccf0b74c48b88db52f214710be7bfd5b394b42cf30aaf263b6bbcce1bbcc95bbccd3bbceb719b6ae3bd69dcc219f77fa587f79396033e4c768ef8984ff834293ae3736ea41ebc15eeb89dbaf1e28736d65fe9e16ed2d2e392ab3440a95b94304a2f752fa2b9571cc8850c6524973fb4c9d5cf7ae47aaa45c67223b772c723b99707794c9626f224cff222aff226efe9332f0bb268da6449963fea911559cd7129654dd66583bab2295bb22d3bd4945dd993be3c4f4f81eccb811cca51b27621c77222a71ff5242b67722e0d69262d2d69875a9ef924f5e13b52240b5d59969e94526950a26b7a4ffd9bc8a1aabca7deef831ead75a0173ad4915eea95a699a96aedc9533a898370afe3a4eb299da9822ef42659bb9567bd0beb7a9fb4c58f7af4411ff55a27faa4cffaa2af9ace1f8f528e0d5375b8d2f730d2791ae882dea4efa22e4919eee93ae9edeb727ac24c0f4f744557754dd7754337754bb7d3beafe573d809631deb8eece8ae2e262d7b494b3f69dc4fbff5434b97f5e0839e433dd2633dd1533dd3736d689347daca3539d94a7e6d693b3d7b493b69dfb296d4a3bf252bddcf7a82684fcbf43a16f43452eab2441751efc6533bbc467dba8afa434bb2b217a314fafe518ffd2bf56903d3142fd2ec40efa9d6d5e93b9cde0c7c42579fb5242b375ff5c0d230691ac54bd98b9aaae7f4165c0bad789547d3ec789de22366258e35c46427de7ed5932ddd4d35c5fbf8903c6ba5bb6140fd1fa3662d75df57f131e552579e3eeb4167903f3c8993f8a47da9e273caa3767cf964c73ee98e88afc9d3e6e7fc41ed714d6ff13dcee75d0ea9a67f5ccf5fb59996afe77d6669212ec6a5e4d93daf7c5cf975dec7cf977af88b191fac7cea313e8f7dffd75fbffd1bbcd1c249</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/filedialog.cpp b/muse2/muse/widgets/filedialog.cpp
new file mode 100644
index 00000000..6ffa6f69
--- /dev/null
+++ b/muse2/muse/widgets/filedialog.cpp
@@ -0,0 +1,534 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: filedialog.cpp,v 1.3.2.3 2005/06/19 06:32:07 lunar_shuttle Exp $
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <iostream>
+#include <errno.h>
+#include <qwidget.h>
+#include <q3url.h>
+#include <qpixmap.h>
+#include <qmessagebox.h>
+#include <q3buttongroup.h>
+#include <qtoolbutton.h>
+#include <qradiobutton.h>
+#include <qstringlist.h>
+
+#include "filedialog.h"
+#include "fdialogbuttons.h"
+#include "../globals.h"
+
+MFileDialog::ViewType MFileDialog::lastViewUsed = GLOBAL_VIEW;
+QString MFileDialog::lastUserDir = "";
+QString MFileDialog::lastGlobalDir = "";
+
+//---------------------------------------------------------
+// createDir
+// return true if dir could not created
+//---------------------------------------------------------
+
+static bool createDir(const QString& s)
+ {
+ QString sl("/");
+ QStringList l = QStringList::split(sl, s);
+ QString path(sl);
+ QDir dir;
+ for (QStringList::Iterator it = l.begin(); it != l.end(); ++it) {
+ dir.setPath(path);
+ if (!QDir(path + sl + *it).exists()) {
+ if (!dir.mkdir(*it)) {
+ printf("mkdir failed: %s %s\n",
+ path.latin1(), (*it).latin1());
+ return true;
+ }
+ }
+ path += sl;
+ path += *it;
+ }
+ return false;
+ }
+
+//---------------------------------------------------------
+// testDirCreate
+// return true if dir does not exist
+//---------------------------------------------------------
+
+static bool testDirCreate(QWidget* parent, const QString& path)
+ {
+ QDir dir(path);
+ if (!dir.exists()) {
+ int n = QMessageBox::information(parent,
+ QWidget::tr("MusE: get file name"),
+ QWidget::tr("the directory\n") + path
+ + QWidget::tr("\ndoes not exist\ncreate?"),
+ QWidget::tr("&Create"),
+ QWidget::tr("Cancel"),
+ QString::null, 1, 1);
+ if (n == 0) {
+ if (createDir(path)) {
+ QMessageBox::critical(parent,
+ QWidget::tr("MusE: create directory"),
+ QWidget::tr("creating dir failed")
+ );
+ return true;
+ }
+ return false;
+ }
+ return true;
+ }
+ return false;
+ }
+
+//---------------------------------------------------------
+// globalToggled
+//---------------------------------------------------------
+
+void MFileDialog::globalToggled(bool flag)
+ {
+ if (flag) {
+ buttons->userButton->setOn(!flag);
+ buttons->projectButton->setOn(!flag);
+ if (lastGlobalDir.isEmpty())
+ lastGlobalDir = museGlobalShare + QString("/") + baseDir; // Initialize if first time
+ QString dir = lastGlobalDir;
+ setDir(dir);
+ lastViewUsed = GLOBAL_VIEW;
+ }
+ }
+
+//---------------------------------------------------------
+// userToggled
+//---------------------------------------------------------
+
+void MFileDialog::userToggled(bool flag)
+ {
+ if (flag) {
+ buttons->globalButton->setOn(!flag);
+ buttons->projectButton->setOn(!flag);
+
+
+ if (lastUserDir.isEmpty()) {
+ lastUserDir = museUser + QString("/") + baseDir; // Initialize if first time
+ }
+
+ if (testDirCreate(this, lastUserDir))
+ setDir(museUser);
+ else
+ setDir(lastUserDir);
+
+ lastViewUsed = USER_VIEW;
+ }
+ }
+
+//---------------------------------------------------------
+// projectToggled
+//---------------------------------------------------------
+
+void MFileDialog::projectToggled(bool flag)
+ {
+ if (flag) {
+ buttons->globalButton->setOn(!flag);
+ buttons->userButton->setOn(!flag);
+
+ QString s;
+ if (museProject == museProjectInitPath ) {
+ // if project path is uninitialized, meaning it is still set to museProjectInitPath.
+ // then project path is set to current pwd instead.
+ s = QString(getcwd(0,0)) + QString("/");
+ }
+ else
+ s = museProject + QString("/"); // + baseDir;
+
+ if (testDirCreate(this, s))
+ setDir(museProject);
+ else
+ setDir(s);
+ lastViewUsed = PROJECT_VIEW;
+ }
+ }
+
+
+//---------------------------------------------------------
+// MFileDialog
+//---------------------------------------------------------
+
+MFileDialog::MFileDialog(const QString& dir,
+ const QString& filter, QWidget* parent, bool writeFlag)
+ : Q3FileDialog(QString("."), filter, parent, 0, true)
+ {
+ showButtons = false;
+ if (dir.length() > 0 && dir[0] == QChar('/')) {
+ buttons = 0;
+ setDir(dir);
+ }
+ else {
+ baseDir = dir;
+ showButtons = true;
+ buttons = new FileDialogButtons(this, "fdialogbuttons");
+ addLeftWidget(buttons);
+ connect(buttons->globalButton, SIGNAL(toggled(bool)), SLOT(globalToggled(bool)));
+ connect(buttons->userButton, SIGNAL(toggled(bool)), SLOT(userToggled(bool)));
+ connect(buttons->projectButton, SIGNAL(toggled(bool)), SLOT(projectToggled(bool)));
+ connect(this, SIGNAL(dirEntered(const QString&)), SLOT(directoryChanged(const QString&)));
+ if (writeFlag) {
+ buttons->globalButton->setEnabled(false);
+ switch (lastViewUsed) {
+ case GLOBAL_VIEW:
+ case PROJECT_VIEW:
+ buttons->projectButton->setOn(true);
+ break;
+
+ case USER_VIEW:
+ buttons->userButton->setOn(true);
+ break;
+ }
+ }
+ else {
+ switch (lastViewUsed) {
+ case GLOBAL_VIEW:
+ buttons->globalButton->setOn(true);
+ break;
+
+ case PROJECT_VIEW:
+ buttons->projectButton->setOn(true);
+ break;
+
+ case USER_VIEW:
+ buttons->userButton->setOn(true);
+ break;
+ }
+
+ }
+ buttons->loadAllGroup->setShown(false);
+ }
+ }
+
+//---------------------------------------------------------
+// MFileDialog::directoryChanged
+//---------------------------------------------------------
+void MFileDialog::directoryChanged(const QString&)
+ {
+ ViewType currentView = GLOBAL_VIEW;
+ const QDir* ndir = dir();
+ QString newdir = ndir->absPath().latin1();
+ delete ndir; // We're owners of this one so we should delete it
+ if (buttons->projectButton->isOn())
+ currentView = PROJECT_VIEW;
+ else if (buttons->userButton->isOn())
+ currentView = USER_VIEW;
+
+ switch (currentView) {
+ case GLOBAL_VIEW:
+ lastGlobalDir = newdir;
+ break;
+
+ case USER_VIEW:
+ lastUserDir = newdir;
+ break;
+
+ case PROJECT_VIEW: // Do nothing
+ default:
+ break;
+ }
+ }
+
+//---------------------------------------------------------
+// ContentsPreview
+//---------------------------------------------------------
+
+ContentsPreview::~ContentsPreview()
+ {
+ if (bg)
+ delete bg;
+ }
+
+//---------------------------------------------------------
+// ContentsPreview::showPreview
+//---------------------------------------------------------
+
+void ContentsPreview::previewUrl(const Q3Url& url)
+ {
+ if (!url.isLocalFile())
+ return;
+ if (url.path() == path)
+ return;
+ path = url.path();
+ if (bg)
+ delete bg;
+ bg = new QPixmap(path);
+ if (bg)
+ setBackgroundPixmap(*bg);
+ }
+
+//---------------------------------------------------------
+// getFilterExtension
+//---------------------------------------------------------
+
+QString getFilterExtension(const QString &filter)
+{
+ //
+ // Return the first extension found. Must contain at least one * character.
+ //
+
+ int pos = filter.find('*');
+ if(pos == -1)
+ return QString();
+
+ QString filt;
+ int len = filter.length();
+ ++pos;
+ for( ; pos < len; ++pos)
+ {
+ QChar c = filter[pos];
+ if((c == ')') || (c == ';') || (c == ',') || (c == ' '))
+ break;
+ filt += filter[pos];
+ }
+ return filt;
+}
+
+//---------------------------------------------------------
+// getOpenFileName
+//---------------------------------------------------------
+
+QString getOpenFileName(const QString &startWith,
+ //const char** filters, QWidget* parent, const QString& name, bool* all)
+ const QStringList& filters, QWidget* parent, const QString& name, bool* all)
+ {
+ QString initialSelection;
+ MFileDialog *dlg = new MFileDialog(startWith, QString::null, parent, false);
+ dlg->setFilters(filters);
+ dlg->setCaption(name);
+ if (all)
+ dlg->buttons->loadAllGroup->setShown(true);
+ if (!initialSelection.isEmpty())
+ dlg->setSelection(initialSelection);
+ dlg->setMode(Q3FileDialog::ExistingFile);
+ QString result;
+ if (dlg->exec() == QDialog::Accepted) {
+ result = dlg->selectedFile();
+ if (all) {
+ *all = dlg->buttons->loadAllButton->isOn();
+ }
+ }
+ delete dlg;
+ return result;
+ }
+
+//---------------------------------------------------------
+// getSaveFileName
+//---------------------------------------------------------
+
+QString getSaveFileName(const QString &startWith,
+ //const char** filters, QWidget* parent, const QString& name)
+ const QStringList& filters, QWidget* parent, const QString& name)
+ {
+ MFileDialog *dlg = new MFileDialog(startWith, QString::null, parent, true);
+ dlg->setFilters(filters);
+ dlg->setCaption(name);
+ dlg->setMode(Q3FileDialog::AnyFile);
+ QString result;
+ if (dlg->exec() == QDialog::Accepted)
+ result = dlg->selectedFile();
+
+
+ // Added by T356.
+ if(!result.isEmpty())
+ {
+ QString filt = dlg->selectedFilter();
+ filt = getFilterExtension(filt);
+ // Do we have a valid extension?
+ if(!filt.isEmpty())
+ {
+ // If the rightmost characters of the filename do not already contain
+ // the extension, add the extension to the filename.
+ //if(result.right(filt.length()) != filt)
+ if(!result.endsWith(filt))
+ result += filt;
+ }
+ else
+ {
+ // No valid extension, or just * was given. Although it would be nice to allow no extension
+ // or any desired extension by commenting this section out, it's probably not a good idea to do so.
+ //
+ // NOTE: Most calls to this routine getSaveFileName() are followed by fileOpen(),
+ // which can tack on its own extension, but only if the *complete* extension is blank.
+ // So there is some overlap going on. Enabling this actually stops that action,
+ // but only if there are no errors in the list of filters. fileOpen() will act as a 'catchall'.
+ //
+ // Force the filter list to the first one (the preferred one), and then get the filter.
+ dlg->setSelectedFilter(0);
+ filt = dlg->selectedFilter();
+ filt = getFilterExtension(filt);
+
+ // Do we have a valid extension?
+ if(!filt.isEmpty())
+ {
+ // If the rightmost characters of the filename do not already contain
+ // the extension, add the extension to the filename.
+ //if(result.right(filt.length()) != filt)
+ if(!result.endsWith(filt))
+ result += filt;
+ }
+ }
+ }
+
+ delete dlg;
+ return result;
+ }
+
+//---------------------------------------------------------
+// getImageFileName
+//---------------------------------------------------------
+
+QString getImageFileName(const QString& startWith,
+ //const char** filters, QWidget* parent, const QString& name)
+ const QStringList& filters, QWidget* parent, const QString& name)
+ {
+ QString initialSelection;
+ QString* workingDirectory = new QString(QDir::currentDirPath());
+ if (!startWith.isEmpty() ) {
+ QFileInfo fi(startWith);
+ if (fi.exists() && fi.isDir()) {
+ *workingDirectory = startWith;
+ }
+ else if (fi.exists() && fi.isFile()) {
+ *workingDirectory = fi.dirPath(TRUE);
+ initialSelection = fi.absFilePath();
+ }
+ }
+ MFileDialog *dlg = new MFileDialog(*workingDirectory, QString::null,
+ parent);
+
+ dlg->setContentsPreviewEnabled(true);
+ ContentsPreview* preview = new ContentsPreview(dlg);
+ dlg->setContentsPreview(preview, preview);
+ dlg->setPreviewMode(Q3FileDialog::Contents);
+
+ dlg->setCaption(name);
+ dlg->setFilters(filters);
+ dlg->setMode(Q3FileDialog::ExistingFile);
+ QString result;
+ if (!initialSelection.isEmpty())
+ dlg->setSelection( initialSelection);
+ if (dlg->exec() == QDialog::Accepted) {
+ result = dlg->selectedFile();
+ }
+ delete dlg;
+ return result;
+ }
+
+//---------------------------------------------------------
+// fileOpen
+// opens file "name" with extension "ext" in mode "mode"
+// handles "name.ext.bz2" and "name.ext.gz"
+//
+// mode = "r" or "w"
+// popenFlag set to true on return if file was opened
+// with popen() (and therefore must be closed
+// with pclose())
+// noError show no error if file was not found in "r"
+// mode. Has no effect in "w" mode
+// overwriteWarning
+// warn in "w" mode, if file exists
+//---------------------------------------------------------
+
+FILE* fileOpen(QWidget* parent, QString name, const QString& ext,
+ const char* mode, bool& popenFlag, bool noError,
+ bool overwriteWarning)
+ {
+ QFileInfo info(name);
+ QString zip;
+
+ popenFlag = false;
+ if (info.extension(true) == "") {
+ name += ext;
+ info.setFile(name);
+ }
+ else if (info.extension(false) == "gz") {
+ popenFlag = true;
+ zip = QString("gzip");
+ }
+ else if (info.extension(false) == "bz2") {
+ popenFlag = true;
+ zip = QString("bzip2");
+ }
+
+ if (strcmp(mode,"w") == 0 && overwriteWarning && info.exists()) {
+ QString s(QWidget::tr("File\n") + name + QWidget::tr("\nexists"));
+ int rv = QMessageBox::warning(parent,
+ QWidget::tr("MusE: write"),
+ s,
+ QWidget::tr("Overwrite"),
+ QWidget::tr("Quit"), QString::null, 0, 1);
+ switch(rv) {
+ case 0: // overwrite
+ break;
+ case 1: // quit
+ return 0;
+ }
+ }
+ FILE* fp = 0;
+ if (popenFlag) {
+ if (strcmp(mode, "r") == 0)
+ zip += QString(" -d < ");
+ else
+ zip += QString(" > ");
+ zip += name;
+ fp = popen(zip.ascii(), mode);
+ }
+ else {
+ fp = fopen(name.ascii(), mode);
+ }
+ if (fp == 0 && !noError) {
+ QString s(QWidget::tr("Open File\n") + name + QWidget::tr("\nfailed: ")
+ + QString(strerror(errno)));
+ QMessageBox::critical(parent, QWidget::tr("MusE: Open File"), s);
+ return 0;
+ }
+ return fp;
+ }
+
+//---------------------------------------------------------
+// MFile
+//---------------------------------------------------------
+
+MFile::MFile(const QString& _path, const QString& _ext)
+ : path(_path), ext(_ext)
+ {
+ f = 0;
+ isPopen = false;
+ }
+
+MFile::~MFile()
+ {
+ if (f) {
+ if (isPopen)
+ pclose(f);
+ else
+ fclose(f);
+ }
+ }
+
+//---------------------------------------------------------
+// open
+//---------------------------------------------------------
+
+//FILE* MFile::open(const char* mode, const char** pattern,
+FILE* MFile::open(const char* mode, const QStringList& pattern,
+ QWidget* parent, bool noError, bool warnIfOverwrite, const QString& caption)
+ {
+ QString name;
+ if (strcmp(mode, "r") == 0)
+ name = getOpenFileName(path, pattern, parent, caption, 0);
+ else
+ name = getSaveFileName(path, pattern, parent, caption);
+ if (name.isEmpty())
+ return 0;
+ f = fileOpen(parent, name, ext, mode, isPopen, noError,
+ warnIfOverwrite);
+ return f;
+ }
+
diff --git a/muse2/muse/widgets/filedialog.h b/muse2/muse/widgets/filedialog.h
new file mode 100644
index 00000000..2208b5bc
--- /dev/null
+++ b/muse2/muse/widgets/filedialog.h
@@ -0,0 +1,92 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: filedialog.h,v 1.2.2.2 2008/01/19 13:33:46 wschweer Exp $
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <q3filedialog.h>
+//Added by qt3to4:
+#include <QPixmap>
+
+class FileDialogButtons;
+class QStringList;
+
+//---------------------------------------------------------
+// MFileDialog
+//---------------------------------------------------------
+
+class MFileDialog : public Q3FileDialog {
+ Q_OBJECT
+
+ enum ViewType { GLOBAL_VIEW, PROJECT_VIEW, USER_VIEW }; //!< The three different viewtypes
+ static ViewType lastViewUsed;
+ static QString lastUserDir, lastGlobalDir;
+ bool showButtons;
+ QString baseDir;
+
+ private slots:
+ void globalToggled(bool);
+ void userToggled(bool);
+ void projectToggled(bool);
+ void directoryChanged(const QString& directory);
+
+ public:
+ FileDialogButtons* buttons;
+ MFileDialog(const QString& dir, const QString& filter = QString::null,
+ QWidget* parent = 0, bool writeFlag = false);
+ };
+
+//---------------------------------------------------------
+// ContentsPreview
+//---------------------------------------------------------
+
+class ContentsPreview : public QWidget, public Q3FilePreview {
+ Q_OBJECT
+
+ virtual void previewUrl(const Q3Url &url);
+ QString path;
+ QPixmap* bg;
+
+ public:
+ ContentsPreview(QWidget* parent, const char* name=0)
+ : QWidget(parent, name) {
+ bg = 0;
+ }
+ ~ContentsPreview();
+ };
+
+//QString getSaveFileName(const QString& startWidth, const char** filter,
+QString getSaveFileName(const QString& startWidth, const QStringList& filters,
+ QWidget* parent, const QString& name);
+//QString getOpenFileName(const QString& startWidth, const char** filter,
+QString getOpenFileName(const QString& startWidth, const QStringList& filters,
+ QWidget* parent, const QString& name, bool* openAll);
+//QString getImageFileName(const QString& startWith, const char** filters,
+QString getImageFileName(const QString& startWith, const QStringList& filters,
+ QWidget* parent, const QString& name);
+
+FILE* fileOpen(QWidget*, QString, const QString&,
+ const char*, bool&, bool = false, bool = false);
+
+
+//---------------------------------------------------------
+// MFile
+// "Muse" File
+//---------------------------------------------------------
+
+class MFile {
+ bool isPopen;
+ FILE* f;
+ QString path;
+ QString ext;
+
+ public:
+ MFile(const QString& path, const QString& ext);
+ ~MFile();
+ //FILE* open(const char* mode, const char** pattern,
+ FILE* open(const char* mode, const QStringList& pattern,
+ QWidget* parent, bool noError,
+ bool warnIfOverwrite, const QString& caption);
+ };
+
diff --git a/muse2/muse/widgets/fontsel.cpp b/muse2/muse/widgets/fontsel.cpp
new file mode 100644
index 00000000..a6808ff1
--- /dev/null
+++ b/muse2/muse/widgets/fontsel.cpp
@@ -0,0 +1,137 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: fontsel.cpp,v 1.1.1.1 2003/10/27 18:55:02 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <qlabel.h>
+#include <qspinbox.h>
+#include <qpushbutton.h>
+//#include <qhbuttongroup.h>
+#include <q3buttongroup.h>
+#include <qtoolbutton.h>
+#include <qcombobox.h>
+#include <qlayout.h>
+#include <qfontdialog.h>
+#include <qfontdatabase.h>
+//Added by qt3to4:
+#include <Q3HBoxLayout>
+
+#include "icons.h"
+#include "fontsel.h"
+
+//---------------------------------------------------------
+// FontSel
+//---------------------------------------------------------
+
+FontSel::FontSel(QWidget* parent, const QFont& f, const QString& name)
+ : QWidget(parent)
+ {
+ _font = f;
+ Q3HBoxLayout* box = new Q3HBoxLayout(this);
+
+ cb = new QComboBox(this);
+ cb->setFixedWidth(80);
+ cb->insertItem(QString("arial"));
+ cb->insertItem(QString("avantgarde"));
+ cb->insertItem(QString("charter"));
+ cb->insertItem(QString("garamond"));
+ cb->insertItem(QString("gillsans"));
+ cb->insertItem(QString("helvetica"));
+ cb->insertItem(QString("times"));
+ cb->insertItem(QString("terminal"));
+ cb->insertItem(QString("utopia"));
+ cb->insertItem(QString("new century schoolbook"));
+
+ QLabel* l1 = new QLabel(tr("Size:"), this);
+ s1 = new QSpinBox(8, 48, 1, this);
+
+ fcb1 = new QToolButton(this);
+ fcb1->setToggleButton(true);
+ fcb1->setPixmap(*(boldIcon));
+
+ fcb2 = new QToolButton(this);
+ fcb2->setToggleButton(true);
+ fcb2->setPixmap(*(italicIcon));
+
+ fcb3 = new QToolButton(this);
+ fcb3->setToggleButton(true);
+ fcb3->setPixmap(*(underlinedIcon));
+
+ QToolButton* pb = new QToolButton(this);
+ connect(pb, SIGNAL(pressed()), SLOT(fontSelect()));
+ pb->setText(QString("??"));
+
+ QLabel* l2 = new QLabel(name, this);
+
+ box->addWidget(cb);
+ box->addSpacing(8);
+ box->addWidget(l1);
+ box->addSpacing(5);
+ box->addWidget(s1);
+ box->addSpacing(5);
+ box->addWidget(fcb1);
+ box->addWidget(fcb2);
+ box->addWidget(fcb3);
+ box->addSpacing(2);
+ box->addWidget(pb);
+ box->addSpacing(5);
+ box->addWidget(l2);
+ box->addStretch(100);
+ setFixedHeight(18);
+ setFont();
+ }
+
+//---------------------------------------------------------
+// fontSelect
+//---------------------------------------------------------
+
+void FontSel::fontSelect()
+ {
+ bool ok;
+ QFont f = QFontDialog::getFont(&ok, _font, this);
+ if (ok) {
+ _font = f;
+ setFont();
+ }
+ }
+
+//---------------------------------------------------------
+// setFont
+//---------------------------------------------------------
+
+void FontSel::setFont()
+ {
+ s1->setValue(_font.pointSize());
+ fcb1->setOn(_font.weight() == QFont::Bold);
+ fcb2->setOn(_font.italic());
+ fcb3->setOn(_font.underline());
+ int i;
+ for (i = 0; i < cb->count(); ++i) {
+ QString s = cb->text(i);
+ if (s == _font.family()) {
+ cb->setCurrentItem(i);
+ break;
+ }
+ }
+ if (i == cb->count()) {
+ cb->insertItem(_font.family());
+ cb->setCurrentItem(i);
+ }
+ }
+
+//---------------------------------------------------------
+// font
+//---------------------------------------------------------
+
+const QFont& FontSel::font()
+ {
+ _font.setPointSize(s1->value());
+ _font.setWeight(fcb1->isOn() ? QFont::Bold : QFont::Normal);
+ _font.setItalic(fcb2->isOn());
+ _font.setUnderline(fcb3->isOn());
+ _font.setFamily(cb->currentText());
+ return _font;
+ }
+
diff --git a/muse2/muse/widgets/fontsel.h b/muse2/muse/widgets/fontsel.h
new file mode 100644
index 00000000..1b906aab
--- /dev/null
+++ b/muse2/muse/widgets/fontsel.h
@@ -0,0 +1,45 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: fontsel.h,v 1.1.1.1.2.1 2008/01/19 13:33:46 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __FONTSEL_H__
+#define __FONTSEL_H__
+
+#include <qwidget.h>
+#include "song.h"
+
+class QFont;
+class QSpinBox;
+class QToolButton;
+class QComboBox;
+
+//---------------------------------------------------------
+// FontSel
+//---------------------------------------------------------
+
+class FontSel : public QWidget {
+ Q_OBJECT
+
+ QFont _font;
+ QSpinBox* s1;
+ QToolButton* fcb1;
+ QToolButton* fcb2;
+ QToolButton* fcb3;
+ QComboBox* cb;
+
+ void setFont();
+
+ private slots:
+ void fontSelect();
+
+ public:
+ FontSel(QWidget* parent, const QFont&, const QString&);
+ const QFont& font();
+ };
+
+
+#endif
+
diff --git a/muse2/muse/widgets/gatetime.cpp b/muse2/muse/widgets/gatetime.cpp
new file mode 100644
index 00000000..412d4d4c
--- /dev/null
+++ b/muse2/muse/widgets/gatetime.cpp
@@ -0,0 +1,46 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: gatetime.cpp,v 1.1.1.1 2003/10/27 18:54:37 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <q3buttongroup.h>
+#include <qspinbox.h>
+//#include <qbutton.h>
+#include <QtGui>
+
+#include "gatetime.h"
+
+#include "song.h"
+
+//---------------------------------------------------------
+// GateTime
+//---------------------------------------------------------
+
+GateTime::GateTime(QWidget* parent, const char* name)
+ : GateTimeBase(parent, name, true)
+ {
+ }
+
+//---------------------------------------------------------
+// accept
+//---------------------------------------------------------
+
+void GateTime::accept()
+ {
+ _range = rangeGroup->id(rangeGroup->selected());
+ _rateVal = rate->value();
+ _offsetVal = offset->value();
+ GateTimeBase::accept();
+ }
+
+//---------------------------------------------------------
+// setRange
+//---------------------------------------------------------
+
+void GateTime::setRange(int id)
+ {
+ rangeGroup->setButton(id);
+ }
+
diff --git a/muse2/muse/widgets/gatetime.h b/muse2/muse/widgets/gatetime.h
new file mode 100644
index 00000000..c3e5b883
--- /dev/null
+++ b/muse2/muse/widgets/gatetime.h
@@ -0,0 +1,36 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: gatetime.h,v 1.1.1.1.2.1 2008/01/19 13:33:47 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __GATETIME_H__
+#define __GATETIME_H__
+
+#include "gatetimebase.h"
+
+//---------------------------------------------------------
+// GateTime
+//---------------------------------------------------------
+
+class GateTime : public GateTimeBase {
+ Q_OBJECT
+
+ int _range;
+ int _rateVal;
+ int _offsetVal;
+
+ protected slots:
+ void accept();
+
+ public:
+ GateTime(QWidget* parent, const char* name = 0);
+ void setRange(int id);
+ int range() const { return _range; }
+ int rateVal() const { return _rateVal; }
+ int offsetVal() const { return _offsetVal; }
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/gatetimebase.ui b/muse2/muse/widgets/gatetimebase.ui
new file mode 100644
index 00000000..fe696076
--- /dev/null
+++ b/muse2/muse/widgets/gatetimebase.ui
@@ -0,0 +1,285 @@
+<!DOCTYPE UI><UI>
+<class>GateTimeBase</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>GateTimeBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>275</width>
+ <height>266</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>MusE: Modify Gate Time</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QButtonGroup</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>rangeGroup</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Range</string>
+ </property>
+ <property stdset="1">
+ <name>exclusive</name>
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QRadioButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>RadioButton5</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>All Events</string>
+ </property>
+ <property stdset="1">
+ <name>buttonGroupId</name>
+ <number>0</number>
+ </property>
+ </widget>
+ <widget>
+ <class>QRadioButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>RadioButton6</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Selected Events</string>
+ </property>
+ <property stdset="1">
+ <name>checked</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>buttonGroupId</name>
+ <number>1</number>
+ </property>
+ </widget>
+ <widget>
+ <class>QRadioButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>RadioButton7</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Looped Events</string>
+ </property>
+ <property stdset="1">
+ <name>buttonGroupId</name>
+ <number>2</number>
+ </property>
+ </widget>
+ <widget>
+ <class>QRadioButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>RadioButton8</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Selected &amp; Looped</string>
+ </property>
+ <property stdset="1">
+ <name>buttonGroupId</name>
+ <number>3</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>GroupBox3</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Values</string>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget row="0" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Rate:</string>
+ </property>
+ </widget>
+ <widget row="1" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Offset:</string>
+ </property>
+ </widget>
+ <widget row="0" column="1" >
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>rate</cstring>
+ </property>
+ <property stdset="1">
+ <name>suffix</name>
+ <string>%</string>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>200</number>
+ </property>
+ <property stdset="1">
+ <name>value</name>
+ <number>100</number>
+ </property>
+ </widget>
+ <widget row="1" column="1" >
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>offset</cstring>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>999</number>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>-999</number>
+ </property>
+ <property stdset="1">
+ <name>lineStep</name>
+ <number>1</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer1</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>okButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>OK</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>default</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cancelButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>okButton</sender>
+ <signal>clicked()</signal>
+ <receiver>GateTimeBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>cancelButton</sender>
+ <signal>clicked()</signal>
+ <receiver>GateTimeBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+</UI>
diff --git a/muse2/muse/widgets/genset.cpp b/muse2/muse/widgets/genset.cpp
new file mode 100644
index 00000000..79f190d0
--- /dev/null
+++ b/muse2/muse/widgets/genset.cpp
@@ -0,0 +1,444 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: genset.cpp,v 1.7.2.8 2009/12/01 03:52:40 terminator356 Exp $
+//
+// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <stdio.h>
+#include <qpushbutton.h>
+#include <qcombobox.h>
+#include <qspinbox.h>
+#include <qlineedit.h>
+#include <q3buttongroup.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+//Added by qt3to4:
+#include <QShowEvent>
+
+#include "genset.h"
+#include "app.h"
+#include "gconfig.h"
+#include "midiseq.h"
+#include "globals.h"
+
+static int rtcResolutions[] = {
+ 1024, 2048, 4096, 8192, 16384, 32768
+ };
+static int divisions[] = {
+ 48, 96, 192, 384, 768, 1536, 3072, 6144, 12288
+ };
+static int dummyAudioBufSizes[] = {
+ 16, 32, 64, 128, 256, 512, 1024, 2048
+ };
+
+//---------------------------------------------------------
+// GlobalSettingsConfig
+//---------------------------------------------------------
+
+GlobalSettingsConfig::GlobalSettingsConfig(QWidget* parent, const char* name)
+ : GlobalSettingsDialogBase(parent, name)
+ {
+ for (unsigned i = 0; i < sizeof(rtcResolutions)/sizeof(*rtcResolutions); ++i) {
+ if (rtcResolutions[i] == config.rtcTicks) {
+ rtcResolutionSelect->setCurrentItem(i);
+ break;
+ }
+ }
+ for (unsigned i = 0; i < sizeof(divisions)/sizeof(*divisions); ++i) {
+ if (divisions[i] == config.division) {
+ midiDivisionSelect->setCurrentItem(i);
+ break;
+ }
+ }
+ for (unsigned i = 0; i < sizeof(divisions)/sizeof(*divisions); ++i) {
+ if (divisions[i] == config.guiDivision) {
+ guiDivisionSelect->setCurrentItem(i);
+ break;
+ }
+ }
+ for (unsigned i = 0; i < sizeof(dummyAudioBufSizes)/sizeof(*dummyAudioBufSizes); ++i) {
+ if (dummyAudioBufSizes[i] == config.dummyAudioBufSize) {
+ dummyAudioSize->setCurrentItem(i);
+ break;
+ }
+ }
+
+ guiRefreshSelect->setValue(config.guiRefresh);
+ minSliderSelect->setValue(int(config.minSlider));
+ minMeterSelect->setValue(config.minMeter);
+ freewheelCheckBox->setChecked(config.freewheelMode);
+ denormalCheckBox->setChecked(config.useDenormalBias);
+ outputLimiterCheckBox->setChecked(config.useOutputLimiter);
+ vstInPlaceCheckBox->setChecked(config.vstInPlace);
+ dummyAudioRate->setValue(config.dummyAudioSampleRate);
+
+ //DummyAudioDevice* dad = dynamic_cast<DummyAudioDevice*>(audioDevice);
+ //dummyAudioRealRate->setText(dad ? QString().setNum(sampleRate) : "---");
+ dummyAudioRealRate->setText(QString().setNum(sampleRate));
+
+ helpBrowser->setText(config.helpBrowser);
+ startSongEntry->setText(config.startSong);
+ startSongGroup->setButton(config.startMode);
+
+ showTransport->setChecked(config.transportVisible);
+ showBigtime->setChecked(config.bigTimeVisible);
+ //showMixer->setChecked(config.mixerVisible);
+ showMixer->setChecked(config.mixer1Visible);
+ showMixer2->setChecked(config.mixer2Visible);
+
+ arrangerX->setValue(config.geometryMain.x());
+ arrangerY->setValue(config.geometryMain.y());
+ arrangerW->setValue(config.geometryMain.width());
+ arrangerH->setValue(config.geometryMain.height());
+
+ transportX->setValue(config.geometryTransport.x());
+ transportY->setValue(config.geometryTransport.y());
+
+ bigtimeX->setValue(config.geometryBigTime.x());
+ bigtimeY->setValue(config.geometryBigTime.y());
+ bigtimeW->setValue(config.geometryBigTime.width());
+ bigtimeH->setValue(config.geometryBigTime.height());
+
+ //mixerX->setValue(config.geometryMixer.x());
+ //mixerY->setValue(config.geometryMixer.y());
+ //mixerW->setValue(config.geometryMixer.width());
+ //mixerH->setValue(config.geometryMixer.height());
+ mixerX->setValue(config.mixer1.geometry.x());
+ mixerY->setValue(config.mixer1.geometry.y());
+ mixerW->setValue(config.mixer1.geometry.width());
+ mixerH->setValue(config.mixer1.geometry.height());
+ mixer2X->setValue(config.mixer2.geometry.x());
+ mixer2Y->setValue(config.mixer2.geometry.y());
+ mixer2W->setValue(config.mixer2.geometry.width());
+ mixer2H->setValue(config.mixer2.geometry.height());
+
+ //setMixerCurrent->setEnabled(muse->mixerWindow());
+ setMixerCurrent->setEnabled(muse->mixer1Window());
+ setMixer2Current->setEnabled(muse->mixer2Window());
+
+ setBigtimeCurrent->setEnabled(muse->bigtimeWindow());
+ setTransportCurrent->setEnabled(muse->transportWindow());
+
+ showSplash->setChecked(config.showSplashScreen);
+ showDidYouKnow->setChecked(config.showDidYouKnow);
+ externalWavEditorSelect->setText(config.externalWavEditor);
+ oldStyleStopCheckBox->setChecked(config.useOldStyleStopShortCut);
+ moveArmedCheckBox->setChecked(config.moveArmedCheckBox);
+
+ //updateSettings(); // TESTING
+
+ connect(applyButton, SIGNAL(clicked()), SLOT(apply()));
+ connect(okButton, SIGNAL(clicked()), SLOT(ok()));
+ connect(cancelButton, SIGNAL(clicked()), SLOT(cancel()));
+ connect(setMixerCurrent, SIGNAL(clicked()), SLOT(mixerCurrent()));
+ connect(setMixer2Current, SIGNAL(clicked()), SLOT(mixer2Current()));
+ connect(setBigtimeCurrent, SIGNAL(clicked()), SLOT(bigtimeCurrent()));
+ connect(setArrangerCurrent, SIGNAL(clicked()), SLOT(arrangerCurrent()));
+ connect(setTransportCurrent, SIGNAL(clicked()), SLOT(transportCurrent()));
+ }
+
+//---------------------------------------------------------
+// updateSettings
+//---------------------------------------------------------
+
+void GlobalSettingsConfig::updateSettings()
+{
+ for (unsigned i = 0; i < sizeof(rtcResolutions)/sizeof(*rtcResolutions); ++i) {
+ if (rtcResolutions[i] == config.rtcTicks) {
+ rtcResolutionSelect->setCurrentItem(i);
+ break;
+ }
+ }
+ for (unsigned i = 0; i < sizeof(divisions)/sizeof(*divisions); ++i) {
+ if (divisions[i] == config.division) {
+ midiDivisionSelect->setCurrentItem(i);
+ break;
+ }
+ }
+ for (unsigned i = 0; i < sizeof(divisions)/sizeof(*divisions); ++i) {
+ if (divisions[i] == config.guiDivision) {
+ guiDivisionSelect->setCurrentItem(i);
+ break;
+ }
+ }
+ for (unsigned i = 0; i < sizeof(dummyAudioBufSizes)/sizeof(*dummyAudioBufSizes); ++i) {
+ if (dummyAudioBufSizes[i] == config.dummyAudioBufSize) {
+ dummyAudioSize->setCurrentItem(i);
+ break;
+ }
+ }
+
+ guiRefreshSelect->setValue(config.guiRefresh);
+ minSliderSelect->setValue(int(config.minSlider));
+ minMeterSelect->setValue(config.minMeter);
+ freewheelCheckBox->setChecked(config.freewheelMode);
+ denormalCheckBox->setChecked(config.useDenormalBias);
+ outputLimiterCheckBox->setChecked(config.useOutputLimiter);
+ vstInPlaceCheckBox->setChecked(config.vstInPlace);
+ dummyAudioRate->setValue(config.dummyAudioSampleRate);
+
+ //DummyAudioDevice* dad = dynamic_cast<DummyAudioDevice*>(audioDevice);
+ //dummyAudioRealRate->setText(dad ? QString().setNum(sampleRate) : "---");
+ dummyAudioRealRate->setText(QString().setNum(sampleRate));
+
+ helpBrowser->setText(config.helpBrowser);
+ startSongEntry->setText(config.startSong);
+ startSongGroup->setButton(config.startMode);
+
+ showTransport->setChecked(config.transportVisible);
+ showBigtime->setChecked(config.bigTimeVisible);
+ //showMixer->setChecked(config.mixerVisible);
+ showMixer->setChecked(config.mixer1Visible);
+ showMixer2->setChecked(config.mixer2Visible);
+
+ arrangerX->setValue(config.geometryMain.x());
+ arrangerY->setValue(config.geometryMain.y());
+ arrangerW->setValue(config.geometryMain.width());
+ arrangerH->setValue(config.geometryMain.height());
+
+ transportX->setValue(config.geometryTransport.x());
+ transportY->setValue(config.geometryTransport.y());
+
+ bigtimeX->setValue(config.geometryBigTime.x());
+ bigtimeY->setValue(config.geometryBigTime.y());
+ bigtimeW->setValue(config.geometryBigTime.width());
+ bigtimeH->setValue(config.geometryBigTime.height());
+
+ //mixerX->setValue(config.geometryMixer.x());
+ //mixerY->setValue(config.geometryMixer.y());
+ //mixerW->setValue(config.geometryMixer.width());
+ //mixerH->setValue(config.geometryMixer.height());
+ mixerX->setValue(config.mixer1.geometry.x());
+ mixerY->setValue(config.mixer1.geometry.y());
+ mixerW->setValue(config.mixer1.geometry.width());
+ mixerH->setValue(config.mixer1.geometry.height());
+ mixer2X->setValue(config.mixer2.geometry.x());
+ mixer2Y->setValue(config.mixer2.geometry.y());
+ mixer2W->setValue(config.mixer2.geometry.width());
+ mixer2H->setValue(config.mixer2.geometry.height());
+
+ //setMixerCurrent->setEnabled(muse->mixerWindow());
+ setMixerCurrent->setEnabled(muse->mixer1Window());
+ setMixer2Current->setEnabled(muse->mixer2Window());
+
+ setBigtimeCurrent->setEnabled(muse->bigtimeWindow());
+ setTransportCurrent->setEnabled(muse->transportWindow());
+
+ showSplash->setChecked(config.showSplashScreen);
+ showDidYouKnow->setChecked(config.showDidYouKnow);
+ externalWavEditorSelect->setText(config.externalWavEditor);
+ oldStyleStopCheckBox->setChecked(config.useOldStyleStopShortCut);
+ moveArmedCheckBox->setChecked(config.moveArmedCheckBox);
+}
+
+//---------------------------------------------------------
+// showEvent
+//---------------------------------------------------------
+
+void GlobalSettingsConfig::showEvent(QShowEvent* e)
+{
+ QDialog::showEvent(e);
+ //updateSettings(); // TESTING
+}
+
+//---------------------------------------------------------
+// apply
+//---------------------------------------------------------
+
+void GlobalSettingsConfig::apply()
+ {
+ int rtcticks = rtcResolutionSelect->currentItem();
+ config.guiRefresh = guiRefreshSelect->value();
+ config.minSlider = minSliderSelect->value();
+ config.minMeter = minMeterSelect->value();
+ config.freewheelMode = freewheelCheckBox->isChecked();
+ config.useDenormalBias = denormalCheckBox->isChecked();
+ config.useOutputLimiter = outputLimiterCheckBox->isChecked();
+ config.vstInPlace = vstInPlaceCheckBox->isChecked();
+ config.rtcTicks = rtcResolutions[rtcticks];
+ config.helpBrowser = helpBrowser->text();
+ config.startSong = startSongEntry->text();
+ config.startMode = startSongGroup->selectedId();
+ int das = dummyAudioSize->currentItem();
+ config.dummyAudioBufSize = dummyAudioBufSizes[das];
+ config.dummyAudioSampleRate = dummyAudioRate->value();
+
+ int div = midiDivisionSelect->currentItem();
+ config.division = divisions[div];
+ div = guiDivisionSelect->currentItem();
+ config.guiDivision = divisions[div];
+
+ config.transportVisible = showTransport->isChecked();
+ config.bigTimeVisible = showBigtime->isChecked();
+ //config.mixerVisible = showMixer->isChecked();
+ config.mixer1Visible = showMixer->isChecked();
+ config.mixer2Visible = showMixer2->isChecked();
+
+ config.geometryMain.setX(arrangerX->value());
+ config.geometryMain.setY(arrangerY->value());
+ config.geometryMain.setWidth(arrangerW->value());
+ config.geometryMain.setHeight(arrangerH->value());
+
+ config.geometryTransport.setX(transportX->value());
+ config.geometryTransport.setY(transportY->value());
+ config.geometryTransport.setWidth(0);
+ config.geometryTransport.setHeight(0);
+
+ config.geometryBigTime.setX(bigtimeX->value());
+ config.geometryBigTime.setY(bigtimeY->value());
+ config.geometryBigTime.setWidth(bigtimeW->value());
+ config.geometryBigTime.setHeight(bigtimeH->value());
+
+ //config.geometryMixer.setX(mixerX->value());
+ //config.geometryMixer.setY(mixerY->value());
+ //config.geometryMixer.setWidth(mixerW->value());
+ //config.geometryMixer.setHeight(mixerH->value());
+ config.mixer1.geometry.setX(mixerX->value());
+ config.mixer1.geometry.setY(mixerY->value());
+ config.mixer1.geometry.setWidth(mixerW->value());
+ config.mixer1.geometry.setHeight(mixerH->value());
+ config.mixer2.geometry.setX(mixer2X->value());
+ config.mixer2.geometry.setY(mixer2Y->value());
+ config.mixer2.geometry.setWidth(mixer2W->value());
+ config.mixer2.geometry.setHeight(mixer2H->value());
+
+ config.showSplashScreen = showSplash->isChecked();
+ config.showDidYouKnow = showDidYouKnow->isChecked();
+ config.externalWavEditor = externalWavEditorSelect->text();
+ config.useOldStyleStopShortCut = oldStyleStopCheckBox->isChecked();
+ config.moveArmedCheckBox = moveArmedCheckBox->isChecked();
+ //muse->showMixer(config.mixerVisible);
+ muse->showMixer1(config.mixer1Visible);
+ muse->showMixer2(config.mixer2Visible);
+
+ muse->showBigtime(config.bigTimeVisible);
+ muse->showTransport(config.transportVisible);
+ QWidget* w = muse->transportWindow();
+ if (w) {
+ w->resize(config.geometryTransport.size());
+ w->move(config.geometryTransport.topLeft());
+ }
+ //w = muse->mixerWindow();
+ //if (w) {
+ // w->resize(config.geometryMixer.size());
+ // w->move(config.geometryMixer.topLeft());
+ // }
+ w = muse->mixer1Window();
+ if (w) {
+ w->resize(config.mixer1.geometry.size());
+ w->move(config.mixer1.geometry.topLeft());
+ }
+ w = muse->mixer2Window();
+ if (w) {
+ w->resize(config.mixer2.geometry.size());
+ w->move(config.mixer2.geometry.topLeft());
+ }
+ w = muse->bigtimeWindow();
+ if (w) {
+ w->resize(config.geometryBigTime.size());
+ w->move(config.geometryBigTime.topLeft());
+ }
+ muse->resize(config.geometryMain.size());
+ muse->move(config.geometryMain.topLeft());
+
+ muse->setHeartBeat(); // set guiRefresh
+ midiSeq->msgSetRtc(); // set midi tick rate
+ muse->changeConfig(true); // save settings
+ }
+
+//---------------------------------------------------------
+// ok
+//---------------------------------------------------------
+
+void GlobalSettingsConfig::ok()
+ {
+ apply();
+ close();
+ }
+
+//---------------------------------------------------------
+// cancel
+//---------------------------------------------------------
+
+void GlobalSettingsConfig::cancel()
+ {
+ close();
+ }
+
+//---------------------------------------------------------
+// mixerCurrent
+//---------------------------------------------------------
+
+void GlobalSettingsConfig::mixerCurrent()
+ {
+ QWidget* w = muse->mixer1Window();
+ if (!w)
+ return;
+ QRect r(w->frameGeometry());
+ mixerX->setValue(r.x());
+ mixerY->setValue(r.y());
+ mixerW->setValue(r.width());
+ mixerH->setValue(r.height());
+ }
+
+//---------------------------------------------------------
+// mixer2Current
+//---------------------------------------------------------
+
+void GlobalSettingsConfig::mixer2Current()
+ {
+ QWidget* w = muse->mixer2Window();
+ if (!w)
+ return;
+ QRect r(w->frameGeometry());
+ mixer2X->setValue(r.x());
+ mixer2Y->setValue(r.y());
+ mixer2W->setValue(r.width());
+ mixer2H->setValue(r.height());
+ }
+
+//---------------------------------------------------------
+// bigtimeCurrent
+//---------------------------------------------------------
+
+void GlobalSettingsConfig::bigtimeCurrent()
+ {
+ QWidget* w = muse->bigtimeWindow();
+ if (!w)
+ return;
+ QRect r(w->frameGeometry());
+ bigtimeX->setValue(r.x());
+ bigtimeY->setValue(r.y());
+ bigtimeW->setValue(r.width());
+ bigtimeH->setValue(r.height());
+ }
+
+//---------------------------------------------------------
+// arrangerCurrent
+//---------------------------------------------------------
+
+void GlobalSettingsConfig::arrangerCurrent()
+ {
+ QRect r(muse->frameGeometry());
+ arrangerX->setValue(r.x());
+ arrangerY->setValue(r.y());
+ arrangerW->setValue(r.width());
+ arrangerH->setValue(r.height());
+ }
+
+//---------------------------------------------------------
+// transportCurrent
+//---------------------------------------------------------
+
+void GlobalSettingsConfig::transportCurrent()
+ {
+ QWidget* w = muse->transportWindow();
+ if (!w)
+ return;
+ QRect r(w->frameGeometry());
+ transportX->setValue(r.x());
+ transportY->setValue(r.y());
+ }
+
diff --git a/muse2/muse/widgets/genset.h b/muse2/muse/widgets/genset.h
new file mode 100644
index 00000000..375cf197
--- /dev/null
+++ b/muse2/muse/widgets/genset.h
@@ -0,0 +1,41 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: genset.h,v 1.3 2004/01/25 09:55:17 wschweer Exp $
+//
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __GENSET_H__
+#define __GENSET_H__
+
+#include "gensetbase.h"
+//Added by qt3to4:
+#include <QShowEvent>
+
+//---------------------------------------------------------
+// GlobalSettingsConfig
+//---------------------------------------------------------
+
+class GlobalSettingsConfig : public GlobalSettingsDialogBase {
+ Q_OBJECT
+
+ private slots:
+ void updateSettings();
+ void apply();
+ void ok();
+ void cancel();
+ void mixerCurrent();
+ void mixer2Current();
+ void bigtimeCurrent();
+ void arrangerCurrent();
+ void transportCurrent();
+
+ protected:
+ void showEvent(QShowEvent*);
+
+ public:
+ GlobalSettingsConfig(QWidget* parent=0, const char* name=0);
+ };
+
+#endif
diff --git a/muse2/muse/widgets/gensetbase.ui b/muse2/muse/widgets/gensetbase.ui
new file mode 100644
index 00000000..5de2dbd7
--- /dev/null
+++ b/muse2/muse/widgets/gensetbase.ui
@@ -0,0 +1,1470 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>GlobalSettingsDialogBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>GlobalSettingsDialogBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>494</width>
+ <height>499</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Global Settings</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>TabWidget2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>TabPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Application</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>groupBox4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Views</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QSpinBox" row="1" column="3">
+ <property name="name">
+ <cstring>transportY</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>y-pos</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="1">
+ <property name="name">
+ <cstring>showTransport</cstring>
+ </property>
+ <property name="text">
+ <string>show</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="2">
+ <property name="name">
+ <cstring>transportX</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>x-pos</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="5">
+ <property name="name">
+ <cstring>arrangerH</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>height</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="4">
+ <property name="name">
+ <cstring>arrangerW</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>width</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="3">
+ <property name="name">
+ <cstring>arrangerY</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>y-pos</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="2">
+ <property name="name">
+ <cstring>arrangerX</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>x-pos</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="1">
+ <property name="name">
+ <cstring>showBigtime</cstring>
+ </property>
+ <property name="text">
+ <string>show</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="2">
+ <property name="name">
+ <cstring>bigtimeX</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>x-pos</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="3">
+ <property name="name">
+ <cstring>bigtimeY</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>y-pos</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="4">
+ <property name="name">
+ <cstring>bigtimeW</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>width</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="5">
+ <property name="name">
+ <cstring>bigtimeH</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>height</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="1">
+ <property name="name">
+ <cstring>showMixer</cstring>
+ </property>
+ <property name="text">
+ <string>show</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="4" column="1">
+ <property name="name">
+ <cstring>showMixer2</cstring>
+ </property>
+ <property name="text">
+ <string>show</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Mixer A</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel4_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Mixer B</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Big Time</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1_3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Arranger</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Transport</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="5">
+ <property name="name">
+ <cstring>mixerH</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>height</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="4">
+ <property name="name">
+ <cstring>mixerW</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>width</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="3">
+ <property name="name">
+ <cstring>mixerY</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>y-pos</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="2">
+ <property name="name">
+ <cstring>mixerX</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>x-pos</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="3" column="6">
+ <property name="name">
+ <cstring>setMixerCurrent</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Cur</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>set current values</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="4" column="5">
+ <property name="name">
+ <cstring>mixer2H</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>height</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="4" column="4">
+ <property name="name">
+ <cstring>mixer2W</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>width</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="4" column="3">
+ <property name="name">
+ <cstring>mixer2Y</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>y-pos</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="4" column="2">
+ <property name="name">
+ <cstring>mixer2X</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>x-pos</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="4" column="6">
+ <property name="name">
+ <cstring>setMixer2Current</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Cur</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>set current values</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="2" column="6">
+ <property name="name">
+ <cstring>setBigtimeCurrent</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Cur</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>set current values</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="0" column="6">
+ <property name="name">
+ <cstring>setArrangerCurrent</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Cur</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>set current values</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="6">
+ <property name="name">
+ <cstring>setTransportCurrent</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Cur</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>set current values</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="0" column="0">
+ <property name="name">
+ <cstring>groupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>Start Muse</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout12</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>9</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>showSplash</cstring>
+ </property>
+ <property name="text">
+ <string>show splash screen</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>showDidYouKnow</cstring>
+ </property>
+ <property name="text">
+ <string>show "Did you know?" dialog</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>spacer7_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>51</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>start song:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>startSongEntry</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QButtonGroup" row="0" column="0">
+ <property name="name">
+ <cstring>startSongGroup</cstring>
+ </property>
+ <property name="title">
+ <string>Start song</string>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>startLastButton</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>13</x>
+ <y>12</y>
+ <width>222</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>start with last song</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>startEmptyButton</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>13</x>
+ <y>38</y>
+ <width>222</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>start with template: default.med</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>startSongButton</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>13</x>
+ <y>64</y>
+ <width>222</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>start with song</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>2</number>
+ </property>
+ </widget>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Audio</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox" row="0" column="0">
+ <property name="name">
+ <cstring>GroupBox4</cstring>
+ </property>
+ <property name="title">
+ <string>Mixer</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>minSliderSelect</cstring>
+ </property>
+ <property name="suffix">
+ <string>dB</string>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="minValue">
+ <number>-100</number>
+ </property>
+ <property name="lineStep">
+ <number>10</number>
+ </property>
+ <property name="value">
+ <number>-60</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel3_2</cstring>
+ </property>
+ <property name="text">
+ <string>min. Meter Value</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>min. Slider Val</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>minMeterSelect</cstring>
+ </property>
+ <property name="suffix">
+ <string>dB</string>
+ </property>
+ <property name="maxValue">
+ <number>0</number>
+ </property>
+ <property name="minValue">
+ <number>-100</number>
+ </property>
+ <property name="lineStep">
+ <number>10</number>
+ </property>
+ <property name="value">
+ <number>-60</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>freewheelLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Use Jack freewheel mode if possible.
+(Speeds up bounce operations).</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="1">
+ <property name="name">
+ <cstring>denormalCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="1">
+ <property name="name">
+ <cstring>freewheelCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel1_5</cstring>
+ </property>
+ <property name="text">
+ <string>Enable denormal protection</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel1_5_2</cstring>
+ </property>
+ <property name="text">
+ <string>Enable output limiter</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="4" column="1">
+ <property name="name">
+ <cstring>outputLimiterCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>vstInPlaceTextLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Enable in-place processing for VST plugins.
+(Requires restart.)</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="5" column="1">
+ <property name="name">
+ <cstring>vstInPlaceCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Turn this off if VST Ladspa effect rack plugins do not work or feedback loudly, even if they are supposed to be in-place capable.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>groupBox13</cstring>
+ </property>
+ <property name="title">
+ <string>External Waveditor</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout12</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>External Waveditor command</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer13</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>60</width>
+ <height>23</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>externalWavEditorSelect</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>2</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1_6</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>8</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Note: External editor opened from the internal editor.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="2" column="0">
+ <property name="name">
+ <cstring>dummyAudioGroupBox</cstring>
+ </property>
+ <property name="title">
+ <string>Dummy Audio Driver (settings require restart)</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>dummyAudioRateLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Preferred sample rate</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>dummyAudioRate</cstring>
+ </property>
+ <property name="suffix">
+ <string>Hz</string>
+ </property>
+ <property name="maxValue">
+ <number>200000</number>
+ </property>
+ <property name="minValue">
+ <number>3000</number>
+ </property>
+ <property name="lineStep">
+ <number>10</number>
+ </property>
+ <property name="value">
+ <number>44100</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Actual rate used depends on limitations of
+ timer used. If a high rate timer is available,
+ short periods can be used with high sample rates.
+Period affects midi playback resolution.
+Shorter periods are desirable.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>dummyAudioRealRateLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Actual rate used now (dummy or not):</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>dummyAudioRealRate</cstring>
+ </property>
+ <property name="text">
+ <string>---</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>dummyAudioSizeLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Period size (Frames per period):</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="2" column="1">
+ <item>
+ <property name="text">
+ <string>16</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>32</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>64</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>128</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>256</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>512</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>1024</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>2048</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>dummyAudioSize</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Midi</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>Ticks</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>RTC Resolution
+(Ticks/Sec)</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="1">
+ <item>
+ <property name="text">
+ <string>1024</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>2048</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>4096</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>8192</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>16384</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>32768</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>rtcResolutionSelect</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>midiResLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Midi Resolution
+(Ticks/Quarternote)</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>48</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>96</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>192</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>384</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>768</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>1536</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>3072</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>6144</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>12288</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>midiDivisionSelect</cstring>
+ </property>
+ <property name="currentItem">
+ <number>3</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Displayed Resolution
+(Ticks/Quarternote)</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="2" column="1">
+ <item>
+ <property name="text">
+ <string>48</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>96</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>192</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>384</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>768</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>1536</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>3072</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>6144</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>12288</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>guiDivisionSelect</cstring>
+ </property>
+ <property name="currentItem">
+ <number>3</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>GUI</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Help Browser:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>GUI Refresh Rate</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="3" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>guiRefreshSelect</cstring>
+ </property>
+ <property name="suffix">
+ <string>/sec</string>
+ </property>
+ <property name="maxValue">
+ <number>100</number>
+ </property>
+ <property name="minValue">
+ <number>2</number>
+ </property>
+ <property name="value">
+ <number>20</number>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>helpBrowser</cstring>
+ </property>
+ </widget>
+ <spacer row="4" column="0">
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>240</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="4" column="4">
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>240</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QCheckBox" row="2" column="5">
+ <property name="name">
+ <cstring>oldStyleStopCheckBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="5">
+ <property name="name">
+ <cstring>moveArmedCheckBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <spacer row="2" column="2" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>270</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>textLabel1_4</cstring>
+ </property>
+ <property name="text">
+ <string>Use old-style stop shortcut:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>textLabel1_4_2</cstring>
+ </property>
+ <property name="text">
+ <string>Move single armed track with selection</string>
+ </property>
+ </widget>
+ <spacer row="3" column="3" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>spacer7_3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>210</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>applyButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Apply</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>okButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Ok</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>cancelButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/header.cpp b/muse2/muse/widgets/header.cpp
new file mode 100644
index 00000000..6cbf9c3a
--- /dev/null
+++ b/muse2/muse/widgets/header.cpp
@@ -0,0 +1,62 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: header.cpp,v 1.1.1.1 2003/10/27 18:55:05 wschweer Exp $
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "header.h"
+#include "xml.h"
+#include <qstringlist.h>
+
+//---------------------------------------------------------
+// readStatus
+//---------------------------------------------------------
+
+void Header::readStatus(Xml& xml)
+ {
+ for (;;) {
+ Xml::Token token = xml.parse();
+ const QString& tag = xml.s1();
+ switch (token) {
+ case Xml::Error:
+ case Xml::End:
+ return;
+ case Xml::Text:
+ {
+ QStringList l = QStringList::split(QString(" "), tag);
+ int index = count();
+ for (QStringList::Iterator it = l.begin(); it != l.end(); ++it) {
+ int section = (*it).toInt();
+ moveSection(section, index);
+ --index;
+ }
+ }
+ break;
+ case Xml::TagStart:
+ xml.unknown("Header");
+ break;
+ case Xml::TagEnd:
+ if (tag == name())
+ return;
+ default:
+ break;
+ }
+ }
+ }
+
+//---------------------------------------------------------
+// writeStatus
+//---------------------------------------------------------
+
+void Header::writeStatus(int level, Xml& xml) const
+ {
+ //xml.nput(level, "<%s> ", name());
+ xml.nput(level, "<%s> ", Xml::xmlString(name()).latin1());
+ int n = count() - 1;
+ for (int i = n; i >= 0; --i)
+ xml.nput("%d ", mapToSection(i));
+ //xml.put("</%s>", name());
+ xml.put("</%s>", Xml::xmlString(name()).latin1());
+ }
+
diff --git a/muse2/muse/widgets/header.h b/muse2/muse/widgets/header.h
new file mode 100644
index 00000000..11b69b66
--- /dev/null
+++ b/muse2/muse/widgets/header.h
@@ -0,0 +1,30 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: header.h,v 1.1.1.1 2003/10/27 18:55:03 wschweer Exp $
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __HEADER_H__
+#define __HEADER_H__
+
+#include <q3header.h>
+
+class Xml;
+
+//---------------------------------------------------------
+// Header
+//---------------------------------------------------------
+
+class Header : public Q3Header {
+ Q_OBJECT
+
+ public:
+ Header(QWidget* parent=0, const char* name=0)
+ : Q3Header(parent, name) {}
+ Header(int sections, QWidget* parent=0, const char* name=0)
+ : Q3Header(sections, parent, name) {}
+ void writeStatus(int level, Xml&) const;
+ void readStatus(Xml&);
+ };
+#endif
diff --git a/muse2/muse/widgets/hitscale.cpp b/muse2/muse/widgets/hitscale.cpp
new file mode 100644
index 00000000..2d7c5267
--- /dev/null
+++ b/muse2/muse/widgets/hitscale.cpp
@@ -0,0 +1,134 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: hitscale.cpp,v 1.3.2.1 2007/01/27 14:52:43 spamatica Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "hitscale.h"
+#include "midieditor.h"
+#include <qpainter.h>
+//Added by qt3to4:
+#include <QEvent>
+#include <QMouseEvent>
+
+#include "song.h"
+
+//---------------------------------------------------------
+// HitScale
+//---------------------------------------------------------
+
+HitScale::HitScale(int* r, QWidget* parent, int xs)
+ : View(parent, xs, 1)
+ {
+ raster = r;
+ pos[0] = song->cpos();
+ pos[1] = song->lpos();
+ pos[2] = song->rpos();
+ button = Qt::NoButton;
+ setMouseTracking(true);
+ connect(song, SIGNAL(posChanged(int, unsigned, bool)), this, SLOT(setPos(int, unsigned, bool)));
+ setFixedHeight(18);
+ }
+
+//---------------------------------------------------------
+// setPos
+//---------------------------------------------------------
+
+void HitScale::setPos(int idx, unsigned val, bool)
+ {
+ if (val == pos[idx])
+ return;
+ unsigned int opos = mapx(pos[idx]); // in order preventing comparison of sigend & unsigned int ??is this OK?
+ pos[idx] = val;
+ if (!isVisible())
+ return;
+ val = mapx(val);
+ int x = -9;
+ int w = 18;
+ if (opos > val) { //here would be the comparison signed/unsigned
+ w += opos - val;
+ x += val;
+ }
+ else {
+ w += val - opos;
+ x += opos;
+ }
+ paint(QRect(x, 0, w, height()));
+ }
+
+void HitScale::viewMousePressEvent(QMouseEvent* event)
+ {
+ button = event->button();
+ viewMouseMoveEvent(event);
+ }
+
+void HitScale::viewMouseReleaseEvent(QMouseEvent*)
+ {
+ button = Qt::NoButton;
+ }
+
+void HitScale::viewMouseMoveEvent(QMouseEvent* event)
+ {
+ int x = sigmap.raster(event->x(), *raster);
+ emit timeChanged(x);
+ int i;
+ switch (button) {
+ case Qt::LeftButton:
+ i = 0;
+ break;
+ case Qt::MidButton:
+ i = 1;
+ break;
+ case Qt::RightButton:
+ i = 2;
+ break;
+ default:
+ return;
+ }
+ Pos p(x, true);
+ song->setPos(i, p);
+ }
+
+//---------------------------------------------------------
+// leaveEvent
+//---------------------------------------------------------
+
+void HitScale::leaveEvent(QEvent*)
+ {
+ emit timeChanged(-1);
+ }
+
+//---------------------------------------------------------
+// draw
+//---------------------------------------------------------
+
+void HitScale::pdraw(QPainter& p, const QRect& r)
+ {
+ int x = r.x();
+ int w = r.width();
+
+// x -= 10;
+// w += 20;
+
+ if (x < 0)
+ x = 0;
+
+ //---------------------------------------------------
+ // draw location marker
+ //---------------------------------------------------
+
+ p.setPen(Qt::red);
+ int xp = mapx(pos[0]);
+ if (xp >= x && xp < x+w)
+ p.drawLine(xp, 0, xp, height());
+ p.setPen(Qt::blue);
+ xp = mapx(pos[1]);
+ if (xp >= x && xp < x+w)
+ p.drawLine(xp, 0, xp, height());
+ xp = mapx(pos[2]);
+ if (xp >= x && xp < x+w)
+ p.drawLine(xp, 0, xp, height());
+ }
+
+
diff --git a/muse2/muse/widgets/hitscale.h b/muse2/muse/widgets/hitscale.h
new file mode 100644
index 00000000..85711e71
--- /dev/null
+++ b/muse2/muse/widgets/hitscale.h
@@ -0,0 +1,50 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: hitscale.h,v 1.2 2004/01/11 18:55:37 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __HITSCALE_H__
+#define __HITSCALE_H__
+
+#include "view.h"
+//Added by qt3to4:
+#include <QEvent>
+#include <QMouseEvent>
+
+class QPainter;
+class MidiEditor;
+
+//---------------------------------------------------------
+// HitScale
+// scale for midi track
+//---------------------------------------------------------
+
+class HitScale : public View {
+ Q_OBJECT
+ int* raster;
+ unsigned pos[3];
+ int button;
+
+ signals:
+// void posChanged(int, int);
+
+ protected:
+ virtual void pdraw(QPainter&, const QRect&);
+ virtual void viewMousePressEvent(QMouseEvent* event);
+ virtual void viewMouseMoveEvent(QMouseEvent* event);
+ virtual void viewMouseReleaseEvent(QMouseEvent* event);
+ virtual void leaveEvent(QEvent*e);
+
+ signals:
+ void timeChanged(int);
+
+ public slots:
+ void setPos(int, unsigned, bool);
+
+ public:
+ HitScale(int* raster, QWidget* parent, int xscale);
+ };
+#endif
+
diff --git a/muse2/muse/widgets/intlabel.cpp b/muse2/muse/widgets/intlabel.cpp
new file mode 100644
index 00000000..8835e79d
--- /dev/null
+++ b/muse2/muse/widgets/intlabel.cpp
@@ -0,0 +1,144 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: intlabel.cpp,v 1.1.1.1.2.1 2008/08/18 00:15:26 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <stdio.h>
+
+#include "intlabel.h"
+#include <qvalidator.h>
+#include <qpalette.h>
+#include <stdio.h>
+
+#include "utils.h"
+
+//---------------------------------------------------------
+// IntLabel
+//---------------------------------------------------------
+
+IntLabel::IntLabel(int _val, int _min, int _max, QWidget* parent,
+ int _off, const QString& str, int lPos)
+ : Nentry(parent, str, lPos)
+ {
+ specialValue = "off";
+ min = _min;
+ max = _max;
+ val = _val+1; // dont optimize away
+ off = _off;
+ setValue(_val);
+ int len = num2cols(min, max);
+ setSize(len);
+ }
+
+void IntLabel::setSpecialValueText(const QString& s)
+ {
+ specialValue = s;
+ setString(val);
+ }
+
+//---------------------------------------------------------
+// setRange
+//---------------------------------------------------------
+
+void IntLabel::setRange(int mn, int mx)
+{
+ min = mn;
+ max = mx;
+ setSize(num2cols(min, max));
+ int v = val;
+ if(val < mn)
+ v = mn;
+ else
+ if(val > mx)
+ v = mx;
+ setValue(v);
+}
+
+//---------------------------------------------------------
+// setString
+//---------------------------------------------------------
+
+bool IntLabel::setString(int v, bool editable)
+ {
+ if (v < min || v > max) {
+ setText(QString("---"));
+ return true;
+ }
+ else if (v == off) {
+ if (editable)
+ setText(QString(""));
+ else
+ setText(specialValue);
+ }
+ else {
+ QString s;
+ s.setNum(v);
+ if (!editable)
+ s += suffix;
+ setText(s);
+ }
+ return false;
+ }
+
+//---------------------------------------------------------
+// setSValue
+//---------------------------------------------------------
+
+bool IntLabel::setSValue(const QString& s)
+ {
+ int v;
+ if (s == specialValue)
+ v = off;
+ else {
+ bool ok;
+ v = s.toInt(&ok);
+ if (!ok)
+ return true;
+ if (v < min)
+ v = min;
+ if (v > max)
+ v = max;
+ }
+ if (v != val) {
+ setValue(v);
+ emit valueChanged(val);
+ }
+ return false;
+ }
+
+//---------------------------------------------------------
+// incValue
+//---------------------------------------------------------
+
+void IntLabel::incValue(int)
+ {
+ if (val < max) {
+ setValue(val+1);
+ emit valueChanged(val);
+ }
+ }
+
+//---------------------------------------------------------
+// decValue
+//---------------------------------------------------------
+
+void IntLabel::decValue(int)
+ {
+ if (val > min) {
+ setValue(val-1);
+ emit valueChanged(val);
+ }
+ }
+
+//---------------------------------------------------------
+// setOff
+//---------------------------------------------------------
+
+void IntLabel::setOff(int v)
+ {
+ off = v;
+ setString(val);
+ }
+
diff --git a/muse2/muse/widgets/intlabel.h b/muse2/muse/widgets/intlabel.h
new file mode 100644
index 00000000..df452891
--- /dev/null
+++ b/muse2/muse/widgets/intlabel.h
@@ -0,0 +1,46 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: intlabel.h,v 1.1.1.1.2.2 2008/08/18 00:15:26 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __INTLABEL_H__
+#define __INTLABEL_H__
+
+#include <values.h>
+#include "nentry.h"
+
+class QString;
+
+//---------------------------------------------------------
+// IntLabel
+//---------------------------------------------------------
+
+class IntLabel : public Nentry {
+ Q_OBJECT
+
+ int min, max, off;
+ QString suffix;
+ QString specialValue;
+
+ void init();
+
+ virtual bool setSValue(const QString&);
+ virtual bool setString(int val, bool editable = false);
+ virtual void incValue(int);
+ virtual void decValue(int);
+
+ signals:
+ void valueChanged(int);
+
+ public:
+ IntLabel(int, int, int, QWidget*, int _off = MAXINT,
+ const QString& = QString(""), int lpos = 0);
+ void setOff(int v);
+ void setSuffix(const QString& s) { suffix = s; }
+ void setSpecialValueText(const QString& s);
+ void setRange(int, int);
+ };
+
+#endif
diff --git a/muse2/muse/widgets/itransformbase.ui b/muse2/muse/widgets/itransformbase.ui
new file mode 100644
index 00000000..1c4a9387
--- /dev/null
+++ b/muse2/muse/widgets/itransformbase.ui
@@ -0,0 +1,1296 @@
+<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
+<class>MidiInputTransformDialogBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>MidiInputTransformDialogBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>760</width>
+ <height>587</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Midi Input Transformator</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox" row="0" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>GroupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>Filter</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QComboBox" row="1" column="0">
+ <item>
+ <property name="text">
+ <string>All</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Equal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Unequal</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>selEventOp</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="2" column="0">
+ <item>
+ <property name="text">
+ <string>Note</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Poly Pressure</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Control Change</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Aftertouch</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Pitch Bend</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>NRPN</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>RPN</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>selType</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Value 2</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Value 1</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Event Type</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>Ignore</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Equal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Unequal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Higher</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Lower</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Inside</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Outside</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>selVal1Op</cstring>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="1">
+ <property name="name">
+ <cstring>selVal1b</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="2">
+ <property name="name">
+ <cstring>selVal2b</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>selVal1a</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="2">
+ <item>
+ <property name="text">
+ <string>Ignore</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Equal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Unequal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Higher</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Lower</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Inside</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Outside</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>selVal2Op</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="3">
+ <item>
+ <property name="text">
+ <string>Ignore</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Equal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Unequal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Higher</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Lower</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Inside</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Outside</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>selPortOp</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="4">
+ <item>
+ <property name="text">
+ <string>Ignore</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Equal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Unequal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Higher</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Lower</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Inside</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Outside</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>selChannelOp</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="4">
+ <property name="name">
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Channel</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="3">
+ <property name="name">
+ <cstring>TextLabel1_3</cstring>
+ </property>
+ <property name="text">
+ <string>Port</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="2">
+ <property name="name">
+ <cstring>selVal2a</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="4">
+ <property name="name">
+ <cstring>selChannelVala</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="3">
+ <property name="name">
+ <cstring>selPortVala</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="4">
+ <property name="name">
+ <cstring>selChannelValb</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="3">
+ <property name="name">
+ <cstring>selPortValb</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="1" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>GroupBox5</cstring>
+ </property>
+ <property name="title">
+ <string>Processing</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Event Type</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="0">
+ <item>
+ <property name="text">
+ <string>Keep</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Fix</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>procEventOp</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="2" column="0">
+ <item>
+ <property name="text">
+ <string>Poly Pressure</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Control Change</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Aftertouch</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Pitch Bend</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>NRPN</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>RPN</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>procType</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>Keep</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Plus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Minus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Multiply</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Divide</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Fix</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Value 2</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Invert</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>ScaleMap</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Flip</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Dyn</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Random</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>procVal1Op</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Value 1</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>TextLabel7</cstring>
+ </property>
+ <property name="text">
+ <string>Value 2</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="1">
+ <property name="name">
+ <cstring>procVal1b</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="2">
+ <property name="name">
+ <cstring>procVal2b</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ </widget>
+ <widget class="SpinBoxFP" row="2" column="1">
+ <property name="name">
+ <cstring>procVal1a</cstring>
+ </property>
+ <property name="maxValue" stdset="0">
+ <number>99999999</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="4">
+ <property name="name">
+ <cstring>procChannelValb</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="3">
+ <property name="name">
+ <cstring>procPortValb</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="3">
+ <property name="name">
+ <cstring>TextLabel1_3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Port</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="2">
+ <item>
+ <property name="text">
+ <string>Keep</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Plus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Minus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Multiply</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Divide</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Fix</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Value 1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Invert</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Dyn</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Random</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>procVal2Op</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="4">
+ <item>
+ <property name="text">
+ <string>Keep</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Plus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Minus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Multiply</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Divide</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Fix</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Value 1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Invert</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Dyn</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Random</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>procChannelOp</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="3">
+ <item>
+ <property name="text">
+ <string>Keep</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Plus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Minus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Multiply</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Divide</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Fix</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Value 1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Invert</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Dyn</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Random</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>procPortOp</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="4">
+ <property name="name">
+ <cstring>TextLabel2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Channel</string>
+ </property>
+ </widget>
+ <widget class="SpinBoxFP" row="2" column="2">
+ <property name="name">
+ <cstring>procVal2a</cstring>
+ </property>
+ <property name="maxValue" stdset="0">
+ <number>99999999</number>
+ </property>
+ </widget>
+ <widget class="SpinBoxFP" row="2" column="3">
+ <property name="name">
+ <cstring>procPortVala</cstring>
+ </property>
+ <property name="maxValue" stdset="0">
+ <number>99999999</number>
+ </property>
+ </widget>
+ <widget class="SpinBoxFP" row="2" column="4">
+ <property name="name">
+ <cstring>procChannelVala</cstring>
+ </property>
+ <property name="maxValue" stdset="0">
+ <number>99999999</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="2" column="2">
+ <property name="name">
+ <cstring>GroupBox5_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Modules</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QButtonGroup" row="0" column="0" rowspan="4" colspan="1">
+ <property name="name">
+ <cstring>modulGroup</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <property name="lineWidth">
+ <number>0</number>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>modul1select</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="on">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>modul2select</cstring>
+ </property>
+ <property name="text">
+ <string>2</string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>modul3select</cstring>
+ </property>
+ <property name="text">
+ <string>3</string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>modul4select</cstring>
+ </property>
+ <property name="text">
+ <string>4</string>
+ </property>
+ <property name="toggleButton">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>3</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QCheckBox" row="0" column="1">
+ <property name="name">
+ <cstring>modul1enable</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>enable modul 1</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="1">
+ <property name="name">
+ <cstring>modul2enable</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>enable modul 2</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="1">
+ <property name="name">
+ <cstring>modul3enable</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>enable modul 3</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="1">
+ <property name="name">
+ <cstring>modul4enable</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>enable modul 4</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="2" column="1">
+ <property name="name">
+ <cstring>GroupBox6_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Preset</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout5_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel13_2</cstring>
+ </property>
+ <property name="text">
+ <string>Name:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>nameEntry</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel14_2</cstring>
+ </property>
+ <property name="text">
+ <string>Comment:</string>
+ </property>
+ </widget>
+ <widget class="QMultiLineEdit">
+ <property name="name">
+ <cstring>commentEntry</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="2" column="3">
+ <property name="name">
+ <cstring>GroupBox7_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Function</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>funcOp</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonNew</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;New</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>create new preset</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonDelete</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Delete</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>delete preset</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Dismiss</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0" rowspan="3" colspan="1">
+ <property name="name">
+ <cstring>Layout7</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>PresetList</string>
+ </property>
+ </widget>
+ <widget class="QListBox">
+ <property name="name">
+ <cstring>presetList</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>SpinBoxFP</class>
+ <header location="global">spinboxFP.h</header>
+ <sizehint>
+ <width>50</width>
+ <height>20</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ <signal>valueChanged(int value)</signal>
+ <signal>valueChanged(const QString&amp;)</signal>
+ <slot access="public" specifier="">setValue(int)</slot>
+ <slot access="public" specifier="">setPrefix(const QString&amp;)</slot>
+ <slot access="public" specifier="">setSuffix(const QString&amp;)</slot>
+ <slot access="public" specifier="">stepUp()</slot>
+ <slot access="public" specifier="">stepDown()</slot>
+ <property type="Int">precision</property>
+ <property type="Int">minValue</property>
+ <property type="Int">maxValue</property>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>MidiInputTransformDialogBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>selEventOp</tabstop>
+ <tabstop>selType</tabstop>
+ <tabstop>selVal1Op</tabstop>
+ <tabstop>selVal1a</tabstop>
+ <tabstop>selVal1b</tabstop>
+ <tabstop>selVal2Op</tabstop>
+ <tabstop>selVal2a</tabstop>
+ <tabstop>selVal2b</tabstop>
+ <tabstop>selPortOp</tabstop>
+ <tabstop>selPortVala</tabstop>
+ <tabstop>selPortValb</tabstop>
+ <tabstop>selChannelOp</tabstop>
+ <tabstop>selChannelVala</tabstop>
+ <tabstop>selChannelValb</tabstop>
+ <tabstop>procEventOp</tabstop>
+ <tabstop>procType</tabstop>
+ <tabstop>procVal1Op</tabstop>
+ <tabstop>procVal1b</tabstop>
+ <tabstop>procVal2Op</tabstop>
+ <tabstop>procVal2b</tabstop>
+ <tabstop>procPortOp</tabstop>
+ <tabstop>procPortValb</tabstop>
+ <tabstop>procChannelOp</tabstop>
+ <tabstop>procChannelValb</tabstop>
+ <tabstop>modul1enable</tabstop>
+ <tabstop>modul2enable</tabstop>
+ <tabstop>modul3enable</tabstop>
+ <tabstop>modul4enable</tabstop>
+ <tabstop>funcOp</tabstop>
+ <tabstop>nameEntry</tabstop>
+ <tabstop>commentEntry</tabstop>
+ <tabstop>presetList</tabstop>
+ <tabstop>buttonNew</tabstop>
+ <tabstop>buttonDelete</tabstop>
+ <tabstop>buttonOk</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>spinboxFP.h</includehint>
+</includehints>
+</UI>
diff --git a/muse2/muse/widgets/knob.cpp b/muse2/muse/widgets/knob.cpp
new file mode 100644
index 00000000..bfc46e77
--- /dev/null
+++ b/muse2/muse/widgets/knob.cpp
@@ -0,0 +1,506 @@
+//======================================================================
+// MusE
+// Linux Music Editor
+// $Id: knob.cpp,v 1.3.2.3 2009/03/09 02:05:18 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//
+// Adapted from Qwt Lib:
+// Copyright (C) 1997 Josef Wilgen
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License, version 2,
+// as published by the Free Software Foundation.
+// 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, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//=========================================================
+
+#include <stdio.h>
+#include "knob.h"
+#include <cmath>
+#include "mmath.h"
+
+#include <qpainter.h>
+#include <qpalette.h>
+//Added by qt3to4:
+#include <QPaintEvent>
+#include <QResizeEvent>
+
+//---------------------------------------------------------
+// The QwtKnob widget imitates look and behaviour of a volume knob on a radio.
+// It contains
+// a scale around the knob which is set up automatically or can
+// be configured manually (see @^QwtScaleIf@).
+// Automatic scrolling is enabled when the user presses a mouse
+// button on the scale. For a description of signals, slots and other
+// members, see QwtSliderBase@.
+//---------------------------------------------------------
+
+
+//---------------------------------------------------------
+// Knob
+//---------------------------------------------------------
+
+Knob::Knob(QWidget* parent, const char* name)
+ : SliderBase(parent, name)
+ {
+ hasScale = false;
+
+ d_borderWidth = 2;
+ d_borderDist = 4;
+ d_totalAngle = 270.0;
+ d_scaleDist = 1;
+ d_symbol = Line;
+ d_maxScaleTicks = 11;
+ d_knobWidth = 30;
+ _faceColSel = FALSE;
+ d_faceColor = backgroundColor();
+ d_curFaceColor = d_faceColor;
+ d_altFaceColor = d_faceColor;
+ d_markerColor = foregroundColor();
+ d_dotWidth = 8;
+
+ setMinimumSize(30,30);
+ setUpdateTime(50);
+ }
+
+//------------------------------------------------------------
+// QwtKnob::setTotalAngle
+// Set the total angle by which the knob can be turned
+//
+// Syntax
+// void QwtKnob::setTotalAngle(double angle)
+//
+// Parameters
+// double angle -- angle in degrees.
+//
+// Description
+// The default angle is 270 degrees. It is possible to specify
+// an angle of more than 360 degrees so that the knob can be
+// turned several times around its axis.
+//------------------------------------------------------------
+
+void Knob::setTotalAngle (double angle)
+ {
+ if (angle < 10.0)
+ d_totalAngle = 10.0;
+ else
+ d_totalAngle = angle;
+ d_scale.setAngleRange( -0.5 * d_totalAngle, 0.5 * d_totalAngle);
+ }
+
+//------------------------------------------------------------
+// QwtKnob::drawKnob
+// const QRect &r -- borders of the knob
+//------------------------------------------------------------
+
+void Knob::drawKnob(QPainter* p, const QRect& r)
+ {
+ QRect aRect;
+
+ QColorGroup g = colorGroup();
+ QPen pn;
+ int bw2 = d_borderWidth / 2;
+
+ aRect.setRect(r.x() + bw2,
+ r.y() + bw2,
+ r.width() - 2*bw2,
+ r.height() - 2*bw2);
+
+ //
+ // draw button face
+ //
+ p->setPen(Qt::NoPen);
+ p->setBrush(d_curFaceColor);
+ p->drawEllipse(aRect);
+
+ //
+ // draw button shades
+ //
+ pn.setWidth(d_borderWidth);
+
+
+ pn.setColor(g.light());
+ p->setPen(pn);
+ p->drawArc(aRect, 45*16,180*16);
+
+ pn.setColor(g.dark());
+ p->setPen(pn);
+ p->drawArc(aRect, 225*16,180*16);
+
+ //
+ // draw marker
+ //
+ drawMarker(p, d_angle, d_markerColor);
+ }
+
+//------------------------------------------------------------
+//.F QwtSliderBase::valueChange
+// Notify change of value
+//
+//.u Parameters
+// double x -- new value
+//
+//.u Description
+// Sets the slider's value to the nearest multiple
+// of the step size.
+//------------------------------------------------------------
+
+void Knob::valueChange()
+ {
+ recalcAngle();
+ d_newVal++;
+ repaint(kRect, FALSE);
+ SliderBase::valueChange();
+ }
+
+//------------------------------------------------------------
+//.F QwtKnob::getValue
+// Determine the value corresponding to a specified position
+//
+//.u Parameters:
+// const QPoint &p -- point
+//
+//.u Description:
+// Called by QwtSliderBase
+//------------------------------------------------------------
+
+double Knob::getValue(const QPoint &p)
+ {
+ double newValue;
+ double oneTurn;
+ double eqValue;
+ double arc;
+
+ const QRect& r = rect();
+
+ double dx = double((r.x() + r.width() / 2) - p.x() );
+ double dy = double((r.y() + r.height() / 2) - p.y() );
+
+ arc = atan2(-dx,dy) * 180.0 / M_PI;
+
+ newValue = 0.5 * (minValue() + maxValue())
+ + (arc + d_nTurns * 360.0) * (maxValue() - minValue())
+ / d_totalAngle;
+
+ oneTurn = fabs(maxValue() - minValue()) * 360.0 / d_totalAngle;
+ eqValue = value() + d_mouseOffset;
+
+ if (fabs(newValue - eqValue) > 0.5 * oneTurn)
+ {
+ if (newValue < eqValue)
+ newValue += oneTurn;
+ else
+ newValue -= oneTurn;
+ }
+
+ return newValue;
+
+}
+
+
+
+//------------------------------------------------------------
+//.-
+//.F QwtKnob::setScrollMode
+// Determine the scrolling mode and direction
+// corresponding to a specified position
+//
+//.u Parameters
+// const QPoint &p -- point in question
+//
+//.u Description
+// Called by QwtSliderBase
+//------------------------------------------------------------
+void Knob::getScrollMode( QPoint &p, const Qt::ButtonState &/*button*/, int &scrollMode, int &direction)// prevent compiler warning : unsused parameter
+{
+ int dx, dy, r;
+ double arc;
+
+ /*Qt::ButtonState but= button ;*/ // prevent compiler warning : unsused variable
+ r = kRect.width() / 2;
+
+ dx = kRect.x() + r - p.x();
+ dy = kRect.y() + r - p.y();
+
+ if ( (dx * dx) + (dy * dy) <= (r * r)) // point is inside the knob
+ {
+ scrollMode = ScrMouse;
+ direction = 0;
+ }
+ else // point lies outside
+ {
+ scrollMode = ScrTimer;
+ arc = atan2(double(-dx),double(dy)) * 180.0 / M_PI;
+ if ( arc < d_angle)
+ direction = -1;
+ else if (arc > d_angle)
+ direction = 1;
+ else
+ direction = 0;
+ }
+ return;
+}
+
+
+
+//------------------------------------------------------------
+//.F QwtKnob::rangeChange
+// Notify a change of the range
+//
+//.u Description
+// Called by QwtSliderBase
+//------------------------------------------------------------
+
+void Knob::rangeChange()
+{
+ if (!hasUserScale())
+ {
+ d_scale.setScale(minValue(), maxValue(),
+ d_maxMajor, d_maxMinor);
+ }
+ recalcAngle();
+ resize(size());
+ repaint(FALSE);
+}
+
+//---------------------------------------------------------
+// resizeEvent
+//---------------------------------------------------------
+
+void Knob::resizeEvent(QResizeEvent *)
+ {
+ int width, width_2;
+
+ const QRect& r = rect();
+
+// printf("resize %d %d %d\n", r.height(), r.width(), d_knobWidth);
+
+// width = qwtMin(qwtMin(r.height(), r.width()), d_knobWidth);
+ width = qwtMin(r.height(), r.width());
+ width_2 = width / 2;
+
+ int x = r.x() + r.width() / 2 - width_2;
+ int y = r.y() + r.height() / 2 - width_2;
+
+ kRect.setRect(x, y, width, width);
+
+ x = kRect.x() - d_scaleDist;
+ y = kRect.y() - d_scaleDist;
+ int w = width + 2 * d_scaleDist;
+
+ d_scale.setGeometry(x, y, w, ScaleDraw::Round);
+ }
+
+//------------------------------------------------------------
+// paintEvent
+//------------------------------------------------------------
+
+void Knob::paintEvent(QPaintEvent* e)
+ {
+ QPainter p(this);
+ const QRect &r = e->rect();
+
+ if ((r == kRect) && d_newVal ) { // event from valueChange()
+ if (d_newVal > 1) // lost paintEvents()?
+ drawKnob(&p, kRect);
+ else {
+ drawMarker(&p, d_oldAngle, d_curFaceColor);
+ drawMarker(&p, d_angle, d_markerColor);
+ }
+ }
+ else {
+ p.eraseRect(rect());
+ if (hasScale)
+ d_scale.draw(&p);
+ drawKnob(&p, kRect);
+ }
+ d_newVal = 0;
+ }
+
+//------------------------------------------------------------
+//.-
+//.F QwtKnob::drawMarker
+// Draw the marker at the knob's front
+//
+//.u Parameters
+//.p QPainter *p -- painter
+// double arc -- angle of the marker
+// const QColor &c -- marker color
+//
+//.u Syntax
+// void QwtKnob::drawMarker(QPainter *p)
+//
+//------------------------------------------------------------
+void Knob::drawMarker(QPainter *p, double arc, const QColor &c)
+{
+
+ QPen pn;
+ int radius;
+ double rb,re;
+ double rarc;
+
+ rarc = arc * M_PI / 180.0;
+ double ca = cos(rarc);
+ double sa = - sin(rarc);
+ radius = kRect.width() / 2 - d_borderWidth;
+ if (radius < 3) radius = 3;
+ int ym = kRect.y() + radius + d_borderWidth;
+ int xm = kRect.x() + radius + d_borderWidth;
+
+ switch (d_symbol)
+ {
+ case Dot:
+
+ p->setBrush(c);
+ p->setPen(Qt::NoPen);
+ rb = double(qwtMax(radius - 4 - d_dotWidth / 2, 0));
+ p->drawEllipse(xm - int(rint(sa * rb)) - d_dotWidth / 2,
+ ym - int(rint(ca * rb)) - d_dotWidth / 2,
+ d_dotWidth, d_dotWidth);
+
+ break;
+
+ case Line:
+
+ pn.setColor(c);
+ pn.setWidth(2);
+ p->setPen(pn);
+
+ rb = qwtMax(double((radius - 4) / 3.0), 0.0);
+ re = qwtMax(double(radius - 4), 0.0);
+
+ p->drawLine( xm - int(rint(sa * rb)),
+ ym - int(rint(ca * rb)),
+ xm - int(rint(sa * re)),
+ ym - int(rint(ca * re)));
+
+ break;
+ }
+
+
+}
+
+//------------------------------------------------------------
+//
+//.F QwtKnob::setKnobWidth
+// Change the knob's width.
+//
+//.u Syntax
+//.f void QwtKnob::setKnobWidth(int w)
+//
+//.u Parameters
+//.p int w -- new width
+//
+//.u Description
+// The specified width must be >= 5, or it will be clipped.
+//
+//------------------------------------------------------------
+void Knob::setKnobWidth(int w)
+{
+ d_knobWidth = qwtMax(w,5);
+ resize(size());
+ repaint(FALSE);
+}
+
+//------------------------------------------------------------
+//
+//.F QwtKnob::setBorderWidth
+// Set the knob's border width
+//
+//.u Syntax
+//.f void QwtKnob::setBorderWidth(int bw)
+//
+//.u Parameters
+//.p int bw -- new border width
+//
+//------------------------------------------------------------
+void Knob::setBorderWidth(int bw)
+{
+ d_borderWidth = qwtMax(bw, 0);
+ resize(size());
+ repaint(FALSE);
+}
+
+//------------------------------------------------------------
+//.-
+//.F QwtKnob::recalcAngle
+// Recalculate the marker angle corresponding to the
+// current value
+//
+//.u Syntax
+//.f void QwtKnob::recalcAngle()
+//
+//------------------------------------------------------------
+void Knob::recalcAngle()
+{
+ d_oldAngle = d_angle;
+
+ //
+ // calculate the angle corresponding to the value
+ //
+ if (maxValue() == minValue())
+ {
+ d_angle = 0;
+ d_nTurns = 0;
+ }
+ else
+ {
+ d_angle = (value() - 0.5 * (minValue() + maxValue()))
+ / (maxValue() - minValue()) * d_totalAngle;
+ d_nTurns = floor((d_angle + 180.0) / 360.0);
+ d_angle = d_angle - d_nTurns * 360.0;
+
+ }
+
+}
+
+//------------------------------------------------------------
+// setFaceColor
+//------------------------------------------------------------
+void Knob::setFaceColor(const QColor c)
+{
+ d_faceColor = c;
+ if(!_faceColSel)
+ //update(FALSE);
+ repaint(FALSE);
+}
+
+//------------------------------------------------------------
+// setAltFaceColor
+//------------------------------------------------------------
+void Knob::setAltFaceColor(const QColor c)
+{
+ d_altFaceColor = c;
+ if(_faceColSel)
+ //update(FALSE);
+ repaint(FALSE);
+}
+
+//------------------------------------------------------------
+// selectFaceColor
+//------------------------------------------------------------
+void Knob::selectFaceColor(bool alt)
+{
+ _faceColSel = alt;
+ if(alt)
+ d_curFaceColor = d_altFaceColor;
+ else
+ d_curFaceColor = d_faceColor;
+ //update(FALSE);
+ repaint(FALSE);
+}
+
+//------------------------------------------------------------
+// setMarkerColor
+//------------------------------------------------------------
+void Knob::setMarkerColor(const QColor c)
+{
+ d_markerColor = c;
+ //update(FALSE);
+ repaint(FALSE);
+}
+
diff --git a/muse2/muse/widgets/knob.h b/muse2/muse/widgets/knob.h
new file mode 100644
index 00000000..baaf9a50
--- /dev/null
+++ b/muse2/muse/widgets/knob.h
@@ -0,0 +1,78 @@
+#ifndef QWT_KNOB_H
+#define QWT_KNOB_H
+
+#include <sliderbase.h>
+#include <sclif.h>
+#include <qcolor.h>
+//Added by qt3to4:
+#include <QResizeEvent>
+#include <QPaintEvent>
+
+
+//---------------------------------------------------------
+// Knob
+//---------------------------------------------------------
+
+class Knob : public SliderBase, public ScaleIf
+ {
+ Q_OBJECT
+
+ public:
+ enum Symbol { Line, Dot };
+
+ private:
+ bool hasScale;
+
+ int d_borderWidth;
+ int d_borderDist;
+ int d_scaleDist;
+ int d_maxScaleTicks;
+ int d_newVal;
+ int d_knobWidth;
+ int d_dotWidth;
+
+ Symbol d_symbol;
+ double d_angle;
+ double d_oldAngle;
+ double d_totalAngle;
+ double d_nTurns;
+
+ QRect kRect;
+ bool _faceColSel;
+ QColor d_faceColor;
+ QColor d_curFaceColor;
+ QColor d_altFaceColor;
+ QColor d_markerColor;
+
+ void recalcAngle();
+ void valueChange();
+ void rangeChange();
+ void drawKnob(QPainter *p, const QRect &r);
+ void drawMarker(QPainter *p, double arc, const QColor &c);
+
+ void paintEvent(QPaintEvent *e);
+ void resizeEvent(QResizeEvent *e);
+ double getValue(const QPoint &p);
+ void getScrollMode( QPoint &p, const Qt::ButtonState &button, int &scrollMode, int &direction );
+ void scaleChange() { repaint(false); }
+ void fontChange(const QFont &) { repaint(false); }
+
+ public:
+ Knob(QWidget* parent = 0, const char *name = 0);
+ ~Knob() {}
+
+ void setKnobWidth(int w);
+ void setTotalAngle (double angle);
+ void setBorderWidth(int bw);
+ void selectFaceColor(bool alt);
+ bool selectedFaceColor() { return _faceColSel; }
+ QColor faceColor() { return d_faceColor; }
+ void setFaceColor(const QColor c);
+ QColor altFaceColor() { return d_altFaceColor; }
+ void setAltFaceColor(const QColor c);
+ QColor markerColor() { return d_markerColor; }
+ void setMarkerColor(const QColor c);
+ };
+
+
+#endif
diff --git a/muse2/muse/widgets/lcombo.cpp b/muse2/muse/widgets/lcombo.cpp
new file mode 100644
index 00000000..fa647002
--- /dev/null
+++ b/muse2/muse/widgets/lcombo.cpp
@@ -0,0 +1,49 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: lcombo.cpp,v 1.1.1.1.2.3 2009/07/01 22:14:56 spamatica Exp $
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "lcombo.h"
+
+#include <qlayout.h>
+#include <q3frame.h>
+#include <qlabel.h>
+//Added by qt3to4:
+#include <Q3HBoxLayout>
+
+//---------------------------------------------------------
+// LabelCombo
+//---------------------------------------------------------
+
+LabelCombo::LabelCombo(const QString& txt, QWidget* parent,
+ const char* name) : QWidget(parent, name)
+ {
+// setFixedHeight(20);
+ Q3HBoxLayout* layout = new Q3HBoxLayout(this);
+ QLabel* label = new QLabel(txt, this);
+ box = new QComboBox(false, this);
+ layout->addStretch();
+ layout->addSpacing(5);
+ layout->addWidget(label);
+ layout->addSpacing(5);
+ layout->addWidget(box);
+ layout->addSpacing(5);
+ layout->addStretch();
+ connect(box, SIGNAL(activated(int)), SIGNAL(activated(int)));
+ }
+
+void LabelCombo::insertItem(const QString& txt, int index)
+ {
+ box->insertItem(txt, index);
+ }
+
+void LabelCombo::clearFocus()
+{
+ box->clearFocus();
+}
+void LabelCombo::setFocusPolicy ( Qt::FocusPolicy fp )
+{
+ box->setFocusPolicy(fp);
+} \ No newline at end of file
diff --git a/muse2/muse/widgets/lcombo.h b/muse2/muse/widgets/lcombo.h
new file mode 100644
index 00000000..f2332847
--- /dev/null
+++ b/muse2/muse/widgets/lcombo.h
@@ -0,0 +1,40 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: lcombo.h,v 1.1.1.1.2.3 2009/07/01 22:14:56 spamatica Exp $
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __LCOMBO_H__
+#define __LCOMBO_H__
+
+#include <qwidget.h>
+#include <qcombobox.h>
+
+class QString;
+class Q3ListBox;
+
+//---------------------------------------------------------
+// LabelCombo
+//---------------------------------------------------------
+
+class LabelCombo : public QWidget {
+ QComboBox* box;
+ Q_OBJECT
+
+ signals:
+ void activated(int);
+
+ public slots:
+ void clearFocus();
+ public:
+ LabelCombo(const QString& label, QWidget* parent,
+ const char* name=0);
+ void insertItem(const QString& txt, int index=-1);
+ void setCurrentItem(int i) { box->setCurrentItem(i); }
+ //void setListBox(Q3ListBox* lb) { box->setListBox(lb); } // ddskrjo
+ void setFocusPolicy ( Qt::FocusPolicy fp );
+
+ };
+
+#endif
diff --git a/muse2/muse/widgets/listitem.h b/muse2/muse/widgets/listitem.h
new file mode 100644
index 00000000..56b0f3d4
--- /dev/null
+++ b/muse2/muse/widgets/listitem.h
@@ -0,0 +1,85 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: listitem.h,v 1.1.2.1 2008/08/18 00:15:26 terminator356 Exp $
+//
+// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __LISTITEM_H__
+#define __LISTITEM_H__
+
+//#include <qstring.h>
+//#include <qlistbox.h>
+#include <q3listview.h>
+
+class QString;
+class Q3ListBox;
+class Q3ListBoxText;
+//class QListView;
+//class QListViewItem;
+class ListBoxData;
+class ListViewData;
+
+//---------------------------------------------------------
+// ListBoxData
+//---------------------------------------------------------
+
+class ListBoxData : public Q3ListBoxText
+{
+ void* _data;
+
+ public:
+ ListBoxData(Q3ListBox* listbox, const QString& text = QString::null)
+ : Q3ListBoxText(listbox, text) { _data = 0; }
+ ListBoxData(const QString& text = QString::null) : Q3ListBoxText(text) { _data = 0; }
+ ListBoxData(Q3ListBox* listbox, const QString& text, ListBoxData* after)
+ : Q3ListBoxText(listbox, text, (Q3ListBoxText*)after) { _data = 0; }
+ ~ListBoxData() { }
+
+ virtual void setText(const QString& text) { Q3ListBoxText::setText(text); }
+ void* data() { return _data; }
+ void setData(void* dat) { _data = dat; }
+};
+
+//---------------------------------------------------------
+// ListViewData
+//---------------------------------------------------------
+
+class ListViewData : public Q3ListViewItem
+{
+ void* _data;
+
+ public:
+ ListViewData(Q3ListView* parent) : Q3ListViewItem(parent) { _data = 0; }
+ //ListViewData(ListViewData* parent) : QListViewItem((QListViewItem*)parent) { _data = 0; }
+ ListViewData(ListViewData* parent) : Q3ListViewItem(parent) { _data = 0; }
+ //ListViewData(QListView* parent, ListViewData* after) : QListViewItem(parent, (QListViewItem*)after) { _data = 0; }
+ ListViewData(Q3ListView* parent, ListViewData* after) : Q3ListViewItem(parent, after) { _data = 0; }
+ //ListViewData(ListViewData* parent, ListViewData* after) : QListViewItem((QListViewItem*)parent, (QListViewItem*)after) { _data = 0; }
+ ListViewData(ListViewData* parent, ListViewData* after) : Q3ListViewItem(parent, after) { _data = 0; }
+ ListViewData(Q3ListView* parent, QString label1, QString label2 = QString::null, QString label3 = QString::null, QString label4 = QString::null,
+ QString label5 = QString::null, QString label6 = QString::null, QString label7 = QString::null, QString label8 = QString::null)
+ : Q3ListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8) { _data = 0; }
+ ListViewData(ListViewData* parent, QString label1, QString label2 = QString::null, QString label3 = QString::null, QString label4 = QString::null,
+ QString label5 = QString::null, QString label6 = QString::null, QString label7 = QString::null, QString label8 = QString::null)
+ //: QListViewItem((QListViewItem*)parent, label1, label2, label3, label4, label5, label6, label7, label8) { _data = 0; }
+ : Q3ListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8) { _data = 0; }
+ ListViewData(Q3ListView* parent, ListViewData* after, QString label1, QString label2 = QString::null, QString label3 = QString::null, QString label4 = QString::null,
+ QString label5 = QString::null, QString label6 = QString::null, QString label7 = QString::null, QString label8 = QString::null)
+ //: QListViewItem(parent, (QListViewItem*)after, label1, label2, label3, label4, label5, label6, label7, label8) { _data = 0; }
+ : Q3ListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8) { _data = 0; }
+ ListViewData(ListViewData* parent, ListViewData* after, QString label1, QString label2 = QString::null, QString label3 = QString::null, QString label4 = QString::null,
+ QString label5 = QString::null, QString label6 = QString::null, QString label7 = QString::null, QString label8 = QString::null)
+ //: QListViewItem((QListViewItem*)parent, (QListViewItem*)after, label1, label2, label3, label4, label5, label6, label7, label8) { _data = 0; }
+ : Q3ListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8) { _data = 0; }
+ ~ListViewData() { }
+
+ void* data() { return _data; }
+ void setData(void* dat) { _data = dat; }
+};
+
+
+
+#endif
+
diff --git a/muse2/muse/widgets/menutitleitem.h b/muse2/muse/widgets/menutitleitem.h
new file mode 100644
index 00000000..5f821512
--- /dev/null
+++ b/muse2/muse/widgets/menutitleitem.h
@@ -0,0 +1,29 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: menutitleitem.h,v 1.1.2.1 2009/06/10 00:34:59 terminator356 Exp $
+// (C) Copyright 1999-2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __MENU_TITLE_ITEM_H__
+#define __MENU_TITLE_ITEM_H__
+
+#include <qmenudata.h>
+
+//---------------------------------------------------------
+// MenuTitleItem
+//---------------------------------------------------------
+
+class MenuTitleItem { //: public QCustomMenuItem { ddskrjo
+ QString s;
+ virtual bool fullSpan() const { return true; }
+ virtual bool isSeparator() const { return true; }
+ virtual void paint(QPainter* p, const QColorGroup& cg, bool act,
+ bool, int, int, int, int);
+ virtual QSize sizeHint();
+
+ public:
+ MenuTitleItem(QString s);
+ };
+
+#endif
diff --git a/muse2/muse/widgets/metronome.cpp b/muse2/muse/widgets/metronome.cpp
new file mode 100644
index 00000000..091a8a56
--- /dev/null
+++ b/muse2/muse/widgets/metronome.cpp
@@ -0,0 +1,186 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: metronome.cpp,v 1.2.2.1 2009/12/20 05:00:35 terminator356 Exp $
+//
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <stdio.h>
+#include "metronome.h"
+#include <QtGui>
+#include <qpushbutton.h>
+#include <qspinbox.h>
+#include <qcheckbox.h>
+//Added by qt3to4:
+#include <Q3PopupMenu>
+#include "globals.h"
+#include "song.h"
+#include "track.h"
+#include "audio.h"
+
+//---------------------------------------------------------
+// MetronomeConfig
+//---------------------------------------------------------
+
+MetronomeConfig::MetronomeConfig(QWidget* parent, const char* name)
+ : MetronomeConfigBase(parent, name)
+ {
+ connect(buttonApply, SIGNAL(clicked()), SLOT(apply()));
+ connect(midiClick, SIGNAL(toggled(bool)), SLOT(midiClickChanged(bool)));
+ connect(precountEnable, SIGNAL(toggled(bool)), SLOT(precountEnableChanged(bool)));
+ connect(precountFromMastertrack, SIGNAL(toggled(bool)),
+ SLOT(precountFromMastertrackChanged(bool)));
+ connect(audioBeepRoutesButton, SIGNAL(clicked()), SLOT(audioBeepRoutesClicked()));
+ connect(volumeSlider, SIGNAL(valueChanged(int)), SLOT(beepVolumeChanged(int)));
+
+ measureNote->setValue(measureClickNote);
+ measureVelocity->setValue(measureClickVelo);
+ beatNote->setValue(beatClickNote);
+ beatVelocity->setValue(beatClickVelo);
+ midiChannel->setValue(clickChan+1);
+ midiPort->setValue(clickPort+1);
+
+ /*
+ precountBars->setValue(preMeasures);
+ precountEnable->setChecked(precountEnableFlag);
+ precountFromMastertrack->setChecked(precountFromMastertrackFlag);
+ precountSigZ->setValue(::precountSigZ);
+ precountSigN->setValue(::precountSigN);
+ precountPrerecord->setChecked(::precountPrerecord);
+ precountPreroll->setChecked(::precountPreroll);
+ */
+
+ midiClick->setChecked(midiClickFlag);
+ audioBeep->setChecked(audioClickFlag);
+ }
+
+//---------------------------------------------------------
+// audioBeepRoutesClicked
+//---------------------------------------------------------
+
+void MetronomeConfig::audioBeepRoutesClicked()
+{
+ if(song->outputs()->size() == 0)
+ return;
+
+ //QPopupMenu* pup = new QPopupMenu(audioBeepRoutesButton);
+ Q3PopupMenu* pup = new Q3PopupMenu(this);
+ pup->setCheckable(true);
+
+ OutputList* ol = song->outputs();
+
+ int nn = 0;
+ for(iAudioOutput iao = ol->begin(); iao != ol->end(); ++iao)
+ {
+ int id = pup->insertItem(QT_TR_NOOP((*iao)->name()), nn);
+ if((*iao)->sendMetronome())
+ pup->setItemChecked(id, true);
+ ++nn;
+ }
+
+ int n = pup->exec(QCursor::pos());
+ if(n != -1)
+ {
+ //QString s(pup->text(n));
+ nn = 0;
+ for(iAudioOutput iao = ol->begin(); iao != ol->end(); ++iao)
+ {
+ //if(((*iao)->name() == s) && (n == nn))
+ if(n == nn)
+ {
+ //(*iao)->setSendMetronome();
+ audio->msgSetSendMetronome(*iao, !pup->isItemChecked(n));
+ //song->update(SC_ROUTE);
+ break;
+ }
+ ++nn;
+ }
+ }
+
+ delete pup;
+ audioBeepRoutesButton->setDown(false); // pup->exec() catches mouse release event
+}
+
+//---------------------------------------------------------
+// accept
+//---------------------------------------------------------
+
+void MetronomeConfig::accept()
+ {
+ apply();
+ MetronomeConfigBase::accept();
+ }
+
+//---------------------------------------------------------
+// apply
+//---------------------------------------------------------
+
+void MetronomeConfig::apply()
+ {
+ measureClickNote = measureNote->value();
+ measureClickVelo = measureVelocity->value();
+ beatClickNote = beatNote->value();
+ beatClickVelo = beatVelocity->value();
+ clickChan = midiChannel->value() - 1;
+ clickPort = midiPort->value() - 1;
+ preMeasures = precountBars->value();
+ /*
+ precountEnableFlag = precountEnable->isChecked();
+ precountFromMastertrackFlag = precountFromMastertrack->isChecked();
+ ::precountSigZ = precountSigZ->value();
+ ::precountSigN = precountSigN->value();
+ ::precountPrerecord = precountPrerecord->isChecked();
+ ::precountPreroll = precountPreroll->isChecked();
+ */
+ midiClickFlag = midiClick->isChecked();
+ audioClickFlag = audioBeep->isChecked();
+ //audioVolumeChanged = volumeSlider->value();
+ }
+
+//---------------------------------------------------------
+// reject
+//---------------------------------------------------------
+
+void MetronomeConfig::reject()
+ {
+ MetronomeConfigBase::reject();
+ }
+
+//---------------------------------------------------------
+// midiClickChanged
+//---------------------------------------------------------
+
+void MetronomeConfig::midiClickChanged(bool flag)
+ {
+ measureNote->setEnabled(flag);
+ measureVelocity->setEnabled(flag);
+ beatNote->setEnabled(flag);
+ beatVelocity->setEnabled(flag);
+ midiChannel->setEnabled(flag);
+ midiPort->setEnabled(flag);
+ }
+
+void MetronomeConfig::precountEnableChanged(bool flag)
+ {
+ /*
+ precountBars->setEnabled(flag);
+ precountFromMastertrack->setEnabled(flag);
+ precountSigZ->setEnabled(flag && !precountFromMastertrack->isChecked());
+ precountSigN->setEnabled(flag && !precountFromMastertrack->isChecked());
+ */
+ }
+
+void MetronomeConfig::precountFromMastertrackChanged(bool flag)
+ {
+ /*
+ precountSigZ->setEnabled(!flag);
+ precountSigN->setEnabled(!flag);
+ */
+ }
+
+void MetronomeConfig::beepVolumeChanged(int volume)
+ {
+ // this value is directly applied, not using th Apply button, it just seems more usable this way.
+ audioClickVolume=volume/100.0;
+ }
diff --git a/muse2/muse/widgets/metronome.h b/muse2/muse/widgets/metronome.h
new file mode 100644
index 00000000..200d1875
--- /dev/null
+++ b/muse2/muse/widgets/metronome.h
@@ -0,0 +1,34 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: metronome.h,v 1.1.1.1.2.1 2009/12/20 05:00:35 terminator356 Exp $
+//
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __METRONOME_H__
+#define __METRONOME_H__
+
+#include "metronomebase.h"
+
+//---------------------------------------------------------
+// MetronomeConfig
+//---------------------------------------------------------
+
+class MetronomeConfig : public MetronomeConfigBase {
+ Q_OBJECT
+
+ private slots:
+ virtual void accept();
+ void apply();
+ virtual void reject();
+ virtual void audioBeepRoutesClicked();
+ void midiClickChanged(bool);
+ void precountEnableChanged(bool);
+ void precountFromMastertrackChanged(bool);
+ void beepVolumeChanged(int);
+
+ public:
+ MetronomeConfig(QWidget* parent, const char* name = 0);
+ };
+#endif
diff --git a/muse2/muse/widgets/metronomebase.ui b/muse2/muse/widgets/metronomebase.ui
new file mode 100644
index 00000000..c30f5bf1
--- /dev/null
+++ b/muse2/muse/widgets/metronomebase.ui
@@ -0,0 +1,604 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>MetronomeConfigBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>MetronomeConfigBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>557</width>
+ <height>347</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Metronome Config</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout20</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox" row="0" column="0">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Metronome</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout18</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>audioBeepLayout</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>audioBeep</cstring>
+ </property>
+ <property name="text">
+ <string>Audio Beep</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>audioBeepRoutesButton</cstring>
+ </property>
+ <property name="text">
+ <string>Choose outputs...</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout17</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QSlider">
+ <property name="name">
+ <cstring>volumeSlider</cstring>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ <property name="maxValue">
+ <number>100</number>
+ </property>
+ <property name="lineStep">
+ <number>1</number>
+ </property>
+ <property name="pageStep">
+ <number>10</number>
+ </property>
+ <property name="value">
+ <number>50</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>volumeLabel</cstring>
+ </property>
+ <property name="text">
+ <string>50</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>% Audio volume</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>midiClick</cstring>
+ </property>
+ <property name="text">
+ <string>MIDI Click</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout11</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout10</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="4" column="1">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Midi Channel</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Measure Note</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="4" column="0">
+ <property name="name">
+ <cstring>midiChannel</cstring>
+ </property>
+ <property name="maxValue">
+ <number>16</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Measure Velocity</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="1">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Beat Velocity</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="5" column="0">
+ <property name="name">
+ <cstring>midiPort</cstring>
+ </property>
+ <property name="maxValue">
+ <number>16</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Beat Note</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="0">
+ <property name="name">
+ <cstring>beatNote</cstring>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="0">
+ <property name="name">
+ <cstring>measureVelocity</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="0">
+ <property name="name">
+ <cstring>measureNote</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="1">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Midi Port</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="0">
+ <property name="name">
+ <cstring>beatVelocity</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="0" column="1">
+ <property name="name">
+ <cstring>GroupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>Precount</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>precountEnable</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>enable</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>precountBars</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>10</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ <property name="value">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel7</cstring>
+ </property>
+ <property name="text">
+ <string>Bars</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>precountFromMastertrack</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>From Mastertrack</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>precountSigZ</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>32</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ <property name="value">
+ <number>4</number>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel8</cstring>
+ </property>
+ <property name="text">
+ <string>/</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>precountSigN</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>64</number>
+ </property>
+ <property name="minValue">
+ <number>2</number>
+ </property>
+ <property name="value">
+ <number>4</number>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel9</cstring>
+ </property>
+ <property name="text">
+ <string>Signature</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>precountPrerecord</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Prerecord</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>precountPreroll</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Preroll</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>layout19</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Hint: Enable metronome in Transportpanel</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>8</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonApply</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Apply</string>
+ </property>
+ <property name="accel">
+ <string>Alt+A</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="accel">
+ <string>Alt+O</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="accel">
+ <string>Alt+C</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>MetronomeConfigBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>MetronomeConfigBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>volumeSlider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>volumeLabel</receiver>
+ <slot>setNum(int)</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>audioBeep</tabstop>
+ <tabstop>audioBeepRoutesButton</tabstop>
+ <tabstop>midiClick</tabstop>
+ <tabstop>measureNote</tabstop>
+ <tabstop>measureVelocity</tabstop>
+ <tabstop>beatNote</tabstop>
+ <tabstop>beatVelocity</tabstop>
+ <tabstop>midiChannel</tabstop>
+ <tabstop>midiPort</tabstop>
+ <tabstop>precountEnable</tabstop>
+ <tabstop>precountBars</tabstop>
+ <tabstop>precountFromMastertrack</tabstop>
+ <tabstop>precountSigZ</tabstop>
+ <tabstop>precountPrerecord</tabstop>
+ <tabstop>precountPreroll</tabstop>
+ <tabstop>precountSigN</tabstop>
+ <tabstop>buttonApply</tabstop>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/midisync.ui b/muse2/muse/widgets/midisync.ui
new file mode 100644
index 00000000..f9c9a816
--- /dev/null
+++ b/muse2/muse/widgets/midisync.ui
@@ -0,0 +1,443 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>MidiSyncConfigBase</class>
+<comment>midi sync
+configuration dialog</comment>
+<author>werner schweer</author>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>MidiSyncConfigBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>574</width>
+ <height>419</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Midi Sync</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="2" column="0">
+ <property name="name">
+ <cstring>ApplyOk</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>applyButton</cstring>
+ </property>
+ <property name="text">
+ <string>Apply</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>okButton</cstring>
+ </property>
+ <property name="text">
+ <string>Ok</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>cancelButton</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>GroupBox13</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="title">
+ <string>MTC</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Type:</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>24</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>25</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>30D</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>30N</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>mtcSyncType</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Offset:</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>mtcOffH</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>23</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>hour</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>h</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>mtcOffM</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>59</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>minute</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>m</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>mtcOffS</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>59</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>second</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>s</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>mtcOffF</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>30</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>frame</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>f</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>mtcOffSf</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>subframe</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="0" column="0">
+ <property name="name">
+ <cstring>syncGen</cstring>
+ </property>
+ <property name="title">
+ <string>Sync receiving and sending</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>useJackTransportCheckbox</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Use Jack transport</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Send and receive Jack transport</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Send and receive Jack transport information,
+ including stop, start and position.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>jackTransportMasterCheckbox</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Jack transport Timebase Master</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Make MusE the Jack transport Timebase Master</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Make MusE the Jack transport Timebase Master.
+Allows Jack to show time as
+ MusE Bars, Beats, and Ticks.
+MusE will try to become master, but other
+ Jack clients can also take over later.
+You can always click here again for Master.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>extSyncCheckbox</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Slave to external sync</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Control MusE timing by external midi clock or MTC sync</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>When in slave mode, tempo is
+ controlled externally.
+MusE can sync to midi clock, or MTC quarter frame sync.
+Enabled inputs in the list will
+ be in effect (RMC, RMMC, RMTC).</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="0">
+ <property name="name">
+ <cstring>syncDelayLayout</cstring>
+ </property>
+ <hbox>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>syncDelaySpinBox</cstring>
+ </property>
+ <property name="suffix">
+ <string>ms</string>
+ </property>
+ <property name="maxValue">
+ <number>60000</number>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ <property name="lineStep">
+ <number>1</number>
+ </property>
+ <property name="value">
+ <number>1</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Send start to first clock delay</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Allows 'slow sync' devices time
+ to synchronize to MusE. This value is the
+ delay from sending start to sending
+ the first clock.</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>syncDelayLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Send sync delay</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignLeft</set>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QListView" row="4" column="0">
+ <property name="name">
+ <cstring>devicesListView</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+</widget>
+<tabstops>
+ <tabstop>mtcOffH</tabstop>
+ <tabstop>mtcOffM</tabstop>
+ <tabstop>mtcOffS</tabstop>
+ <tabstop>mtcOffF</tabstop>
+ <tabstop>mtcOffSf</tabstop>
+ <tabstop>applyButton</tabstop>
+ <tabstop>okButton</tabstop>
+ <tabstop>cancelButton</tabstop>
+</tabstops>
+<slots>
+ <slot>mopslot()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/midisyncimpl.cpp b/muse2/muse/widgets/midisyncimpl.cpp
new file mode 100644
index 00000000..e763c62f
--- /dev/null
+++ b/muse2/muse/widgets/midisyncimpl.cpp
@@ -0,0 +1,1294 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: midisyncimpl.cpp,v 1.1.1.1.2.4 2009/05/03 04:14:01 terminator356 Exp $
+//
+// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+//#include "midisyncimpl.h"
+//#include "sync.h"
+//#include "globals.h"
+
+#include <qspinbox.h>
+#include <qcombobox.h>
+#include <qcheckbox.h>
+#include <q3buttongroup.h>
+#include <qpushbutton.h>
+#include <qinputdialog.h>
+//#include <qlistview.h>
+#include <q3header.h>
+#include <qtimer.h>
+//#include <qwhatsthis.h>
+#include <qmessagebox.h>
+//Added by qt3to4:
+#include <QCloseEvent>
+
+#include "app.h"
+#include "song.h"
+#include "midiport.h"
+#include "midiseq.h"
+#include "mididev.h"
+#include "icons.h"
+#include "sync.h"
+#include "globals.h"
+#include "midisyncimpl.h"
+#include "driver/audiodev.h"
+#include "audio.h"
+
+enum { DEVCOL_NO = 0, DEVCOL_NAME, DEVCOL_IN, DEVCOL_TICKIN, DEVCOL_MRTIN, DEVCOL_MMCIN, DEVCOL_MTCIN, DEVCOL_MTCTYPE,
+ DEVCOL_RID, DEVCOL_RCLK, DEVCOL_RMRT, DEVCOL_RMMC, DEVCOL_RMTC, DEVCOL_RREWSTART,
+ DEVCOL_TID, DEVCOL_TCLK, DEVCOL_TMRT, DEVCOL_TMMC, DEVCOL_TMTC, /* DEVCOL_TREWSTART, */ };
+
+//MidiSyncInfo tmpMidiSyncPorts[MIDI_PORTS];
+
+//---------------------------------------------------------
+// MSyncHeaderTip::maybeTip
+//---------------------------------------------------------
+
+void MSyncHeaderTip::maybeTip(const QPoint &pos)
+ {
+ Q3Header* w = (Q3Header*)_parent->parentWidget();
+ int section = w->sectionAt(pos.x());
+ if (section == -1)
+ return;
+ QRect r(w->sectionPos(section), 0, w->sectionSize(section),
+ w->height());
+ QString p;
+ switch (section) {
+ case DEVCOL_NO: p = Q3Header::tr("Port Number"); break;
+ case DEVCOL_NAME: p = Q3Header::tr("Name of the midi device associated with"
+ " this port number"); break;
+ case DEVCOL_IN: p = Q3Header::tr("Midi clock input detected"); break;
+ case DEVCOL_TICKIN: p = Q3Header::tr("Midi tick input detected"); break;
+ case DEVCOL_MRTIN: p = Q3Header::tr("Midi real time input detected"); break;
+ case DEVCOL_MMCIN: p = Q3Header::tr("MMC input detected"); break;
+ case DEVCOL_MTCIN: p = Q3Header::tr("MTC input detected"); break;
+ case DEVCOL_MTCTYPE: p = Q3Header::tr("Detected SMPTE format"); break;
+ case DEVCOL_RID: p = Q3Header::tr("Receive id number. 127 = Global. Double click to edit."); break;
+ case DEVCOL_RCLK: p = Q3Header::tr("Accept midi clock input"); break;
+ case DEVCOL_RMRT: p = Q3Header::tr("Accept midi real time input"); break;
+ case DEVCOL_RMMC: p = Q3Header::tr("Accept MMC input"); break;
+ case DEVCOL_RMTC: p = Q3Header::tr("Accept MTC input"); break;
+ case DEVCOL_RREWSTART: p = Q3Header::tr("Receive start rewinds before playing"); break;
+ case DEVCOL_TID: p = Q3Header::tr("Transmit id number. 127 = Global. Double click to edit."); break;
+ case DEVCOL_TCLK: p = Q3Header::tr("Send midi clock output"); break;
+ case DEVCOL_TMRT: p = Q3Header::tr("Send midi realtime output"); break;
+ case DEVCOL_TMMC: p = Q3Header::tr("Send MMC output"); break;
+ case DEVCOL_TMTC: p = Q3Header::tr("Send MTC output"); break;
+ //case DEVCOL_TREWSTART: p = QHeader::tr("Send continue instead of start"); break;
+ default: return;
+ }
+ //tip(r, p); ddskrjo
+ }
+
+//---------------------------------------------------------
+// MSyncWhatsThis::text
+//---------------------------------------------------------
+
+QString MSyncWhatsThis::text(const QPoint& pos)
+{
+ int n = header->cellAt(pos.x());
+ if (n == -1)
+ return QString::null;
+ switch (header->mapToLogical(n)) {
+ case DEVCOL_NO:
+ return Q3Header::tr("Port Number");
+ case DEVCOL_NAME:
+ return Q3Header::tr("Name of the midi device associated with this port number");
+ case DEVCOL_IN:
+ return Q3Header::tr("Midi clock input detected.\n"
+ "Current port actually used is red.\nClick to force a port to be used.");
+ case DEVCOL_TICKIN:
+ return Q3Header::tr("Midi tick input detected");
+ case DEVCOL_MRTIN:
+ return Q3Header::tr("Midi realtime input detected, including\n start/stop/continue, and song position.");
+ case DEVCOL_MMCIN:
+ return Q3Header::tr("MMC input detected, including stop/play/deferred play, and locate.");
+ //"Current port actually used is red. Click to force a port to be current.");
+ case DEVCOL_MTCIN:
+ return Q3Header::tr("MTC input detected, including forward quarter-frame sync and full-frame locate.\n"
+ "Current port actually used is red. Click to force a port to be current.");
+ case DEVCOL_MTCTYPE:
+ return Q3Header::tr("Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop\n"
+ "Detects format of MTC quarter and full frame, and MMC locate.");
+ case DEVCOL_RID:
+ return Q3Header::tr("Receive id number. 127 = global receive all, even if not global.");
+ case DEVCOL_RCLK:
+ return Q3Header::tr("Accept midi clock input. Only one input is used for clock.\n"
+ "Auto-acquire: If two or more port realtime inputs are enabled,\n"
+ " the first clock detected is used, until clock is lost,\n"
+ " then another can take over. Best if each turns off its clock\n"
+ " at stop, so MusE can re-acquire the clock from another port.\n"
+ "Click on detect indicator to force another.");
+ case DEVCOL_RMRT:
+ return Q3Header::tr("Accept midi realtime input, including\n start/stop/continue, and song position.\n"
+ "Non-clock events (start,stop etc) are\n accepted by ALL enabled ports.\n"
+ "This means you may have several master\n devices connected, and muse will accept\n"
+ " input from them.");
+ case DEVCOL_RMMC:
+ return Q3Header::tr("Accept MMC input, including stop/play/deferred play, and locate.");
+ case DEVCOL_RMTC:
+ return Q3Header::tr("Accept MTC input, including forward quarter-frame sync and full-frame locate.\n"
+ "See 'rc' column for more help.");
+ case DEVCOL_RREWSTART:
+ return Q3Header::tr("When start is received, rewind before playing.\n"
+ "Note: It may be impossible to rewind fast\n"
+ " enough to synchronize with the external device.");
+ case DEVCOL_TID:
+ return Q3Header::tr("Transmit id number. 127 = global transmit to all.");
+ case DEVCOL_TCLK:
+ return Q3Header::tr("Send midi clock output. If 'Slave to External Sync' is chosen,\n"
+ " muse can re-transmit clock to any other chosen ports.");
+ case DEVCOL_TMRT:
+ return Q3Header::tr("Send midi realtime output, including start/stop/continue,\n"
+ " and song position. If 'Slave to external sync' is chosen,\n"
+ " muse can re-transmit midi realtime input messages to any\n"
+ " other chosen ports. This means you may have several slave\n"
+ " devices connected, and muse can re-send realtime messages\n"
+ " to any or all of them.");
+ case DEVCOL_TMMC:
+ return Q3Header::tr("Send MMC output");
+ case DEVCOL_TMTC:
+ return Q3Header::tr("Send MTC output");
+ //case DEVCOL_TREWSTART:
+ // return QHeader::tr("When transport is starting, send continue instead of start.\n");
+ default:
+ break;
+ }
+ return QString::null;
+}
+
+/*
+//---------------------------------------------------------
+// MidiSyncLViewItem
+// setDevice
+//---------------------------------------------------------
+
+void MidiSyncLViewItem::setDevice(MidiDevice* d)
+{
+ _device = d;
+ if(_device)
+ _syncInfo.copyParams(_device->syncInfo());
+}
+*/
+
+//---------------------------------------------------------
+// MidiSyncLViewItem
+// setPort
+//---------------------------------------------------------
+
+void MidiSyncLViewItem::setPort(int port)
+{
+ _port = port;
+ if(_port < 0 || port > MIDI_PORTS)
+ return;
+
+ //_syncInfo.copyParams(midiPorts[port].syncInfo());
+ copyFromSyncInfo(midiPorts[port].syncInfo());
+}
+
+//---------------------------------------------------------
+// MidiSyncLViewItem
+// copyFromSyncInfo
+//---------------------------------------------------------
+
+void MidiSyncLViewItem::copyFromSyncInfo(const MidiSyncInfo &sp)
+{
+ _idOut = sp.idOut();
+ _idIn = sp.idIn();
+ _sendMC = sp.MCOut();
+ _sendMRT = sp.MRTOut();
+ _sendMMC = sp.MMCOut();
+ _sendMTC = sp.MTCOut();
+ _recMC = sp.MCIn();
+ _recMRT = sp.MRTIn();
+ _recMMC = sp.MMCIn();
+ _recMTC = sp.MTCIn();
+ _recRewOnStart = sp.recRewOnStart();
+ //_sendContNotStart = sp.sendContNotStart();
+}
+
+//---------------------------------------------------------
+// MidiSyncLViewItem
+// copyToSyncInfo
+//---------------------------------------------------------
+
+void MidiSyncLViewItem::copyToSyncInfo(MidiSyncInfo &sp)
+{
+ sp.setIdOut(_idOut);
+ sp.setIdIn(_idIn);
+ sp.setMCOut(_sendMC);
+ sp.setMRTOut(_sendMRT);
+ sp.setMMCOut(_sendMMC);
+ sp.setMTCOut(_sendMTC);
+ sp.setMCIn(_recMC);
+ sp.setMRTIn(_recMRT);
+ sp.setMMCIn(_recMMC);
+ sp.setMTCIn(_recMTC);
+ sp.setRecRewOnStart(_recRewOnStart);
+ //sp.setSendContNotStart(_sendContNotStart);
+}
+
+//---------------------------------------------------------
+// MidiSyncConfig
+// Midi Sync Config
+//---------------------------------------------------------
+
+MidiSyncConfig::MidiSyncConfig(QWidget* parent, const char* name)
+ : MidiSyncConfigBase(parent, name)
+{
+ _synctooltip = 0;
+
+ _dirty = false;
+ applyButton->setEnabled(false);
+
+ //inHeartBeat = true;
+
+ //for(int i = 0; i < MIDI_PORTS; ++i)
+ // tmpMidiSyncPorts[i] = midiSyncPorts[i];
+
+ //bool ext = extSyncFlag.value();
+ //syncMode->setButton(int(ext));
+ //syncChanged(ext);
+// extSyncCheckbox->setChecked(extSyncFlag.value());
+
+// dstDevId->setValue(txDeviceId);
+// srcDevId->setValue(rxDeviceId);
+// srcSyncPort->setValue(rxSyncPort + 1);
+// dstSyncPort->setValue(txSyncPort + 1);
+
+// mtcSync->setChecked(genMTCSync);
+// mcSync->setChecked(genMCSync);
+// midiMachineControl->setChecked(genMMC);
+
+// acceptMTCCheckbox->setChecked(acceptMTC);
+ //acceptMTCCheckbox->setChecked(false);
+// acceptMCCheckbox->setChecked(acceptMC);
+// acceptMMCCheckbox->setChecked(acceptMMC);
+
+// mtcSyncType->setCurrentItem(mtcType);
+
+// mtcOffH->setValue(mtcOffset.h());
+// mtcOffM->setValue(mtcOffset.m());
+// mtcOffS->setValue(mtcOffset.s());
+// mtcOffF->setValue(mtcOffset.f());
+// mtcOffSf->setValue(mtcOffset.sf());
+
+
+
+
+ devicesListView->setSorting(-1);
+ devicesListView->setAllColumnsShowFocus(true);
+ devicesListView->addColumn(tr("Port"));
+ devicesListView->addColumn(tr("Device Name"), 120);
+ devicesListView->addColumn(tr("c"));
+ devicesListView->addColumn(tr("k"));
+ devicesListView->addColumn(tr("r"));
+ devicesListView->addColumn(tr("m"));
+ devicesListView->addColumn(tr("t"));
+ devicesListView->addColumn(tr("type"));
+ devicesListView->addColumn(tr("rid")); // Receive
+ devicesListView->addColumn(tr("rc")); // Receive
+ devicesListView->addColumn(tr("rr")); // Receive
+ devicesListView->addColumn(tr("rm")); // Receive
+ devicesListView->addColumn(tr("rt")); // Receive
+ devicesListView->addColumn(tr("rw")); // Receive
+ devicesListView->addColumn(tr("tid")); // Transmit
+ devicesListView->addColumn(tr("tc")); // Transmit
+ devicesListView->addColumn(tr("tr")); // Transmit
+ devicesListView->addColumn(tr("tm")); // Transmit
+ devicesListView->addColumn(tr("tt")); // Transmit
+ //devicesListView->addColumn(tr("trs")); // Transmit
+ devicesListView->setFocusPolicy(Qt::NoFocus);
+
+ devicesListView->setColumnAlignment(DEVCOL_NO, Qt::AlignHCenter);
+ devicesListView->setColumnAlignment(DEVCOL_IN, Qt::AlignCenter);
+ devicesListView->setColumnAlignment(DEVCOL_TICKIN, Qt::AlignCenter);
+ devicesListView->setColumnAlignment(DEVCOL_MRTIN, Qt::AlignCenter);
+ devicesListView->setColumnAlignment(DEVCOL_MMCIN, Qt::AlignCenter);
+ devicesListView->setColumnAlignment(DEVCOL_MTCIN, Qt::AlignCenter);
+ //devicesListView->setColumnAlignment(DEVCOL_MTCTYPE, AlignCenter);
+ //devicesListView->setColumnAlignment(DEVCOL_RID, AlignCenter);
+ devicesListView->setColumnAlignment(DEVCOL_RCLK, Qt::AlignCenter);
+ devicesListView->setColumnAlignment(DEVCOL_RMRT, Qt::AlignCenter);
+ devicesListView->setColumnAlignment(DEVCOL_RMMC, Qt::AlignCenter);
+ devicesListView->setColumnAlignment(DEVCOL_RMTC, Qt::AlignCenter);
+ devicesListView->setColumnAlignment(DEVCOL_RREWSTART, Qt::AlignCenter);
+ //devicesListView->setColumnAlignment(DEVCOL_TID, AlignCenter);
+ devicesListView->setColumnAlignment(DEVCOL_TCLK, Qt::AlignCenter);
+ devicesListView->setColumnAlignment(DEVCOL_TMRT, Qt::AlignCenter);
+ devicesListView->setColumnAlignment(DEVCOL_TMMC, Qt::AlignCenter);
+ devicesListView->setColumnAlignment(DEVCOL_TMTC, Qt::AlignCenter);
+ //devicesListView->setColumnAlignment(DEVCOL_TREWSTART, AlignCenter);
+ devicesListView->header()->setResizeEnabled(false, DEVCOL_NO);
+ devicesListView->header()->setResizeEnabled(false, DEVCOL_IN);
+ devicesListView->header()->setResizeEnabled(false, DEVCOL_TICKIN);
+ devicesListView->header()->setResizeEnabled(false, DEVCOL_MRTIN);
+ devicesListView->header()->setResizeEnabled(false, DEVCOL_MMCIN);
+ devicesListView->header()->setResizeEnabled(false, DEVCOL_MTCIN);
+ devicesListView->header()->setResizeEnabled(false, DEVCOL_RCLK);
+ devicesListView->header()->setResizeEnabled(false, DEVCOL_RMRT);
+ devicesListView->header()->setResizeEnabled(false, DEVCOL_RMMC);
+ devicesListView->header()->setResizeEnabled(false, DEVCOL_RMTC);
+ devicesListView->header()->setResizeEnabled(false, DEVCOL_RMTC);
+ devicesListView->header()->setResizeEnabled(false, DEVCOL_RREWSTART);
+ devicesListView->header()->setResizeEnabled(false, DEVCOL_TCLK);
+ devicesListView->header()->setResizeEnabled(false, DEVCOL_TMRT);
+ devicesListView->header()->setResizeEnabled(false, DEVCOL_TMMC);
+ //devicesListView->header()->setResizeEnabled(false, DEVCOL_TREWSTART);
+ //devicesListView->setResizeMode(QListView::LastColumn);
+ devicesListView->setResizeMode(Q3ListView::NoColumn);
+
+
+ new MSyncWhatsThis(devicesListView, devicesListView->header());
+ _synctooltip = new MSyncHeaderTip(devicesListView->header());
+ //MSyncHeaderTip::add(devicesListView->header(), QString("Midi sync ports"));
+
+// updateSyncInfoLV();
+
+ songChanged(-1);
+
+ //connect(devicesListView, SIGNAL(pressed(QListViewItem*,const QPoint&,int)),
+ // this, SLOT(dlvClicked(QListViewItem*,const QPoint&,int)));
+ connect(devicesListView, SIGNAL(mouseButtonClicked(int, Q3ListViewItem*,const QPoint&, int)),
+ this, SLOT(dlvClicked(int, Q3ListViewItem*,const QPoint&, int)));
+ connect(devicesListView, SIGNAL(doubleClicked(Q3ListViewItem*,const QPoint&,int)),
+ this, SLOT(dlvDoubleClicked(Q3ListViewItem*,const QPoint&,int)));
+ //connect(devicesListView, SIGNAL(itemRenamed(QListViewItem*, int, const QString&)),
+ // this, SLOT(renameOk(QListViewItem*, int, const QString&)));
+
+ connect(okButton, SIGNAL(clicked()), SLOT(ok()));
+ connect(applyButton, SIGNAL(clicked()), SLOT(apply()));
+ connect(cancelButton, SIGNAL(clicked()), SLOT(cancel()));
+
+ //connect(syncMode, SIGNAL(clicked(int)), SLOT(syncChanged(int)));
+ connect(extSyncCheckbox, SIGNAL(clicked()), SLOT(syncChanged()));
+ connect(mtcSyncType, SIGNAL(activated(int)), SLOT(syncChanged()));
+ connect(useJackTransportCheckbox, SIGNAL(clicked()), SLOT(syncChanged()));
+ connect(jackTransportMasterCheckbox, SIGNAL(clicked()), SLOT(syncChanged()));
+ connect(&extSyncFlag, SIGNAL(valueChanged(bool)), SLOT(extSyncChanged(bool)));
+ connect(syncDelaySpinBox, SIGNAL(valueChanged(int)), SLOT(syncChanged()));
+
+ // Done in show().
+ //connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int)));
+ //connect(heartBeatTimer, SIGNAL(timeout()), SLOT(heartBeat()));
+
+ //inHeartBeat = false;
+}
+
+MidiSyncConfig::~MidiSyncConfig()
+{
+ delete _synctooltip;
+}
+
+//---------------------------------------------------------
+// songChanged
+//---------------------------------------------------------
+
+void MidiSyncConfig::songChanged(int flags)
+{
+ // Is it simply a midi controller value adjustment? Forget it. Otherwise, it's mainly midi port/device changes we want.
+ if(flags == SC_MIDI_CONTROLLER ||
+ !(flags & (SC_CONFIG | SC_MASTER | SC_TEMPO | SC_SIG | SC_TRACK_INSERTED | SC_TRACK_REMOVED | SC_TRACK_MODIFIED |
+ SC_PART_INSERTED | SC_PART_REMOVED | SC_PART_MODIFIED | SC_EVENT_INSERTED | SC_EVENT_REMOVED | SC_EVENT_MODIFIED |
+ SC_MIDI_CONTROLLER_ADD)))
+ return;
+
+ // Reset dirty flag, since we're loading new values.
+ _dirty = false;
+ if(applyButton->isEnabled())
+ applyButton->setEnabled(false);
+
+ //for(int i = 0; i < MIDI_PORTS; ++i)
+ // tmpMidiSyncPorts[i] = midiSyncPorts[i];
+
+ extSyncCheckbox->blockSignals(true);
+ useJackTransportCheckbox->blockSignals(true);
+ jackTransportMasterCheckbox->blockSignals(true);
+ syncDelaySpinBox->blockSignals(true);
+ extSyncCheckbox->setChecked(extSyncFlag.value());
+ useJackTransportCheckbox->setChecked(useJackTransport.value());
+ jackTransportMasterCheckbox->setChecked(jackTransportMaster);
+ //jackTransportMasterCheckbox->setEnabled(useJackTransport);
+ syncDelaySpinBox->setValue(syncSendFirstClockDelay);
+ syncDelaySpinBox->blockSignals(false);
+ jackTransportMasterCheckbox->blockSignals(false);
+ useJackTransportCheckbox->blockSignals(false);
+ extSyncCheckbox->blockSignals(false);
+
+ mtcSyncType->setCurrentItem(mtcType);
+
+ mtcOffH->blockSignals(true);
+ mtcOffM->blockSignals(true);
+ mtcOffS->blockSignals(true);
+ mtcOffF->blockSignals(true);
+ mtcOffSf->blockSignals(true);
+ mtcOffH->setValue(mtcOffset.h());
+ mtcOffM->setValue(mtcOffset.m());
+ mtcOffS->setValue(mtcOffset.s());
+ mtcOffF->setValue(mtcOffset.f());
+ mtcOffSf->setValue(mtcOffset.sf());
+ mtcOffH->blockSignals(false);
+ mtcOffM->blockSignals(false);
+ mtcOffS->blockSignals(false);
+ mtcOffF->blockSignals(false);
+ mtcOffSf->blockSignals(false);
+
+ updateSyncInfoLV();
+
+ //selectionChanged();
+}
+
+//---------------------------------------------------------
+// heartBeat
+//---------------------------------------------------------
+
+void MidiSyncConfig::heartBeat()
+{
+ //inHeartBeat = true;
+
+ MidiSyncLViewItem* lvi = (MidiSyncLViewItem*)devicesListView->firstChild();
+ while(lvi)
+ {
+ int port = lvi->port();
+ if(port >= 0 && port < MIDI_PORTS)
+ {
+ bool sdet = midiPorts[port].syncInfo().MCSyncDetect();
+ if(sdet)
+ {
+ if(port == curMidiSyncInPort)
+ {
+ if(!lvi->_curDet)
+ {
+ // Added by Tim. p3.3.6
+ //printf("MidiSyncConfig::heartBeat setting current red icon\n");
+
+ lvi->_curDet = true;
+ lvi->_inDet = false;
+ lvi->setPixmap(DEVCOL_IN, *record1_Icon);
+ }
+ }
+ else
+ if(!lvi->_inDet)
+ {
+ // Added by Tim. p3.3.6
+ //printf("MidiSyncConfig::heartBeat setting non-current green icon\n");
+
+ lvi->_inDet = true;
+ lvi->_curDet = false;
+ lvi->setPixmap(DEVCOL_IN, *dotIcon);
+ }
+ }
+ else
+ {
+ if(lvi->_curDet || lvi->_inDet)
+ {
+ // Added by Tim. p3.3.6
+ //printf("MidiSyncConfig::heartBeat setting off icon\n");
+
+ lvi->_curDet = false;
+ lvi->_inDet = false;
+ lvi->setPixmap(DEVCOL_IN, *dothIcon);
+ }
+ }
+
+ sdet = midiPorts[port].syncInfo().tickDetect();
+ if(sdet)
+ {
+ if(!lvi->_tickDet)
+ {
+ // Added by Tim. p3.3.6
+ //printf("MidiSyncConfig::heartBeat setting tick on icon\n");
+
+ lvi->_tickDet = true;
+ lvi->setPixmap(DEVCOL_TICKIN, *dotIcon);
+ }
+ }
+ else
+ {
+ if(lvi->_tickDet)
+ {
+ // Added by Tim. p3.3.6
+ //printf("MidiSyncConfig::heartBeat setting tick off icon\n");
+
+ lvi->_tickDet = false;
+ lvi->setPixmap(DEVCOL_TICKIN, *dothIcon);
+ }
+ }
+
+ sdet = midiPorts[port].syncInfo().MRTDetect();
+ if(sdet)
+ {
+ if(!lvi->_MRTDet)
+ {
+ // Added by Tim. p3.3.6
+ //printf("MidiSyncConfig::heartBeat setting MRT on icon\n");
+
+ lvi->_MRTDet = true;
+ lvi->setPixmap(DEVCOL_MRTIN, *dotIcon);
+ }
+ }
+ else
+ {
+ if(lvi->_MRTDet)
+ {
+ // Added by Tim. p3.3.6
+ //printf("MidiSyncConfig::heartBeat setting MRT off icon\n");
+
+ lvi->_MRTDet = false;
+ lvi->setPixmap(DEVCOL_MRTIN, *dothIcon);
+ }
+ }
+
+ int type = midiPorts[port].syncInfo().recMTCtype();
+ sdet = midiPorts[port].syncInfo().MMCDetect();
+ bool mtcdet = midiPorts[port].syncInfo().MTCDetect();
+ if(sdet)
+ {
+ if(!lvi->_MMCDet)
+ {
+ // Added by Tim. p3.3.6
+ //printf("MidiSyncConfig::heartBeat setting MMC on icon\n");
+
+ lvi->_MMCDet = true;
+ lvi->setPixmap(DEVCOL_MMCIN, *dotIcon);
+ }
+ // MMC locate command can contain SMPTE format type. Update now.
+ if(!mtcdet && lvi->_recMTCtype != type)
+ {
+ lvi->_recMTCtype = type;
+ switch(type)
+ {
+ case 0:
+ lvi->setText(DEVCOL_MTCTYPE, "24");
+ break;
+ case 1:
+ lvi->setText(DEVCOL_MTCTYPE, "25");
+ break;
+ case 2:
+ lvi->setText(DEVCOL_MTCTYPE, "30D");
+ break;
+ case 3:
+ lvi->setText(DEVCOL_MTCTYPE, "30N");
+ break;
+ default:
+ lvi->setText(DEVCOL_MTCTYPE, "??");
+ break;
+ }
+ }
+ }
+ else
+ {
+ if(lvi->_MMCDet)
+ {
+ // Added by Tim. p3.3.6
+ //printf("MidiSyncConfig::heartBeat setting MMC off icon\n");
+
+ lvi->_MMCDet = false;
+ lvi->setPixmap(DEVCOL_MMCIN, *dothIcon);
+ }
+ }
+
+ if(mtcdet)
+ {
+ if(port == curMidiSyncInPort)
+ {
+ if(!lvi->_curMTCDet)
+ {
+ // Added by Tim. p3.3.6
+ //printf("MidiSyncConfig::heartBeat setting current red icon\n");
+
+ lvi->_curMTCDet = true;
+ lvi->_MTCDet = false;
+ lvi->setPixmap(DEVCOL_MTCIN, *record1_Icon);
+ }
+ }
+ else
+ if(!lvi->_MTCDet)
+ {
+ // Added by Tim. p3.3.6
+ //printf("MidiSyncConfig::heartBeat setting MTC on icon\n");
+
+ lvi->_MTCDet = true;
+ lvi->_curMTCDet = false;
+ lvi->setPixmap(DEVCOL_MTCIN, *dotIcon);
+ }
+
+ if(lvi->_recMTCtype != type)
+ {
+ lvi->_recMTCtype = type;
+ switch(type)
+ {
+ case 0:
+ lvi->setText(DEVCOL_MTCTYPE, "24");
+ break;
+ case 1:
+ lvi->setText(DEVCOL_MTCTYPE, "25");
+ break;
+ case 2:
+ lvi->setText(DEVCOL_MTCTYPE, "30D");
+ break;
+ case 3:
+ lvi->setText(DEVCOL_MTCTYPE, "30N");
+ break;
+ default:
+ lvi->setText(DEVCOL_MTCTYPE, "??");
+ break;
+ }
+ }
+ }
+ else
+ {
+ if(lvi->_curMTCDet || lvi->_MTCDet)
+ {
+ // Added by Tim. p3.3.6
+ //printf("MidiSyncConfig::heartBeat setting MTC off icon\n");
+
+ lvi->_MTCDet = false;
+ lvi->_curMTCDet = false;
+ lvi->setPixmap(DEVCOL_MTCIN, *dothIcon);
+ }
+ }
+ }
+
+ //MidiDevice* dev = lvi->device();
+ //bool sdet = dev->syncInfo().MCSyncDetect();
+ //if(lvi->pixmap(DEVCOL_IN) != (sdet ? *dotIcon : *dothIcon))
+ // lvi->setPixmap(DEVCOL_IN, sdet ? *dotIcon : *dothIcon);
+
+ lvi = (MidiSyncLViewItem*)lvi->nextSibling();
+ }
+
+ //inHeartBeat = false;
+}
+
+//---------------------------------------------------------
+// syncChanged
+// val = 1 - Master Mode
+// 0 - Slave Mode
+//---------------------------------------------------------
+
+void MidiSyncConfig::syncChanged()
+ {
+ setDirty();
+
+ //jackTransportMasterCheckbox->setEnabled(useJackTransport);
+
+ //acceptMTCCheckbox->setEnabled(val);
+// acceptMTCCheckbox->setEnabled(false);
+// acceptMCCheckbox->setEnabled(val);
+// acceptMMCCheckbox->setEnabled(val);
+ }
+
+//---------------------------------------------------------
+// extSyncChanged
+//---------------------------------------------------------
+
+void MidiSyncConfig::extSyncChanged(bool v)
+ {
+ extSyncCheckbox->blockSignals(true);
+ extSyncCheckbox->setChecked(v);
+// if(v)
+// song->setMasterFlag(false);
+ extSyncCheckbox->blockSignals(false);
+ }
+
+//---------------------------------------------------------
+// ok Pressed
+//---------------------------------------------------------
+
+void MidiSyncConfig::ok()
+ {
+ apply();
+ cancel();
+ }
+
+//---------------------------------------------------------
+// cancel Pressed
+//---------------------------------------------------------
+
+void MidiSyncConfig::cancel()
+ {
+ _dirty = false;
+ if(applyButton->isEnabled())
+ applyButton->setEnabled(false);
+
+ close(false);
+ }
+
+//---------------------------------------------------------
+// show
+//---------------------------------------------------------
+
+void MidiSyncConfig::show()
+{
+ songChanged(-1);
+ connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int)));
+ connect(heartBeatTimer, SIGNAL(timeout()), SLOT(heartBeat()));
+ QDialog::show();
+}
+
+//---------------------------------------------------------
+// closeEvent
+//---------------------------------------------------------
+
+void MidiSyncConfig::closeEvent(QCloseEvent* e)
+ {
+ if(_dirty)
+ {
+ int n = QMessageBox::warning(this, tr("MusE"),
+ tr("Settings have changed\n"
+ "Apply sync settings?"),
+ tr("&Apply"), tr("&No"), tr("&Abort"), 0, 2);
+
+ if(n == 2)
+ {
+ e->ignore();
+ return;
+ }
+
+ if(n == 0)
+ apply();
+ }
+
+ //emit deleted((unsigned long)this);
+
+ disconnect(heartBeatTimer, SIGNAL(timeout()), this, SLOT(heartBeat()));
+ disconnect(song, SIGNAL(songChanged(int)), this, SLOT(songChanged(int)));
+
+ e->accept();
+ }
+
+//---------------------------------------------------------
+// apply Pressed
+//---------------------------------------------------------
+
+void MidiSyncConfig::apply()
+{
+// txDeviceId = dstDevId->value();
+// rxDeviceId = srcDevId->value();
+// rxSyncPort = srcSyncPort->value() - 1;
+// txSyncPort = dstSyncPort->value() - 1;
+
+// genMTCSync = mtcSync->isChecked();
+// genMCSync = mcSync->isChecked();
+// genMMC = midiMachineControl->isChecked();
+
+ syncSendFirstClockDelay = syncDelaySpinBox->value();
+
+ mtcType = mtcSyncType->currentItem();
+ //extSyncFlag.setValue(syncMode->id(syncMode->selected()));
+ //extSyncFlag.blockSignals(true);
+ extSyncFlag.setValue(extSyncCheckbox->isChecked());
+// if(extSyncFlag.value())
+// song->setMasterFlag(false);
+ //extSyncFlag.blockSignals(false);
+ useJackTransport.setValue(useJackTransportCheckbox->isChecked());
+// if(useJackTransport)
+ jackTransportMaster = jackTransportMasterCheckbox->isChecked();
+// else
+// jackTransportMaster = false;
+// jackTransportMasterCheckbox->setEnabled(useJackTransport);
+ if(audioDevice)
+ audioDevice->setMaster(jackTransportMaster);
+
+ mtcOffset.setH(mtcOffH->value());
+ mtcOffset.setM(mtcOffM->value());
+ mtcOffset.setS(mtcOffS->value());
+ mtcOffset.setF(mtcOffF->value());
+ mtcOffset.setSf(mtcOffSf->value());
+
+// acceptMC = acceptMCCheckbox->isChecked();
+// acceptMMC = acceptMMCCheckbox->isChecked();
+// acceptMTC = acceptMTCCheckbox->isChecked();
+
+ MidiSyncLViewItem* lvi = (MidiSyncLViewItem*)devicesListView->firstChild();
+ while(lvi)
+ {
+ //MidiDevice* dev = lvi->device();
+ // Does the device really exist?
+ //if(midiDevices.find(dev) != midiDevices.end())
+ // dev->syncInfo().copyParams(lvi->syncInfo());
+ int port = lvi->port();
+ if(port >= 0 && port < MIDI_PORTS)
+ //midiPorts[port].syncInfo().copyParams(lvi->syncInfo());
+ lvi->copyToSyncInfo(midiPorts[port].syncInfo());
+
+ lvi = (MidiSyncLViewItem*)lvi->nextSibling();
+ }
+
+ //muse->changeConfig(true); // save settings
+
+ _dirty = false;
+ if(applyButton->isEnabled())
+ applyButton->setEnabled(false);
+
+ // Do not call this. Causes freeze sometimes. Only will be needed if extra pollfds are used by midi seq thread.
+ //midiSeq->msgUpdatePollFd();
+}
+
+//---------------------------------------------------------
+// updateSyncInfoLV
+//---------------------------------------------------------
+
+void MidiSyncConfig::updateSyncInfoLV()
+ {
+ devicesListView->clear();
+ for(int i = MIDI_PORTS-1; i >= 0; --i)
+ {
+ MidiPort* port = &midiPorts[i];
+ MidiDevice* dev = port->device();
+ // p3.3.31
+ // Don't show if it is a synthesizer device.
+ // Hmm, some synths might support transport commands or even sync?
+ // If anything, the DSSI or VST synths just might...
+ // TODO: Must test to see if it screws any of them up, especially clock out.
+ // Also, if we do this, we must prevent such messages from reaching
+ // those ports at several other places in the code.
+ //if(dev && dev->isSynti())
+ // continue;
+
+ QString s;
+ s.setNum(i+1);
+ MidiSyncLViewItem* lvi = new MidiSyncLViewItem(devicesListView);
+ lvi->setPort(i); // setPort will copy parameters.
+ //MidiSyncInfo& si = lvi->syncInfo();
+ //si.copyParams(port->syncInfo());
+ //lvi.copyFromSyncInfo(port->syncInfo());
+ MidiSyncInfo& portsi = port->syncInfo();
+
+ lvi->setText(DEVCOL_NO, s);
+
+ if (dev)
+ lvi->setText(DEVCOL_NAME, dev->name());
+ else
+ lvi->setText(DEVCOL_NAME, tr("<none>"));
+
+ if(portsi.MCSyncDetect())
+ {
+ if(i == curMidiSyncInPort)
+ {
+ lvi->_curDet = true;
+ lvi->_inDet = false;
+ lvi->setPixmap(DEVCOL_IN, *record1_Icon);
+ }
+ else
+ {
+ lvi->_curDet = false;
+ lvi->_inDet = true;
+ lvi->setPixmap(DEVCOL_IN, *dotIcon);
+ }
+ }
+ else
+ {
+ lvi->_curDet = false;
+ lvi->_inDet = false;
+ lvi->setPixmap(DEVCOL_IN, *dothIcon);
+ }
+
+ if(portsi.tickDetect())
+ {
+ lvi->_tickDet = true;
+ lvi->setPixmap(DEVCOL_TICKIN, *dotIcon);
+ }
+ else
+ {
+ lvi->_tickDet = false;
+ lvi->setPixmap(DEVCOL_TICKIN, *dothIcon);
+ }
+
+ if(portsi.MRTDetect())
+ {
+ lvi->_MRTDet = true;
+ lvi->setPixmap(DEVCOL_MRTIN, *dotIcon);
+ }
+ else
+ {
+ lvi->_MRTDet = false;
+ lvi->setPixmap(DEVCOL_MRTIN, *dothIcon);
+ }
+
+ if(portsi.MMCDetect())
+ {
+ lvi->_MMCDet = true;
+ lvi->setPixmap(DEVCOL_MMCIN, *dotIcon);
+ // MMC locate command can have SMPTE format bits...
+ if(lvi->_recMTCtype != portsi.recMTCtype())
+ {
+ switch(portsi.recMTCtype())
+ {
+ case 0:
+ lvi->setText(DEVCOL_MTCTYPE, "24");
+ break;
+ case 1:
+ lvi->setText(DEVCOL_MTCTYPE, "25");
+ break;
+ case 2:
+ lvi->setText(DEVCOL_MTCTYPE, "30D");
+ break;
+ case 3:
+ lvi->setText(DEVCOL_MTCTYPE, "30N");
+ break;
+ default:
+ lvi->setText(DEVCOL_MTCTYPE, "??");
+ break;
+ }
+ }
+ }
+ else
+ {
+ lvi->_MMCDet = false;
+ lvi->setPixmap(DEVCOL_MMCIN, *dothIcon);
+ }
+
+ if(portsi.MTCDetect())
+ {
+ if(i == curMidiSyncInPort)
+ {
+ lvi->_curMTCDet = true;
+ lvi->_MTCDet = false;
+ lvi->setPixmap(DEVCOL_MTCIN, *record1_Icon);
+ }
+ else
+ {
+ lvi->_curMTCDet = false;
+ lvi->_MTCDet = true;
+ lvi->setPixmap(DEVCOL_MTCIN, *dotIcon);
+ }
+
+ if(lvi->_recMTCtype != portsi.recMTCtype())
+ {
+ switch(portsi.recMTCtype())
+ {
+ case 0:
+ lvi->setText(DEVCOL_MTCTYPE, "24");
+ break;
+ case 1:
+ lvi->setText(DEVCOL_MTCTYPE, "25");
+ break;
+ case 2:
+ lvi->setText(DEVCOL_MTCTYPE, "30D");
+ break;
+ case 3:
+ lvi->setText(DEVCOL_MTCTYPE, "30N");
+ break;
+ default:
+ lvi->setText(DEVCOL_MTCTYPE, "??");
+ break;
+ }
+ }
+ }
+ else
+ {
+ lvi->_curMTCDet = false;
+ lvi->_MTCDet = false;
+ lvi->setPixmap(DEVCOL_MTCIN, *dothIcon);
+ //lvi->setText(DEVCOL_MTCTYPE, "--");
+ }
+
+ //lvi->setText(DEVCOL_RID, QString().setNum(si.idIn()) );
+ //lvi->setRenameEnabled(DEVCOL_RID, true);
+ //lvi->setPixmap(DEVCOL_RCLK, si.MCIn() ? *dotIcon : *dothIcon);
+ //lvi->setPixmap(DEVCOL_RMMC, si.MMCIn() ? *dotIcon : *dothIcon);
+ //lvi->setPixmap(DEVCOL_RMTC, si.MTCIn() ? *dotIcon : *dothIcon);
+ lvi->setText(DEVCOL_RID, QString().setNum(lvi->_idIn) );
+ lvi->setPixmap(DEVCOL_RCLK, lvi->_recMC ? *dotIcon : *dothIcon);
+ lvi->setPixmap(DEVCOL_RMRT, lvi->_recMRT ? *dotIcon : *dothIcon);
+ lvi->setPixmap(DEVCOL_RMMC, lvi->_recMMC ? *dotIcon : *dothIcon);
+ lvi->setPixmap(DEVCOL_RMTC, lvi->_recMTC ? *dotIcon : *dothIcon);
+ lvi->setPixmap(DEVCOL_RREWSTART, lvi->_recRewOnStart ? *dotIcon : *dothIcon);
+
+ //lvi->setText(DEVCOL_TID, QString().setNum(si.idOut()) );
+ //lvi->setRenameEnabled(DEVCOL_TID, true);
+ //lvi->setPixmap(DEVCOL_TCLK, si.MCOut() ? *dotIcon : *dothIcon);
+ //lvi->setPixmap(DEVCOL_TMMC, si.MMCOut() ? *dotIcon : *dothIcon);
+ //lvi->setPixmap(DEVCOL_TMTC, si.MTCOut() ? *dotIcon : *dothIcon);
+ lvi->setText(DEVCOL_TID, QString().setNum(lvi->_idOut) );
+ lvi->setPixmap(DEVCOL_TCLK, lvi->_sendMC ? *dotIcon : *dothIcon);
+ lvi->setPixmap(DEVCOL_TMRT, lvi->_sendMRT ? *dotIcon : *dothIcon);
+ lvi->setPixmap(DEVCOL_TMMC, lvi->_sendMMC ? *dotIcon : *dothIcon);
+ lvi->setPixmap(DEVCOL_TMTC, lvi->_sendMTC ? *dotIcon : *dothIcon);
+ //lvi->setPixmap(DEVCOL_TREWSTART, lvi->_sendContNotStart ? *dotIcon : *dothIcon);
+
+ devicesListView->insertItem(lvi);
+ }
+
+ /*
+ for(iMidiDevice id = midiDevices.begin(); id != midiDevices.end(); ++id)
+ {
+ MidiDevice* dev = *id;
+
+ //MidiPort* port = &midiPorts[i];
+ //MidiDevice* dev = port->device();
+ MidiSyncLViewItem* lvi = new MidiSyncLViewItem(devicesListView);
+ //lvi->setPort(i);
+ // setDevice will copy parameters.
+ lvi->setDevice(dev);
+ MidiSyncInfo& si = lvi->syncInfo();
+ //si.copyParams(dev->syncInfo());
+
+ lvi->setText(DEVCOL_NAME, dev->name());
+
+ lvi->setPixmap(DEVCOL_IN, si.MCSyncDetect() ? *dotIcon : *dothIcon);
+
+ lvi->setText(DEVCOL_RID, QString().setNum(si.idIn()) );
+ lvi->setPixmap(DEVCOL_RCLK, si.MCIn() ? *dotIcon : *dothIcon);
+ lvi->setPixmap(DEVCOL_RMMC, si.MMCIn() ? *dotIcon : *dothIcon);
+ lvi->setPixmap(DEVCOL_RMTC, si.MTCIn() ? *dotIcon : *dothIcon);
+
+ lvi->setText(DEVCOL_TID, QString().setNum(si.idOut()) );
+ lvi->setPixmap(DEVCOL_TCLK, si.MCOut() ? *dotIcon : *dothIcon);
+ lvi->setPixmap(DEVCOL_TMMC, si.MMCOut() ? *dotIcon : *dothIcon);
+ lvi->setPixmap(DEVCOL_TMTC, si.MTCOut() ? *dotIcon : *dothIcon);
+
+ devicesListView->insertItem(lvi);
+ }
+ */
+
+ }
+
+
+//---------------------------------------------------------
+// dlvClicked
+//---------------------------------------------------------
+
+//void MidiSyncConfig::dlvClicked(QListViewItem* item, const QPoint&, int col)
+void MidiSyncConfig::dlvClicked(int /*button*/, Q3ListViewItem* item, const QPoint&, int col)
+{
+ if (item == 0)
+ return;
+
+ MidiSyncLViewItem* lvi = (MidiSyncLViewItem*)item;
+ int no = lvi->port();
+ if (no < 0 || no >= MIDI_PORTS)
+ return;
+ //MidiDevice* dev = lvi->device();
+ // Does the device really exist?
+ //if(midiDevices.find(dev) == midiDevices.end())
+ // return;
+
+ //int n;
+ //MidiPort* port = &midiPorts[no];
+ //MidiDevice* dev = port->device();
+ //int rwFlags = dev ? dev->rwFlags() : 0;
+ //int openFlags = dev ? dev->openFlags() : 0;
+ //MidiSyncInfo& si = lvi->syncInfo();
+ //MidiSyncInfo& portsi = midiPorts[no].syncInfo();
+
+ switch (col)
+ {
+ case DEVCOL_NO:
+ break;
+ case DEVCOL_NAME:
+ break;
+ case DEVCOL_IN:
+ // If this is not the current midi sync in port, and sync in from this port is enabled,
+ // and sync is in fact detected on this port, allow the user to force this port to now be the
+ // current sync in port.
+ //if(no != curMidiSyncInPort && si.MCIn() && midiPorts[no].syncInfo().MCSyncDetect())
+ //if(no != curMidiSyncInPort && lvi->_recMC && midiPorts[no].syncInfo().MCSyncDetect())
+ if(no != curMidiSyncInPort)
+ {
+ if(lvi->_recMC && midiPorts[no].syncInfo().MCSyncDetect())
+ {
+ curMidiSyncInPort = no;
+ lvi->setPixmap(DEVCOL_IN, *record1_Icon);
+ }
+ if(lvi->_recMTC && midiPorts[no].syncInfo().MTCDetect())
+ {
+ curMidiSyncInPort = no;
+ lvi->setPixmap(DEVCOL_MTCIN, *record1_Icon);
+ }
+ }
+ break;
+ case DEVCOL_TICKIN:
+ break;
+ case DEVCOL_MMCIN:
+ break;
+ case DEVCOL_MTCIN:
+ // If this is not the current midi sync in port, and sync in from this port is enabled,
+ // and sync is in fact detected on this port, allow the user to force this port to now be the
+ // current sync in port.
+ //if(no != curMidiSyncInPort && si.MTCIn() && midiPorts[no].syncInfo().MTCDetect())
+ //if(no != curMidiSyncInPort && lvi->_recMTC && midiPorts[no].syncInfo().MTCDetect())
+ if(no != curMidiSyncInPort)
+ {
+ if(lvi->_recMTC && midiPorts[no].syncInfo().MTCDetect())
+ {
+ curMidiSyncInPort = no;
+ lvi->setPixmap(DEVCOL_MTCIN, *record1_Icon);
+ }
+ if(lvi->_recMC && midiPorts[no].syncInfo().MCSyncDetect())
+ {
+ curMidiSyncInPort = no;
+ lvi->setPixmap(DEVCOL_IN, *record1_Icon);
+ }
+ }
+ break;
+ case DEVCOL_MTCTYPE:
+ break;
+ case DEVCOL_RID:
+ break;
+ case DEVCOL_RCLK:
+ //si.setMCIn(si.MCIn() ? false : true);
+ //lvi->setPixmap(DEVCOL_RCLK, si.MCIn() ? *dotIcon : *dothIcon);
+ lvi->_recMC = (lvi->_recMC ? false : true);
+ lvi->setPixmap(DEVCOL_RCLK, lvi->_recMC ? *dotIcon : *dothIcon);
+ setDirty();
+ break;
+ case DEVCOL_RMRT:
+ lvi->_recMRT = (lvi->_recMRT ? false : true);
+ lvi->setPixmap(DEVCOL_RMRT, lvi->_recMRT ? *dotIcon : *dothIcon);
+ setDirty();
+ break;
+ case DEVCOL_RMMC:
+ //si.setMMCIn(si.MMCIn() ? false : true);
+ //lvi->setPixmap(DEVCOL_RMMC, si.MMCIn() ? *dotIcon : *dothIcon);
+ lvi->_recMMC = (lvi->_recMMC ? false : true);
+ lvi->setPixmap(DEVCOL_RMMC, lvi->_recMMC ? *dotIcon : *dothIcon);
+ setDirty();
+ break;
+ case DEVCOL_RMTC:
+ //si.setMTCIn(si.MTCIn() ? false : true);
+ //lvi->setPixmap(DEVCOL_RMTC, si.MTCIn() ? *dotIcon : *dothIcon);
+ lvi->_recMTC = (lvi->_recMTC ? false : true);
+ lvi->setPixmap(DEVCOL_RMTC, lvi->_recMTC ? *dotIcon : *dothIcon);
+ setDirty();
+ break;
+ case DEVCOL_RREWSTART:
+ lvi->_recRewOnStart = (lvi->_recRewOnStart ? false : true);
+ lvi->setPixmap(DEVCOL_RREWSTART, lvi->_recRewOnStart ? *dotIcon : *dothIcon);
+ setDirty();
+ break;
+ case DEVCOL_TID:
+ break;
+ case DEVCOL_TCLK:
+ //si.setMCOut(si.MCOut() ? false : true);
+ //lvi->setPixmap(DEVCOL_TCLK, si.MCOut() ? *dotIcon : *dothIcon);
+ lvi->_sendMC = (lvi->_sendMC ? false : true);
+ lvi->setPixmap(DEVCOL_TCLK, lvi->_sendMC ? *dotIcon : *dothIcon);
+ setDirty();
+ break;
+ case DEVCOL_TMRT:
+ lvi->_sendMRT = (lvi->_sendMRT ? false : true);
+ lvi->setPixmap(DEVCOL_TMRT, lvi->_sendMRT ? *dotIcon : *dothIcon);
+ setDirty();
+ break;
+ case DEVCOL_TMMC:
+ //si.setMMCOut(si.MMCOut() ? false : true);
+ //lvi->setPixmap(DEVCOL_TMMC, si.MMCOut() ? *dotIcon : *dothIcon);
+ lvi->_sendMMC = (lvi->_sendMMC ? false : true);
+ lvi->setPixmap(DEVCOL_TMMC, lvi->_sendMMC ? *dotIcon : *dothIcon);
+ setDirty();
+ break;
+ case DEVCOL_TMTC:
+ //si.setMTCOut(si.MTCOut() ? false : true);
+ //lvi->setPixmap(DEVCOL_TMTC, si.MTCOut() ? *dotIcon : *dothIcon);
+ lvi->_sendMTC = (lvi->_sendMTC ? false : true);
+ lvi->setPixmap(DEVCOL_TMTC, lvi->_sendMTC ? *dotIcon : *dothIcon);
+ setDirty();
+ break;
+ //case DEVCOL_TREWSTART:
+ // lvi->_sendContNotStart = (lvi->_sendContNotStart ? false : true);
+ // lvi->setPixmap(DEVCOL_TREWSTART, lvi->_sendContNotStart ? *dotIcon : *dothIcon);
+ // setDirty();
+ // break;
+ }
+ //songChanged(-1);
+}
+
+//---------------------------------------------------------
+// dlvDoubleClicked
+//---------------------------------------------------------
+
+void MidiSyncConfig::dlvDoubleClicked(Q3ListViewItem* item, const QPoint&, int col)
+{
+ if(!item)
+ return;
+
+ MidiSyncLViewItem* lvi = (MidiSyncLViewItem*)item;
+
+ //if(col == DEVCOL_RID)
+ // lvi->startRename(DEVCOL_RID);
+ //else
+ //if(col == DEVCOL_TID)
+ // lvi->startRename(DEVCOL_TID);
+
+ bool ok = false;
+ if(col == DEVCOL_RID)
+ {
+ //int val = lvi->syncInfo().idIn();
+ int val = lvi->_idIn;
+ int newval = QInputDialog::getInteger("Muse: Sync info" , "Enter new id number (127 = all):", val, 0, 127, 1, &ok, this);
+ if(ok)
+ {
+ //lvi->syncInfo().setIdIn(newval);
+ lvi->_idIn = newval;
+ lvi->setText(DEVCOL_RID, QString().setNum(newval));
+ }
+ }
+ else
+ if(col == DEVCOL_TID)
+ {
+ //int val = lvi->syncInfo().idOut();
+ int val = lvi->_idOut;
+ int newval = QInputDialog::getInteger("Muse: Sync info" , "Enter new id number (127 = global):", val, 0, 127, 1, &ok, this);
+ if(ok)
+ {
+ //lvi->syncInfo().setIdOut(newval);
+ lvi->_idOut = newval;
+ lvi->setText(DEVCOL_TID, QString().setNum(newval));
+ }
+ }
+
+ if(ok)
+ setDirty();
+}
+
+/*
+//---------------------------------------------------------
+// renameOk
+//---------------------------------------------------------
+//void MidiSyncConfig::renameOk(QListViewItem* item, int col)
+void MidiSyncConfig::renameOk(QListViewItem* item, int col, const QString & text)
+{
+ if(!item)
+ return;
+
+ MidiSyncLViewItem* lvi = (MidiSyncLViewItem*)item;
+ QString t = text;
+ bool ok;
+ int id = text.toInt(&ok);
+ if(!ok)
+ {
+ lvi->setText(t);
+ return;
+ }
+ if(col == DEVCOL_RID)
+ {
+ //lvi->syncInfo().setIdIn(id);
+ lvi->_idIn = id;
+ setDirty();
+ }
+ else
+ if(col == DEVCOL_TID)
+ {
+ //lvi->syncInfo().setIdOut(id);
+ lvi->_idOut = id;
+ setDirty();
+ }
+}
+*/
+
+//---------------------------------------------------------
+// MidiSyncConfig::setDirty
+//---------------------------------------------------------
+
+void MidiSyncConfig::setDirty()
+{
+ _dirty = true;
+ if(!applyButton->isEnabled())
+ applyButton->setEnabled(true);
+}
+
diff --git a/muse2/muse/widgets/midisyncimpl.h b/muse2/muse/widgets/midisyncimpl.h
new file mode 100644
index 00000000..a804e85f
--- /dev/null
+++ b/muse2/muse/widgets/midisyncimpl.h
@@ -0,0 +1,150 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: midisyncimpl.h,v 1.1.1.1.2.3 2009/05/03 04:14:01 terminator356 Exp $
+//
+// (C) Copyright 1999/2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __MIDISYNCIMPL_H__
+#define __MIDISYNCIMPL_H__
+
+#include <q3whatsthis.h>
+#include <q3listview.h>
+#include <qtooltip.h>
+//Added by qt3to4:
+#include <QCloseEvent>
+//#include <qheader.h>
+#include "midisync.h"
+#include "sync.h"
+
+//class QWhatsThis;
+//class QListView;
+//class QListViewItem;
+class Q3Header;
+//class MidiDevice;
+
+//----------------------------------------------------------
+// MSyncHeaderTip
+//----------------------------------------------------------
+
+class MSyncHeaderTip /*: public QToolTip ddskrjo*/ {
+ QWidget *_parent;
+ public:
+ MSyncHeaderTip(QWidget * parent) : _parent(parent) {} // ddskrjo
+ virtual ~MSyncHeaderTip() {}
+ protected:
+ void maybeTip(const QPoint &);
+ };
+
+//---------------------------------------------------------
+// MSyncWhatsThis
+//---------------------------------------------------------
+
+class MSyncWhatsThis : public Q3WhatsThis {
+ Q3Header* header;
+
+ protected:
+ QString text(const QPoint&);
+
+ public:
+ MSyncWhatsThis(QWidget* parent, Q3Header* h) : Q3WhatsThis(parent) {
+ header = h;
+ }
+ };
+
+class MidiSyncLViewItem : public Q3ListViewItem
+{
+ //MidiSyncInfo _syncInfo;
+ //MidiDevice* _device;
+ int _port;
+
+ //protected:
+ //int _port;
+
+ public:
+ MidiSyncLViewItem(Q3ListView* parent)
+ : Q3ListViewItem(parent) { _port = -1; _inDet = _curDet = _tickDet = false; }
+ //: QListViewItem(parent) { _device = 0; }
+
+ //MidiSyncLViewItem(QListView* parent, QListViewItem* after)
+ // : QListViewItem(parent, after) { _port = -1; }
+
+ //virtual QString text(int column) const;
+ //virtual unsigned tick() = 0;
+
+ //int _port;
+ bool _inDet;
+ bool _curDet;
+ bool _curMTCDet;
+ bool _tickDet;
+ bool _MRTDet;
+ bool _MMCDet;
+ bool _MTCDet;
+ int _recMTCtype;
+
+ int _idOut;
+ int _idIn;
+
+ bool _sendMC;
+ bool _sendMRT;
+ bool _sendMMC;
+ bool _sendMTC;
+ bool _recMC;
+ bool _recMRT;
+ bool _recMMC;
+ bool _recMTC;
+
+ bool _recRewOnStart;
+ //bool _sendContNotStart;
+
+ int port() const { return _port; }
+ void setPort(int port);
+ //MidiDevice* device() const { return _device; }
+ //void setDevice(MidiDevice* d);
+
+ //MidiSyncInfo& syncInfo() { return _syncInfo; }
+ void copyFromSyncInfo(const MidiSyncInfo &sp);
+ void copyToSyncInfo(MidiSyncInfo &sp);
+};
+
+//---------------------------------------------------------
+// MSConfig
+//---------------------------------------------------------
+
+class MidiSyncConfig : public MidiSyncConfigBase {
+ Q_OBJECT
+ MSyncHeaderTip* _synctooltip;
+
+ bool inHeartBeat;
+ bool _dirty;
+
+ void updateSyncInfoLV();
+ void closeEvent(QCloseEvent*);
+
+ private slots:
+ void heartBeat();
+ void syncChanged();
+ void extSyncChanged(bool v);
+ void ok();
+ void cancel();
+ void apply();
+ //void dlvClicked(QListViewItem*, const QPoint&, int);
+ void dlvClicked(int, Q3ListViewItem*, const QPoint&, int);
+ void dlvDoubleClicked(Q3ListViewItem*, const QPoint&, int);
+ //void renameOk(QListViewItem*, int, const QString&);
+ void songChanged(int);
+
+ //signals:
+ // void deleted(unsigned long);
+
+ public:
+ MidiSyncConfig(QWidget* parent=0, const char* name=0);
+ //MidiSyncConfig();
+ ~MidiSyncConfig();
+ void show();
+ void setDirty();
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/mittransposebase.ui b/muse2/muse/widgets/mittransposebase.ui
new file mode 100644
index 00000000..60cd4d9b
--- /dev/null
+++ b/muse2/muse/widgets/mittransposebase.ui
@@ -0,0 +1,117 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>MITTransposeBase</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>MITTransposeBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>423</width>
+ <height>50</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Midi Input Plugin: Transpose</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>onCheckBox</cstring>
+ </property>
+ <property name="text">
+ <string>On</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>TriggerKey</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="indent">
+ <number>5</number>
+ </property>
+ </widget>
+ <widget class="PitchEdit">
+ <property name="name">
+ <cstring>triggerKeySpinBox</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Transpose:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="indent">
+ <number>5</number>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>transposeLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="paletteBackgroundColor">
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </property>
+ <property name="frameShape">
+ <enum>Panel</enum>
+ </property>
+ <property name="lineWidth">
+ <number>2</number>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <property name="midLineWidth">
+ <number>2</number>
+ </property>
+ <property name="text">
+ <string>+0</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property name="indent">
+ <number>5</number>
+ </property>
+ </widget>
+ </hbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+<includes>
+ <include location="local" impldecl="in declaration">pitchedit.h</include>
+</includes>
+</UI>
+
diff --git a/muse2/muse/widgets/mixdowndialog.cpp b/muse2/muse/widgets/mixdowndialog.cpp
new file mode 100644
index 00000000..0681ca2e
--- /dev/null
+++ b/muse2/muse/widgets/mixdowndialog.cpp
@@ -0,0 +1,108 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: mixdowndialog.cpp,v 1.1.1.1 2003/10/27 18:55:02 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "mixdowndialog.h"
+#include "globals.h"
+#include <qtoolbutton.h>
+#include <qpushbutton.h>
+#include <q3filedialog.h>
+#include <qcombobox.h>
+#include <qlineedit.h>
+#include "wave.h"
+
+//---------------------------------------------------------
+// sndFileOpen
+// sf - old soundfile, used to preset file parameters
+//---------------------------------------------------------
+
+SndFile* getSndFile(const SndFile* sf, QWidget* parent, const char* name)
+ {
+ MixdownFileDialog* dialog = new MixdownFileDialog(sf, parent,
+ name, true);
+ dialog->exec();
+ SndFile* sndFile = dialog->sndFile();
+ delete dialog;
+ return sndFile;
+ }
+
+//---------------------------------------------------------
+// MixdownFileDialog
+//---------------------------------------------------------
+
+MixdownFileDialog::MixdownFileDialog(const SndFile* _sf,
+ QWidget* parent, const char* name, bool /*modal*/, Qt::WFlags fl)
+ : MixdownFileDialogBase(parent, name, true, fl)
+ {
+ sf = 0;
+ connect(buttonPath, SIGNAL(clicked()), SLOT(fdialog()));
+ if (_sf) {
+ int channels = _sf->channels();
+ int format = _sf->format();
+ switch(channels) {
+ case 1: channels = 1; break;
+ case 2: channels = 0; break;
+ case 6: channels = 2; break;
+ }
+ editPath->setText(_sf->path());
+ comboChannel->setCurrentItem(channels);
+ comboFormat->setCurrentItem(format);
+ }
+ }
+
+//---------------------------------------------------------
+// accept
+//---------------------------------------------------------
+
+void MixdownFileDialog::accept()
+ {
+ QString oldpath;
+ unsigned channel = comboChannel->currentItem();
+ unsigned format = comboFormat->currentItem();
+ switch (channel) {
+ case 0: channel = 2; break;
+ case 1: channel = 1; break;
+ case 2: channel = 6; break; // not implemented!
+ }
+ switch (format) {
+ case 0: // 16 bit wave
+ format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;
+ break;
+ case 1: // 24 bit wave
+ format = SF_FORMAT_WAV | SF_FORMAT_PCM_24;
+ break;
+ case 2: // 32 bit float wave
+ format = SF_FORMAT_WAV | SF_FORMAT_FLOAT;
+ break;
+ }
+ QString path = editPath->text();
+ if (path.isEmpty()) {
+ sf = 0;
+ reject();
+ return;
+ }
+ if (path.right(4) != ".wav")
+ path += ".wav";
+ sf = new SndFile(path);
+ sf->setFormat(format, channel, sampleRate);
+ done(1);
+ }
+
+//---------------------------------------------------------
+// fdialog
+//---------------------------------------------------------
+
+void MixdownFileDialog::fdialog()
+ {
+ QString oldpath;
+ if (sf)
+ oldpath = sf->path();
+ QString path = Q3FileDialog::getSaveFileName(
+ oldpath, tr("Wave Files (*.wav);;All Files (*)"), this, "MixdownFileDialog");
+ if (!path.isEmpty())
+ editPath->setText(path);
+ }
+
diff --git a/muse2/muse/widgets/mixdowndialog.h b/muse2/muse/widgets/mixdowndialog.h
new file mode 100644
index 00000000..95440b38
--- /dev/null
+++ b/muse2/muse/widgets/mixdowndialog.h
@@ -0,0 +1,37 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: mixdowndialog.h,v 1.1.1.1 2003/10/27 18:54:28 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __MIXDOWNDIALOG_H__
+#define __MIXDOWNDIALOG_H__
+
+#include "mixdowndialogbase.h"
+
+class SndFile;
+
+extern SndFile* getSndFile(const SndFile* sf, QWidget* parent,
+ const char* name);
+
+//---------------------------------------------------------
+// MixdownFileDialog
+//---------------------------------------------------------
+
+class MixdownFileDialog : public MixdownFileDialogBase {
+ Q_OBJECT
+ SndFile* sf;
+
+ private slots:
+ void fdialog();
+ virtual void accept();
+
+ public:
+ MixdownFileDialog(const SndFile* f, QWidget* parent = 0,
+ const char* name = 0, bool modal = false, Qt::WFlags fl = 0);
+ SndFile* sndFile() { return sf; }
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/mixdowndialogbase.ui b/muse2/muse/widgets/mixdowndialogbase.ui
new file mode 100644
index 00000000..830d2a8e
--- /dev/null
+++ b/muse2/muse/widgets/mixdowndialogbase.ui
@@ -0,0 +1,224 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>MixdownFileDialogBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>MixdownFileDialogBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>381</width>
+ <height>116</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Set Mixdown Wavefile</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="5">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>File Path</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Channel</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="1" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>Layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>editPath</cstring>
+ </property>
+ </widget>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>buttonPath</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="pixmap">
+ <pixmap>image0</pixmap>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>Stereo</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Mono</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>5.1</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>comboChannel</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="4">
+ <item>
+ <property name="text">
+ <string>wav,16 Bit</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>wav, 24 Bit</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>wav, 32 Bit (float)</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>comboFormat</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="3">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Format</string>
+ </property>
+ </widget>
+ <spacer row="1" column="2">
+ <property name="name" stdset="0">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="469">789c5d8fb10ac2301040f77c45e86d45ac955607f1131447411c2e97141daaa07510f1dfcd256992fadae1de23e9d1aa94c7c34e9695780e385c49d2051fb2d4afbe7f9fcedb8f28ea95b4ef5ad6c54c147349727fbf199ec1ceb070b01a566cb0c68655b3524b4b6a5989551b7e5891b5eb105b64555eb541725b1c60f1536c36b80aa9417636dd1de37fcbcea5cfc71d804a2178625316f4406a90e31b02254203d216f7db06c20ed77c1adb34a516526cd314ce6570fb6ec40ff56a68fe</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>MixdownFileDialogBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>MixdownFileDialogBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/mktest b/muse2/muse/widgets/mktest
new file mode 100644
index 00000000..08738898
--- /dev/null
+++ b/muse2/muse/widgets/mktest
@@ -0,0 +1,5 @@
+CPPFLAGS = -I/usr/qt/include -I..
+
+mops: mops.o musewidgetsplug.o
+ g++ -o mops mops.o musewidgetsplug.o -L . -l musewidgetsplugin -L /usr/qt/lib -l qt-mt
+
diff --git a/muse2/muse/widgets/mlabel.cpp b/muse2/muse/widgets/mlabel.cpp
new file mode 100644
index 00000000..a6c1b183
--- /dev/null
+++ b/muse2/muse/widgets/mlabel.cpp
@@ -0,0 +1,17 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: mlabel.cpp,v 1.1.1.1 2003/10/27 18:55:03 wschweer Exp $
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "mlabel.h"
+//Added by qt3to4:
+#include <QMouseEvent>
+
+
+void MLabel::mousePressEvent(QMouseEvent*)
+ {
+ emit mousePressed();
+ }
+
diff --git a/muse2/muse/widgets/mlabel.h b/muse2/muse/widgets/mlabel.h
new file mode 100644
index 00000000..490e8686
--- /dev/null
+++ b/muse2/muse/widgets/mlabel.h
@@ -0,0 +1,39 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: mlabel.h,v 1.1.1.1 2003/10/27 18:55:03 wschweer Exp $
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __MLABEL_H__
+#define __MLABEL_H__
+
+#include <qlabel.h>
+//Added by qt3to4:
+#include <QMouseEvent>
+
+//---------------------------------------------------------
+// MLabel
+// label widged which sends signal mousePressed
+// on mousePressEvent
+//---------------------------------------------------------
+
+class MLabel : public QLabel {
+
+ Q_OBJECT
+
+ protected:
+ virtual void mousePressEvent(QMouseEvent*);
+
+ signals:
+ void mousePressed();
+
+ public:
+ MLabel(const QString& txt, QWidget* parent, const char* name = 0)
+ : QLabel(txt, parent, name) {};
+
+ MLabel(QWidget* parent, const char* name = 0)
+ : QLabel(parent, name) {};
+ };
+#endif
+
diff --git a/muse2/muse/widgets/mmath.cpp b/muse2/muse/widgets/mmath.cpp
new file mode 100644
index 00000000..acc8e25a
--- /dev/null
+++ b/muse2/muse/widgets/mmath.cpp
@@ -0,0 +1,300 @@
+#include <cmath>
+#include "mmath.h"
+
+// QwtMath - a set of mathematical routines
+//
+// qwtGetMin -- Find the smallest value in an array
+// qwtGetMax -- Find the largest value in an array
+// qwtTwistArray -- invert the order of an array
+// qwtFloor125 -- Find the largest value fitting in a 1-2-5 pattern
+// qwtCeil125 -- Find the smallest value fitting in a 1-2-5 pattern
+// qwtChkMono -- Check for monotony
+// qwtLinSpace -- construct an array of equally spaced values
+// qwtLogSpace -- construct an array of logarithmically equally spaced values
+// qwtMax -- Return the largest of two values
+// qwtMin -- Return the smallest of two values
+// qwtAbs -- return the absolute value
+// qwtSign -- Return the sign of a number
+// qwtSqr -- Return the square of a number
+// qwtCopyArray -- Copy an array into another
+// qwtShiftArray -- Shift an array
+// qwtSwap -- Swap two values
+// qwtSort (1) -- Sort two values
+// qwtSort (2) -- Sort two values
+// qwtInt -- Return nearest integer
+// qwtLim -- Limit a values
+
+
+//------------------------------------------------------------
+//.F qwtGetMin
+// Find the smallest value in an array
+//
+//.u Syntax
+//.f double qwtGetMin(double *array, int size)
+//
+//.u Parameters
+//.p double *array, int size
+//
+//------------------------------------------------------------
+
+double qwtGetMin(double *array, int size)
+{
+ double rv;
+ int i;
+
+ if (size > 0)
+ {
+ rv = array[0];
+ for (i=1; i< size; i++)
+ rv = qwtMin(rv, array[i]);
+ return rv;
+ }
+ else
+ return 0.0;
+
+}
+
+
+//------------------------------------------------------------
+//
+//.F qwtGetMax
+// Find the largest value in an array
+//
+//.u Syntax
+//.f double qwtGetMax(double *array, int size)
+//
+//.u Parameters
+//.p double *array, int size
+//
+//------------------------------------------------------------
+double qwtGetMax(double *array, int size)
+{
+ double rv;
+ int i;
+
+ if (size > 0)
+ {
+ rv = array[0];
+ for (i=1; i< size; i++)
+ rv = qwtMax(rv, array[i]);
+ return rv;
+ }
+ else
+ return 0.0;
+
+}
+
+
+//------------------------------------------------------------
+//
+//.F qwtCeil125
+// Find the smallest value out of {1,2,5}*10^n with an integer number n
+// which is greater than or equal to x
+//
+//.u Syntax
+//.f double qwtCeil125(double x)
+//
+//.u Parameters
+//.p double x
+//
+//------------------------------------------------------------
+double qwtCeil125( double x)
+{
+ double lx, rv;
+ double p10, fr;
+ double sign = ( x > 0) ? 1.0 : -1.0;
+
+ if (x == 0.0) return 0.0;
+
+ lx = log10(fabs(x));
+ p10 = floor(lx);
+ fr = pow(10.0,lx - p10);
+ if (fr <=1.0)
+ fr = 1.0;
+ else if (fr <= 2.0)
+ fr = 2.0;
+ else if (fr <= 5.0)
+ fr = 5.0;
+ else
+ fr = 10.0;
+ rv = fr * pow(10.0,p10);
+ return sign * rv;
+}
+
+
+//------------------------------------------------------------
+//
+//.F qwtFloor125
+// Find the largest value out of {1,2,5}*10^n with an integer number n
+// which is smaller than or equal to x
+//
+//.u Syntax
+//.f double qwtFloor125(double x)
+//
+//.u Parameters
+//.p double x
+//
+//------------------------------------------------------------
+double qwtFloor125( double x)
+{
+ double lx, rv;
+ double p10, fr;
+ double sign = ( x > 0) ? 1.0 : -1.0;
+
+ if (x == 0.0) return 0.0;
+
+ lx = log10(fabs(x));
+ p10 = floor(lx);
+ fr = pow(10.0,lx - p10);
+ if (fr >= 10.0)
+ fr = 10.0;
+ else if (fr >= 5.0)
+ fr = 5.0;
+ else if (fr >= 2.0)
+ fr = 2.0;
+ else
+ fr = 1.0;
+ rv = fr * pow(10.0,p10);
+ return sign * rv;
+}
+
+
+//------------------------------------------------------------
+//
+//.F qwtChkMono
+// Checks if an array is a strictly monotonic sequence
+//
+//.u Syntax
+//.f int qwtChkMono(double *array, int size)
+//
+//.u Parameters
+//.p double *array -- pointer to a double array
+// int size -- size of the array
+//
+//.u Return Value
+//.t 0 -- sequence is not strictly monotonic
+// 1 -- sequence is strictly monotonically increasing
+// -1 -- sequence is strictly monotonically decreasing
+//
+//------------------------------------------------------------
+int qwtChkMono(double *array, int size)
+{
+ int rv, i;
+
+ if (size < 2) return 0;
+
+ rv = qwtSign(array[1] - array[0]);
+ for (i=1;i<size-1;i++)
+ {
+ if ( qwtSign(array[i+1] - array[i]) != rv )
+ {
+ rv = 0;
+ break;
+ }
+ }
+ return rv;
+
+}
+
+//------------------------------------------------------------
+//
+//.F qwtTwistArray
+// Invert the order of array elements
+//
+//.u Syntax
+//.f void qwtTwistArray(double *array, int size)
+//
+//.u Parameters
+//.p double *array, int size
+//
+//------------------------------------------------------------
+void qwtTwistArray(double *array, int size)
+{
+ int itmp;
+ int i, s2;
+ double dtmp;
+
+ s2 = size / 2;
+
+ for (i=0; i < s2; i++)
+ {
+ itmp = size - 1 - i;
+ dtmp = array[i];
+ array[i] = array[itmp];
+ array[itmp] = dtmp;
+ }
+
+}
+
+
+//------------------------------------------------------------
+//
+//.F qwtLinSpace
+// Create an array of equally spaced values
+//
+//.u Syntax
+//.f void qwtLinSpace(double *array, int size, double xmin, double xmax)
+//
+//.u Parameters
+//.p double *array -- where to put the values
+// int size -- size of the array
+// double xmin -- value associated with index 0
+// double xmax -- value associated with index (size-1)
+//
+//------------------------------------------------------------
+void qwtLinSpace(double *array, int size, double xmin, double xmax)
+{
+ int i, imax;
+ imax = size -1;
+ double step;
+
+ if (size > 0)
+ {
+ array[0] = xmin;
+ array[imax] = xmax;
+ step = (xmax - xmin) / double(imax);
+
+ for (i=1;i<imax;i++)
+ array[i] = xmin + double(i) * step;
+ }
+
+}
+
+
+//------------------------------------------------------------
+//
+//.F qwtLogSpace
+// Create an array of logarithmically equally spaced values
+//
+//.u Syntax
+//.f void qwtLogSpace(double *array, int size, double xmin, double xmax)
+//
+//.u Parameters
+//.p double *array -- where to put the values
+// int size -- size of the array
+// double xmin -- value associated with index 0
+// double xmax -- value associated with index (size-1)
+//------------------------------------------------------------
+void qwtLogSpace(double *array, int size, double xmin, double xmax)
+{
+ int i, imax;
+
+ double lxmin,lxmax;
+ double lstep;
+
+ imax = size -1;
+
+ if ((xmin <= 0.0) || (xmax <= 0.0) || (size <= 0))
+ return;
+
+ array[0] = xmin;
+ array[imax] = xmax;
+ lxmin = log(xmin);
+ lxmax = log(xmax);
+
+ lstep = (lxmax - lxmin) / double(imax);
+
+ for (i=1; i<imax;i++)
+ array[i] = exp(lxmin + double(i) * lstep);
+
+}
diff --git a/muse2/muse/widgets/mmath.h b/muse2/muse/widgets/mmath.h
new file mode 100644
index 00000000..51381047
--- /dev/null
+++ b/muse2/muse/widgets/mmath.h
@@ -0,0 +1,77 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: mmath.h,v 1.1.1.1 2003/10/27 18:54:47 wschweer Exp $
+//
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __MATH_H__
+#define __MATH_H__
+
+#define LOG_MIN 1.0e-100
+#define LOG_MAX 1.0e100
+
+double qwtCeil125(double x);
+double qwtFloor125(double x);
+void qwtTwistArray(double *array, int size);
+int qwtChkMono(double *array, int size);
+void qwtLinSpace(double *array, int size, double xmin, double xmax);
+void qwtLogSpace(double *array, int size, double xmin, double xmax);
+
+template <class T>
+inline int qwtSign(const T& x)
+{
+ if (x > T(0))
+ return 1;
+ else if (x < T(0))
+ return (-1);
+ else
+ return 0;
+}
+
+inline int qwtInt(double x)
+{
+ return int(rint(x));
+}
+
+template <class T>
+inline T qwtAbs (const T& x)
+{
+ return( x > T(0) ? x : -x );
+}
+
+template <class T>
+inline const T& qwtMax (const T& x, const T& y)
+{
+ return ( x > y ? x : y );
+}
+
+template <class T>
+inline const T& qwtMin ( const T& x, const T& y)
+{
+ return ( x < y ? x : y );
+}
+
+
+template <class T>
+T qwtLim(const T& x, const T& x1, const T& x2)
+{
+ T rv;
+ T xmin, xmax;
+
+ xmin = qwtMin(x1, x2);
+ xmax = qwtMax(x1, x2);
+
+ if ( x < xmin )
+ rv = xmin;
+ else if ( x > xmax )
+ rv = xmax;
+ else
+ rv = x;
+
+ return rv;
+}
+
+#endif
+
diff --git a/muse2/muse/widgets/moc_aboutbox.cpp b/muse2/muse/widgets/moc_aboutbox.cpp
new file mode 100644
index 00000000..3a5b4311
--- /dev/null
+++ b/muse2/muse/widgets/moc_aboutbox.cpp
@@ -0,0 +1,81 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'aboutbox.h'
+**
+** Created: Wed Oct 13 19:43:36 2010
+** by: The Qt Meta Object Compiler version 62 (Qt 4.6.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "aboutbox.h"
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'aboutbox.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 62
+#error "This file was generated using the moc from 4.6.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+static const uint qt_meta_data_AboutBox[] = {
+
+ // content:
+ 4, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 1, 14, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
+ 0, // flags
+ 0, // signalCount
+
+ // slots: signature, parameters, type, tag, flags
+ 10, 9, 9, 9, 0x09,
+
+ 0 // eod
+};
+
+static const char qt_meta_stringdata_AboutBox[] = {
+ "AboutBox\0\0languageChange()\0"
+};
+
+const QMetaObject AboutBox::staticMetaObject = {
+ { &QDialog::staticMetaObject, qt_meta_stringdata_AboutBox,
+ qt_meta_data_AboutBox, 0 }
+};
+
+#ifdef Q_NO_DATA_RELOCATION
+const QMetaObject &AboutBox::getStaticMetaObject() { return staticMetaObject; }
+#endif //Q_NO_DATA_RELOCATION
+
+const QMetaObject *AboutBox::metaObject() const
+{
+ return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
+}
+
+void *AboutBox::qt_metacast(const char *_clname)
+{
+ if (!_clname) return 0;
+ if (!strcmp(_clname, qt_meta_stringdata_AboutBox))
+ return static_cast<void*>(const_cast< AboutBox*>(this));
+ if (!strcmp(_clname, "Ui::AboutBox"))
+ return static_cast< Ui::AboutBox*>(const_cast< AboutBox*>(this));
+ return QDialog::qt_metacast(_clname);
+}
+
+int AboutBox::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ _id = QDialog::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ switch (_id) {
+ case 0: languageChange(); break;
+ default: ;
+ }
+ _id -= 1;
+ }
+ return _id;
+}
+QT_END_MOC_NAMESPACE
diff --git a/muse2/muse/widgets/moc_didyouknow.cpp b/muse2/muse/widgets/moc_didyouknow.cpp
new file mode 100644
index 00000000..45ca9eaa
--- /dev/null
+++ b/muse2/muse/widgets/moc_didyouknow.cpp
@@ -0,0 +1,81 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'didyouknow.h'
+**
+** Created: Wed Oct 13 19:43:38 2010
+** by: The Qt Meta Object Compiler version 62 (Qt 4.6.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "didyouknow.h"
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'didyouknow.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 62
+#error "This file was generated using the moc from 4.6.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+static const uint qt_meta_data_DidYouKnow[] = {
+
+ // content:
+ 4, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 1, 14, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
+ 0, // flags
+ 0, // signalCount
+
+ // slots: signature, parameters, type, tag, flags
+ 12, 11, 11, 11, 0x09,
+
+ 0 // eod
+};
+
+static const char qt_meta_stringdata_DidYouKnow[] = {
+ "DidYouKnow\0\0languageChange()\0"
+};
+
+const QMetaObject DidYouKnow::staticMetaObject = {
+ { &QDialog::staticMetaObject, qt_meta_stringdata_DidYouKnow,
+ qt_meta_data_DidYouKnow, 0 }
+};
+
+#ifdef Q_NO_DATA_RELOCATION
+const QMetaObject &DidYouKnow::getStaticMetaObject() { return staticMetaObject; }
+#endif //Q_NO_DATA_RELOCATION
+
+const QMetaObject *DidYouKnow::metaObject() const
+{
+ return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
+}
+
+void *DidYouKnow::qt_metacast(const char *_clname)
+{
+ if (!_clname) return 0;
+ if (!strcmp(_clname, qt_meta_stringdata_DidYouKnow))
+ return static_cast<void*>(const_cast< DidYouKnow*>(this));
+ if (!strcmp(_clname, "Ui::DidYouKnow"))
+ return static_cast< Ui::DidYouKnow*>(const_cast< DidYouKnow*>(this));
+ return QDialog::qt_metacast(_clname);
+}
+
+int DidYouKnow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ _id = QDialog::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ switch (_id) {
+ case 0: languageChange(); break;
+ default: ;
+ }
+ _id -= 1;
+ }
+ return _id;
+}
+QT_END_MOC_NAMESPACE
diff --git a/muse2/muse/widgets/moc_songinfo.cpp b/muse2/muse/widgets/moc_songinfo.cpp
new file mode 100644
index 00000000..9b35549c
--- /dev/null
+++ b/muse2/muse/widgets/moc_songinfo.cpp
@@ -0,0 +1,84 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'songinfo.h'
+**
+** Created: Wed Oct 13 19:43:37 2010
+** by: The Qt Meta Object Compiler version 62 (Qt 4.6.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "songinfo.h"
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'songinfo.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 62
+#error "This file was generated using the moc from 4.6.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+static const uint qt_meta_data_SongInfo[] = {
+
+ // content:
+ 4, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 2, 14, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
+ 0, // flags
+ 0, // signalCount
+
+ // slots: signature, parameters, type, tag, flags
+ 10, 9, 9, 9, 0x0a,
+ 29, 9, 9, 9, 0x09,
+
+ 0 // eod
+};
+
+static const char qt_meta_stringdata_SongInfo[] = {
+ "SongInfo\0\0buttonOk_clicked()\0"
+ "languageChange()\0"
+};
+
+const QMetaObject SongInfo::staticMetaObject = {
+ { &QDialog::staticMetaObject, qt_meta_stringdata_SongInfo,
+ qt_meta_data_SongInfo, 0 }
+};
+
+#ifdef Q_NO_DATA_RELOCATION
+const QMetaObject &SongInfo::getStaticMetaObject() { return staticMetaObject; }
+#endif //Q_NO_DATA_RELOCATION
+
+const QMetaObject *SongInfo::metaObject() const
+{
+ return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
+}
+
+void *SongInfo::qt_metacast(const char *_clname)
+{
+ if (!_clname) return 0;
+ if (!strcmp(_clname, qt_meta_stringdata_SongInfo))
+ return static_cast<void*>(const_cast< SongInfo*>(this));
+ if (!strcmp(_clname, "Ui::SongInfo"))
+ return static_cast< Ui::SongInfo*>(const_cast< SongInfo*>(this));
+ return QDialog::qt_metacast(_clname);
+}
+
+int SongInfo::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ _id = QDialog::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ switch (_id) {
+ case 0: buttonOk_clicked(); break;
+ case 1: languageChange(); break;
+ default: ;
+ }
+ _id -= 2;
+ }
+ return _id;
+}
+QT_END_MOC_NAMESPACE
diff --git a/muse2/muse/widgets/moc_ttoolbar.cpp b/muse2/muse/widgets/moc_ttoolbar.cpp
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/muse2/muse/widgets/moc_ttoolbar.cpp
diff --git a/muse2/muse/widgets/mtrackinfobase.ui b/muse2/muse/widgets/mtrackinfobase.ui
new file mode 100644
index 00000000..3d2b274a
--- /dev/null
+++ b/muse2/muse/widgets/mtrackinfobase.ui
@@ -0,0 +1,1067 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>MidiTrackInfoBase</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>MidiTrackInfoBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>149</width>
+ <height>555</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="caption">
+ <string>MusE: TrackInfo</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string></string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string></string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="resizeMode">
+ <enum>Minimum</enum>
+ </property>
+ <widget class="SpinBox" row="2" column="0">
+ <property name="name">
+ <cstring>iOutputChannel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maxValue">
+ <number>16</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>output channel</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>all midi events are sent to this output channel</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>trackNameLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>2</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter | WordBreak</set>
+ </property>
+ </widget>
+ <widget class="SpinBox" row="7" column="0">
+ <property name="name">
+ <cstring>iLen</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="suffix">
+ <string>%</string>
+ </property>
+ <property name="maxValue">
+ <number>200</number>
+ </property>
+ <property name="minValue">
+ <number>25</number>
+ </property>
+ <property name="value">
+ <number>100</number>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>iOutput</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>output port</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="1">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="indent">
+ <number>1</number>
+ </property>
+ <property name="text">
+ <string>Out ch</string>
+ </property>
+ </widget>
+ <widget class="SpinBox" row="6" column="0">
+ <property name="name">
+ <cstring>iVerz</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="specialValueText">
+ <string>off</string>
+ </property>
+ <property name="maxValue">
+ <number>1000</number>
+ </property>
+ <property name="minValue">
+ <number>-1000</number>
+ </property>
+ </widget>
+ <widget class="SpinBox" row="8" column="0">
+ <property name="name">
+ <cstring>iAnschl</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ <property name="minValue">
+ <number>-127</number>
+ </property>
+ <property name="value">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="SpinBox" row="9" column="0">
+ <property name="name">
+ <cstring>iKompr</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="prefix">
+ <string></string>
+ </property>
+ <property name="suffix">
+ <string>%</string>
+ </property>
+ <property name="maxValue">
+ <number>200</number>
+ </property>
+ <property name="minValue">
+ <number>25</number>
+ </property>
+ <property name="value">
+ <number>100</number>
+ </property>
+ </widget>
+ <widget class="SpinBox" row="5" column="0">
+ <property name="name">
+ <cstring>iTransp</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="specialValueText">
+ <string>off</string>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ <property name="minValue">
+ <number>-127</number>
+ </property>
+ <property name="value">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="1">
+ <property name="name">
+ <cstring>TextLabel9</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Transp.</string>
+ </property>
+ <property name="indent">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="1">
+ <property name="name">
+ <cstring>TextLabel10</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Delay</string>
+ </property>
+ <property name="indent">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="9" column="1">
+ <property name="name">
+ <cstring>TextLabel13</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Compr.</string>
+ </property>
+ <property name="indent">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="8" column="1">
+ <property name="name">
+ <cstring>TextLabel12</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Velocity</string>
+ </property>
+ <property name="indent">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="7" column="1">
+ <property name="name">
+ <cstring>TextLabel11</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Length</string>
+ </property>
+ <property name="indent">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="0">
+ <property name="name">
+ <cstring>routingLayout</cstring>
+ </property>
+ <hbox>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>iRButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>iR</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>input routing</string>
+ </property>
+ </widget>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>oRButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>oR</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>output routing</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="1">
+ <property name="name">
+ <cstring>routingLayout2</cstring>
+ </property>
+ <hbox>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>iChanDetectLabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>W</string>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>input detect</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Input detect indicator. Detects all note on-off, controller, aftertouch,
+ program change, and pitchbend (but not sysex or realtime) events
+ on the selected channels, on the selected midi ports.</string>
+ </property>
+ </widget>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>recEchoButton</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>14</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toggleButton">
+ <string>true</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Echo recording events to output.</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Echo</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>echoSpacer</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Maximum</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>4</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="10" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>WinPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <property name="lineWidth">
+ <number>1</number>
+ </property>
+ <property name="midLineWidth">
+ <number>1</number>
+ </property>
+ <property name="text">
+ <string>Channel Info</string>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="11" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>iPatch</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&lt;unknown&gt;</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Select instrument patch</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="12" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Record:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="12" column="1">
+ <property name="name">
+ <cstring>recLayout</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>recSpacer</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Maximum</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>4</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>recordButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>All</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Add all settings to song</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>allRecSpacer</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Maximum</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>4</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="SpinBox" row="13" column="0">
+ <property name="name">
+ <cstring>iHBank</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="specialValueText">
+ <string>off</string>
+ </property>
+ <property name="maxValue">
+ <number>128</number>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ <property name="value">
+ <number>0</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Bank Select MSB. Double-click on/off.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="13" column="1">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="lineWidth">
+ <number>1</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="text">
+ <string>H-Bank</string>
+ </property>
+ <property name="indent">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="SpinBox" row="14" column="0">
+ <property name="name">
+ <cstring>iLBank</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="specialValueText">
+ <string>off</string>
+ </property>
+ <property name="maxValue">
+ <number>128</number>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ <property name="value">
+ <number>0</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Bank Select LSB. Double-click on/off.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="14" column="1">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="lineWidth">
+ <number>1</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="text">
+ <string>L-Bank</string>
+ </property>
+ <property name="indent">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="SpinBox" row="15" column="0">
+ <property name="name">
+ <cstring>iProgram</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="specialValueText">
+ <string>off</string>
+ </property>
+ <property name="maxValue">
+ <number>128</number>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ <property name="value">
+ <number>0</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Program. Double-click on/off.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="15" column="1">
+ <property name="name">
+ <cstring>progLayout</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>progSpacer</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Maximum</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>4</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>progRecButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Prog.</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Add bank + prog settings to song</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>progRecSpacer</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Maximum</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>4</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="SpinBox" row="16" column="0">
+ <property name="name">
+ <cstring>iLautst</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="specialValueText">
+ <string>off</string>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ <property name="minValue">
+ <number>-1</number>
+ </property>
+ <property name="value">
+ <number>-1</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Volume. Double-click on/off.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="16" column="1">
+ <property name="name">
+ <cstring>volLayout</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>volSpacer</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Maximum</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>4</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>volRecButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Vol.</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Add vol setting to song</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>volRecSpacer</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Maximum</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>4</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="SpinBox" row="17" column="0">
+ <property name="name">
+ <cstring>iPan</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="specialValueText">
+ <string>off</string>
+ </property>
+ <property name="maxValue">
+ <number>63</number>
+ </property>
+ <property name="minValue">
+ <number>-65</number>
+ </property>
+ <property name="value">
+ <number>-65</number>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Change stereo position. Double-click on/off.</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Change stereo position. Double-click on/off.</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="17" column="1">
+ <property name="name">
+ <cstring>panLayout</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>panSpacer</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Maximum</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>4</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QToolButton">
+ <property name="name">
+ <cstring>panRecButton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Pan</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Add pan setting to song</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>panRecSpacer</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Maximum</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>4</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer row="18" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>SpinBox</class>
+ <header location="global">spinbox.h</header>
+ <sizehint>
+ <width>50</width>
+ <height>20</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="PNG" length="1002">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003b149444154388dad945f4c5b551cc73fe7dc4b7b4bcba0762d45c43114323599ee6192609c51d883892ce083f1718b3ebb185f8dc91e972cf39d2d2a2f1af664b6f1e0fe3863a0718969700eb0c52142da0242a1bd6d696f7bcff101585203ceb8fd9ece39f99dcff9fe7edf939f88c562ec465f5f9fe609442c161362173c3e3eae7b7a7ac8e7f36432196cdbfe4f907c3e4f2291201e8fe338cec3737357e9e8e828aded1e229d650e1f2d51754b082110124c13a4dc5ea341eb9dc284c0558a853f3ce8cb0677ef500fde7d39d2596679e326597b8e9abb85d7a770ab16ab6983ec5a05b487a70e36f0f4e10afe408d6a558310980108478dba4a1e8233990c5d474b64ed39aa3a8fe5f3317fbf81dbd70bccfeb205947632fd74f6589c1c6ea2f70d03a58ba0c1f2c9bdc1b66de3b8256a6e11cbe7e3ee1d181b590124fe2693aeee08d223c82c3a2c24b7b874bec8f26288774f7bd054504aef0dde6e99c0eb83f9fb266323cb80a27fb0958141836044605a2ee5523393371cc646fee2da37195aa35d0c0c5b4859ac03d7e91712dcaac5adab3650a3ff9d08ef7dd8404bb48869e5d958b5b87dadc4c9a1464e9f0d0326df7ebd86bd2e310cb1bf62d384d59441f2d70a070e1c60e09489929b988681bdd9cc97170bcc4c65595f71f8e0e3301337fc24a7732467831875a47f289652b0be5e4151e6d07316c1b0c0340d8ab92023e76d66a6b2840e36d2fb7a13fee632475e6edc367ea98a90fb98b7dd6310ca0328a44761582e1bab41befabcc0ec940d28bc5e93b68e064cab84e1d9beaeb48934eac1f53b01c1b000fca496aa54b61a99fcde61662a4b4b4b23d1680be9d426173e4df3602a48ea411989a4fd590f52a8fd156b05ed9d350e3defe3cfdf4b4c7ce770ea7d3fb9f520afbe1620daeee5c26735d20b9b9cfb6811a754a439e4e5c5639a4caa1e5caf586bfc0197b78702005cb9b4cae4cd3267ce8638fe964bd72b393e39d74928d242617303a756a37f284447770dcdbffc6384a05a85de1306e9a52057c7527c7131c3c42d3f475eb2303c82d4fc3276d6811db37efeb148723082d9b08f79f97c1e5729109a9a28307cc622d2d6cdf52b2b24efe548dedb00142009862cfa879ee1a71f6cec928353511472fbf4389148b0b0e0c108081412458dfe21c9f11351e67e7358595468246d1d1e5e38a6e9e851bc39d84ab502a669331dafec0d8ec7e3e8cb06e1a881d727d1ae40180a434a8c9db129a54126ad48a7358c2b4c5352c8c374bcccdab2bb37d8719cba79fab8211f9df218e0582c261e95f8bfc04f1a1e8bc5c4dfe0a190172af6a9690000000049454e44ae426082</data>
+ </image>
+</images>
+<tabstops>
+ <tabstop>iOutput</tabstop>
+ <tabstop>iOutputChannel</tabstop>
+ <tabstop>iTransp</tabstop>
+ <tabstop>iVerz</tabstop>
+ <tabstop>iLen</tabstop>
+ <tabstop>iAnschl</tabstop>
+ <tabstop>iKompr</tabstop>
+ <tabstop>iPatch</tabstop>
+ <tabstop>iHBank</tabstop>
+ <tabstop>iLBank</tabstop>
+ <tabstop>iProgram</tabstop>
+ <tabstop>iLautst</tabstop>
+ <tabstop>iPan</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/mtscale.cpp b/muse2/muse/widgets/mtscale.cpp
new file mode 100644
index 00000000..42d04275
--- /dev/null
+++ b/muse2/muse/widgets/mtscale.cpp
@@ -0,0 +1,425 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: mtscale.cpp,v 1.8.2.7 2009/05/03 04:14:01 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <values.h>
+
+#include <qpainter.h>
+#include <qtooltip.h>
+#include <qcursor.h>
+//Added by qt3to4:
+#include <QPixmap>
+#include <QMouseEvent>
+#include <QEvent>
+#include "mtscale.h"
+#include "midieditor.h"
+#include "globals.h"
+#include "song.h"
+#include "../marker/marker.h"
+#include "../marker/markerview.h"
+#include "icons.h"
+#include "gconfig.h"
+
+//---------------------------------------------------------
+// MTScale
+// Midi Time Scale
+//---------------------------------------------------------
+
+MTScale::MTScale(int* r, QWidget* parent, int xs, bool _mode)
+ : View(parent, xs, 1)
+ {
+ waveMode = _mode;
+ QToolTip::add(this, tr("bar scale"));
+ barLocator = false;
+ raster = r;
+ if (waveMode) {
+ pos[0] = tempomap.tick2frame(song->cpos());
+ pos[1] = tempomap.tick2frame(song->lpos());
+ pos[2] = tempomap.tick2frame(song->rpos());
+ }
+ else {
+ pos[0] = song->cpos();
+ pos[1] = song->lpos();
+ pos[2] = song->rpos();
+ }
+ pos[3] = MAXINT; // do not show
+ button = Qt::NoButton;
+ setMouseTracking(true);
+ connect(song, SIGNAL(posChanged(int, unsigned, bool)), SLOT(setPos(int, unsigned, bool)));
+ connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int)));
+ connect(song, SIGNAL(markerChanged(int)), SLOT(redraw()));
+
+ setFixedHeight(28);
+ setBg(QColor(0xe0, 0xe0, 0xe0));
+ }
+
+//---------------------------------------------------------
+// songChanged
+//---------------------------------------------------------
+
+void MTScale::songChanged(int type)
+ {
+ if (type & (SC_SIG|SC_TEMPO)) {
+ if ((type & SC_TEMPO) && waveMode) {
+ pos[0] = tempomap.tick2frame(song->cpos());
+ pos[1] = tempomap.tick2frame(song->lpos());
+ pos[2] = tempomap.tick2frame(song->rpos());
+ }
+ redraw();
+ }
+ }
+
+//---------------------------------------------------------
+// setPos
+//---------------------------------------------------------
+
+void MTScale::setPos(int idx, unsigned val, bool)
+ {
+ if (val == MAXINT) {
+ if (idx == 3) {
+ pos[3] = MAXINT;
+ redraw(QRect(0, 0, width(), height()));
+ }
+ return;
+ }
+ if (waveMode)
+ val = tempomap.tick2frame(val);
+ if (val == pos[idx])
+ return;
+ //unsigned opos = mapx(pos[idx] == MAXINT ? val : pos[idx]);
+ int opos = mapx(pos[idx] == MAXINT ? val : pos[idx]);
+ pos[idx] = val;
+ if (!isVisible())
+ return;
+
+ int tval = mapx(val);
+ int x = -9;
+ int w = 18;
+
+ if (tval < 0) { // tval<0 occurs whenever the window is scrolled left, so I switched to signed int (ml)
+ //printf("MTScale::setPos - idx:%d val:%d tval:%d opos:%d w:%d h:%d\n", idx, val, tval, opos, width(), height());
+
+ redraw(QRect(0,0,width(),height()));
+ return;
+ }
+ //if (opos > (unsigned int) tval) { //prevent compiler warning: comparison signed/unsigned
+ if (opos > tval) {
+ w += opos - tval;
+ x += tval;
+ }
+ else {
+ w += tval - opos;
+ x += opos;
+ }
+ //printf("MTScale::setPos idx:%d val:%d tval:%d opos:%d x:%d w:%d h:%d\n", idx, val, tval, opos, x, w, height());
+
+ redraw(QRect(x, 0, w, height()));
+ }
+
+//---------------------------------------------------------
+// viewMousePressEvent
+//---------------------------------------------------------
+
+void MTScale::viewMousePressEvent(QMouseEvent* event)
+ {
+ button = event->button();
+ viewMouseMoveEvent(event);
+ }
+
+//---------------------------------------------------------
+// viewMouseReleaseEvent
+//---------------------------------------------------------
+
+void MTScale::viewMouseReleaseEvent(QMouseEvent*)
+ {
+ button = Qt::NoButton;
+ }
+
+//---------------------------------------------------------
+// viewMouseMoveEvent
+//---------------------------------------------------------
+
+void MTScale::viewMouseMoveEvent(QMouseEvent* event)
+ {
+ if (event->state() & Qt::ShiftModifier )
+ setCursor(QCursor(Qt::PointingHandCursor));
+ else
+ setCursor(QCursor(Qt::ArrowCursor));
+
+ int x = event->x();
+ if (waveMode)
+ x = tempomap.frame2tick(x);
+ x = sigmap.raster(x, *raster);
+ if (x < 0)
+ x = 0;
+ emit timeChanged(x);
+ int i;
+ switch (button) {
+ case Qt::LeftButton:
+ i = 0;
+ break;
+ case Qt::MidButton:
+ i = 1;
+ break;
+ case Qt::RightButton:
+ i = 2;
+ break;
+ default:
+ return; // if no button is pressed the function returns here
+ }
+ Pos p(x, true);
+
+ if(i== 0 && (event->state() & Qt::ShiftModifier )) { // If shift +LMB we add a marker
+ Marker *alreadyExists = song->getMarkerAt(x);
+ if (!alreadyExists) {
+ song->addMarker(QString(""), x, false);
+ // Removed p3.3.43
+ // Song::addMarker() already emits a 'markerChanged'.
+ //emit addMarker(x);
+ }
+ }
+ else if (i== 2 && (event->state() & Qt::ShiftModifier )) { // If shift +RMB we remove a marker
+ Marker *toRemove = song->getMarkerAt(x);
+ if (toRemove)
+ song->removeMarker(toRemove);
+ else
+ printf("No marker to remove\n");
+ }
+ else
+ song->setPos(i, p); // all other cases: relocating one of the locators
+ }
+
+//---------------------------------------------------------
+// leaveEvent
+//---------------------------------------------------------
+
+void MTScale::leaveEvent(QEvent*)
+ {
+ emit timeChanged(MAXINT);
+ }
+
+//---------------------------------------------------------
+// draw
+//---------------------------------------------------------
+
+void MTScale::pdraw(QPainter& p, const QRect& r)
+ {
+ int x = r.x();
+ int w = r.width();
+
+ // Added by Tim. p3.3.6
+ //printf("MTScale::pdraw x:%d w:%d\n", x, w);
+
+ x -= 20;
+ w += 40; // wg. Text
+
+ //---------------------------------------------------
+ // draw Marker
+ //---------------------------------------------------
+
+ int y = 12;
+ p.setPen(Qt::black);
+ p.setFont(config.fonts[4]);
+ p.drawLine(r.x(), y+1, r.x() + r.width(), y+1);
+ QRect tr(r);
+ tr.setHeight(12);
+ MarkerList* marker = song->marker();
+ for (iMarker m = marker->begin(); m != marker->end(); ++m) {
+
+ int xp;
+ if(waveMode)
+ xp = mapx(m->second.frame());
+ else
+ xp = mapx(m->second.tick());
+ if (xp > x+w)
+ break;
+ int xe = r.x() + r.width();
+ iMarker mm = m;
+ ++mm;
+ if (mm != marker->end()) {
+
+ if(waveMode)
+ xe = mapx(tempomap.tick2frame(mm->first));
+ else
+ xe = mapx(mm->first);
+ }
+
+ QRect tr(xp, 0, xe-xp, 13);
+ //if (m->second.current())
+ // p.fillRect(tr, white);
+
+ QRect wr = r.intersect(tr);
+ //if (r.intersects(tr))
+ if(!wr.isEmpty())
+ {
+ if (m->second.current())
+ {
+ //p.fillRect(tr, white);
+ p.fillRect(wr, Qt::white);
+ }
+
+ int x2;
+ //iMarker mm = m;
+ //++mm;
+ if (mm != marker->end())
+ {
+ if(waveMode)
+ x2 = mapx(tempomap.tick2frame(mm->first));
+ else
+ x2 = mapx(mm->first);
+ }
+ else
+ x2 = xp+200;
+
+ //printf("MTScale::pdraw marker %s xp:%d y:%d h:%d r.x:%d r.w:%d\n", m->second.name().latin1(), xp, height(), y, r.x(), r.width());
+
+ // Must be reasonable about very low negative x values! With long songs > 15min
+ // and with high horizontal magnification, 'ghost' drawings appeared,
+ // apparently the result of truncation later (xp = -65006 caused ghosting
+ // at bar 245 with magnification at max.), even with correct clipping region
+ // applied to painter in View::paint(). Tim. Apr 5 2009
+ // Quote: "Warning: Note that QPainter does not attempt to work around
+ // coordinate limitations in the underlying window system. Some platforms may
+ // behave incorrectly with coordinates as small as +/-4000."
+ if(xp >= -32)
+ p.drawPixmap(xp, 0, *flagIconS);
+
+ if(xp >= -1023)
+ {
+ QRect r = QRect(xp+10, 0, x2-xp, 12);
+ p.setPen(Qt::black);
+ p.drawText(r, Qt::AlignLeft|Qt::AlignVCenter, m->second.name());
+ }
+
+ if(xp >= 0)
+ {
+ p.setPen(Qt::green);
+ p.drawLine(xp, y, xp, height());
+ }
+ }
+ }
+
+ //---------------------------------------------------
+ // draw location marker
+ //---------------------------------------------------
+
+ int h = height()-12;
+
+ if (barLocator) {
+ p.setPen(Qt::red);
+ int xp = mapx(pos[0]);
+ if (xp >= x && xp < x+w)
+ p.drawLine(xp, y, xp, h);
+ p.setPen(Qt::blue);
+ xp = mapx(pos[1]);
+ if (xp >= x && xp < x+w)
+ p.drawLine(xp, y, xp, h);
+ xp = mapx(pos[2]);
+ if (xp >= x && xp < x+w)
+ p.drawLine(xp, y, xp, h);
+ }
+ else {
+ for (int i = 0; i < 3; ++i) {
+ int xp = mapx(pos[i]);
+ if (xp >= x && xp < x+w) {
+ QPixmap* pm = markIcon[i];
+ p.drawPixmap(xp - pm->width()/2, y-1, *pm);
+ }
+ }
+ }
+ p.setPen(Qt::black);
+ if (pos[3] != MAXINT) {
+ int xp = mapx(pos[3]);
+ if (xp >= x && xp < x+w)
+ p.drawLine(xp, 0, xp, height());
+ }
+
+ unsigned ctick;
+ int bar1, bar2, beat;
+ unsigned tick;
+
+ if (waveMode) {
+ ctick = tempomap.frame2tick(mapxDev(x));
+ sigmap.tickValues(ctick, &bar1, &beat, &tick);
+ sigmap.tickValues(tempomap.frame2tick(mapxDev(x+w)),
+ &bar2, &beat, &tick);
+ }
+ else {
+ ctick = mapxDev(x);
+ sigmap.tickValues(ctick, &bar1, &beat, &tick);
+ sigmap.tickValues(mapxDev(x+w), &bar2, &beat, &tick);
+ }
+
+//printf("bar %d %d-%d=%d\n", bar, ntick, stick, ntick-stick);
+
+ int stick = sigmap.bar2tick(bar1, 0, 0);
+ int ntick;
+ for (int bar = bar1; bar <= bar2; bar++, stick = ntick) {
+ ntick = sigmap.bar2tick(bar+1, 0, 0);
+ int tpix, a, b=0;
+ if (waveMode) {
+ a = tempomap.tick2frame(ntick);
+ b = tempomap.tick2frame(stick);
+ tpix = rmapx(a - b);
+ }
+ else {
+ tpix = rmapx(ntick - stick);
+ }
+ if (tpix < 64) {
+ // donÃŊÂŋÂ―t show beats if measure is this small
+ int n = 1;
+ if (tpix < 32)
+ n = 2;
+ if (tpix <= 16)
+ n = 4;
+ if (tpix < 8)
+ n = 8;
+ if (tpix <= 4)
+ n = 16;
+ if (tpix <= 2)
+ n = 32;
+ if (bar % n)
+ continue;
+ p.setFont(config.fonts[3]);
+ int x = mapx(waveMode ? b : stick);
+ QString s;
+ s.setNum(bar + 1);
+ p.drawLine(x, y+1, x, y+1+h);
+// QRect r = QRect(x+2, y, 0, h);
+ QRect r = QRect(x+2, y, 1000, h);
+ p.drawText(r, Qt::AlignLeft|Qt::AlignVCenter|Qt::TextDontClip, s);
+ }
+ else {
+ int z, n;
+ sigmap.timesig(stick, z, n);
+ for (int beat = 0; beat < z; beat++) {
+ int xx = sigmap.bar2tick(bar, beat, 0);
+ if (waveMode)
+ xx = tempomap.tick2frame(xx);
+ int xp = mapx(xx);
+ QString s;
+ QRect r(xp+2, y, 1000, h);
+ int y1;
+ int num;
+ if (beat == 0) {
+ num = bar + 1;
+ y1 = y + 1;
+ p.setFont(config.fonts[3]);
+ }
+ else {
+ num = beat + 1;
+ y1 = y + 7;
+ p.setFont(config.fonts[1]);
+ r.setY(y+3);
+ }
+ s.setNum(num);
+ p.drawLine(xp, y1, xp, y+1+h);
+ p.drawText(r, Qt::AlignLeft|Qt::AlignVCenter|Qt::TextDontClip, s);
+ }
+ }
+ }
+ }
+
diff --git a/muse2/muse/widgets/mtscale.h b/muse2/muse/widgets/mtscale.h
new file mode 100644
index 00000000..c632a24b
--- /dev/null
+++ b/muse2/muse/widgets/mtscale.h
@@ -0,0 +1,53 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: mtscale.h,v 1.3 2004/04/27 22:27:06 spamatica Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __MTSCALE_H__
+#define __MTSCALE_H__
+
+#include "view.h"
+//Added by qt3to4:
+#include <QMouseEvent>
+#include <QEvent>
+
+class QPainter;
+
+//---------------------------------------------------------
+// MTScale
+// scale for midi track
+//---------------------------------------------------------
+
+class MTScale : public View {
+ Q_OBJECT
+ int* raster;
+ unsigned pos[4];
+ int button;
+ bool barLocator;
+ bool waveMode;
+
+ private slots:
+ void songChanged(int);
+
+ protected:
+ virtual void pdraw(QPainter&, const QRect&);
+ virtual void viewMousePressEvent(QMouseEvent* event);
+ virtual void viewMouseMoveEvent(QMouseEvent* event);
+ virtual void viewMouseReleaseEvent(QMouseEvent* event);
+ virtual void leaveEvent(QEvent*e);
+
+ signals:
+ void timeChanged(unsigned);
+ //void addMarker(int);
+
+ public slots:
+ void setPos(int, unsigned, bool);
+
+ public:
+ MTScale(int* raster, QWidget* parent, int xscale, bool f = false);
+ void setBarLocator(bool f) { barLocator = f; }
+ };
+#endif
+
diff --git a/muse2/muse/widgets/musewidgetsplug.cpp b/muse2/muse/widgets/musewidgetsplug.cpp
new file mode 100644
index 00000000..4a7f5f24
--- /dev/null
+++ b/muse2/muse/widgets/musewidgetsplug.cpp
@@ -0,0 +1,539 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: musewidgetsplug.cpp,v 1.9.2.9 2009/12/01 03:52:40 terminator356 Exp $
+// (C) Copyright 2001-2003 Werner Schweer (ws@seh.de)
+//=========================================================
+
+// this file makes some of the MusE widgets available
+// to QT-Designer
+
+#include <qwidgetplugin.h>
+//Added by qt3to4:
+#include <QPixmap>
+#include "posedit.h"
+#include "poslabel.h"
+#include "pitchedit.h"
+#include "pitchlabel.h"
+#include "sig.h"
+#include "tempo.h"
+#include "tempolabel.h"
+#include "sigedit.h"
+#include "slider.h"
+#include "doublelabel.h"
+#include "checkbox.h"
+#include "combobox.h"
+#include "gconfig.h"
+
+int sampleRate = 44100; // some dummy values to get things compiled/linked
+int division = 384;
+int mtcType = 0;
+bool hIsB = false;
+
+static const char* vall[] = {
+ "c","c#","d","d#","e","f","f#","g","g#","a","a#","h"
+ };
+static const char* valu[] = {
+ "C","C#","D","D#","E","F","F#","G","G#","A","A#","H"
+ };
+
+GlobalConfigValues config = {
+ {
+ QColor(0xff, 0xff, 0xff), // palette
+ QColor(0xff, 0xff, 0xff),
+ QColor(0xff, 0xff, 0xff),
+ QColor(0xff, 0xff, 0xff),
+ QColor(0xff, 0xff, 0xff),
+ QColor(0xff, 0xff, 0xff),
+ QColor(0xff, 0xff, 0xff),
+ QColor(0xff, 0xff, 0xff),
+ QColor(0xff, 0xff, 0xff),
+ QColor(0xff, 0xff, 0xff),
+ QColor(0xff, 0xff, 0xff),
+ QColor(0xff, 0xff, 0xff),
+ QColor(0xff, 0xff, 0xff),
+ QColor(0xff, 0xff, 0xff),
+ QColor(0xff, 0xff, 0xff),
+ QColor(0xff, 0xff, 0xff)
+ },
+ {
+ QColor(255, 232, 140), // part colors
+ QColor(0xff, 0x00, 0x00),
+ QColor(0x00, 0xff, 0x00),
+ QColor(0x00, 0x00, 0xff),
+ QColor(0xff, 0xff, 0x00),
+ QColor(0x00, 0xff, 0xff),
+ QColor(0xff, 0x00, 0xff),
+ QColor(0x9f, 0xc7, 0xef),
+ QColor(0x00, 0xff, 0x7f),
+ QColor(0x7f, 0x00, 0x00),
+ QColor(0x00, 0x7f, 0x00),
+ QColor(0x00, 0x00, 0x7f),
+ QColor(0x7f, 0x7f, 0x3f),
+ QColor(0x00, 0x7f, 0x7f),
+ QColor(0x7f, 0x00, 0x7f),
+ QColor(0x00, 0x7f, 0xff),
+ QColor(0x00, 0x3f, 0x3f)
+ },
+ QColor(0, 0, 255), // transportHandleColor;
+ QColor(255, 0, 0), // bigTimeForegroundColor;
+ QColor(0, 0, 0), // bigTimeBackgroundColor;
+ QColor(200, 200, 200), // waveEditBackgroundColor;
+ {
+ QFont(QString("arial"), 10, QFont::Normal),
+ QFont(QString("arial"), 8, QFont::Normal),
+ QFont(QString("arial"), 10, QFont::Normal),
+ QFont(QString("arial"), 10, QFont::Bold),
+ QFont(QString("arial"), 8, QFont::Bold), // timescale numbers
+ QFont(QString("Lucidatypewriter"), 14, QFont::Bold),
+ QFont(QString("arial"), 8, QFont::Bold, true) // Mixer strip labels. Looks and fits better with bold + italic than bold alone,
+ // at the price of only few more pixels than Normal mode.
+ },
+ QColor(0xff, 0xff, 0xff), // trackBg;
+ QColor(0x80, 0xff, 0x80), // selected track Bg;
+ QColor(0x00, 0x00, 0x00), // selected track Fg;
+ QColor(0xff, 0xff, 0xff), // midiTrackBg;
+ QColor(255, 170, 0), // ctrlGraphFg; Medium orange
+ QColor(0xff, 0xff, 0xff), // drumTrackBg;
+ QColor(0xff, 0xff, 0xff), // waveTrackBg;
+ QColor(0xff, 0xff, 0xff), // outputTrackBg;
+ QColor(0xff, 0xff, 0xff), // inputTrackBg;
+ QColor(0xff, 0xff, 0xff), // groupTrackBg;
+ QColor(0xff, 0xff, 0xff), // auxTrackBg;
+ QColor(0xff, 0xff, 0xff), // synthTrackBg;
+ QColor(98, 124, 168), // part canvas bg
+ QColor(98, 124, 168), // mixerBg;
+
+ 384, // division;
+ 1024, // rtcTicks
+ -60, // int minMeter;
+ -60.0, // double minSlider;
+ false, // use Jack freewheel
+ 20, // int guiRefresh;
+ QString(""), // helpBrowser
+ true, // extendedMidi
+ 384, // division for smf export
+ QString(""), // copyright string for smf export
+ 1, // smf export file format
+ false, // midi export file 2 byte timesigs instead of 4
+ true, // optimize midi export file note offs
+ true, // Split imported tracks into multiple parts.
+ 1, // startMode
+ QString(""), // start song path
+ 384, // gui division
+ QRect(0, 0, 400, 300), // GeometryMain;
+ QRect(0, 0, 200, 100), // GeometryTransport;
+ QRect(0, 0, 600, 200), // GeometryBigTime;
+ QRect(0, 0, 400, 300), // GeometryPianoroll;
+ QRect(0, 0, 400, 300), // GeometryDrumedit;
+ //QRect(0, 0, 300, 500), // GeometryMixer; // Obsolete
+ {
+ QString("Mixer A"),
+ QRect(0, 0, 300, 500), // Mixer1
+ true, true, true, true,
+ true, true, true, true
+ },
+ {
+ QString("Mixer B"),
+ QRect(200, 200, 300, 500), // Mixer2
+ true, true, true, true,
+ true, true, true, true
+ },
+ true, // TransportVisible;
+ false, // BigTimeVisible;
+ false, // mixer1Visible;
+ false, // mixer2Visible;
+
+ false, // markerVisible; // This line was missing 2007-01-08 (willyfoobar)
+ true, // showSplashScreen
+ 1, // canvasShowPartType 1 - names, 2 events
+ 5, // canvasShowPartEvent
+ false, // canvasShowGrid;
+ QString(""), // canvasBgPixmap;
+ QString(""), // style
+ QString(""), // externalWavEditor //this line was missing 2007-01-08 (willyfoobar)
+ false, // useOldStyleStopShortCut
+ true, // moveArmedCheckBox
+ true, // useDenormalBias
+ false, // useOutputLimiter
+ true, // showDidYouKnow
+ false // vstInPlace Enable VST in-place processing
+ 44100, // Dummy audio preferred sample rate
+ 512 // Dummy audio buffer size
+ };
+
+//---------------------------------------------------------
+// pitch2string
+//---------------------------------------------------------
+
+QString pitch2string(int v)
+ {
+ if (v < 0 || v > 127)
+ return QString("----");
+ int octave = (v / 12) - 2;
+ QString o;
+ o.sprintf("%d", octave);
+ int i = v % 12;
+ QString s(octave < 0 ? valu[i] : vall[i]);
+ if (hIsB) {
+ if (s == "h")
+ s = "b";
+ else if (s == "H")
+ s = "B";
+ }
+ return s + o;
+ }
+
+
+/* XPM */
+static const char* slider_pixmap[]={
+"22 22 50 1",
+". c None",
+"f c #004005",
+"g c #004007",
+"h c #004107",
+"m c #004108",
+"j c #00430a",
+"E c #00501f",
+"s c #005021",
+"e c #014006",
+"l c #024006",
+"F c #095e34",
+"D c #0b572a",
+"k c #0b582b",
+"n c #0f5328",
+"u c #12562d",
+"o c #155a35",
+"p c #165c38",
+"q c #165c39",
+"i c #17501a",
+"I c #175522",
+"r c #18603f",
+"N c #18795e",
+"t c #187a60",
+"R c #1e5a29",
+"y c #22633d",
+"O c #307755",
+"B c #408262",
+"v c #439191",
+"G c #468667",
+"d c #4c7a51",
+"H c #4d8a6c",
+"J c #569174",
+"C c #599276",
+"P c #5e967a",
+"A c #63b1c2",
+"V c #659477",
+"Q c #659b80",
+"S c #6da087",
+"w c #70b2bc",
+"x c #72b5c0",
+"z c #74b7c3",
+"K c #79a891",
+"a c #7ea48a",
+"T c #8cb4a0",
+"L c #a3c3b3",
+"M c #b7d8d1",
+"U c #bedcd5",
+"c c #c3d2c3",
+"b c #f1f5f1",
+"# c #ffffff",
+"......................",
+"......................",
+"......................",
+"......................",
+"......................",
+"......###a............",
+"......#bcad...........",
+"......#bcad...........",
+"......#bcad...........",
+"..efgh#bcaihhhhhhhjk..",
+".lmnop#bcaippppppqrst.",
+".huvwx#bcayxxxxxxzABC.",
+".DEFGH#bcaIHHHHHHJKLM.",
+"..NOPQ#bcaRQQQQQQSTU..",
+"......#bcad...........",
+"......#bcad...........",
+"......#bcad...........",
+"......VVVVd...........",
+".......dddd...........",
+"......................",
+"......................",
+"......................"};
+static const char *posedit_pixmap[] = {
+ "22 22 8 1",
+ " c Gray100",
+ ". c Gray97",
+ "X c #4f504f",
+ "o c #00007f",
+ "O c Gray0",
+ "+ c none",
+ "@ c Gray0",
+ "# c Gray0",
+ "++++++++++++++++++++++",
+ "++++++++++++++++++++++",
+ "++++++++++++++++++++++",
+ "++++++++++++++++++++++",
+ "+OOOOOOOOOOOOOOOOOOOO+",
+ "OOXXXXXXXXXXXXXXXXXXOO",
+ "OXX. OO OO O",
+ "OX. oo O O",
+ "OX. oo O .O",
+ "OX ooo oooo O O",
+ "OX oo oo oo O O",
+ "OX oooo oo oo O O",
+ "OX oo oo oo oo O O",
+ "OX oo oo oo oo O O",
+ "OX oooo oooo O O",
+ "OX OO OO O",
+ "OO..................OO",
+ "+OOOOOOOOOOOOOOOOOOOO+",
+ "++++++++++++++++++++++",
+ "++++++++++++++++++++++",
+ "++++++++++++++++++++++",
+ "++++++++++++++++++++++"
+ };
+
+static const char *pitchedit_pixmap[] = {
+ "22 22 8 1",
+ " c Gray100",
+ ". c Gray97",
+ "X c #4f504f",
+ "o c #00007f",
+ "O c Gray0",
+ "+ c none",
+ "@ c Gray0",
+ "# c Gray0",
+ "++++++++++++++++++++++",
+ "++++++++++++++++++++++",
+ "++++++++++++++++++++++",
+ "++++++++++++++++++++++",
+ "+OOOOOOOOOOOOOOOOOOOO+",
+ "OOXXXXXXXXXXXXXXXXXXOO",
+ "OXX. OO OO O",
+ "OX. o O O",
+ "OX. oo O .O",
+ "OX o o O O",
+ "OX o O O",
+ "OX o o O O",
+ "OX oooo O O",
+ "OX o O O",
+ "OX O O",
+ "OX OO OO O",
+ "OO..................OO",
+ "+OOOOOOOOOOOOOOOOOOOO+",
+ "++++++++++++++++++++++",
+ "++++++++++++++++++++++",
+ "++++++++++++++++++++++",
+ "++++++++++++++++++++++"
+ };
+
+//---------------------------------------------------------
+// MusEPlugin
+//---------------------------------------------------------
+
+class MusEPlugin : public QWidgetPlugin {
+ public:
+ MusEPlugin() {}
+ ~MusEPlugin() {}
+ QStringList keys() const;
+ QWidget* create(const QString& key, QWidget* parent=0,
+ const char* name = 0);
+ QString group(const QString& key) const;
+ QIcon iconSet(const QString& key) const;
+ QString includeFile(const QString& key) const;
+ QString toolTip(const QString& key) const;
+ QString whatsThis(const QString& key) const;
+ bool isContainer(const QString& key) const;
+ };
+
+//---------------------------------------------------------
+// keys
+//---------------------------------------------------------
+
+QStringList MusEPlugin::keys() const
+ {
+ QStringList list;
+ list << QString("PosEdit")
+ << QString("PitchEdit")
+ << QString("PosLabel")
+ << QString("PitchLabel")
+ << QString("TempoLabel")
+ << QString("TempoEdit")
+ << QString("SigEdit")
+ << QString("Slider")
+ << QString("DoubleLabel")
+ << QString("CheckBox")
+ << QString("ComboBox")
+ ;
+ return list;
+ }
+
+//---------------------------------------------------------
+// create
+//---------------------------------------------------------
+
+QWidget* MusEPlugin::create(const QString& key, QWidget* parent,
+ const char* name)
+ {
+ if (key == QString("PosEdit"))
+ return new PosEdit(parent, name);
+ else if (key == QString("PitchEdit"))
+ return new PitchEdit(parent, name);
+ else if (key == QString("PitchLabel"))
+ return new PitchLabel(parent, name);
+ else if (key == QString("PosLabel"))
+ return new PosLabel(parent, name);
+ else if (key == QString("TempoLabel"))
+ return new TempoLabel(parent, name);
+ else if (key == QString("TempoEdit"))
+ return new TempoEdit(parent, name);
+ else if (key == QString("SigEdit"))
+ return new SigEdit(parent, name);
+ else if (key == QString("Slider"))
+ return new Slider(parent, name);
+ else if (key == QString("DoubleLabel"))
+ return new DoubleLabel(parent, name);
+ else if (key == QString("CheckBox"))
+ return new CheckBox(parent, -1, name);
+ else if (key == QString("ComboBox"))
+ return new ComboBox(parent, name);
+ return 0;
+ }
+
+//---------------------------------------------------------
+// group
+//---------------------------------------------------------
+
+QString MusEPlugin::group(const QString& /*key*/) const
+ {
+ return QString("MusE");
+ }
+
+//---------------------------------------------------------
+// iconSet
+//---------------------------------------------------------
+
+QIcon MusEPlugin::iconSet(const QString& key) const
+ {
+ if (key == "PosEdit" || key == "PosLabel")
+ return QIcon(QPixmap(posedit_pixmap));
+ else if (key == "PitchEdit" || key == "PitchLabel")
+ return QIcon(QPixmap(pitchedit_pixmap));
+ else if (key == "TempoEdit" || key == "TempoLabel")
+ return QIcon(QPixmap(pitchedit_pixmap));
+ else if (key == "SigEdit")
+ return QIcon(QPixmap(pitchedit_pixmap));
+ else if (key == QString("Slider"))
+ return QIcon(QPixmap(slider_pixmap));
+// else if (key == QString("CheckBox"))
+// return QIconSet(QPixmap(slider_pixmap));
+// else if (key == QString("ComboBox"))
+// return QIconSet(QPixmap(slider_pixmap));
+ return QIcon();
+ }
+
+//---------------------------------------------------------
+// includeFile
+//---------------------------------------------------------
+
+QString MusEPlugin::includeFile(const QString& key) const
+ {
+ if (key == QString("PosEdit"))
+ return QString("posedit.h");
+ else if (key == QString("PitchEdit"))
+ return QString("pitchedit.h");
+ else if (key == QString("PitchLabel"))
+ return QString("pitchlabel.h");
+ else if (key == QString("PosLabel"))
+ return QString("poslabel.h");
+ else if (key == QString("TempoLabel"))
+ return QString("tempolabel.h");
+ else if (key == QString("TempoEdit"))
+ return QString("tempolabel.h");
+ else if (key == QString("SigEdit"))
+ return QString("sigedit.h");
+ else if (key == QString("Slider"))
+ return QString("slider.h");
+ else if (key == QString("DoubleLabel"))
+ return QString("dentry.h");
+ else if (key == QString("CheckBox"))
+ return QString("checkbox.h");
+ else if (key == QString("ComboBox"))
+ return QString("combobox.h");
+ return QString::null;
+ }
+
+//---------------------------------------------------------
+// toolTip
+//---------------------------------------------------------
+
+QString MusEPlugin::toolTip (const QString& key) const
+ {
+ if (key == QString("PosEdit"))
+ return QString("midi time position editor");
+ else if (key == QString("PitchEdit"))
+ return QString("midi pitch spinbox");
+ else if (key == QString("PitchLabel"))
+ return QString("midi pitch label");
+ else if (key == QString("PosLabel"))
+ return QString("midi time position label");
+ else if (key == QString("TempoLabel"))
+ return QString("midi tempo label");
+ else if (key == QString("TempoEdit"))
+ return QString("midi tempo spinbox");
+ else if (key == QString("SigEdit"))
+ return QString("midi signature spinbox");
+ else if (key == QString("Slider"))
+ return QString("slider for double values");
+ else if (key == QString("DoubleLabel"))
+ return QString("entry/label for double values");
+ else if (key == QString("CheckBox"))
+ return QString("checkbox with id");
+ else if (key == QString("ComboBox"))
+ return QString("combobox with id");
+ return QString::null;
+ }
+
+//---------------------------------------------------------
+// whatsThis
+//---------------------------------------------------------
+
+QString MusEPlugin::whatsThis (const QString& key) const
+ {
+ if (key == QString("PosEdit"))
+ return QString("midi time position editor");
+ else if (key == QString("PitchEdit"))
+ return QString("midi pitch spinbox");
+ else if (key == QString("PitchLabel"))
+ return QString("midi pitch label");
+ else if (key == QString("PosLabel"))
+ return QString("midi time position label");
+ else if (key == QString("TempoLabel"))
+ return QString("midi tempo label");
+ else if (key == QString("TempoEdit"))
+ return QString("midi tempo spinbox");
+ else if (key == QString("SigEdit"))
+ return QString("midi signature spinbox");
+ else if (key == QString("Slider"))
+ return QString("slider for double values");
+ else if (key == QString("DoubleLabel"))
+ return QString("entry/label for double values");
+ else if (key == QString("CheckBox"))
+ return QString("checkbox with id");
+ else if (key == QString("ComboBox"))
+ return QString("combobox with id");
+ return QString::null;
+ }
+
+//---------------------------------------------------------
+// isContainer
+//---------------------------------------------------------
+
+bool MusEPlugin::isContainer (const QString& /*key*/) const
+ {
+ return false;
+ }
+
+Q_EXPORT_PLUGIN(MusEPlugin)
+
diff --git a/muse2/muse/widgets/nentry.cpp b/muse2/muse/widgets/nentry.cpp
new file mode 100644
index 00000000..c4006112
--- /dev/null
+++ b/muse2/muse/widgets/nentry.cpp
@@ -0,0 +1,407 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: nentry.cpp,v 1.1.1.1.2.1 2008/05/21 00:28:54 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <qlayout.h>
+#include <qlabel.h>
+//Added by qt3to4:
+#include <Q3HBoxLayout>
+#include <QContextMenuEvent>
+#include <QWheelEvent>
+#include <Q3Frame>
+#include <QMouseEvent>
+#include <QKeyEvent>
+#include "nentry.h"
+#include <stdio.h>
+#include <qtimer.h>
+#include <qevent.h>
+#include "globals.h"
+#include <qapplication.h>
+#include <qcursor.h>
+
+#define TIMER1 400
+#define TIMER2 200
+#define TIMEC 7
+#define TIMER3 100
+#define TIMEC2 20
+#define TIMER4 50
+
+NentryFilter::NentryFilter(QObject* parent)
+ : QObject(parent)
+ {
+ }
+
+void Nentry::setText(const QString& s)
+ {
+ edit->setText(s);
+ }
+
+//---------------------------------------------------------
+// eventFilter
+//---------------------------------------------------------
+
+bool NentryFilter::eventFilter(QObject*, QEvent* event)
+ {
+ Nentry* e = (Nentry*)parent();
+ if (event->type() == QEvent::MouseButtonPress) {
+ e->mousePress((QMouseEvent*)event);
+ return true;
+ }
+ if (event->type() == QEvent::MouseMove) {
+ e->mouseMove((QMouseEvent*)event);
+ return true;
+ }
+ if (event->type() == QEvent::MouseButtonDblClick) {
+ e->mouseDoubleClick((QMouseEvent*)event);
+ return true;
+ }
+ if (event->type() == QEvent::MouseButtonRelease) {
+ e->mouseRelease((QMouseEvent*)event);
+ return true;
+ }
+ if (event->type() == QEvent::Wheel) {
+ e->wheel((QWheelEvent*)event);
+ return true;
+ }
+ if (event->type() == QEvent::KeyPress) {
+ return e->keyPress((QKeyEvent*)event);
+ }
+ if (event->type() == QEvent::ContextMenu) {
+ return e->contextMenu((QContextMenuEvent*)event);
+ }
+ return false;
+ }
+
+//---------------------------------------------------------
+// Nentry
+// lineedit int values
+//---------------------------------------------------------
+
+Nentry::Nentry(QWidget* parent, const QString& txt,
+ int _lPos, bool dark) : Q3Frame(parent)
+ {
+ focusW = 0;
+ lPos = _lPos;
+ edit = new QLineEdit(this);
+ timer = new QTimer(this);
+ filter = new NentryFilter(this);
+ drawFrame = false;
+ edit->installEventFilter(filter);
+ edit->setFrame(drawFrame);
+
+ connect(timer, SIGNAL(timeout()), SLOT(repeat()));
+ connect(edit, SIGNAL(returnPressed()), SLOT(endEdit()));
+ edit->setCursor(QCursor(Qt::arrowCursor));
+// edit->setFont(font3);
+ val = 0;
+ layout = new Q3HBoxLayout(this);
+ if (txt == "") {
+ layout->addWidget(edit, 1, Qt::AlignHCenter);
+ }
+ else {
+ label = new QLabel(txt, this);
+ if (lPos == 0) {
+ layout->addStretch(5);
+ layout->addSpacing(5);
+ layout->addWidget(label);
+ layout->addSpacing(5);
+ layout->addWidget(edit);
+ layout->addSpacing(5);
+ layout->addStretch(5);
+ }
+ else {
+ label->setAlignment(Qt::AlignLeft);
+ layout->addWidget(edit, 0, Qt::AlignRight);
+ layout->addSpacing(5);
+ layout->addWidget(label, 100, Qt::AlignRight|Qt::AlignVCenter);
+ }
+ }
+ if (dark) {
+ setDark();
+ }
+ edit->setFocusPolicy(Qt::NoFocus);
+ }
+
+void Nentry::setFocusPolicy(Qt::FocusPolicy policy)
+ {
+ edit->setFocusPolicy(policy);
+ }
+
+void Nentry::setDark()
+ {
+ const QPalette& oldpalette = edit->palette();
+ QColorGroup cg1 = oldpalette.active();
+ cg1.setColor(QColorGroup::Base, cg1.background());
+ QPalette newpalette(cg1, cg1, cg1);
+ edit->setPalette(newpalette);
+ }
+
+//---------------------------------------------------------
+// setSize
+//---------------------------------------------------------
+
+void Nentry::setSize(int n)
+ {
+ QString s("0000000000000000");
+ QFontMetrics fm = edit->fontMetrics();
+ int w;
+ if (n <= 16)
+ w = fm.width(s, n);
+ else
+ w = fm.width('0') * n;
+
+ edit->setFixedWidth(w + 14);
+ }
+
+//---------------------------------------------------------
+// setFrame
+//---------------------------------------------------------
+
+void Nentry::setFrame(bool flag)
+ {
+ drawFrame = flag;
+ edit->setFrame(drawFrame);
+ }
+
+//---------------------------------------------------------
+// endEdit
+//---------------------------------------------------------
+
+void Nentry::endEdit()
+ {
+ if (edit->edited()) {
+ if (setSValue(edit->text())) {
+ setString(val, false);
+ return;
+ }
+ edit->setEdited(false);
+ }
+ if (focusW)
+ focusW->setFocus();
+ focusW = 0;
+ edit->clearFocus();
+ if (!drawFrame)
+ edit->setFrame(false);
+ setString(val, false);
+ }
+
+//---------------------------------------------------------
+// contextMenuEvent
+//---------------------------------------------------------
+
+bool Nentry::contextMenu(QContextMenuEvent *e)
+{
+ e->accept();
+ return true;
+}
+//---------------------------------------------------------
+// mousePress
+//---------------------------------------------------------
+
+void Nentry::mousePress(QMouseEvent* event)
+ {
+ button = event->button();
+ starty = event->y();
+ evx = event->x();
+ if (event->button() == Qt::LeftButton) {
+ focusW = qApp->focusWidget();
+ edit->setFocus();
+ edit->setFrame(true);
+ setString(val, true);
+ }
+ else {
+ timecount = 0;
+ repeat();
+ timer->start(TIMER1);
+ }
+ }
+
+//---------------------------------------------------------
+// repeat
+//---------------------------------------------------------
+
+void Nentry::repeat()
+ {
+ if (timecount == 1) {
+ ++timecount;
+ timer->stop();
+ timer->start(TIMER2);
+ return;
+ }
+ ++timecount;
+ if (timecount == TIMEC) {
+ timer->stop();
+ timer->start(TIMER3);
+ }
+ if (timecount == TIMEC2) {
+ timer->stop();
+ timer->start(TIMER4);
+ }
+
+ switch (button) {
+ case Qt::LeftButton:
+ return;
+ case Qt::MidButton:
+ decValue(evx);
+ break;
+ case Qt::RightButton:
+ incValue(evx);
+ break;
+ default:
+ break;
+ }
+ if (focusW)
+ focusW->setFocus();
+ edit->clearFocus();
+ }
+
+//---------------------------------------------------------
+// mouseRelease
+//---------------------------------------------------------
+
+void Nentry::mouseRelease(QMouseEvent* event)
+ {
+ button = Qt::NoButton;
+ timer->stop();
+ if (event->button() != Qt::LeftButton) {
+ if (focusW)
+ focusW->setFocus();
+ edit->clearFocus();
+ }
+ }
+
+//---------------------------------------------------------
+// mouseMove
+//---------------------------------------------------------
+
+void Nentry::mouseMove(QMouseEvent*)
+ {
+ switch (button) {
+ case Qt::LeftButton:
+ break;
+ case Qt::MidButton:
+ break;
+ case Qt::RightButton:
+ break;
+ default:
+ break;
+ }
+ }
+
+//---------------------------------------------------------
+// mouseDoubleClick
+//---------------------------------------------------------
+
+void Nentry::mouseDoubleClick(QMouseEvent* event)
+ {
+ if (event->button() != Qt::LeftButton) {
+ mousePress(event);
+ return;
+ }
+ }
+
+//---------------------------------------------------------
+// wheel
+//---------------------------------------------------------
+
+void Nentry::wheel(QWheelEvent* event)
+ {
+ int n = event->delta();
+ if (n > 0)
+ incValue(n);
+ else
+ decValue(-n);
+ event->accept();
+ }
+
+//---------------------------------------------------------
+// setValue
+//---------------------------------------------------------
+
+void Nentry::setValue(int v)
+ {
+ if (v == val)
+ return;
+ if (setString(v)) {
+ if (!drawFrame)
+ edit->setFrame(false);
+ edit->setEnabled(false);
+ }
+ else {
+ edit->setEnabled(true);
+ }
+ val = v;
+ }
+
+//---------------------------------------------------------
+// keyPress
+//---------------------------------------------------------
+
+bool Nentry::keyPress(QKeyEvent* event)
+ {
+ bool shift = event->state() & Qt::ShiftModifier;
+ bool ctrl = event->state() & Qt::ControlModifier;
+ int key = event->key();
+
+ if (shift) {
+ switch(key) {
+ case Qt::Key_Left:
+ case Qt::Key_Right:
+ return false;
+ default:
+ return true;
+ }
+ return true;
+ }
+ if (ctrl) {
+ switch(key) {
+ case Qt::Key_A:
+ case Qt::Key_B:
+ case Qt::Key_C:
+ case Qt::Key_D:
+ case Qt::Key_E:
+ case Qt::Key_F:
+ case Qt::Key_H:
+ case Qt::Key_V:
+ case Qt::Key_X:
+ case Qt::Key_Z:
+ case Qt::Key_Y:
+ return false;
+ default:
+ return true;
+ }
+ return true;
+ }
+ if (event->state())
+ return true;
+ switch (key) {
+ case Qt::Key_Up: incValue(0); return true;
+ case Qt::Key_Down: decValue(0); return true;
+ case 0x30:
+ case 0x31:
+ case 0x32:
+ case 0x33:
+ case 0x34:
+ case 0x35:
+ case 0x36:
+ case 0x37:
+ case 0x38:
+ case 0x39:
+ case Qt::Key_Minus:
+ case Qt::Key_Left:
+ case Qt::Key_Right:
+ case Qt::Key_Backspace:
+ case Qt::Key_Home:
+ case Qt::Key_End:
+ case Qt::Key_Delete:
+ case Qt::Key_Return:
+ return false;
+ default:
+ break;
+ }
+ return true;
+ }
+
diff --git a/muse2/muse/widgets/nentry.h b/muse2/muse/widgets/nentry.h
new file mode 100644
index 00000000..30ddd930
--- /dev/null
+++ b/muse2/muse/widgets/nentry.h
@@ -0,0 +1,93 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: nentry.h,v 1.1.1.1.2.2 2008/05/21 00:28:54 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __NENTRY_H__
+#define __NENTRY_H__
+
+#include <q3frame.h>
+#include <qlineedit.h>
+#include <qstring.h>
+//Added by qt3to4:
+#include <QWheelEvent>
+#include <QEvent>
+#include <Q3HBoxLayout>
+#include <QMouseEvent>
+#include <QLabel>
+#include <QContextMenuEvent>
+#include <QKeyEvent>
+
+class QTimer;
+class Q3HBoxLayout;
+class QLabel;
+
+class NentryFilter : public QObject {
+ Q_OBJECT
+
+ protected:
+ bool eventFilter(QObject* object, QEvent* event);
+ public:
+ NentryFilter(QObject* parent);
+ };
+
+//---------------------------------------------------------
+// Nentry
+// numerical entry widget with optional label
+//---------------------------------------------------------
+
+class Nentry : public Q3Frame {
+ Q_OBJECT
+
+ int button;
+ int starty;
+ bool drawFrame;
+ QTimer* timer;
+ int evx;
+ int timecount;
+ Q3HBoxLayout* layout;
+ QObject* filter;
+ QLabel* label;
+ int lPos; // label Position 0 - left, 1 - right
+ QWidget* focusW;
+
+ protected:
+ QLineEdit* edit;
+ int val;
+ virtual void incValue(int x) = 0;
+ virtual void decValue(int x) = 0;
+ virtual bool setString(int, bool editable = false) = 0;
+ virtual bool setSValue(const QString&) = 0;
+
+ private slots:
+ void repeat();
+
+ protected slots:
+ void endEdit();
+
+ public slots:
+ virtual void setValue(int);
+
+ public:
+ Nentry(QWidget* parent, const QString& txt = QString(""),
+ int lPos = 0, bool dark=false);
+
+ int value() const { return val; }
+ void setFrame(bool);
+ //void setAlignment(int flag) { edit->setAlignment(flag); }
+ void setText(const QString& s);
+ void setSize(int n);
+ void setDark();
+
+ void mousePress(QMouseEvent*);
+ void mouseMove(QMouseEvent*);
+ void mouseDoubleClick(QMouseEvent*);
+ void mouseRelease(QMouseEvent*);
+ void wheel(QWheelEvent*);
+ bool keyPress(QKeyEvent*);
+ void setFocusPolicy(Qt::FocusPolicy);
+ bool contextMenu(QContextMenuEvent*);
+ };
+#endif
diff --git a/muse2/muse/widgets/noteinfo.cpp b/muse2/muse/widgets/noteinfo.cpp
new file mode 100644
index 00000000..59bce4b9
--- /dev/null
+++ b/muse2/muse/widgets/noteinfo.cpp
@@ -0,0 +1,178 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: noteinfo.cpp,v 1.4.2.1 2008/08/18 00:15:26 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "config.h"
+
+#include "noteinfo.h"
+#include <qlayout.h>
+#include <qlabel.h>
+#include "song.h"
+#include "globals.h"
+#include "posedit.h"
+#include "pitchedit.h"
+
+//---------------------------------------------------
+// NoteInfo
+// ToolBar
+// Start, LÃŊÂŋÂ―nge, Note, Velo an, Velo aus, Kanal
+//---------------------------------------------------
+
+NoteInfo::NoteInfo(Q3MainWindow* parent)
+ : Q3ToolBar(tr("Note Info"), parent)
+ {
+ deltaMode = false;
+
+ QLabel* label = new QLabel(tr("Start"), this, "Start");
+ label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
+ label->setIndent(3);
+ selTime = new PosEdit(this, "Start");
+
+ label = new QLabel(tr("Len"), this, "Len");
+ label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
+ label->setIndent(3);
+ selLen = new QSpinBox(0, 100000, 1, this);
+
+ label = new QLabel(tr("Pitch"), this, "Pitch");
+ label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
+ label->setIndent(3);
+ selPitch = new PitchEdit(this, "selPitch");
+
+ label = new QLabel(tr("Velo On"), this, "Velocity On");
+ label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
+ label->setIndent(3);
+ selVelOn = new QSpinBox(0, 127, 1, this);
+
+ label = new QLabel(tr("Velo Off"), this, "Velocity Off");
+ label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
+ label->setIndent(3);
+ selVelOff = new QSpinBox(0, 127, 1, this);
+
+ connect(selLen, SIGNAL(valueChanged(int)), SLOT(lenChanged(int)));
+ connect(selPitch, SIGNAL(valueChanged(int)), SLOT(pitchChanged(int)));
+ connect(selVelOn, SIGNAL(valueChanged(int)), SLOT(velOnChanged(int)));
+ connect(selVelOff, SIGNAL(valueChanged(int)), SLOT(velOffChanged(int)));
+ connect(selTime, SIGNAL(valueChanged(const Pos&)), SLOT(timeChanged(const Pos&)));
+ }
+
+//---------------------------------------------------------
+// setDeltaMode
+//---------------------------------------------------------
+
+void NoteInfo::setDeltaMode(bool val)
+ {
+ deltaMode = val;
+ selPitch->setDeltaMode(val);
+ if (val) {
+ selLen->setRange(-100000, 100000);
+ selVelOn->setRange(-127, 127);
+ selVelOff->setRange(-127, 127);
+ }
+ else {
+ selLen->setRange(0, 100000);
+ selVelOn->setRange(0, 127);
+ selVelOff->setRange(0, 127);
+ }
+ }
+
+//---------------------------------------------------------
+// lenChanged
+//---------------------------------------------------------
+
+void NoteInfo::lenChanged(int val)
+ {
+ if (!signalsBlocked())
+ emit valueChanged(VAL_LEN, val);
+ }
+
+//---------------------------------------------------------
+// velOnChanged
+//---------------------------------------------------------
+
+void NoteInfo::velOnChanged(int val)
+ {
+ if (!signalsBlocked())
+ emit valueChanged(VAL_VELON, val);
+ }
+
+//---------------------------------------------------------
+// velOffChanged
+//---------------------------------------------------------
+
+void NoteInfo::velOffChanged(int val)
+ {
+ if (!signalsBlocked())
+ emit valueChanged(VAL_VELOFF, val);
+ }
+
+//---------------------------------------------------------
+// pitchChanged
+//---------------------------------------------------------
+
+void NoteInfo::pitchChanged(int val)
+ {
+ if (!signalsBlocked())
+ emit valueChanged(VAL_PITCH, val);
+ }
+
+//---------------------------------------------------------
+// setValue
+//---------------------------------------------------------
+
+void NoteInfo::setValue(ValType type, int val)
+ {
+ blockSignals(true);
+ switch(type) {
+ case VAL_TIME:
+ selTime->setValue(val);
+ break;
+ case VAL_LEN:
+ selLen->setValue(val);
+ break;
+ case VAL_VELON:
+ selVelOn->setValue(val);
+ break;
+ case VAL_VELOFF:
+ selVelOff->setValue(val);
+ break;
+ case VAL_PITCH:
+ selPitch->setValue(val);
+ break;
+ }
+ blockSignals(false);
+ }
+
+//---------------------------------------------------------
+// setValue
+//---------------------------------------------------------
+
+void NoteInfo::setValues(unsigned tick, int val2, int val3, int val4,
+ int val5)
+ {
+ blockSignals(true);
+ if (selTime->pos().tick() != tick)
+ selTime->setValue(tick);
+ if (selLen->value() != val2)
+ selLen->setValue(val2);
+ if (selPitch->value() != val3)
+ selPitch->setValue(val3);
+ if (selVelOn->value() != val4)
+ selVelOn->setValue(val4);
+ if (selVelOff->value() != val5)
+ selVelOff->setValue(val5);
+ blockSignals(false);
+ }
+
+//---------------------------------------------------------
+// timeChanged
+//---------------------------------------------------------
+
+void NoteInfo::timeChanged(const Pos& pos)
+ {
+ if (!signalsBlocked())
+ emit valueChanged(VAL_TIME, pos.tick());
+ }
+
diff --git a/muse2/muse/widgets/noteinfo.h b/muse2/muse/widgets/noteinfo.h
new file mode 100644
index 00000000..00c798fb
--- /dev/null
+++ b/muse2/muse/widgets/noteinfo.h
@@ -0,0 +1,52 @@
+// MusE
+// Linux Music Editor
+// $Id: noteinfo.h,v 1.3 2004/01/09 17:12:54 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __NOTE_INFO_H__
+#define __NOTE_INFO_H__
+
+#include <q3toolbar.h>
+
+class PosEdit;
+class QSpinBox;
+class PitchEdit;
+class Q3MainWindow;
+class Pos;
+
+//---------------------------------------------------------
+// NoteInfo
+//---------------------------------------------------------
+
+class NoteInfo : public Q3ToolBar {
+ PosEdit* selTime;
+ QSpinBox* selLen;
+ PitchEdit* selPitch;
+ QSpinBox* selVelOn;
+ QSpinBox* selVelOff;
+ bool deltaMode;
+
+ Q_OBJECT
+
+ public:
+ enum ValType {VAL_TIME, VAL_LEN, VAL_VELON, VAL_VELOFF, VAL_PITCH };
+ NoteInfo(Q3MainWindow* parent);
+ void setValues(unsigned, int, int, int, int);
+ void setDeltaMode(bool);
+
+ private slots:
+ void lenChanged(int);
+ void velOnChanged(int);
+ void velOffChanged(int);
+ void pitchChanged(int);
+ void timeChanged(const Pos&);
+
+ public slots:
+ void setValue(ValType, int);
+
+ signals:
+ void valueChanged(NoteInfo::ValType, int);
+ };
+#endif
+
diff --git a/muse2/muse/widgets/pitchedit.cpp b/muse2/muse/widgets/pitchedit.cpp
new file mode 100644
index 00000000..6ecdc4a0
--- /dev/null
+++ b/muse2/muse/widgets/pitchedit.cpp
@@ -0,0 +1,64 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: pitchedit.cpp,v 1.2 2004/01/09 17:12:54 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <stdio.h>
+#include "pitchedit.h"
+#include "helper.h"
+
+#include <qstyle.h>
+#include <qapplication.h>
+
+//---------------------------------------------------------
+// PitchEdit
+//---------------------------------------------------------
+
+PitchEdit::PitchEdit(QWidget* parent, const char* name)
+ : QSpinBox(0, 127, 1, parent, name)
+ {
+ deltaMode = false;
+ }
+
+//---------------------------------------------------------
+// mapValueToText
+//---------------------------------------------------------
+
+QString PitchEdit::mapValueToText(int v)
+ {
+ if (deltaMode) {
+ QString s;
+ s.setNum(v);
+ return s;
+ }
+ else
+ return pitch2string(v);
+ }
+
+//---------------------------------------------------------
+// mapTextToValue
+//---------------------------------------------------------
+
+int PitchEdit::mapTextToValue(bool* ok)
+ {
+ printf("PitchEdit: mapTextToValue: not impl.\n");
+ if (ok)
+ *ok = false;
+ return 0;
+ }
+
+//---------------------------------------------------------
+// setDeltaMode
+//---------------------------------------------------------
+
+void PitchEdit::setDeltaMode(bool val)
+ {
+ deltaMode = val;
+ if (deltaMode)
+ setRange(-127, 127);
+ else
+ setRange(0, 127);
+ }
+
diff --git a/muse2/muse/widgets/pitchedit.h b/muse2/muse/widgets/pitchedit.h
new file mode 100644
index 00000000..9c474f08
--- /dev/null
+++ b/muse2/muse/widgets/pitchedit.h
@@ -0,0 +1,33 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: pitchedit.h,v 1.2 2004/01/09 17:12:54 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __PITCHEDIT_H__
+#define __PITCHEDIT_H__
+
+#include <qspinbox.h>
+
+//---------------------------------------------------------
+// PitchEdit
+//---------------------------------------------------------
+
+class PitchEdit : public QSpinBox {
+ Q_OBJECT
+
+ bool deltaMode;
+
+ protected:
+ virtual QString mapValueToText(int v);
+ virtual int mapTextToValue(bool* ok);
+
+ public:
+ PitchEdit(QWidget* parent, const char* name = 0);
+ void setDeltaMode(bool);
+ };
+
+extern QString pitch2string(int v);
+
+#endif
diff --git a/muse2/muse/widgets/pitchlabel.cpp b/muse2/muse/widgets/pitchlabel.cpp
new file mode 100644
index 00000000..f53e6fa5
--- /dev/null
+++ b/muse2/muse/widgets/pitchlabel.cpp
@@ -0,0 +1,95 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: pitchlabel.cpp,v 1.2 2004/05/16 16:55:01 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <qapplication.h>
+#include <qstyle.h>
+//Added by qt3to4:
+#include <QLabel>
+#include "pitchedit.h"
+#include "pitchlabel.h"
+#include "helper.h"
+
+//---------------------------------------------------------
+// PitchLabel
+//---------------------------------------------------------
+
+PitchLabel::PitchLabel(QWidget* parent, const char* name)
+ : QLabel(parent, name)
+ {
+ _pitchMode = true;
+ _value = -1;
+ setFrameStyle(WinPanel | Sunken);
+ setLineWidth(2);
+ setMidLineWidth(3);
+ setValue(0);
+ int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, 0, this); // ddskrjo 0
+ setIndent(fw);
+ }
+
+//---------------------------------------------------------
+// setPitchMode
+//---------------------------------------------------------
+
+void PitchLabel::setPitchMode(bool val)
+ {
+ _pitchMode = val;
+ }
+
+//---------------------------------------------------------
+// sizeHint
+//---------------------------------------------------------
+
+QSize PitchLabel::sizeHint() const
+ {
+ QFontMetrics fm(font());
+ int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, 0, this); // ddskrjo 0
+ int h = fm.height() + fw * 2;
+// int w = 2 + fm.width(QString("A#8")) + fw * 4;
+ int w = 2 + fm.width(QString("-9999")) + fw * 4; // must display 14Bit controller values
+ return QSize(w, h).expandedTo(QApplication::globalStrut());
+ }
+
+//---------------------------------------------------------
+// setValue
+//---------------------------------------------------------
+
+void PitchLabel::setValue(int val)
+ {
+ if (val == _value)
+ return;
+ _value = val;
+ QString s;
+ if (_pitchMode)
+ s = pitch2string(_value);
+ else
+ s.sprintf("%d", _value);
+ setText(s);
+ }
+
+//---------------------------------------------------------
+// setInt
+//---------------------------------------------------------
+
+void PitchLabel::setInt(int val)
+ {
+ if (_pitchMode)
+ setPitchMode(false);
+ setValue(val);
+ }
+
+//---------------------------------------------------------
+// setPitch
+//---------------------------------------------------------
+
+void PitchLabel::setPitch(int val)
+ {
+ if (!_pitchMode) {
+ setPitchMode(true);
+ }
+ setValue(val);
+ }
+
diff --git a/muse2/muse/widgets/pitchlabel.h b/muse2/muse/widgets/pitchlabel.h
new file mode 100644
index 00000000..1da83ecc
--- /dev/null
+++ b/muse2/muse/widgets/pitchlabel.h
@@ -0,0 +1,41 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: pitchlabel.h,v 1.1.1.1 2003/10/27 18:54:49 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __PITCHLABEL_H__
+#define __PITCHLABEL_H__
+
+#include <qlabel.h>
+
+//---------------------------------------------------------
+// PitchLabel
+//---------------------------------------------------------
+
+class PitchLabel : public QLabel {
+ bool _pitchMode;
+ int _value;
+ Q_OBJECT
+
+ protected:
+ QSize sizeHint() const;
+
+ public slots:
+ void setValue(int);
+ void setInt(int);
+ void setPitch(int);
+
+ public:
+ PitchLabel(QWidget* parent, const char* name = 0);
+ int value() const { return _value; }
+ void setPitchMode(bool val);
+ bool pitchMode() const { return _pitchMode; }
+ };
+
+
+#endif
+
+
+
diff --git a/muse2/muse/widgets/popupmenu.cpp b/muse2/muse/widgets/popupmenu.cpp
new file mode 100644
index 00000000..05eb64f6
--- /dev/null
+++ b/muse2/muse/widgets/popupmenu.cpp
@@ -0,0 +1,2770 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: popupmenu.cpp,v 1.1.1.1 2010/07/18 03:21:00 terminator356 Exp $
+//
+// (C) Copyright 1999-2010 Werner Schweer (ws@seh.de)
+//
+// PopupMenu sub-class of QPopupMenu created by Tim.
+//=========================================================
+
+
+
+//=========================================================
+//
+// NOTICE: This sub-class of QPopupMenu *automatically* deletes
+// and *clears* any sub popup menus, when clear() is called.
+// Therefore a parent widget is *not* necessary when
+// creating sub popup menus to add to the popup.
+//
+//=========================================================
+
+
+// MusE: want no menu bar here. Can't use, not needed for now anyway.
+#define QT_NO_MENUBAR
+#define QT_NO_WHATSTHIS
+
+#include <qapplication.h>
+//#include <qtimer.h>
+#include <qpointer.h>
+//Added by qt3to4:
+#include <Q3Signal>
+#include <QMouseEvent>
+#include <Q3PopupMenu>
+//#include <qmenubar.h>
+//#include <qstyle.h>
+//#include <qdatetime.h>
+
+#include "popupmenu.h"
+
+// used to provide ONE single-shot timer
+//static QTimer * singleSingleShot = 0;
+//static bool preventAnimation = FALSE;
+// Used to detect motion prior to mouse-release
+static int motion;
+static PopupMenu* active_popup_menu = 0;
+
+/*
+static void cleanup()
+{
+ delete singleSingleShot;
+ singleSingleShot = 0;
+}
+
+static void popupSubMenuLater( int msec, QPopupMenu * receiver ) {
+//static void popupSubMenuLater( int msec, PopupMenu * receiver ) {
+ if ( !singleSingleShot ) {
+ singleSingleShot = new QTimer( qApp, "popup submenu timer" );
+ qAddPostRoutine( cleanup );
+ }
+
+ singleSingleShot->disconnect( SIGNAL(timeout()) );
+ QObject::connect( singleSingleShot, SIGNAL(timeout()),
+ receiver, SLOT(subMenuTimer()) );
+ singleSingleShot->start( msec, TRUE );
+}
+*/
+
+/*
+//======================
+// MenuDataData
+//======================
+
+class QMenuDataData {
+public:
+ QMenuDataData();
+ QGuardedPtr<QWidget> aWidget;
+ int aInt;
+};
+
+//======================
+// QPopupMenuPrivate
+//======================
+
+class QPopupMenuPrivate {
+public:
+ struct Scroll {
+ enum { ScrollNone=0, ScrollUp=0x01, ScrollDown=0x02 };
+ uint scrollable : 2;
+ uint direction : 1;
+ int topScrollableIndex, scrollableSize;
+ QTime lastScroll;
+ QTimer *scrolltimer;
+ } scroll;
+ QSize calcSize;
+ QRegion mouseMoveBuffer;
+};
+*/
+
+//======================
+// PopupMenu
+//======================
+
+PopupMenu::PopupMenu(QWidget* parent, const char* name)
+ : Q3PopupMenu(parent, name)
+{
+ // It's too bad QPopupMenu::d is private.
+ // It will be redundant and this will be our own private member.
+ //d = new QPopupMenuPrivate;
+ //d->scroll.scrollableSize = d->scroll.topScrollableIndex = 0;
+ //d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone;
+ //d->scroll.scrolltimer = 0;
+}
+
+PopupMenu::~PopupMenu()
+{
+ //if(d->scroll.scrolltimer)
+ // delete d->scroll.scrolltimer;
+
+ //preventAnimation = FALSE;
+ //delete d;
+
+ // Make sure to clear the popup so that any child popups are also deleted !
+ //popup->clear();
+}
+
+void PopupMenu::menuDelPopup(Q3PopupMenu *popup)
+{
+ //printf("PopupMenu::menuDelPopup deleting popup...\n");
+
+ // Make sure to clear the popup so that any child popups are also deleted !
+ // Tested OK. All the popups are deleted.
+ popup->clear();
+
+ popup->disconnect( SIGNAL(activatedRedirect(int)) );
+ popup->disconnect( SIGNAL(highlightedRedirect(int)) );
+ disconnect( popup, SIGNAL(destroyed(QObject*)),
+ this, SLOT(popupDestroyed(QObject*)) );
+ delete popup;
+}
+
+/*
+void PopupMenu::setFirstItemActive()
+{
+ QMenuItemListIt it(*QPopupMenu::mitems);
+ register QMenuItem *mi;
+ int ai = 0;
+ //if(d->scroll.scrollable)
+ // ai = d->scroll.topScrollableIndex;
+ while ( (mi=it.current()) )
+ {
+ ++it;
+ if(!mi->isSeparator() && mi->id() != QMenuData::d->aInt &&
+ (style().styleHint(QStyle::SH_PopupMenu_AllowActiveAndDisabled, this) || mi->isEnabledAndVisible()))
+ {
+ setActiveItem( ai );
+ return;
+ }
+ ai++;
+ }
+ QPopupMenu::actItem = -1;
+}
+*/
+
+/*
+void PopupMenu::hideAllPopups()
+{
+ //register QMenuData *top = this; // find top level popup
+ register MenuData *top = this; // find top level popup
+ if ( !preventAnimation )
+ QTimer::singleShot( 10, this, SLOT(allowAnimation()) );
+ preventAnimation = TRUE;
+
+ if ( !isPopup() )
+ return; // nothing to do
+
+ //while ( top->parentMenu && top->parentMenu->isPopupMenu
+ while ( top->parentMenu && ((MenuData*)top->parentMenu)->isPopupMenu
+ //&& ((QPopupMenu*)top->parentMenu)->isPopup() )
+ && ((PopupMenu*)((MenuData*)top->parentMenu))->isPopup() )
+ //top = top->parentMenu;
+ top = (MenuData*)top->parentMenu;
+ //((QPopupMenu*)top)->hide(); // cascade from top level
+ ((PopupMenu*)top)->hide(); // cascade from top level
+
+#ifndef QT_NO_WHATSTHIS
+ if (whatsThisItem) {
+ qWhatsThisBDH();
+ whatsThisItem = 0;
+ }
+#endif
+
+}
+*/
+
+/*
+void PopupMenu::hidePopups()
+{
+ if ( !preventAnimation )
+ QTimer::singleShot( 10, this, SLOT(allowAnimation()) );
+ preventAnimation = TRUE;
+
+ //QMenuItemListIt it(*mitems);
+ QMenuItemListIt it(*MenuData::mitems);
+ register QMenuItem *mi;
+ while ( (mi=it.current()) ) {
+ ++it;
+ if ( mi->popup() && mi->popup()->parentMenu == this ) //avoid circularity
+ mi->popup()->hide();
+ }
+ popupActive = -1; // no active sub menu
+ if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this))
+ d->mouseMoveBuffer = QRegion();
+
+ QRect mfrect = itemGeometry( actItem );
+ setMicroFocusHint( mfrect.x(), mfrect.y(), mfrect.width(), mfrect.height(), FALSE );
+}
+*/
+
+bool PopupMenu::tryMenuBar( QMouseEvent *e )
+{
+#if 0 // ddskrjo
+ register QMenuData *top = this; // find top level
+ //register PopupMenu *top = this; // find top level
+ //while ( top->parentMenu )
+ while ( ((PopupMenu*)top)->parentMenu )
+ //top = top->parentMenu;
+ //top = (MenuData*)top->parentMenu;
+ top = ((PopupMenu*)top)->parentMenu;
+#ifndef QT_NO_MENUBAR
+ return top->isMenuBar ?
+ ((QMenuBar *)top)->tryMouseEvent( this, e ) :
+ ((Q3PopupMenu*)top)->tryMouseEvent(this, e );
+#else
+ //return ((QPopupMenu*)top)->tryMouseEvent(this, e );
+ return ((PopupMenu*)top)->tryMouseEvent(this, e );
+#endif
+
+#endif
+ return false; // ddskrjo
+}
+
+//bool PopupMenu::tryMouseEvent( QPopupMenu *p, QMouseEvent * e)
+bool PopupMenu::tryMouseEvent( PopupMenu *p, QMouseEvent * e)
+{
+ if ( p == this )
+ return FALSE;
+ QPoint pos = mapFromGlobal( e->globalPos() );
+ if ( !rect().contains( pos ) ) // outside
+ return FALSE;
+ QMouseEvent ee( e->type(), pos, e->globalPos(), e->button(), e->state() );
+ event( &ee );
+ return TRUE;
+}
+
+/*
+void PopupMenu::byeMenuBar()
+{
+#ifndef QT_NO_MENUBAR
+ //register QMenuData *top = this; // find top level
+ register MenuData *top = this; // find top level
+ while ( top->parentMenu )
+ top = top->parentMenu;
+#endif
+ hideAllPopups();
+#ifndef QT_NO_MENUBAR
+ if ( top->isMenuBar )
+ ((QMenuBar *)top)->goodbye();
+#endif
+}
+*/
+
+void PopupMenu::actSig(int id, bool inwhatsthis)
+{
+ if(!inwhatsthis)
+ {
+ emit activated( id );
+#if defined(QT_ACCESSIBILITY_SUPPORT)
+ if(!fromAccel)
+ QAccessible::updateAccessibility(this, indexOf(id)+1, QAccessible::MenuCommand);
+#endif
+ }
+ else
+ {
+#ifndef QT_NO_WHATSTHIS
+ QRect r(itemGeometry(indexOf(id)));
+ QPoint p(r.center().x(), r.bottom());
+ QString whatsThis = findItem(id)->whatsThis();
+ if(whatsThis.isNull())
+ whatsThis = Q3WhatsThis::textFor(this, p);
+ Q3WhatsThis::leaveWhatsThisMode(whatsThis, mapToGlobal(p), this);
+#endif
+ }
+
+ //emit activatedRedirect(id); ddskrjo
+}
+
+/*
+void PopupMenu::mousePressEvent(QMouseEvent *e)
+{
+ printf("PopupMenu::mousePressEvent\n");
+
+
+ //int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this);
+ //if (rect().contains(e->pos()) &&
+ // ((d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp && e->pos().y() <= sh) || //up
+ // (d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown &&
+ // e->pos().y() >= contentsRect().height() - sh))) //down
+ // return;
+
+ mouseBtDn = TRUE; // mouse button down
+ int item = itemAtPos( e->pos() );
+ if ( item == -1 ) {
+ //if ( !rect().contains(e->pos()) && !tryMenuBar(e) ) {
+ // byeMenuBar();
+ //}
+ return;
+ }
+ register QMenuItem *mi = mitems->at(item);
+ ///if ( item != actItem ) // new item activated
+ /// setActiveItem( item );
+
+ QPopupMenu *popup = mi->popup();
+ if(popup)
+ {
+ if(popup->isVisible()) // sub menu already open
+ {
+ //int pactItem = popup->actItem;
+ //popup->actItem = -1;
+ //popup->hidePopups();
+ //popup->updateRow( pactItem );
+ }
+ else // open sub menu
+ {
+ //hidePopups();
+ popupSubMenuLater( 20, this );
+ }
+ }
+ else
+ {
+ //hidePopups();
+ }
+}
+*/
+
+void PopupMenu::mouseReleaseEvent(QMouseEvent *e)
+{
+#if 0 // ddskrjo
+ // do not hide a standalone context menu on press-release, unless
+ // the user moved the mouse significantly
+ //if(!parentMenu && !mouseBtDn && actItem < 0 && motion < 6)
+ // return;
+
+ //mouseBtDn = FALSE;
+ //MenuData::mouseBtDn = FALSE;
+ Q3PopupMenu::mouseBtDn = FALSE;
+
+ // if the user released the mouse outside the menu, pass control
+ // to the menubar or our parent menu
+ //int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this);
+ if(!rect().contains(e->pos()) && tryMenuBar(e))
+ return;
+ //else
+ //if((d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp && e->pos().y() <= sh) || //up
+ // (d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown &&
+ // e->pos().y() >= contentsRect().height() - sh)) //down
+ // return;
+
+ if(Q3PopupMenu::actItem < 0)
+ {
+ // we do not have an active item
+ // if the release is inside without motion (happens with
+ // oversized popup menus on small screens), ignore it
+ if(rect().contains(e->pos()) && motion < 6)
+ return;
+ ///else
+ /// byeMenuBar();
+ }
+ else
+ {
+ // selected menu item!
+ register QMenuItem *mi = Q3PopupMenu::mitems->at(Q3PopupMenu::actItem);
+ if(mi->widget())
+ {
+ QWidget* widgetAt = QApplication::widgetAt(e->globalPos(), TRUE);
+ if(widgetAt && widgetAt != this)
+ {
+ QMouseEvent me(e->type(), widgetAt->mapFromGlobal(e->globalPos()),
+ e->globalPos(), e->button(), e->state());
+ QApplication::sendEvent( widgetAt, &me );
+ }
+ }
+ //QPopupMenu *popup = mi->popup();
+ PopupMenu *popup = (PopupMenu*)mi->popup();
+#ifndef QT_NO_WHATSTHIS
+ bool b = Q3WhatsThis::inWhatsThisMode();
+#else
+ const bool b = FALSE;
+#endif
+ if(!mi->isEnabledAndVisible())
+ {
+#ifndef QT_NO_WHATSTHIS
+ if(b)
+ {
+ actItem = -1;
+ updateItem(mi->id());
+ byeMenuBar();
+ actSig(mi->id(), b);
+ }
+#endif
+ }
+ else
+ if(popup)
+ {
+ //popup->setFirstItemActive();
+ }
+ else
+ {
+ // normal menu item
+ ///byeMenuBar(); // deactivate menu bar
+ if(mi->isEnabledAndVisible())
+ {
+ ///QPopupMenu::actItem = -1;
+ Q3PopupMenu::updateItem(mi->id());
+ active_popup_menu = this;
+ QPointer<Q3Signal> signal = mi->signal();
+ actSig(mi->id(), b);
+ if(signal && !b)
+ signal->activate();
+ active_popup_menu = 0;
+ }
+ }
+ }
+#endif
+}
+
+
+
+
+
+
+/****************************************************************************
+**
+** Implementation of QPopupMenu class
+**
+** Created : 941128
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of the widgets module of the Qt GUI Toolkit.
+**
+** This file may be used under the terms of the GNU General
+** Public License versions 2.0 or 3.0 as published by the Free
+** Software Foundation and appearing in the files LICENSE.GPL2
+** and LICENSE.GPL3 included in the packaging of this file.
+** Alternatively you may (at your option) use any later version
+** of the GNU General Public License if such license has been
+** publicly approved by Trolltech ASA (or its successors, if any)
+** and the KDE Free Qt Foundation.
+**
+** Please review the following information to ensure GNU General
+** Public Licensing requirements will be met:
+** http://trolltech.com/products/qt/licenses/licensing/opensource/.
+** If you are unsure which license is appropriate for your use, please
+** review the following information:
+** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
+** or contact the sales department at sales@trolltech.com.
+**
+** This file may be used under the terms of the Q Public License as
+** defined by Trolltech ASA and appearing in the file LICENSE.QPL
+** included in the packaging of this file. Licensees holding valid Qt
+** Commercial licenses may use this file in accordance with the Qt
+** Commercial License Agreement provided with the Software.
+**
+** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
+** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
+** herein.
+**
+**********************************************************************/
+
+/*
+#include "popupmenu.h"
+#ifndef QT_NO_POPUPMENU
+#include <qmenubar.h>
+#include <qaccel.h>
+#include <qpainter.h>
+#include <qdrawutil.h>
+#include <qapplication.h>
+#include <qpixmap.h>
+#include <qpixmapcache.h>
+#include <qtimer.h>
+#include <qwhatsthis.h>
+#include <qobjectlist.h>
+#include <qguardedptr.h>
+//#include <qeffects_p.h>
+#include <qcursor.h>
+#include <qstyle.h>
+#include <qtimer.h>
+#include <qdatetime.h>
+#if defined(QT_ACCESSIBILITY_SUPPORT)
+#include <qaccessible.h>
+#endif
+
+//#define ANIMATED_POPUP
+//#define BLEND_POPUP
+
+// Motif style parameters
+
+static const int motifArrowHMargin = 6; // arrow horizontal margin
+static const int motifArrowVMargin = 2; // arrow vertical margin
+
+#if 0
+# define DEBUG_SLOPPY_SUBMENU
+#endif
+
+// used for internal communication
+static PopupMenu * syncMenu = 0;
+static int syncMenuId = 0;
+
+// Used to detect motion prior to mouse-release
+static int motion;
+
+// used to provide ONE single-shot timer
+static QTimer * singleSingleShot = 0;
+
+static bool supressAboutToShow = FALSE;
+
+static void cleanup()
+{
+ delete singleSingleShot;
+ singleSingleShot = 0;
+}
+
+static void popupSubMenuLater( int msec, PopupMenu * receiver ) {
+ if ( !singleSingleShot ) {
+ singleSingleShot = new QTimer( qApp, "popup submenu timer" );
+ qAddPostRoutine( cleanup );
+ }
+
+ singleSingleShot->disconnect( SIGNAL(timeout()) );
+ QObject::connect( singleSingleShot, SIGNAL(timeout()),
+ receiver, SLOT(subMenuTimer()) );
+ singleSingleShot->start( msec, TRUE );
+}
+
+static bool preventAnimation = FALSE;
+
+#ifndef QT_NO_WHATSTHIS
+extern void qWhatsThisBDH();
+static QMenuItem* whatsThisItem = 0;
+#endif
+
+class QMenuDataData {
+ // attention: also defined in qmenudata.cpp
+public:
+ QMenuDataData();
+ QGuardedPtr<QWidget> aWidget;
+ int aInt;
+};
+
+class QPopupMenuPrivate {
+public:
+ struct Scroll {
+ enum { ScrollNone=0, ScrollUp=0x01, ScrollDown=0x02 };
+ uint scrollable : 2;
+ uint direction : 1;
+ int topScrollableIndex, scrollableSize;
+ QTime lastScroll;
+ QTimer *scrolltimer;
+ } scroll;
+ QSize calcSize;
+ QRegion mouseMoveBuffer;
+};
+
+static PopupMenu* active_popup_menu = 0;
+
+PopupMenu::PopupMenu( QWidget *parent, const char *name )
+ : QFrame( parent, name, WType_Popup | WNoAutoErase )
+{
+ d = new QPopupMenuPrivate;
+ d->scroll.scrollableSize = d->scroll.topScrollableIndex = 0;
+ d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone;
+ d->scroll.scrolltimer = 0;
+ isPopupMenu = TRUE;
+#ifndef QT_NO_ACCEL
+ autoaccel = 0;
+ accelDisabled = FALSE;
+#endif
+ popupActive = -1;
+ snapToMouse = TRUE;
+ tab = 0;
+ checkable = 0;
+ tornOff = 0;
+ pendingDelayedContentsChanges = 0;
+ pendingDelayedStateChanges = 0;
+ maxPMWidth = 0;
+
+ tab = 0;
+ ncols = 1;
+ setFrameStyle( QFrame::PopupPanel | QFrame::Raised );
+ setMouseTracking(style().styleHint(QStyle::SH_PopupMenu_MouseTracking, this));
+ //style().polishPopupMenu( this );
+ style().polishPopupMenu( (QPopupMenu*)this );
+ setBackgroundMode( PaletteButton );
+ connectModalRecursionSafety = 0;
+
+ setFocusPolicy( StrongFocus );
+}
+
+PopupMenu::~PopupMenu()
+{
+ if ( syncMenu == this && qApp ) {
+ qApp->exit_loop();
+ syncMenu = 0;
+ }
+
+ if(d->scroll.scrolltimer)
+ delete d->scroll.scrolltimer;
+
+ if ( isVisible() ) {
+ parentMenu = 0;
+ hidePopups();
+ }
+
+ delete (QWidget*) QMenuData::d->aWidget; // tear-off menu
+
+ preventAnimation = FALSE;
+ delete d;
+}
+
+
+void PopupMenu::updateItem( int id ) // update popup menu item
+{
+ updateRow( indexOf(id) );
+}
+
+
+void PopupMenu::setCheckable( bool enable )
+{
+ if ( isCheckable() != enable ) {
+ checkable = enable;
+ badSize = TRUE;
+ if ( QMenuData::d->aWidget )
+ ( (PopupMenu*)(QWidget*)QMenuData::d->aWidget)->setCheckable( enable );
+ }
+}
+
+bool PopupMenu::isCheckable() const
+{
+ return checkable;
+}
+
+void PopupMenu::menuContentsChanged()
+{
+ // here the part that can't be delayed
+ QMenuData::menuContentsChanged();
+ badSize = TRUE; // might change the size
+#if defined(Q_WS_MAC) && !defined(QMAC_QMENUBAR_NO_NATIVE)
+ mac_dirty_popup = 1;
+#endif
+ if( pendingDelayedContentsChanges )
+ return;
+ pendingDelayedContentsChanges = 1;
+ if( !pendingDelayedStateChanges ) // if the timer hasn't been started yet
+ QTimer::singleShot( 0, this, SLOT(performDelayedChanges()));
+}
+
+void PopupMenu::performDelayedContentsChanged()
+{
+ pendingDelayedContentsChanges = 0;
+ // here the part the can be delayed
+#ifndef QT_NO_ACCEL
+ // if performDelayedStateChanged() will be called too,
+ // it will call updateAccel() too, no need to do it twice
+ if( !pendingDelayedStateChanges )
+ updateAccel( 0 );
+#endif
+ if ( isVisible() ) {
+ if ( tornOff )
+ return;
+ updateSize(TRUE);
+ update();
+ }
+ PopupMenu* p = (PopupMenu*)(QWidget*)QMenuData::d->aWidget;
+ if ( p && p->isVisible() ) {
+ p->updateSize(TRUE);
+ p->update();
+ }
+#if defined(Q_WS_MAC) && !defined(QMAC_QMENUBAR_NO_NATIVE)
+ mac_dirty_popup = 1;
+#endif
+}
+
+
+void PopupMenu::menuStateChanged()
+{
+ // here the part that can't be delayed
+ if( pendingDelayedStateChanges )
+ return;
+ pendingDelayedStateChanges = 1;
+ if( !pendingDelayedContentsChanges ) // if the timer hasn't been started yet
+ QTimer::singleShot( 0, this, SLOT(performDelayedChanges()));
+}
+
+void PopupMenu::performDelayedStateChanged()
+{
+ pendingDelayedStateChanges = 0;
+ // here the part that can be delayed
+#ifndef QT_NO_ACCEL
+ updateAccel( 0 ); // ### when we have a good solution for the accel vs. focus widget problem, remove that. That is only a workaround
+ // if you remove this, see performDelayedContentsChanged()
+#endif
+ update();
+ if ( QMenuData::d->aWidget )
+ QMenuData::d->aWidget->update();
+}
+
+void PopupMenu::performDelayedChanges()
+{
+ if( pendingDelayedContentsChanges )
+ performDelayedContentsChanged();
+ if( pendingDelayedStateChanges )
+ performDelayedStateChanged();
+}
+
+void PopupMenu::menuInsPopup( PopupMenu *popup )
+{
+ connect( popup, SIGNAL(activatedRedirect(int)),
+ SLOT(subActivated(int)) );
+ connect( popup, SIGNAL(highlightedRedirect(int)),
+ SLOT(subHighlighted(int)) );
+ connect( popup, SIGNAL(destroyed(QObject*)),
+ this, SLOT(popupDestroyed(QObject*)) );
+}
+
+void PopupMenu::menuDelPopup( PopupMenu *popup )
+{
+ popup->disconnect( SIGNAL(activatedRedirect(int)) );
+ popup->disconnect( SIGNAL(highlightedRedirect(int)) );
+ disconnect( popup, SIGNAL(destroyed(QObject*)),
+ this, SLOT(popupDestroyed(QObject*)) );
+}
+
+
+void PopupMenu::frameChanged()
+{
+ menuContentsChanged();
+}
+
+void PopupMenu::popup( const QPoint &pos, int indexAtPoint )
+{
+ if ( !isPopup() && isVisible() )
+ hide();
+
+ //avoid circularity
+ if ( isVisible() || !isEnabled() )
+ return;
+
+#if defined(Q_WS_MAC) && !defined(QMAC_QMENUBAR_NO_NATIVE)
+ if( macPopupMenu(pos, indexAtPoint ))
+ return;
+#endif
+
+#if (QT_VERSION-0 >= 0x040000)
+#error "Fix this now"
+ // #### should move to QWidget - anything might need this functionality,
+ // #### since anything can have WType_Popup window flag.
+ // #### This includes stuff in QPushButton and some stuff for setting
+ // #### the geometry of QDialog.
+ // QPopupMenu
+ // ::exec()
+ // ::popup()
+ // QPushButton (shouldn't require QMenuPopup)
+ // ::popupPressed
+ // Some stuff in qwidget.cpp for dialogs... can't remember exactly.
+ // Also the code here indicatets the parameter should be a rect, not a
+ // point.
+#endif
+
+ if(d->scroll.scrollable) {
+ d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone;
+ d->scroll.topScrollableIndex = d->scroll.scrollableSize = 0;
+ badSize = TRUE;
+ }
+ updateSize();
+
+ QPoint mouse = QCursor::pos();
+ snapToMouse = pos == mouse;
+
+ // have to emit here as a menu might be setup in a slot connected
+ // to aboutToShow which will change the size of the menu
+ bool s = supressAboutToShow;
+ supressAboutToShow = TRUE;
+ if ( !s) {
+ emit aboutToShow();
+ updateSize(TRUE);
+ }
+
+ int screen_num;
+ if (QApplication::desktop()->isVirtualDesktop())
+ screen_num =
+ QApplication::desktop()->screenNumber( QApplication::reverseLayout() ?
+ pos+QPoint(width(),0) : pos );
+ else
+ screen_num = QApplication::desktop()->screenNumber( this );
+#ifdef Q_WS_MAC
+ QRect screen = QApplication::desktop()->availableGeometry( screen_num );
+#else
+ QRect screen = QApplication::desktop()->screenGeometry( screen_num );
+#endif
+ int sw = screen.width(); // screen width
+ int sh = screen.height(); // screen height
+ int sx = screen.x(); // screen pos
+ int sy = screen.y();
+ int x = pos.x();
+ int y = pos.y();
+ if ( indexAtPoint >= 0 ) // don't subtract when < 0
+ y -= itemGeometry( indexAtPoint ).y(); // (would subtract 2 pixels!)
+ int w = width();
+ int h = height();
+
+ if ( snapToMouse ) {
+ if ( qApp->reverseLayout() )
+ x -= w;
+ if ( x+w > sx+sw )
+ x = mouse.x()-w;
+ if ( y+h > sy+sh )
+ y = mouse.y()-h;
+ if ( x < sx )
+ x = mouse.x();
+ if ( y < sy )
+ y = sy;
+ }
+
+ if ( x+w > sx+sw ) // the complete widget must
+ x = sx+sw - w; // be visible
+ if ( y+h > sy+sh )
+ y = sy+sh - h;
+ if ( x < sx )
+ x = sx;
+ if ( y < sy )
+ y = sy;
+
+ if(style().styleHint(QStyle::SH_PopupMenu_Scrollable, this)) {
+ int off_top = 0, off_bottom = 0;
+ if(y+h > sy+sh)
+ off_bottom = (y+h) - (sy+sh);
+ if(y < sy)
+ off_top = sy - y;
+ if(off_bottom || off_top) {
+ int ch = updateSize().height(); //store the old height, before setting scrollable --Sam
+ const int vextra = style().pixelMetric(QStyle::PM_PopupMenuFrameVerticalExtra, this);
+ d->scroll.scrollableSize = h - off_top - off_bottom - 2*vextra;
+ if(off_top) {
+ move( x, y = sy );
+ d->scroll.scrollable = d->scroll.scrollable | QPopupMenuPrivate::Scroll::ScrollUp;
+ }
+ if( off_bottom )
+ d->scroll.scrollable = d->scroll.scrollable | QPopupMenuPrivate::Scroll::ScrollDown;
+ if( off_top != off_bottom && indexAtPoint >= 0 ) {
+ ch -= (vextra * 2);
+ if(ch > sh) //no bigger than the screen!
+ ch = sh;
+ if( ch > d->scroll.scrollableSize )
+ d->scroll.scrollableSize = ch;
+ }
+
+ updateSize(TRUE); //now set the size using the scrollable/scrollableSize as above
+ w = width();
+ h = height();
+ if(indexAtPoint >= 0) {
+ if(off_top) { //scroll to it
+ register QMenuItem *mi = NULL;
+ QMenuItemListIt it(*mitems);
+ for(int tmp_y = 0; tmp_y < off_top && (mi=it.current()); ) {
+ QSize sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this,
+ QSize(0, itemHeight( mi )),
+ QStyleOption(mi,maxPMWidth,0));
+ tmp_y += sz.height();
+ d->scroll.topScrollableIndex++;
+ }
+ }
+ }
+ }
+ }
+ move( x, y );
+ motion=0;
+ actItem = -1;
+
+#ifndef QT_NO_EFFECTS
+ int hGuess = qApp->reverseLayout() ? QEffects::LeftScroll : QEffects::RightScroll;
+ int vGuess = QEffects::DownScroll;
+ if ( qApp->reverseLayout() ) {
+ if ( snapToMouse && ( x + w/2 > mouse.x() ) ||
+ ( parentMenu && parentMenu->isPopupMenu &&
+ ( x + w/2 > ((PopupMenu*)parentMenu)->x() ) ) )
+ hGuess = QEffects::RightScroll;
+ } else {
+ if ( snapToMouse && ( x + w/2 < mouse.x() ) ||
+ ( parentMenu && parentMenu->isPopupMenu &&
+ ( x + w/2 < ((PopupMenu*)parentMenu)->x() ) ) )
+ hGuess = QEffects::LeftScroll;
+ }
+
+#ifndef QT_NO_MENUBAR
+ if ( snapToMouse && ( y + h/2 < mouse.y() ) ||
+ ( parentMenu && parentMenu->isMenuBar &&
+ ( y + h/2 < ((QMenuBar*)parentMenu)->mapToGlobal( ((QMenuBar*)parentMenu)->pos() ).y() ) ) )
+ vGuess = QEffects::UpScroll;
+#endif
+
+ if ( QApplication::isEffectEnabled( UI_AnimateMenu ) &&
+ preventAnimation == FALSE ) {
+ if ( QApplication::isEffectEnabled( UI_FadeMenu ) )
+ qFadeEffect( this );
+ else if ( parentMenu )
+ qScrollEffect( this, parentMenu->isPopupMenu ? hGuess : vGuess );
+ else
+ qScrollEffect( this, hGuess | vGuess );
+ } else
+#endif
+ {
+ show();
+ }
+#if defined(QT_ACCESSIBILITY_SUPPORT)
+ QAccessible::updateAccessibility( this, 0, QAccessible::PopupMenuStart );
+#endif
+}
+
+void PopupMenu::subActivated( int id )
+{
+ emit activatedRedirect( id );
+}
+
+void PopupMenu::subHighlighted( int id )
+{
+ emit highlightedRedirect( id );
+}
+
+static bool fromAccel = FALSE;
+
+#ifndef QT_NO_ACCEL
+void PopupMenu::accelActivated( int id )
+{
+ QMenuItem *mi = findItem( id );
+ if ( mi && mi->isEnabledAndVisible() ) {
+ QGuardedPtr<QSignal> signal = mi->signal();
+ fromAccel = TRUE;
+ actSig( mi->id() );
+ fromAccel = FALSE;
+ if ( signal )
+ signal->activate();
+ }
+}
+
+void PopupMenu::accelDestroyed() // accel about to be deleted
+{
+ autoaccel = 0; // don't delete it twice!
+}
+#endif //QT_NO_ACCEL
+
+void PopupMenu::popupDestroyed( QObject *o )
+{
+ removePopup( (PopupMenu*)o );
+}
+
+void PopupMenu::actSig( int id, bool inwhatsthis )
+{
+ if ( !inwhatsthis ) {
+ emit activated( id );
+#if defined(QT_ACCESSIBILITY_SUPPORT)
+ if ( !fromAccel )
+ QAccessible::updateAccessibility( this, indexOf(id)+1, QAccessible::MenuCommand );
+#endif
+ } else {
+#ifndef QT_NO_WHATSTHIS
+ QRect r( itemGeometry( indexOf( id ) ) );
+ QPoint p( r.center().x(), r.bottom() );
+ QString whatsThis = findItem( id )->whatsThis();
+ if ( whatsThis.isNull() )
+ whatsThis = QWhatsThis::textFor( this, p );
+ QWhatsThis::leaveWhatsThisMode( whatsThis, mapToGlobal( p ), this );
+#endif
+ }
+
+ emit activatedRedirect( id );
+}
+
+void PopupMenu::hilitSig( int id )
+{
+ emit highlighted( id );
+ emit highlightedRedirect( id );
+
+#if defined(QT_ACCESSIBILITY_SUPPORT)
+ QAccessible::updateAccessibility( this, indexOf(id)+1, QAccessible::Focus );
+ QAccessible::updateAccessibility( this, indexOf(id)+1, QAccessible::Selection );
+#endif
+}
+
+void PopupMenu::setFirstItemActive()
+{
+ QMenuItemListIt it(*mitems);
+ register QMenuItem *mi;
+ int ai = 0;
+ if(d->scroll.scrollable)
+ ai = d->scroll.topScrollableIndex;
+ while ( (mi=it.current()) ) {
+ ++it;
+ if ( !mi->isSeparator() && mi->id() != QMenuData::d->aInt &&
+ ( style().styleHint( QStyle::SH_PopupMenu_AllowActiveAndDisabled, this ) || mi->isEnabledAndVisible() )) {
+ setActiveItem( ai );
+ return;
+ }
+ ai++;
+ }
+ actItem = -1;
+}
+
+void PopupMenu::hideAllPopups()
+{
+ register QMenuData *top = this; // find top level popup
+ if ( !preventAnimation )
+ QTimer::singleShot( 10, this, SLOT(allowAnimation()) );
+ preventAnimation = TRUE;
+
+ if ( !isPopup() )
+ return; // nothing to do
+
+ while ( top->parentMenu && top->parentMenu->isPopupMenu
+ && ((PopupMenu*)top->parentMenu)->isPopup() )
+ top = top->parentMenu;
+ ((PopupMenu*)top)->hide(); // cascade from top level
+
+#ifndef QT_NO_WHATSTHIS
+ if (whatsThisItem) {
+ qWhatsThisBDH();
+ whatsThisItem = 0;
+ }
+#endif
+
+}
+
+void PopupMenu::hidePopups()
+{
+ if ( !preventAnimation )
+ QTimer::singleShot( 10, this, SLOT(allowAnimation()) );
+ preventAnimation = TRUE;
+
+ QMenuItemListIt it(*mitems);
+ register QMenuItem *mi;
+ while ( (mi=it.current()) ) {
+ ++it;
+ if ( mi->popup() && mi->popup()->parentMenu == this ) //avoid circularity
+ mi->popup()->hide();
+ }
+ popupActive = -1; // no active sub menu
+ if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this))
+ d->mouseMoveBuffer = QRegion();
+
+ QRect mfrect = itemGeometry( actItem );
+ setMicroFocusHint( mfrect.x(), mfrect.y(), mfrect.width(), mfrect.height(), FALSE );
+}
+
+bool PopupMenu::tryMenuBar( QMouseEvent *e )
+{
+ register QMenuData *top = this; // find top level
+ while ( top->parentMenu )
+ top = top->parentMenu;
+#ifndef QT_NO_MENUBAR
+ return top->isMenuBar ?
+ ((QMenuBar *)top)->tryMouseEvent( this, e ) :
+ ((PopupMenu*)top)->tryMouseEvent(this, e );
+#else
+ return ((PopupMenu*)top)->tryMouseEvent(this, e );
+#endif
+}
+
+bool PopupMenu::tryMouseEvent( PopupMenu *p, QMouseEvent * e)
+{
+ if ( p == this )
+ return FALSE;
+ QPoint pos = mapFromGlobal( e->globalPos() );
+ if ( !rect().contains( pos ) ) // outside
+ return FALSE;
+ QMouseEvent ee( e->type(), pos, e->globalPos(), e->button(), e->state() );
+ event( &ee );
+ return TRUE;
+}
+
+void PopupMenu::byeMenuBar()
+{
+#ifndef QT_NO_MENUBAR
+ register QMenuData *top = this; // find top level
+ while ( top->parentMenu )
+ top = top->parentMenu;
+#endif
+ hideAllPopups();
+#ifndef QT_NO_MENUBAR
+ if ( top->isMenuBar )
+ ((QMenuBar *)top)->goodbye();
+#endif
+}
+
+int PopupMenu::itemAtPos( const QPoint &pos, bool ignoreSeparator ) const
+{
+ if ( !contentsRect().contains(pos) )
+ return -1;
+
+ int row = 0;
+ int x = contentsRect().x();
+ int y = contentsRect().y();
+ QMenuItem *mi;
+ QMenuItemListIt it( *mitems );
+ if(d->scroll.scrollable) {
+ if(d->scroll.topScrollableIndex) {
+ for( ; (mi = it.current()) && row < d->scroll.topScrollableIndex; row++)
+ ++it;
+ if(!mi) {
+ row = 0;
+ it.toFirst();
+ }
+ y += style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this);
+ }
+ }
+ int itemw = contentsRect().width() / ncols;
+ QSize sz;
+ while ( (mi=it.current()) ) {
+ if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown &&
+ y >= contentsRect().height() - style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this))
+ return -1;
+ ++it;
+ if ( !mi->isVisible() ) {
+ ++row;
+ continue;
+ }
+ int itemh = itemHeight( mi );
+
+ sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this,
+ QSize(0, itemh),
+ QStyleOption(mi,maxPMWidth));
+ sz = sz.expandedTo(QSize(itemw, sz.height()));
+ itemw = sz.width();
+ itemh = sz.height();
+
+ if ( ncols > 1 && y + itemh > contentsRect().bottom() ) {
+ y = contentsRect().y();
+ x +=itemw;
+ }
+ if ( QRect( x, y, itemw, itemh ).contains( pos ) )
+ break;
+ y += itemh;
+ ++row;
+ }
+
+ if ( mi && ( !ignoreSeparator || !mi->isSeparator() ) )
+ return row;
+ return -1;
+}
+
+QRect PopupMenu::itemGeometry( int index )
+{
+ QMenuItem *mi;
+ QSize sz;
+ int row = 0, scrollh = 0;
+ int x = contentsRect().x();
+ int y = contentsRect().y();
+ QMenuItemListIt it( *mitems );
+ if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp) {
+ scrollh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this);
+ y += scrollh;
+ if(d->scroll.topScrollableIndex) {
+ for( ; (mi = it.current()) && row < d->scroll.topScrollableIndex; row++)
+ ++it;
+ if(!mi) {
+ row = 0;
+ it.toFirst();
+ }
+ }
+ }
+ int itemw = contentsRect().width() / ncols;
+ while ( (mi=it.current()) ) {
+ if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown &&
+ y >= contentsRect().height() - scrollh)
+ break;
+ ++it;
+ if ( !mi->isVisible() ) {
+ ++row;
+ continue;
+ }
+ int itemh = itemHeight( mi );
+
+ sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this,
+ QSize(0, itemh),
+ QStyleOption(mi,maxPMWidth));
+ sz = sz.expandedTo(QSize(itemw, sz.height()));
+ itemw = sz.width();
+ itemh = sz.height();
+ if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown &&
+ (y + itemh > contentsRect().height() - scrollh))
+ itemh -= (y + itemh) - (contentsRect().height() - scrollh);
+ if ( ncols > 1 && y + itemh > contentsRect().bottom() ) {
+ y = contentsRect().y();
+ x +=itemw;
+ }
+ if ( row == index )
+ return QRect( x,y,itemw,itemh );
+ y += itemh;
+ ++row;
+ }
+
+ return QRect(0,0,0,0);
+}
+
+QSize PopupMenu::updateSize(bool force_update, bool do_resize)
+{
+ polish();
+ if ( count() == 0 ) {
+ QSize ret = QSize( 50, 8 );
+ if(do_resize)
+ setFixedSize( ret );
+ badSize = TRUE;
+ return ret;
+ }
+
+ int scrheight = 0;
+ if(d->scroll.scrollableSize) {
+ if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp)
+ scrheight += style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this);
+ if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown)
+ scrheight += style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this);
+ }
+
+ if(badSize || force_update) {
+#ifndef QT_NO_ACCEL
+ updateAccel( 0 );
+#endif
+ int height = 0;
+ int max_width = 0, max_height = 0;
+ QFontMetrics fm = fontMetrics();
+ register QMenuItem *mi;
+ maxPMWidth = 0;
+ int maxWidgetWidth = 0;
+ tab = 0;
+
+ for ( QMenuItemListIt it( *mitems ); it.current(); ++it ) {
+ mi = it.current();
+ QWidget *miw = mi->widget();
+ if (miw) {
+ if ( miw->parentWidget() != this )
+ miw->reparent( this, QPoint(0,0), TRUE );
+ // widget items musn't propgate mouse events
+ ((PopupMenu*)miw)->setWFlags(WNoMousePropagation);
+ }
+ if ( mi->custom() )
+ mi->custom()->setFont( font() );
+ if ( mi->iconSet() != 0)
+ maxPMWidth = QMAX( maxPMWidth,
+ mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width() + 4 );
+ }
+
+ int dh = QApplication::desktop()->height();
+ ncols = 1;
+
+ for ( QMenuItemListIt it2( *mitems ); it2.current(); ++it2 ) {
+ mi = it2.current();
+ if ( !mi->isVisible() )
+ continue;
+ int w = 0;
+ int itemHeight = PopupMenu::itemHeight( mi );
+
+ if ( mi->widget() ) {
+ QSize s( mi->widget()->sizeHint() );
+ s = s.expandedTo( mi->widget()->minimumSize() );
+ mi->widget()->resize( s );
+ if ( s.width() > maxWidgetWidth )
+ maxWidgetWidth = s.width();
+ itemHeight = s.height();
+ } else {
+ if( ! mi->isSeparator() ) {
+ if ( mi->custom() ) {
+ if ( mi->custom()->fullSpan() ) {
+ maxWidgetWidth = QMAX( maxWidgetWidth,
+ mi->custom()->sizeHint().width() );
+ } else {
+ QSize s ( mi->custom()->sizeHint() );
+ w += s.width();
+ }
+ }
+
+ w += maxPMWidth;
+
+ if (! mi->text().isNull()) {
+ QString s = mi->text();
+ int t;
+ if ( (t = s.find('\t')) >= 0 ) { // string contains tab
+ w += fm.width( s, t );
+ w -= s.contains('&') * fm.width('&');
+ w += s.contains("&&") * fm.width('&');
+ int tw = fm.width( s.mid(t + 1) );
+ if ( tw > tab)
+ tab = tw;
+ } else {
+ w += fm.width( s );
+ w -= s.contains('&') * fm.width('&');
+ w += s.contains("&&") * fm.width('&');
+ }
+ } else if (mi->pixmap())
+ w += mi->pixmap()->width();
+ } else {
+ if ( mi->custom() ) {
+ QSize s ( mi->custom()->sizeHint() );
+ w += s.width();
+ } else {
+ w = itemHeight = 2;
+ }
+ }
+
+ QSize sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this,
+ QSize(w, itemHeight),
+ QStyleOption(mi,maxPMWidth));
+
+ w = sz.width();
+ itemHeight = sz.height();
+
+#if defined(QT_CHECK_NULL)
+ if ( mi->text().isNull() && !mi->pixmap() && !mi->iconSet() &&
+ !mi->isSeparator() && !mi->widget() && !mi->custom() )
+ qWarning( "PopupMenu: (%s) Popup has invalid menu item",
+ name( "unnamed" ) );
+#endif
+ }
+ height += itemHeight;
+ if(style().styleHint(QStyle::SH_PopupMenu_Scrollable, this)) {
+ if(scrheight && height >= d->scroll.scrollableSize - scrheight) {
+ height = d->scroll.scrollableSize - scrheight;
+ break;
+ }
+ } else if( height + 2*frameWidth() >= dh ) {
+ ncols++;
+ max_height = QMAX(max_height, height - itemHeight);
+ height = itemHeight;
+ }
+ if ( w > max_width )
+ max_width = w;
+ }
+ if( ncols == 1 && !max_height )
+ max_height = height;
+
+ if(style().styleHint(QStyle::SH_PopupMenu_Scrollable, this)) {
+ height += scrheight;
+ setMouseTracking(TRUE);
+ }
+
+ if ( tab )
+ tab -= fontMetrics().minRightBearing();
+ else
+ max_width -= fontMetrics().minRightBearing();
+
+ if ( max_width + tab < maxWidgetWidth )
+ max_width = maxWidgetWidth - tab;
+
+ const int fw = frameWidth();
+ int extra_width = (fw+style().pixelMetric(QStyle::PM_PopupMenuFrameHorizontalExtra, this)) * 2,
+ extra_height = (fw+style().pixelMetric(QStyle::PM_PopupMenuFrameVerticalExtra, this)) * 2;
+ if ( ncols == 1 )
+ d->calcSize = QSize( QMAX( minimumWidth(), max_width + tab + extra_width ),
+ QMAX( minimumHeight() , height + extra_height ) );
+ else
+ d->calcSize = QSize( QMAX( minimumWidth(), (ncols*(max_width + tab)) + extra_width ),
+ QMAX( minimumHeight(), QMIN( max_height + extra_height + 1, dh ) ) );
+ badSize = FALSE;
+ }
+
+ {
+ // Position the widget items. It could be done in drawContents
+ // but this way we get less flicker.
+ QSize sz;
+ int x = contentsRect().x();
+ int y = contentsRect().y();
+ int itemw = contentsRect().width() / ncols;
+ for(QMenuItemListIt it(*mitems); it.current(); ++it) {
+ QMenuItem *mi = it.current();
+ if ( !mi->isVisible() )
+ continue;
+
+ int itemh = itemHeight( mi );
+
+ sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this,
+ QSize(0, itemh), QStyleOption(mi,maxPMWidth));
+ sz = sz.expandedTo(QSize(itemw, sz.height()));
+ itemw = sz.width();
+ itemh = sz.height();
+
+ if ( ncols > 1 && y + itemh > contentsRect().bottom() ) {
+ y = contentsRect().y();
+ x +=itemw;
+ }
+ if ( mi->widget() )
+ mi->widget()->setGeometry( x, y, itemw, mi->widget()->height() );
+ y += itemh;
+ }
+ }
+
+ if( do_resize && size() != d->calcSize ) {
+ setMaximumSize( d->calcSize );
+ d->calcSize = maximumSize(); //let the max size adjust it (virtual)
+ resize( d->calcSize );
+ }
+ return d->calcSize;
+}
+
+#ifndef QT_NO_ACCEL
+void PopupMenu::updateAccel( QWidget *parent )
+{
+ QMenuItemListIt it(*mitems);
+ register QMenuItem *mi;
+
+ if ( parent ) {
+ delete autoaccel;
+ autoaccel = 0;
+ } else if ( !autoaccel ) {
+ // we have no parent. Rather than ignoring any accelerators we try to find this popup's main window
+ if ( tornOff ) {
+ parent = this;
+ } else {
+ QWidget *w = (QWidget *) this;
+ parent = w->parentWidget();
+ while ( (!w->testWFlags(WType_TopLevel) || !w->testWFlags(WType_Popup)) && parent ) {
+ w = parent;
+ parent = parent->parentWidget();
+ }
+ }
+ }
+
+ if ( parent == 0 && autoaccel == 0 )
+ return;
+
+ if ( autoaccel ) // build it from scratch
+ autoaccel->clear();
+ else {
+ // create an autoaccel in any case, even if we might not use
+ // it immediately. Maybe the user needs it later.
+ autoaccel = new QAccel( parent, this );
+ connect( autoaccel, SIGNAL(activated(int)),
+ SLOT(accelActivated(int)) );
+ connect( autoaccel, SIGNAL(activatedAmbiguously(int)),
+ SLOT(accelActivated(int)) );
+ connect( autoaccel, SIGNAL(destroyed()),
+ SLOT(accelDestroyed()) );
+ if ( accelDisabled )
+ autoaccel->setEnabled( FALSE );
+ }
+ while ( (mi=it.current()) ) {
+ ++it;
+ QKeySequence k = mi->key();
+ if ( (int)k ) {
+ int id = autoaccel->insertItem( k, mi->id() );
+#ifndef QT_NO_WHATSTHIS
+ autoaccel->setWhatsThis( id, mi->whatsThis() );
+#endif
+ }
+ if ( !mi->text().isNull() || mi->custom() ) {
+ QString s = mi->text();
+ int i = s.find('\t');
+
+ // Note: Only looking at the first key in the sequence!
+ if ( (int)k && (int)k != Key_unknown ) {
+ QString t = (QString)mi->key();
+ if ( i >= 0 )
+ s.replace( i+1, s.length()-i, t );
+ else {
+ s += '\t';
+ s += t;
+ }
+ } else if ( !k ) {
+ if ( i >= 0 )
+ s.truncate( i );
+ }
+ if ( s != mi->text() ) {
+ mi->setText( s );
+ badSize = TRUE;
+ }
+ }
+ if ( mi->popup() && parent ) { // call recursively
+ // reuse
+ PopupMenu* popup = mi->popup();
+ if (!popup->avoid_circularity) {
+ popup->avoid_circularity = 1;
+ popup->updateAccel( parent );
+ popup->avoid_circularity = 0;
+ }
+ }
+ }
+}
+
+void PopupMenu::enableAccel( bool enable )
+{
+ if ( autoaccel )
+ autoaccel->setEnabled( enable );
+ accelDisabled = !enable; // rememeber when updateAccel
+ QMenuItemListIt it(*mitems);
+ register QMenuItem *mi;
+ while ( (mi=it.current()) ) { // do the same for sub popups
+ ++it;
+ if ( mi->popup() ) // call recursively
+ mi->popup()->enableAccel( enable );
+ }
+}
+#endif
+
+void PopupMenu::setFont( const QFont &font )
+{
+ QWidget::setFont( font );
+ badSize = TRUE;
+ if ( isVisible() ) {
+ updateSize();
+ update();
+ }
+}
+
+void PopupMenu::show()
+{
+ if ( !isPopup() && isVisible() )
+ hide();
+
+ if ( isVisible() ) {
+ supressAboutToShow = FALSE;
+ QWidget::show();
+ return;
+ }
+ if (!supressAboutToShow)
+ emit aboutToShow();
+ else
+ supressAboutToShow = FALSE;
+ performDelayedChanges();
+ updateSize(TRUE);
+ QWidget::show();
+ popupActive = -1;
+ if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this))
+ d->mouseMoveBuffer = QRegion();
+}
+
+void PopupMenu::hide()
+{
+ if ( syncMenu == this && qApp ) {
+ qApp->exit_loop();
+ syncMenu = 0;
+ }
+
+ if ( !isVisible() ) {
+ QWidget::hide();
+ return;
+ }
+ emit aboutToHide();
+
+ actItem = popupActive = -1;
+ if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this))
+ d->mouseMoveBuffer = QRegion();
+ mouseBtDn = FALSE; // mouse button up
+#if defined(QT_ACCESSIBILITY_SUPPORT)
+ QAccessible::updateAccessibility( this, 0, QAccessible::PopupMenuEnd );
+#endif
+ parentMenu = 0;
+ hidePopups();
+ QWidget::hide();
+}
+
+int PopupMenu::itemHeight( int row ) const
+{
+ return itemHeight( mitems->at( row ) );
+}
+
+int PopupMenu::itemHeight( QMenuItem *mi ) const
+{
+ if ( mi->widget() )
+ return mi->widget()->height();
+ if ( mi->custom() && mi->custom()->fullSpan() )
+ return mi->custom()->sizeHint().height();
+
+ QFontMetrics fm(fontMetrics());
+ int h = 0;
+ if ( mi->isSeparator() ) // separator height
+ h = 2;
+ else if ( mi->pixmap() ) // pixmap height
+ h = mi->pixmap()->height();
+ else // text height
+ h = fm.height();
+
+ if ( !mi->isSeparator() && mi->iconSet() != 0 )
+ h = QMAX(h, mi->iconSet()->pixmap( QIconSet::Small,
+ QIconSet::Normal ).height());
+ if ( mi->custom() )
+ h = QMAX(h, mi->custom()->sizeHint().height());
+
+ return h;
+}
+
+void PopupMenu::drawItem( QPainter* p, int tab_, QMenuItem* mi,
+ bool act, int x, int y, int w, int h)
+{
+ QStyle::SFlags flags = QStyle::Style_Default;
+ if (isEnabled() && mi->isEnabledAndVisible() && (!mi->popup() || mi->popup()->isEnabled()) )
+ flags |= QStyle::Style_Enabled;
+ if (act)
+ flags |= QStyle::Style_Active;
+ if (mouseBtDn)
+ flags |= QStyle::Style_Down;
+
+ const QColorGroup &cg = ((flags&QStyle::Style_Enabled) ? colorGroup() : palette().disabled() );
+
+ if ( mi->custom() && mi->custom()->fullSpan() ) {
+ QMenuItem dummy;
+ style().drawControl(QStyle::CE_PopupMenuItem, p, this, QRect(x, y, w, h), cg,
+ flags, QStyleOption(&dummy,maxPMWidth,tab_));
+ mi->custom()->paint( p, cg, act, flags&QStyle::Style_Enabled, x, y, w, h );
+ } else
+ style().drawControl(QStyle::CE_PopupMenuItem, p, this, QRect(x, y, w, h), cg,
+ flags, QStyleOption(mi,maxPMWidth,tab_));
+}
+
+void PopupMenu::drawContents( QPainter* p )
+{
+ QMenuItemListIt it(*mitems);
+ QMenuItem *mi = 0;
+ int row = 0;
+ int x = contentsRect().x();
+ int y = contentsRect().y();
+ if(d->scroll.scrollable) {
+ if(d->scroll.topScrollableIndex) {
+ for( ; (mi = it.current()) && row < d->scroll.topScrollableIndex; row++)
+ ++it;
+ if(!mi)
+ it.toFirst();
+ }
+ if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp) {
+ QRect rect(x, y, contentsRect().width(),
+ style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this));
+ if(!p->hasClipping() || p->clipRegion().contains(rect)) {
+ QStyle::SFlags flags = QStyle::Style_Up;
+ if (isEnabled())
+ flags |= QStyle::Style_Enabled;
+ style().drawControl(QStyle::CE_PopupMenuScroller, p, this, rect,
+ colorGroup(), flags, QStyleOption(maxPMWidth));
+ }
+ y += rect.height();
+ }
+ }
+
+ int itemw = contentsRect().width() / ncols;
+ QSize sz;
+ QStyle::SFlags flags;
+ while ( (mi=it.current()) ) {
+ if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown &&
+ y >= contentsRect().height() - style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this))
+ break;
+ ++it;
+ if ( !mi->isVisible() ) {
+ ++row;
+ continue;
+ }
+ int itemh = itemHeight( mi );
+ sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this,
+ QSize(0, itemh),
+ QStyleOption(mi,maxPMWidth,0)
+ );
+ sz = sz.expandedTo(QSize(itemw, sz.height()));
+ itemw = sz.width();
+ itemh = sz.height();
+
+ if ( ncols > 1 && y + itemh > contentsRect().bottom() ) {
+ if ( y < contentsRect().bottom() ) {
+ QRect rect(x, y, itemw, contentsRect().bottom() - y);
+ if(!p->hasClipping() || p->clipRegion().contains(rect)) {
+ flags = QStyle::Style_Default;
+ if (isEnabled() && mi->isEnabledAndVisible())
+ flags |= QStyle::Style_Enabled;
+ style().drawControl(QStyle::CE_PopupMenuItem, p, this, rect,
+ colorGroup(), flags, QStyleOption((QMenuItem*)0,maxPMWidth));
+ }
+ }
+ y = contentsRect().y();
+ x +=itemw;
+ }
+ if (!mi->widget() && (!p->hasClipping() || p->clipRegion().contains(QRect(x, y, itemw, itemh))))
+ drawItem( p, tab, mi, row == actItem, x, y, itemw, itemh );
+ y += itemh;
+ ++row;
+ }
+ if ( y < contentsRect().bottom() ) {
+ QRect rect(x, y, itemw, contentsRect().bottom() - y);
+ if(!p->hasClipping() || p->clipRegion().contains(rect)) {
+ flags = QStyle::Style_Default;
+ if ( isEnabled() )
+ flags |= QStyle::Style_Enabled;
+ style().drawControl(QStyle::CE_PopupMenuItem, p, this, rect,
+ colorGroup(), flags, QStyleOption((QMenuItem*)0,maxPMWidth));
+ }
+ }
+ if( d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown ) {
+ int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this);
+ QRect rect(x, contentsRect().height() - sh, contentsRect().width(), sh);
+ if(!p->hasClipping() || p->clipRegion().contains(rect)) {
+ QStyle::SFlags flags = QStyle::Style_Down;
+ if (isEnabled())
+ flags |= QStyle::Style_Enabled;
+ style().drawControl(QStyle::CE_PopupMenuScroller, p, this, rect,
+ colorGroup(), flags, QStyleOption(maxPMWidth));
+ }
+ }
+#if defined( DEBUG_SLOPPY_SUBMENU )
+ if ( style().styleHint(QStyle::SH_PopupMenu_SloppySubMenus, this )) {
+ p->setClipRegion( d->mouseMoveBuffer );
+ p->fillRect( d->mouseMoveBuffer.boundingRect(), colorGroup().brush( QColorGroup::Highlight ) );
+ }
+#endif
+}
+
+void PopupMenu::paintEvent( QPaintEvent *e )
+{
+ QFrame::paintEvent( e );
+}
+
+void PopupMenu::closeEvent( QCloseEvent * e) {
+ e->accept();
+ byeMenuBar();
+}
+
+void PopupMenu::mousePressEvent( QMouseEvent *e )
+{
+ int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this);
+ if (rect().contains(e->pos()) &&
+ ((d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp && e->pos().y() <= sh) || //up
+ (d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown &&
+ e->pos().y() >= contentsRect().height() - sh))) //down
+ return;
+
+ mouseBtDn = TRUE; // mouse button down
+ int item = itemAtPos( e->pos() );
+ if ( item == -1 ) {
+ if ( !rect().contains(e->pos()) && !tryMenuBar(e) ) {
+ byeMenuBar();
+ }
+ return;
+ }
+ register QMenuItem *mi = mitems->at(item);
+ if ( item != actItem ) // new item activated
+ setActiveItem( item );
+
+ PopupMenu *popup = mi->popup();
+ if ( popup ) {
+ if ( popup->isVisible() ) { // sub menu already open
+ int pactItem = popup->actItem;
+ popup->actItem = -1;
+ popup->hidePopups();
+ popup->updateRow( pactItem );
+ } else { // open sub menu
+ hidePopups();
+ popupSubMenuLater( 20, this );
+ }
+ } else {
+ hidePopups();
+ }
+}
+
+void PopupMenu::mouseReleaseEvent( QMouseEvent *e )
+{
+ // do not hide a standalone context menu on press-release, unless
+ // the user moved the mouse significantly
+ if ( !parentMenu && !mouseBtDn && actItem < 0 && motion < 6 )
+ return;
+
+ mouseBtDn = FALSE;
+
+ // if the user released the mouse outside the menu, pass control
+ // to the menubar or our parent menu
+ int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this);
+ if ( !rect().contains( e->pos() ) && tryMenuBar(e) )
+ return;
+ else if((d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp && e->pos().y() <= sh) || //up
+ (d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown &&
+ e->pos().y() >= contentsRect().height() - sh)) //down
+ return;
+
+ if ( actItem < 0 ) { // we do not have an active item
+ // if the release is inside without motion (happens with
+ // oversized popup menus on small screens), ignore it
+ if ( rect().contains( e->pos() ) && motion < 6 )
+ return;
+ else
+ byeMenuBar();
+ } else { // selected menu item!
+ register QMenuItem *mi = mitems->at(actItem);
+ if ( mi ->widget() ) {
+ QWidget* widgetAt = QApplication::widgetAt( e->globalPos(), TRUE );
+ if ( widgetAt && widgetAt != this ) {
+ QMouseEvent me( e->type(), widgetAt->mapFromGlobal( e->globalPos() ),
+ e->globalPos(), e->button(), e->state() );
+ QApplication::sendEvent( widgetAt, &me );
+ }
+ }
+ PopupMenu *popup = mi->popup();
+#ifndef QT_NO_WHATSTHIS
+ bool b = QWhatsThis::inWhatsThisMode();
+#else
+ const bool b = FALSE;
+#endif
+ if ( !mi->isEnabledAndVisible() ) {
+#ifndef QT_NO_WHATSTHIS
+ if ( b ) {
+ actItem = -1;
+ updateItem( mi->id() );
+ byeMenuBar();
+ actSig( mi->id(), b);
+ }
+#endif
+ } else if ( popup ) {
+ popup->setFirstItemActive();
+ } else { // normal menu item
+ byeMenuBar(); // deactivate menu bar
+ if ( mi->isEnabledAndVisible() ) {
+ actItem = -1;
+ updateItem( mi->id() );
+ active_popup_menu = this;
+ QGuardedPtr<QSignal> signal = mi->signal();
+ actSig( mi->id(), b );
+ if ( signal && !b )
+ signal->activate();
+ active_popup_menu = 0;
+ }
+ }
+ }
+}
+
+void PopupMenu::mouseMoveEvent( QMouseEvent *e )
+{
+ motion++;
+
+ if ( parentMenu && parentMenu->isPopupMenu ) {
+ PopupMenu* p = (PopupMenu*)parentMenu;
+ int myIndex;
+
+ p->findPopup( this, &myIndex );
+ QPoint pPos = p->mapFromParent( e->globalPos() );
+ if ( p->actItem != myIndex && !p->rect().contains( pPos ) )
+ p->setActiveItem( myIndex );
+
+ if ( style().styleHint(QStyle::SH_PopupMenu_SloppySubMenus, this )) {
+ p->d->mouseMoveBuffer = QRegion();
+#ifdef DEBUG_SLOPPY_SUBMENU
+ p->repaint();
+#endif
+ }
+ }
+
+ if ( (e->state() & Qt::MouseButtonMask) == 0 &&
+ !hasMouseTracking() )
+ return;
+
+ if(d->scroll.scrollable && e->pos().x() >= rect().x() && e->pos().x() <= rect().width()) {
+ int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this);
+ if((d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp && e->pos().y() <= sh) ||
+ (d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown && e->pos().y() >= height()-sh)) {
+ if(!d->scroll.scrolltimer) {
+ d->scroll.scrolltimer = new QTimer(this, "popup scroll timer");
+ QObject::connect( d->scroll.scrolltimer, SIGNAL(timeout()),
+ this, SLOT(subScrollTimer()) );
+ }
+ if(!d->scroll.scrolltimer->isActive())
+ d->scroll.scrolltimer->start(40);
+ return;
+ }
+ }
+
+ int item = itemAtPos( e->pos() );
+ if ( item == -1 ) { // no valid item
+ int lastActItem = actItem;
+ actItem = -1;
+ if ( lastActItem >= 0 )
+ updateRow( lastActItem );
+ if ( lastActItem > 0 ||
+ ( !rect().contains( e->pos() ) && !tryMenuBar( e ) ) ) {
+ popupSubMenuLater(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay,
+ this), this);
+ }
+ } else { // mouse on valid item
+ // but did not register mouse press
+ if ( (e->state() & Qt::MouseButtonMask) && !mouseBtDn )
+ mouseBtDn = TRUE; // so mouseReleaseEvent will pop down
+
+ register QMenuItem *mi = mitems->at( item );
+
+ if ( mi->widget() ) {
+ QWidget* widgetAt = QApplication::widgetAt( e->globalPos(), TRUE );
+ if ( widgetAt && widgetAt != this ) {
+ QMouseEvent me( e->type(), widgetAt->mapFromGlobal( e->globalPos() ),
+ e->globalPos(), e->button(), e->state() );
+ QApplication::sendEvent( widgetAt, &me );
+ }
+ }
+
+ if ( actItem == item )
+ return;
+
+ if ( style().styleHint(QStyle::SH_PopupMenu_SloppySubMenus, this) &&
+ d->mouseMoveBuffer.contains( e->pos() ) ) {
+ actItem = item;
+ popupSubMenuLater( style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this) * 6,
+ this );
+ return;
+ }
+
+ if ( mi->popup() || ( popupActive >= 0 && popupActive != item ))
+ popupSubMenuLater( style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this),
+ this );
+ else if ( singleSingleShot )
+ singleSingleShot->stop();
+
+ if ( item != actItem )
+ setActiveItem( item );
+ }
+}
+
+void PopupMenu::keyPressEvent( QKeyEvent *e )
+{
+ QMenuItem *mi = 0;
+ PopupMenu *popup;
+ int dy = 0;
+ bool ok_key = TRUE;
+
+ int key = e->key();
+ if ( QApplication::reverseLayout() ) {
+ // in reverse mode opening and closing keys for submenues are reversed
+ if ( key == Key_Left )
+ key = Key_Right;
+ else if ( key == Key_Right )
+ key = Key_Left;
+ }
+
+ switch ( key ) {
+ case Key_Tab:
+ // ignore tab, otherwise it will be passed to the menubar
+ break;
+
+ case Key_Up:
+ dy = -1;
+ break;
+
+ case Key_Down:
+ dy = 1;
+ break;
+
+ case Key_Alt:
+ if ( style().styleHint(QStyle::SH_MenuBar_AltKeyNavigation, this) )
+ byeMenuBar();
+ break;
+
+ case Key_Escape:
+ if ( tornOff ) {
+ close();
+ return;
+ }
+ // just hide one
+ {
+ QMenuData* p = parentMenu;
+ hide();
+#ifndef QT_NO_MENUBAR
+ if ( p && p->isMenuBar )
+ ((QMenuBar*) p)->goodbye( TRUE );
+#endif
+ }
+ break;
+
+ case Key_Left:
+ if ( ncols > 1 && actItem >= 0 ) {
+ QRect r( itemGeometry( actItem ) );
+ int newActItem = itemAtPos( QPoint( r.left() - 1, r.center().y() ) );
+ if ( newActItem >= 0 ) {
+ setActiveItem( newActItem );
+ break;
+ }
+ }
+ if ( parentMenu && parentMenu->isPopupMenu ) {
+ ((PopupMenu *)parentMenu)->hidePopups();
+ if ( singleSingleShot )
+ singleSingleShot->stop();
+ break;
+ }
+
+ ok_key = FALSE;
+ break;
+
+ case Key_Right:
+ if ( actItem >= 0 && ( mi=mitems->at(actItem) )->isEnabledAndVisible() && (popup=mi->popup()) ) {
+ hidePopups();
+ if ( singleSingleShot )
+ singleSingleShot->stop();
+ // ### The next two lines were switched to fix the problem with the first item of the
+ // submenu not being highlighted...any reason why they should have been the other way??
+ subMenuTimer();
+ popup->setFirstItemActive();
+ break;
+ } else if ( actItem == -1 && ( parentMenu && !parentMenu->isMenuBar )) {
+ dy = 1;
+ break;
+ }
+ if ( ncols > 1 && actItem >= 0 ) {
+ QRect r( itemGeometry( actItem ) );
+ int newActItem = itemAtPos( QPoint( r.right() + 1, r.center().y() ) );
+ if ( newActItem >= 0 ) {
+ setActiveItem( newActItem );
+ break;
+ }
+ }
+ ok_key = FALSE;
+ break;
+
+ case Key_Space:
+ if (! style().styleHint(QStyle::SH_PopupMenu_SpaceActivatesItem, this))
+ break;
+ // for motif, fall through
+
+ case Key_Return:
+ case Key_Enter:
+ {
+ if ( actItem < 0 )
+ break;
+#ifndef QT_NO_WHATSTHIS
+ bool b = QWhatsThis::inWhatsThisMode();
+#else
+ const bool b = FALSE;
+#endif
+ mi = mitems->at( actItem );
+ if ( !mi->isEnabled() && !b )
+ break;
+ popup = mi->popup();
+ if ( popup ) {
+ hidePopups();
+ popupSubMenuLater( 20, this );
+ popup->setFirstItemActive();
+ } else {
+ actItem = -1;
+ updateItem( mi->id() );
+ byeMenuBar();
+ if ( mi->isEnabledAndVisible() || b ) {
+ active_popup_menu = this;
+ QGuardedPtr<QSignal> signal = mi->signal();
+ actSig( mi->id(), b );
+ if ( signal && !b )
+ signal->activate();
+ active_popup_menu = 0;
+ }
+ }
+ }
+ break;
+#ifndef QT_NO_WHATSTHIS
+ case Key_F1:
+ if ( actItem < 0 || e->state() != ShiftButton)
+ break;
+ mi = mitems->at( actItem );
+ if ( !mi->whatsThis().isNull() ){
+ if ( !QWhatsThis::inWhatsThisMode() )
+ QWhatsThis::enterWhatsThisMode();
+ QRect r( itemGeometry( actItem) );
+ QWhatsThis::leaveWhatsThisMode( mi->whatsThis(), mapToGlobal( r.bottomLeft()) );
+ }
+ //fall-through!
+#endif
+ default:
+ ok_key = FALSE;
+
+ }
+ if ( !ok_key &&
+ ( !e->state() || e->state() == AltButton || e->state() == ShiftButton ) &&
+ e->text().length()==1 ) {
+ QChar c = e->text()[0].upper();
+
+ QMenuItemListIt it(*mitems);
+ QMenuItem* first = 0;
+ QMenuItem* currentSelected = 0;
+ QMenuItem* firstAfterCurrent = 0;
+
+ register QMenuItem *m;
+ mi = 0;
+ int indx = 0;
+ int clashCount = 0;
+ while ( (m=it.current()) ) {
+ ++it;
+ QString s = m->text();
+ if ( !s.isEmpty() ) {
+ int i = s.find( '&' );
+ while ( i >= 0 && i < (int)s.length() - 1 ) {
+ if ( s[i+1].upper() == c ) {
+ ok_key = TRUE;
+ clashCount++;
+ if ( !first )
+ first = m;
+ if ( indx == actItem )
+ currentSelected = m;
+ else if ( !firstAfterCurrent && currentSelected )
+ firstAfterCurrent = m;
+ break;
+ } else if ( s[i+1] == '&' ) {
+ i = s.find( '&', i+2 );
+ } else {
+ break;
+ }
+ }
+ }
+ if ( mi )
+ break;
+ indx++;
+ }
+
+ if ( 1 == clashCount ) { // No clashes, continue with selection
+ mi = first;
+ popup = mi->popup();
+ if ( popup ) {
+ setActiveItem( indexOf(mi->id()) );
+ hidePopups();
+ popupSubMenuLater( 20, this );
+ popup->setFirstItemActive();
+ } else {
+ byeMenuBar();
+#ifndef QT_NO_WHATSTHIS
+ bool b = QWhatsThis::inWhatsThisMode();
+#else
+ const bool b = FALSE;
+#endif
+ if ( mi->isEnabledAndVisible() || b ) {
+ active_popup_menu = this;
+ QGuardedPtr<QSignal> signal = mi->signal();
+ actSig( mi->id(), b );
+ if ( signal && !b )
+ signal->activate();
+ active_popup_menu = 0;
+ }
+ }
+ } else if ( clashCount > 1 ) { // Clashes, highlight next...
+ // If there's clashes and no one is selected, use first one
+ // or if there is no clashes _after_ current, use first one
+ if ( !currentSelected || (currentSelected && !firstAfterCurrent))
+ dy = indexOf( first->id() ) - actItem;
+ else
+ dy = indexOf( firstAfterCurrent->id() ) - actItem;
+ }
+ }
+#ifndef QT_NO_MENUBAR
+ if ( !ok_key ) { // send to menu bar
+ register QMenuData *top = this; // find top level
+ while ( top->parentMenu )
+ top = top->parentMenu;
+ if ( top->isMenuBar ) {
+ int beforeId = top->actItem;
+ ((QMenuBar*)top)->tryKeyEvent( this, e );
+ if ( beforeId != top->actItem )
+ ok_key = TRUE;
+ }
+ }
+#endif
+ if ( actItem < 0 ) {
+ if ( dy > 0 ) {
+ setFirstItemActive();
+ } else if ( dy < 0 ) {
+ QMenuItemListIt it(*mitems);
+ it.toLast();
+ register QMenuItem *mi;
+ int ai = count() - 1;
+ while ( (mi=it.current()) ) {
+ --it;
+ if ( !mi->isSeparator() && mi->id() != QMenuData::d->aInt ) {
+ setActiveItem( ai );
+ return;
+ }
+ ai--;
+ }
+ actItem = -1;
+ }
+ return;
+ }
+
+ if ( dy ) { // highlight next/prev
+ register int i = actItem;
+ int c = mitems->count();
+ for(int n = c; n; n--) {
+ i = i + dy;
+ if(d->scroll.scrollable) {
+ if(d->scroll.scrolltimer)
+ d->scroll.scrolltimer->stop();
+ if(i < 0)
+ i = 0;
+ else if(i >= c)
+ i = c - 1;
+ } else {
+ if ( i == c )
+ i = 0;
+ else if ( i < 0 )
+ i = c - 1;
+ }
+ mi = mitems->at( i );
+ if ( !mi || !mi->isVisible() )
+ continue;
+
+ if ( !mi->isSeparator() &&
+ ( style().styleHint(QStyle::SH_PopupMenu_AllowActiveAndDisabled, this)
+ || mi->isEnabledAndVisible() ) )
+ break;
+ }
+ if ( i != actItem )
+ setActiveItem( i );
+ if(d->scroll.scrollable) { //need to scroll to make it visible?
+ QRect r = itemGeometry(actItem);
+ if(r.isNull() || r.height() < itemHeight(mitems->at(actItem))) {
+ bool refresh = FALSE;
+ if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp && dy == -1) { //up
+ if(d->scroll.topScrollableIndex >= 0) {
+ d->scroll.topScrollableIndex--;
+ refresh = TRUE;
+ }
+ } else if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown) { //down
+ QMenuItemListIt it(*mitems);
+ int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this);
+ for(int i = 0, y = ((d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp) ? sh : 0); it.current(); i++, ++it) {
+ if(i >= d->scroll.topScrollableIndex) {
+ int itemh = itemHeight(it.current());
+ QSize sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this,
+ QSize(0, itemh),
+ QStyleOption(it.current(),maxPMWidth,0));
+ y += sz.height();
+ if(y > (contentsRect().height()-sh)) {
+ if(sz.height() > sh || !it.atLast())
+ d->scroll.topScrollableIndex++;
+ refresh = TRUE;
+ break;
+ }
+ }
+ }
+ }
+ if(refresh) {
+ updateScrollerState();
+ update();
+ }
+ }
+ }
+ }
+
+#ifdef Q_OS_WIN32
+ if ( !ok_key &&
+ !( e->key() == Key_Control || e->key() == Key_Shift || e->key() == Key_Meta ) )
+ qApp->beep();
+#endif // Q_OS_WIN32
+}
+
+void PopupMenu::timerEvent( QTimerEvent *e )
+{
+ QFrame::timerEvent( e );
+}
+
+void PopupMenu::leaveEvent( QEvent * )
+{
+ if ( testWFlags( WStyle_Tool ) && style().styleHint(QStyle::SH_PopupMenu_MouseTracking, this) ) {
+ int lastActItem = actItem;
+ actItem = -1;
+ if ( lastActItem >= 0 )
+ updateRow( lastActItem );
+ }
+}
+
+void PopupMenu::styleChange( QStyle& old )
+{
+ QFrame::styleChange( old );
+ setMouseTracking(style().styleHint(QStyle::SH_PopupMenu_MouseTracking, this));
+ style().polishPopupMenu( this );
+ updateSize(TRUE);
+}
+
+void PopupMenu::enabledChange( bool )
+{
+ if ( QMenuData::d->aWidget ) // torn-off menu
+ QMenuData::d->aWidget->setEnabled( isEnabled() );
+}
+
+int PopupMenu::columns() const
+{
+ return ncols;
+}
+
+// This private slot handles the scrolling popupmenu
+void PopupMenu::subScrollTimer() {
+ QPoint pos = QCursor::pos();
+ if(!d->scroll.scrollable || !isVisible()) {
+ if(d->scroll.scrolltimer)
+ d->scroll.scrolltimer->stop();
+ return;
+ } else if(pos.x() > x() + width() || pos.x() < x()) {
+ return;
+ }
+ int sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this);
+ if(!d->scroll.lastScroll.isValid()) {
+ d->scroll.lastScroll = QTime::currentTime();
+ } else {
+ int factor=0;
+ if(pos.y() < y())
+ factor = y() - pos.y();
+ else if(pos.y() > y() + height())
+ factor = pos.y() - (y() + height());
+ int msecs = 250 - ((factor / 10) * 40);
+ if(d->scroll.lastScroll.msecsTo(QTime::currentTime()) < QMAX(0, msecs))
+ return;
+ d->scroll.lastScroll = QTime::currentTime();
+ }
+ if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp && pos.y() <= y() + sh) { //up
+ if(d->scroll.topScrollableIndex > 0) {
+ d->scroll.topScrollableIndex--;
+ updateScrollerState();
+ update(contentsRect());
+ }
+ } else if(d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollDown &&
+ pos.y() >= (y() + contentsRect().height()) - sh) { //down
+ QMenuItemListIt it(*mitems);
+ for(int i = 0, y = contentsRect().y() + sh; it.current(); i++, ++it) {
+ if(i >= d->scroll.topScrollableIndex) {
+ int itemh = itemHeight(it.current());
+ QSize sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this, QSize(0, itemh),
+ QStyleOption(it.current(),maxPMWidth,0));
+ y += sz.height();
+ if(y > contentsRect().height() - sh) {
+ d->scroll.topScrollableIndex++;
+ updateScrollerState();
+ update(contentsRect());
+ break;
+ }
+ }
+ }
+ }
+}
+
+// This private slot handles the delayed submenu effects
+
+void PopupMenu::subMenuTimer() {
+
+ if ( !isVisible() || (actItem < 0 && popupActive < 0) || actItem == popupActive )
+ return;
+
+ if ( popupActive >= 0 ) {
+ hidePopups();
+ popupActive = -1;
+ }
+
+ // hidePopups() may change actItem etc.
+ if ( !isVisible() || actItem < 0 || actItem == popupActive )
+ return;
+
+ QMenuItem *mi = mitems->at(actItem);
+ if ( !mi || !mi->isEnabledAndVisible() )
+ return;
+
+ PopupMenu *popup = mi->popup();
+ if ( !popup || !popup->isEnabled() )
+ return;
+
+ //avoid circularity
+ if ( popup->isVisible() )
+ return;
+
+ Q_ASSERT( popup->parentMenu == 0 );
+ popup->parentMenu = this; // set parent menu
+
+ emit popup->aboutToShow();
+ supressAboutToShow = TRUE;
+
+
+ QRect r( itemGeometry( actItem ) );
+ QPoint p;
+ QSize ps = popup->sizeHint();
+ if( QApplication::reverseLayout() ) {
+ p = QPoint( r.left() + motifArrowHMargin - ps.width(), r.top() + motifArrowVMargin );
+ p = mapToGlobal( p );
+
+ bool right = FALSE;
+ if ( ( parentMenu && parentMenu->isPopupMenu &&
+ ((PopupMenu*)parentMenu)->geometry().x() < geometry().x() ) ||
+ p.x() < 0 )
+ right = TRUE;
+ if ( right && (ps.width() > QApplication::desktop()->width() - mapToGlobal( r.topRight() ).x() ) )
+ right = FALSE;
+ if ( right )
+ p.setX( mapToGlobal( r.topRight() ).x() );
+ } else {
+ p = QPoint( r.right() - motifArrowHMargin, r.top() + motifArrowVMargin );
+ p = mapToGlobal( p );
+
+ bool left = FALSE;
+ if ( ( parentMenu && parentMenu->isPopupMenu &&
+ ((PopupMenu*)parentMenu)->geometry().x() > geometry().x() ) ||
+ p.x() + ps.width() > QApplication::desktop()->width() )
+ left = TRUE;
+ if ( left && (ps.width() > mapToGlobal( r.topLeft() ).x() ) )
+ left = FALSE;
+ if ( left )
+ p.setX( mapToGlobal( r.topLeft() ).x() - ps.width() );
+ }
+ QRect pr = popup->itemGeometry(popup->count() - 1);
+ if (p.y() + ps.height() > QApplication::desktop()->height() &&
+ p.y() - ps.height() + (QCOORD) pr.height() >= 0)
+ p.setY( p.y() - ps.height() + (QCOORD) pr.height());
+
+ if ( style().styleHint(QStyle::SH_PopupMenu_SloppySubMenus, this )) {
+ QPoint cur = QCursor::pos();
+ if ( r.contains( mapFromGlobal( cur ) ) ) {
+ QPoint pts[4];
+ pts[0] = QPoint( cur.x(), cur.y() - 2 );
+ pts[3] = QPoint( cur.x(), cur.y() + 2 );
+ if ( p.x() >= cur.x() ) {
+ pts[1] = QPoint( geometry().right(), p.y() );
+ pts[2] = QPoint( geometry().right(), p.y() + ps.height() );
+ } else {
+ pts[1] = QPoint( p.x() + ps.width(), p.y() );
+ pts[2] = QPoint( p.x() + ps.width(), p.y() + ps.height() );
+ }
+ QPointArray points( 4 );
+ for( int i = 0; i < 4; i++ )
+ points.setPoint( i, mapFromGlobal( pts[i] ) );
+ d->mouseMoveBuffer = QRegion( points );
+ repaint();
+ }
+ }
+
+ popupActive = actItem;
+ popup->popup( p );
+}
+
+void PopupMenu::allowAnimation()
+{
+ preventAnimation = FALSE;
+}
+
+void PopupMenu::updateRow( int row )
+{
+ if ( !isVisible() )
+ return;
+
+ if ( badSize ) {
+ updateSize();
+ update();
+ return;
+ }
+ updateSize();
+ QRect r = itemGeometry( row );
+ if ( !r.isNull() ) // can happen via the scroller
+ repaint( r );
+}
+
+int PopupMenu::exec( const QPoint & pos, int indexAtPoint )
+{
+ snapToMouse = TRUE;
+ if ( !qApp )
+ return -1;
+
+ PopupMenu* priorSyncMenu = syncMenu;
+
+ syncMenu = this;
+ syncMenuId = -1;
+
+ QGuardedPtr<PopupMenu> that = this;
+ connectModal( that, TRUE );
+ popup( pos, indexAtPoint );
+ qApp->enter_loop();
+ connectModal( that, FALSE );
+
+ syncMenu = priorSyncMenu;
+ return syncMenuId;
+}
+
+
+
+// Connect the popup and all its submenus to modalActivation() if
+// \a doConnect is true, otherwise disconnect.
+void PopupMenu::connectModal( PopupMenu* receiver, bool doConnect )
+{
+ if ( !receiver )
+ return;
+
+ connectModalRecursionSafety = doConnect;
+
+ if ( doConnect )
+ connect( this, SIGNAL(activated(int)),
+ receiver, SLOT(modalActivation(int)) );
+ else
+ disconnect( this, SIGNAL(activated(int)),
+ receiver, SLOT(modalActivation(int)) );
+
+ QMenuItemListIt it(*mitems);
+ register QMenuItem *mi;
+ while ( (mi=it.current()) ) {
+ ++it;
+ if ( mi->popup() && mi->popup() != receiver
+ && (bool)(mi->popup()->connectModalRecursionSafety) != doConnect )
+ mi->popup()->connectModal( receiver, doConnect ); //avoid circular
+ }
+}
+
+int PopupMenu::exec()
+{
+ return exec(mapToGlobal(QPoint(0,0)));
+}
+
+
+// Internal slot used for exec().
+
+void PopupMenu::modalActivation( int id )
+{
+ syncMenuId = id;
+}
+
+void PopupMenu::setActiveItem( int i )
+{
+ int lastActItem = actItem;
+ actItem = i;
+ if ( lastActItem >= 0 )
+ updateRow( lastActItem );
+ if ( i >= 0 && i != lastActItem )
+ updateRow( i );
+ QMenuItem *mi = mitems->at( actItem );
+ if ( !mi )
+ return;
+
+ if ( mi->widget() && mi->widget()->isFocusEnabled() ) {
+ mi->widget()->setFocus();
+ } else {
+ setFocus();
+ QRect mfrect = itemGeometry( actItem );
+ setMicroFocusHint( mfrect.x(), mfrect.y(), mfrect.width(), mfrect.height(), FALSE );
+ }
+ if ( mi->id() != -1 )
+ hilitSig( mi->id() );
+#ifndef QT_NO_WHATSTHIS
+ if (whatsThisItem && whatsThisItem != mi) {
+ qWhatsThisBDH();
+ }
+ whatsThisItem = mi;
+#endif
+}
+
+QSize PopupMenu::sizeHint() const
+{
+ constPolish();
+ PopupMenu* that = (PopupMenu*) this;
+ //We do not need a resize here, just the sizeHint..
+ return that->updateSize(FALSE, FALSE).expandedTo( QApplication::globalStrut() );
+}
+
+int PopupMenu::idAt( const QPoint& pos ) const
+{
+ return idAt( itemAtPos( pos ) );
+}
+
+bool PopupMenu::customWhatsThis() const
+{
+ return TRUE;
+}
+
+bool PopupMenu::focusNextPrevChild( bool next )
+{
+ register QMenuItem *mi;
+ int dy = next? 1 : -1;
+ if ( dy && actItem < 0 ) {
+ setFirstItemActive();
+ } else if ( dy ) { // highlight next/prev
+ register int i = actItem;
+ int c = mitems->count();
+ int n = c;
+ while ( n-- ) {
+ i = i + dy;
+ if ( i == c )
+ i = 0;
+ else if ( i < 0 )
+ i = c - 1;
+ mi = mitems->at( i );
+ if ( mi && !mi->isSeparator() &&
+ ( ( style().styleHint(QStyle::SH_PopupMenu_AllowActiveAndDisabled, this)
+ && mi->isVisible() )
+ || mi->isEnabledAndVisible() ) )
+ break;
+ }
+ if ( i != actItem )
+ setActiveItem( i );
+ }
+ return TRUE;
+}
+
+void PopupMenu::focusInEvent( QFocusEvent * )
+{
+}
+
+void PopupMenu::focusOutEvent( QFocusEvent * )
+{
+}
+
+class QTearOffMenuItem : public QCustomMenuItem
+{
+public:
+ QTearOffMenuItem()
+ {
+ }
+ ~QTearOffMenuItem()
+ {
+ }
+ void paint( QPainter* p, const QColorGroup& cg, bool,
+ bool, int x, int y, int w, int h )
+ {
+ p->setPen( QPen( cg.dark(), 1, DashLine ) );
+ p->drawLine( x+2, y+h/2-1, x+w-4, y+h/2-1 );
+ p->setPen( QPen( cg.light(), 1, DashLine ) );
+ p->drawLine( x+2, y+h/2, x+w-4, y+h/2 );
+ }
+ bool fullSpan() const
+ {
+ return TRUE;
+ }
+
+ QSize sizeHint()
+ {
+ return QSize( 20, 6 );
+ }
+};
+
+int PopupMenu::insertTearOffHandle( int id, int index )
+{
+ int myid = insertItem( new QTearOffMenuItem, id, index );
+ connectItem( myid, this, SLOT( toggleTearOff() ) );
+ QMenuData::d->aInt = myid;
+ return myid;
+}
+
+void PopupMenu::toggleTearOff()
+{
+ if ( active_popup_menu && active_popup_menu->tornOff ) {
+ active_popup_menu->close();
+ } else if (QMenuData::d->aWidget ) {
+ delete (QWidget*) QMenuData::d->aWidget; // delete the old one
+ } else {
+ // create a tear off menu
+ PopupMenu* p = new PopupMenu( parentWidget(), "tear off menu" );
+ connect( p, SIGNAL( activated(int) ), this, SIGNAL( activated(int) ) );
+ connect( p, SIGNAL( highlighted(int) ), this, SIGNAL( highlighted(int) ) );
+#ifndef QT_NO_WIDGET_TOPEXTRA
+ p->setCaption( caption() );
+#endif
+ p->setCheckable( isCheckable() );
+ p->reparent( parentWidget(), WType_TopLevel | WStyle_Tool |
+ WNoAutoErase | WDestructiveClose,
+ geometry().topLeft(), FALSE );
+ p->mitems->setAutoDelete( FALSE );
+ p->tornOff = TRUE;
+ for ( QMenuItemListIt it( *mitems ); it.current(); ++it ) {
+ if ( it.current()->id() != QMenuData::d->aInt && !it.current()->widget() )
+ p->mitems->append( it.current() );
+ }
+ p->show();
+ QMenuData::d->aWidget = p;
+ }
+}
+
+void PopupMenu::activateItemAt( int index )
+{
+ if ( index >= 0 && index < (int) mitems->count() ) {
+ QMenuItem *mi = mitems->at( index );
+ if ( index != actItem ) // new item activated
+ setActiveItem( index );
+ PopupMenu *popup = mi->popup();
+ if ( popup ) {
+ if ( popup->isVisible() ) { // sub menu already open
+ int pactItem = popup->actItem;
+ popup->actItem = -1;
+ popup->hidePopups();
+ popup->updateRow( pactItem );
+ } else { // open sub menu
+ hidePopups();
+ actItem = index;
+ subMenuTimer();
+ popup->setFirstItemActive();
+ }
+ } else {
+ byeMenuBar(); // deactivate menu bar
+
+#ifndef QT_NO_WHATSTHIS
+ bool b = QWhatsThis::inWhatsThisMode();
+#else
+ const bool b = FALSE;
+#endif
+ if ( !mi->isEnabledAndVisible() ) {
+#ifndef QT_NO_WHATSTHIS
+ if ( b ) {
+ actItem = -1;
+ updateItem( mi->id() );
+ byeMenuBar();
+ actSig( mi->id(), b);
+ }
+#endif
+ } else {
+ byeMenuBar(); // deactivate menu bar
+ if ( mi->isEnabledAndVisible() ) {
+ actItem = -1;
+ updateItem( mi->id() );
+ active_popup_menu = this;
+ QGuardedPtr<QSignal> signal = mi->signal();
+ actSig( mi->id(), b );
+ if ( signal && !b )
+ signal->activate();
+ active_popup_menu = 0;
+ }
+ }
+ }
+ } else {
+ if ( tornOff ) {
+ close();
+ } else {
+ QMenuData* p = parentMenu;
+ hide();
+#ifndef QT_NO_MENUBAR
+ if ( p && p->isMenuBar )
+ ((QMenuBar*) p)->goodbye( TRUE );
+#endif
+ }
+ }
+
+}
+
+void
+PopupMenu::updateScrollerState()
+{
+ uint old_scrollable = d->scroll.scrollable;
+ d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone;
+ if(!style().styleHint(QStyle::SH_PopupMenu_Scrollable, this))
+ return;
+
+ QMenuItem *mi;
+ QMenuItemListIt it( *mitems );
+ if(d->scroll.topScrollableIndex) {
+ for(int row = 0; (mi = it.current()) && row < d->scroll.topScrollableIndex; row++)
+ ++it;
+ if(!mi)
+ it.toFirst();
+ }
+ int y = 0, sh = style().pixelMetric(QStyle::PM_PopupMenuScrollerHeight, this);
+ if(!it.atFirst()) {
+ // can't use |= because of a bug/feature in IBM xlC 5.0.2
+ d->scroll.scrollable = d->scroll.scrollable | QPopupMenuPrivate::Scroll::ScrollUp;
+ y += sh;
+ }
+ while ( (mi=it.current()) ) {
+ ++it;
+ int myheight = contentsRect().height();
+ QSize sz = style().sizeFromContents(QStyle::CT_PopupMenuItem, this,
+ QSize(0, itemHeight( mi )),
+ QStyleOption(mi,maxPMWidth));
+ if(y + sz.height() >= myheight) {
+ d->scroll.scrollable = d->scroll.scrollable | QPopupMenuPrivate::Scroll::ScrollDown;
+ break;
+ }
+ y += sz.height();
+ }
+ if((d->scroll.scrollable & QPopupMenuPrivate::Scroll::ScrollUp) &&
+ !(old_scrollable & QPopupMenuPrivate::Scroll::ScrollUp))
+ d->scroll.topScrollableIndex++;
+}
+
+#endif // QT_NO_POPUPMENU
+
+*/
diff --git a/muse2/muse/widgets/popupmenu.h b/muse2/muse/widgets/popupmenu.h
new file mode 100644
index 00000000..138e45e1
--- /dev/null
+++ b/muse2/muse/widgets/popupmenu.h
@@ -0,0 +1,303 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: popupmenu.h,v 1.1.1.1 2010/07/18 03:18:00 terminator356 Exp $
+//
+// (C) Copyright 1999-2010 Werner Schweer (ws@seh.de)
+//
+// PopupMenu sub-class of QPopupMenu created by Tim.
+//=========================================================
+
+
+
+//=========================================================
+//
+// NOTICE: This sub-class of QPopupMenu *automatically* deletes
+// and *clears* any sub popup menus, when clear() is called.
+// Therefore a parent widget is *not* necessary when
+// creating sub popup menus to add to the popup.
+//
+//=========================================================
+
+
+
+#ifndef __POPUPMENU_H__
+#define __POPUPMENU_H__
+
+#include <q3popupmenu.h>
+//Added by qt3to4:
+#include <QMouseEvent>
+//#include <qmenudata.h>
+
+class QWidget;
+class QMouseEvent;
+
+//class MenuData : public QMenuData
+//{
+ //friend class QMenuBar;
+// friend class QPopupMenu;
+// friend class PopupMenu;
+
+// Q_OBJECT
+ //private:
+//};
+
+/*
+// Internal class to get access to protected QMenuData members.
+class MenuData : public QMenuData
+{
+ friend class QPopupMenu;
+ friend class QMenuData;
+ friend class PopupMenu;
+
+private:
+
+public:
+ MenuData() : QMenuData() { }
+ virtual ~MenuData() { }
+};
+*/
+
+//class Q_EXPORT PopupMenu : public QPopupMenu
+class PopupMenu : public Q3PopupMenu
+//class PopupMenu : public QPopupMenu, public MenuData
+{
+ friend class QMenuData;
+ //friend class QMenuBar;
+ friend class Q3PopupMenu;
+ friend class QMenuBar;
+ //friend class MenuData;
+
+ Q_OBJECT
+ private:
+ // QPopupMenu::d is private, so this is our own private.
+ //QPopupMenuPrivate *d;
+
+ //virtual void setFirstItemActive();
+ //void hideAllPopups();
+ //void hidePopups();
+ bool tryMenuBar(QMouseEvent *);
+ //bool tryMouseEvent(QPopupMenu *, QMouseEvent *);
+ bool tryMouseEvent(PopupMenu *, QMouseEvent *);
+ //void byeMenuBar();
+ void actSig(int, bool = FALSE);
+ virtual void menuDelPopup(Q3PopupMenu *);
+
+ protected:
+ //int actItem;
+
+ //void mousePressEvent(QMouseEvent *);
+ void mouseReleaseEvent(QMouseEvent *);
+
+ public:
+ PopupMenu(QWidget* parent=0, const char* name=0);
+ ~PopupMenu();
+};
+
+#endif
+
+
+
+
+/****************************************************************************
+**
+** Definition of QPopupMenu class
+**
+** Created : 941128
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of the widgets module of the Qt GUI Toolkit.
+**
+** This file may be used under the terms of the GNU General
+** Public License versions 2.0 or 3.0 as published by the Free
+** Software Foundation and appearing in the files LICENSE.GPL2
+** and LICENSE.GPL3 included in the packaging of this file.
+** Alternatively you may (at your option) use any later version
+** of the GNU General Public License if such license has been
+** publicly approved by Trolltech ASA (or its successors, if any)
+** and the KDE Free Qt Foundation.
+**
+** Please review the following information to ensure GNU General
+** Public Licensing requirements will be met:
+** http://trolltech.com/products/qt/licenses/licensing/opensource/.
+** If you are unsure which license is appropriate for your use, please
+** review the following information:
+** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
+** or contact the sales department at sales@trolltech.com.
+**
+** This file may be used under the terms of the Q Public License as
+** defined by Trolltech ASA and appearing in the file LICENSE.QPL
+** included in the packaging of this file. Licensees holding valid Qt
+** Commercial licenses may use this file in accordance with the Qt
+** Commercial License Agreement provided with the Software.
+**
+** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
+** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
+** herein.
+**
+**********************************************************************/
+
+/*
+#ifndef __POPUPMENU_H__
+#define __POPUPMENU_H__
+
+#ifndef QT_H
+#include <qframe.h>
+#include <qmenudata.h>
+#endif // QT_H
+
+#ifndef QT_NO_POPUPMENU
+class QPopupMenuPrivate;
+
+class Q_EXPORT PopupMenu : public QFrame, public QMenuData
+{
+ Q_OBJECT
+ Q_PROPERTY( bool checkable READ isCheckable WRITE setCheckable )
+public:
+ PopupMenu( QWidget* parent=0, const char* name=0 );
+ ~PopupMenu();
+
+ void popup( const QPoint & pos, int indexAtPoint = -1 ); // open
+ void updateItem( int id );
+
+ virtual void setCheckable( bool );
+ bool isCheckable() const;
+
+ void setFont( const QFont & );
+ void show();
+ void hide();
+
+ int exec();
+ int exec( const QPoint & pos, int indexAtPoint = 0 ); // modal
+
+ virtual void setActiveItem( int );
+ QSize sizeHint() const;
+
+ int idAt( int index ) const { return QMenuData::idAt( index ); }
+ int idAt( const QPoint& pos ) const;
+
+ bool customWhatsThis() const;
+
+ int insertTearOffHandle( int id=-1, int index=-1 );
+
+ void activateItemAt( int index );
+ QRect itemGeometry( int index );
+
+
+signals:
+ void activated( int itemId );
+ void highlighted( int itemId );
+ void activatedRedirect( int itemId ); // to parent menu
+ void highlightedRedirect( int itemId );
+ void aboutToShow();
+ void aboutToHide();
+
+protected:
+ int itemHeight( int ) const;
+ int itemHeight( QMenuItem* mi ) const;
+ void drawItem( QPainter* p, int tab, QMenuItem* mi,
+ bool act, int x, int y, int w, int h);
+
+ void drawContents( QPainter * );
+
+ void closeEvent( QCloseEvent *e );
+ void paintEvent( QPaintEvent * );
+ void mousePressEvent( QMouseEvent * );
+ void mouseReleaseEvent( QMouseEvent * );
+ void mouseMoveEvent( QMouseEvent * );
+ void keyPressEvent( QKeyEvent * );
+ void focusInEvent( QFocusEvent * );
+ void focusOutEvent( QFocusEvent * );
+ void timerEvent( QTimerEvent * );
+ void leaveEvent( QEvent * );
+ void styleChange( QStyle& );
+ void enabledChange( bool );
+ int columns() const;
+
+ bool focusNextPrevChild( bool next );
+
+ int itemAtPos( const QPoint &, bool ignoreSeparator = TRUE ) const;
+
+private slots:
+ void subActivated( int itemId );
+ void subHighlighted( int itemId );
+#ifndef QT_NO_ACCEL
+ void accelActivated( int itemId );
+ void accelDestroyed();
+#endif
+ void popupDestroyed( QObject* );
+ void modalActivation( int );
+
+ void subMenuTimer();
+ void subScrollTimer();
+ void allowAnimation();
+ void toggleTearOff();
+
+ void performDelayedChanges();
+
+private:
+ void updateScrollerState();
+ void menuContentsChanged();
+ void menuStateChanged();
+ void performDelayedContentsChanged();
+ void performDelayedStateChanged();
+ void menuInsPopup( PopupMenu * );
+ void menuDelPopup( PopupMenu * );
+ void frameChanged();
+
+ void actSig( int, bool = FALSE );
+ void hilitSig( int );
+ virtual void setFirstItemActive();
+ void hideAllPopups();
+ void hidePopups();
+ bool tryMenuBar( QMouseEvent * );
+ void byeMenuBar();
+
+ QSize updateSize(bool force_recalc=FALSE, bool do_resize=TRUE);
+ void updateRow( int row );
+#ifndef QT_NO_ACCEL
+ void updateAccel( QWidget * );
+ void enableAccel( bool );
+#endif
+ QPopupMenuPrivate *d;
+#ifndef QT_NO_ACCEL
+ QAccel *autoaccel;
+#endif
+
+#if defined(Q_WS_MAC) && !defined(QMAC_QMENUBAR_NO_NATIVE)
+ bool macPopupMenu(const QPoint &, int);
+ uint mac_dirty_popup : 1;
+#endif
+
+ int popupActive;
+ int tab;
+ uint accelDisabled : 1;
+ uint checkable : 1;
+ uint connectModalRecursionSafety : 1;
+ uint tornOff : 1;
+ uint pendingDelayedContentsChanges : 1;
+ uint pendingDelayedStateChanges : 1;
+ int maxPMWidth;
+ int ncols;
+ bool snapToMouse;
+ bool tryMouseEvent( PopupMenu *, QMouseEvent * );
+
+ friend class QMenuData;
+ friend class QMenuBar;
+
+ void connectModal(PopupMenu* receiver, bool doConnect);
+
+private: // Disabled copy constructor and operator=
+#if defined(Q_DISABLE_COPY)
+ PopupMenu( const PopupMenu & );
+ PopupMenu &operator=( const PopupMenu & );
+#endif
+};
+
+
+#endif // QT_NO_POPUPMENU
+
+#endif // QPOPUPMENU_H
+*/ \ No newline at end of file
diff --git a/muse2/muse/widgets/posedit.cpp b/muse2/muse/widgets/posedit.cpp
new file mode 100644
index 00000000..9fad1a6f
--- /dev/null
+++ b/muse2/muse/widgets/posedit.cpp
@@ -0,0 +1,875 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: posedit.cpp,v 1.3.2.2 2008/05/21 00:28:54 terminator356 Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <q3rangecontrol.h>
+#include <qapplication.h>
+#include <qpixmap.h>
+#include <qapplication.h>
+#include <q3valuelist.h>
+#include <qstring.h>
+#include <qstyle.h>
+//Added by qt3to4:
+#include <QTimerEvent>
+#include <QKeyEvent>
+#include <QResizeEvent>
+#include <QMouseEvent>
+#include <QEvent>
+#include <QPaintEvent>
+#include <values.h>
+#include <qpainter.h>
+#include <qtimer.h>
+
+#include "posedit.h"
+#include "sig.h"
+
+extern int mtcType;
+
+//---------------------------------------------------------
+// QNumberSection
+//---------------------------------------------------------
+
+class QNumberSection
+ {
+ int selstart;
+ int selend;
+
+ public:
+ QNumberSection(int selStart = 0, int selEnd = 0)
+ : selstart(selStart), selend(selEnd ) {}
+ int selectionStart() const { return selstart; }
+ void setSelectionStart(int s) { selstart = s; }
+ int selectionEnd() const { return selend; }
+ void setSelectionEnd( int s ) { selend = s; }
+ int width() const { return selend - selstart; }
+ };
+
+//---------------------------------------------------------
+// PosEditor
+//---------------------------------------------------------
+
+class PosEditor : public QWidget
+ {
+ PosEdit* cw;
+ bool frm;
+ QPixmap *pm;
+ int focusSec;
+ Q3ValueList<QNumberSection> sections;
+ QString sep;
+ int offset;
+
+ int section(const QPoint&);
+
+ protected:
+ void init();
+ bool event(QEvent *e);
+ void resizeEvent(QResizeEvent*);
+ void paintEvent(QPaintEvent*);
+ void mousePressEvent(QMouseEvent *e);
+
+ void applyFocusSelection() {}
+
+ public:
+ PosEditor(PosEdit* Q_PARENT, const char * Q_NAME );
+ ~PosEditor();
+
+ void setControlWidget(PosEdit * widget);
+ PosEdit* controlWidget() const;
+
+ void setSeparator(const QString& s) { sep = s; }
+ QString separator() const { return sep; }
+ int focusSection() const { return focusSec; }
+
+ bool setFocusSection(int s);
+ void appendSection(const QNumberSection& sec);
+ void clearSections();
+ void setSectionSelection(int sec, int selstart, int selend);
+ bool eventFilter(QObject *o, QEvent *e);
+ };
+
+//---------------------------------------------------------
+// section
+//---------------------------------------------------------
+
+int PosEditor::section(const QPoint& pt)
+ {
+ if (pm->isNull())
+ return -1;
+ QPainter p(pm);
+ int fw = frm ? style()->pixelMetric(QStyle::PM_DefaultFrameWidth) : 0;
+ int x = 2 + fw;
+ int y = 0;
+ int w = width();
+ int h = height();
+ for (unsigned int i = 0; i < sections.count(); ++i) {
+ QString s = cw->sectionFormattedText(i);
+ QRect bb = p.boundingRect(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s);
+ int nx = bb.x() + bb.width();
+ if (pt.x() >= x && pt.x() < nx)
+ return i;
+ x = nx;
+ if (i < sections.count()-1) {
+ QString s = sep;
+ p.drawText(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1, &bb);
+ x = bb.x() + bb.width();
+ }
+ }
+ return -1;
+ }
+
+//---------------------------------------------------------
+// PosEditor
+//---------------------------------------------------------
+
+PosEditor::PosEditor(PosEdit* parent, const char* name)
+ : QWidget(parent, name), sep(".")
+ {
+ cw = parent;
+ frm = true;
+ focusSec = 0;
+ pm = new QPixmap;
+ offset = 0;
+ init();
+ }
+
+//---------------------------------------------------------
+// ~PosEditor
+//---------------------------------------------------------
+
+PosEditor::~PosEditor()
+ {
+ delete pm;
+ }
+
+//---------------------------------------------------------
+// init
+//---------------------------------------------------------
+
+void PosEditor::init()
+ {
+ setBackgroundMode(Qt::PaletteBase);
+ setFocusSection(-1);
+ setKeyCompression(true);
+ installEventFilter(this);
+ setFocusPolicy(Qt::WheelFocus);
+ }
+
+//---------------------------------------------------------
+// event
+//---------------------------------------------------------
+
+bool PosEditor::event(QEvent *e)
+ {
+ if (e->type() == QEvent::FocusIn || e->type() == QEvent::FocusOut) {
+ repaint( rect(), false);
+ }
+ else if (e->type() == QEvent::ShortcutOverride) {
+ QKeyEvent* ke = (QKeyEvent*) e;
+ switch (ke->key()) {
+ case Qt::Key_Delete:
+ case Qt::Key_Backspace:
+ case Qt::Key_Up:
+ case Qt::Key_Down:
+ case Qt::Key_Left:
+ case Qt::Key_Right:
+ ke->accept();
+ default:
+ break;
+ }
+ }
+ return QWidget::event(e);
+ }
+
+void PosEditor::resizeEvent(QResizeEvent *e)
+ {
+ pm->resize(e->size());
+ QWidget::resizeEvent(e);
+ }
+
+//---------------------------------------------------------
+// paintEvent
+//---------------------------------------------------------
+
+void PosEditor::paintEvent(QPaintEvent *)
+ {
+ if (pm->isNull())
+ return;
+
+ const QColorGroup & cg = colorGroup();
+ QPainter p(pm);
+ p.setPen(colorGroup().text());
+ QBrush bg = cg.brush(QColorGroup::Base);
+
+ int fw = frm ? style()->pixelMetric(QStyle::PM_DefaultFrameWidth) : 0;
+ int x = 2 + fw;
+ int y = 0;
+ int w = width();
+ int h = height();
+ p.fillRect(0, 0, w, h, bg);
+
+ for (unsigned int i = 0; i < sections.count(); ++i) {
+ QRect bb;
+ QString s = cw->sectionFormattedText(i);
+
+ if (hasFocus() && (int(i) == focusSec)) {
+ QBrush bg = cg.brush(QColorGroup::Highlight);
+ QRect r = p.boundingRect(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1);
+ p.setPen(colorGroup().highlightedText());
+ p.fillRect(r, bg);
+ }
+ else
+ p.setPen(colorGroup().text());
+ p.drawText(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1, &bb);
+ x = bb.x() + bb.width();
+ if (i < sections.count()-1) {
+ QString s = sep;
+ p.drawText(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1, &bb);
+ x = bb.x() + bb.width();
+ }
+ }
+ p.end();
+ bitBlt(this, 0, 0, pm);
+ }
+
+//---------------------------------------------------------
+// mousePressEvent
+//---------------------------------------------------------
+
+void PosEditor::mousePressEvent(QMouseEvent *e)
+ {
+ QPoint p(e->pos().x(), 0);
+ int sec = section(p);
+ if (sec != -1) {
+ cw->setFocusSection(sec);
+ repaint(rect(), false);
+ }
+ }
+
+//---------------------------------------------------------
+// eventFilter
+//---------------------------------------------------------
+
+bool PosEditor::eventFilter(QObject *o, QEvent *e)
+ {
+ if (o != this)
+ return false;
+ if (e->type() != QEvent::KeyPress )
+ return false;
+
+ QKeyEvent *ke = (QKeyEvent*)e;
+ switch (ke->key()) {
+ case Qt::Key_Right:
+ if (unsigned(focusSec) <= sections.count()) {
+ if (cw->setFocusSection(focusSec+1))
+ repaint(rect(), false);
+ }
+ return true;
+ case Qt::Key_Left:
+ if (focusSec > 0 ) {
+ if (cw->setFocusSection(focusSec-1))
+ repaint(rect(), false);
+ }
+ return true;
+ case Qt::Key_Up:
+ cw->stepUp();
+ return true;
+ case Qt::Key_Down:
+ cw->stepDown();
+ return true;
+ case Qt::Key_Backspace:
+ case Qt::Key_Delete:
+ cw->removeLastNumber(focusSec);
+ return true;
+ case Qt::Key_Return:
+ cw->enterPressed();
+ return true;
+ default:
+ QString txt = ke->text();
+ if (!txt.isEmpty() && !sep.isEmpty() && txt[0] == sep[0]) {
+ // do the same thing as KEY_RIGHT when the user presses the separator key
+ if (unsigned(focusSec) < sections.count()) {
+ if (cw->setFocusSection(focusSec+1))
+ repaint(rect(), false);
+ }
+ return true;
+ }
+ int num = txt[0].digitValue();
+ if (num != -1) {
+ cw->addNumber(focusSec, num);
+ return true;
+ }
+ }
+ return false;
+ }
+
+void PosEditor::appendSection(const QNumberSection& sec)
+ {
+ sections.append(sec);
+ }
+void PosEditor::clearSections()
+ {
+ sections.clear();
+ }
+
+//---------------------------------------------------------
+// setSectionSelection
+//---------------------------------------------------------
+
+void PosEditor::setSectionSelection(int secNo, int selstart, int selend)
+ {
+ if (secNo < 0 || secNo > (int)sections.count())
+ return;
+ sections[secNo].setSelectionStart(selstart);
+ sections[secNo].setSelectionEnd(selend);
+ }
+
+//---------------------------------------------------------
+// setFocusSection
+//---------------------------------------------------------
+
+bool PosEditor::setFocusSection(int idx)
+ {
+ if (idx > (int)sections.count()-1 || idx < 0)
+ return false;
+ if (idx != focusSec) {
+ focusSec = idx;
+ applyFocusSelection();
+ return true;
+ }
+ return false;
+ }
+
+//---------------------------------------------------------
+// PosEdit
+//---------------------------------------------------------
+
+PosEdit::PosEdit(QWidget* parent, const char* name)
+ : QWidget(parent, name)
+ {
+ init();
+ updateButtons();
+ }
+
+PosEdit::PosEdit(const Pos& time, QWidget* parent, const char* name)
+ : QWidget(parent, name)
+ {
+ init();
+ setValue(time);
+ updateButtons();
+ }
+
+PosEdit::~PosEdit()
+ {
+ }
+
+//---------------------------------------------------------
+// init
+//---------------------------------------------------------
+
+void PosEdit::init()
+ {
+ ed = new PosEditor(this, "pos editor");
+ controls = new Q3SpinWidget(this, "pos edit controls");
+ controls->setEditWidget(ed);
+ setFocusProxy(ed);
+ connect(controls, SIGNAL(stepUpPressed()), SLOT(stepUp()));
+ connect(controls, SIGNAL(stepDownPressed()), SLOT(stepDown()));
+ connect(this, SIGNAL(valueChanged(const Pos&)),SLOT(updateButtons()));
+
+ overwrite = false;
+ timerId = 0;
+ typing = false;
+ min = Pos(0);
+ max = Pos(MAX_TICK);
+ changed = false;
+ adv = false;
+
+
+ static Section s_midiSections[3] = { // measure, beat, tick
+ { 0, 4, 1, 0 },
+ { 5, 2, 1, 0 },
+ { 8, 3, 0, 0 }
+ };
+ static Section s_smpteSections[4] = { // minute second frame subframe
+ { 0, 3, 0, 0 },
+ { 4, 2, 0, 0 },
+ { 7, 2, 0, 0 },
+ { 10, 2, 0, 0 }
+ };
+ memcpy(midiSections, s_midiSections, sizeof(s_midiSections));
+ memcpy(smpteSections, s_smpteSections, sizeof(s_smpteSections));
+
+ _smpte = false; // show position in smpte format
+ sec = midiSections;
+ setSections();
+ setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed));
+ }
+
+//---------------------------------------------------------
+// setSetions
+//---------------------------------------------------------
+
+void PosEdit::setSections()
+ {
+ ed->clearSections();
+ ed->appendSection(QNumberSection(0,0));
+ ed->appendSection(QNumberSection(0,0));
+ ed->appendSection(QNumberSection(0,0));
+ if (_smpte) {
+ ed->appendSection(QNumberSection(0,0));
+ ed->setSeparator(QString(":"));
+ }
+ else {
+ ed->setSeparator(QString("."));
+ }
+ }
+
+//---------------------------------------------------------
+// smpte
+//---------------------------------------------------------
+
+bool PosEdit::smpte() const
+ {
+ return _smpte;
+ }
+
+//---------------------------------------------------------
+// setSmpte
+//---------------------------------------------------------
+
+void PosEdit::setSmpte(bool f)
+ {
+ _smpte = f;
+ sec = f ? smpteSections : midiSections;
+ setSections();
+ ed->repaint(ed->rect(), false);
+ }
+
+//---------------------------------------------------------
+// minValue
+//---------------------------------------------------------
+
+Pos PosEdit::minValue() const
+ {
+ return min;
+ }
+
+//---------------------------------------------------------
+// maxValue
+//---------------------------------------------------------
+
+Pos PosEdit::maxValue() const
+ {
+ return max;
+ }
+
+//---------------------------------------------------------
+// setRange
+//---------------------------------------------------------
+
+void PosEdit::setRange(const Pos& _min, const Pos& _max)
+ {
+ if (min.isValid())
+ min = _min;
+ if (max.isValid())
+ max = _max;
+ }
+
+//---------------------------------------------------------
+// setValue
+//---------------------------------------------------------
+
+void PosEdit::setValue(const Pos& time)
+ {
+ if (time > maxValue() || time < minValue())
+ return;
+ if (_smpte)
+ time.msf(&(sec[0].val), &(sec[1].val), &(sec[2].val),
+ &(sec[3].val));
+ else
+ time.mbt(&(sec[0].val), &(sec[1].val), &(sec[2].val));
+ changed = false;
+
+ updateButtons();
+ ed->repaint(ed->rect(), false);
+ }
+
+void PosEdit::setValue(const QString& s)
+ {
+ Pos time(s);
+ setValue(time);
+ }
+
+void PosEdit::setValue(int t)
+ {
+ Pos time(t);
+ setValue(time);
+ }
+
+Pos PosEdit::pos() const
+ {
+ if (_smpte) {
+ if (Pos::isValid(sec[0].val, sec[1].val, sec[2].val, sec[3].val))
+ return Pos(sec[0].val, sec[1].val, sec[2].val, sec[3].val);
+ }
+ else {
+ if (Pos::isValid(sec[0].val, sec[1].val, sec[2].val))
+ return Pos(sec[0].val, sec[1].val, sec[2].val);
+ }
+ return Pos();
+ }
+
+void PosEdit::setSeparator(const QString& s)
+ {
+ ed->setSeparator(s);
+ }
+
+QString PosEdit::separator() const
+ {
+ return ed->separator();
+ }
+
+bool PosEdit::event(QEvent *e)
+ {
+ if (e->type() == QEvent::FocusOut) {
+ typing = false;
+ if (changed) {
+ emit valueChanged(pos() );
+ changed = false;
+ }
+ }
+ return QWidget::event(e);
+ }
+
+void PosEdit::timerEvent(QTimerEvent *)
+ {
+ overwrite = true;
+ }
+
+//---------------------------------------------------------
+// stepUp
+//---------------------------------------------------------
+
+void PosEdit::stepUp()
+ {
+ int secNo = ed->focusSection();
+ bool accepted = false;
+
+ if (!outOfRange(secNo, sec[secNo].val+1)) {
+ accepted = true;
+ setSec(secNo, sec[secNo].val+1);
+ }
+ if (accepted) {
+ changed = true;
+ Pos p = pos();
+ emit valueChanged(p);
+ }
+ ed->repaint(ed->rect(), false);
+ }
+
+//---------------------------------------------------------
+// stepDown
+//---------------------------------------------------------
+
+void PosEdit::stepDown()
+ {
+ int secNo = ed->focusSection();
+ bool accepted = false;
+ if (!outOfRange(secNo, sec[secNo].val-1)) {
+ accepted = true;
+ setSec(secNo, sec[secNo].val-1);
+ }
+ if (accepted) {
+ changed = true;
+ emit valueChanged(pos());
+ }
+ ed->repaint(ed->rect(), false);
+ }
+
+//---------------------------------------------------------
+// sectionFormattedText
+// Returns the formatted number for section sec.
+//---------------------------------------------------------
+
+QString PosEdit::sectionFormattedText(int secNo)
+ {
+ QString txt = sectionText(secNo);
+ int so = sec[secNo].offset;
+ int len = sec[secNo].len;
+ int eo = so + len;
+
+ if (typing && secNo == ed->focusSection())
+ ed->setSectionSelection(secNo, eo - txt.length(), eo);
+ else
+ ed->setSectionSelection(secNo, so, eo);
+ txt = txt.rightJustify(len, '0');
+ return txt;
+ }
+
+//---------------------------------------------------------
+// setFocusSection
+//---------------------------------------------------------
+
+bool PosEdit::setFocusSection(int s)
+ {
+ if (s != ed->focusSection()) {
+ killTimer(timerId);
+ overwrite = true;
+ typing = false;
+ int so = sec[s].offset;
+ int eo = so + sec[s].len;
+ ed->setSectionSelection(s, so, eo);
+ if (changed) {
+ emit valueChanged(pos());
+ changed = false;
+ }
+ }
+ return ed->setFocusSection(s);
+ }
+
+//---------------------------------------------------------
+// setSec
+//---------------------------------------------------------
+
+void PosEdit::setSec(int secNo, int val)
+ {
+ if (val < 0)
+ val = 0;
+ if (_smpte) {
+ switch(secNo) {
+ case 0:
+ break;
+ case 1:
+ if (val > 59)
+ val = 59;
+ break;
+ case 2:
+ switch(mtcType) {
+ case 0: // 24 frames sec
+ if (val > 23)
+ val = 23;
+ break;
+ case 1:
+ if (val > 24)
+ val = 24;
+ break;
+ case 2: // 30 drop frame
+ case 3: // 30 non drop frame
+ if (val > 29)
+ val = 29;
+ break;
+ }
+ break;
+ case 3:
+ if (val > 99)
+ val = 99;
+ }
+ }
+ else {
+ switch(secNo) {
+ case 0:
+ break;
+ case 1:
+ {
+ int z, n;
+ int tick = sigmap.bar2tick(sec[0].val, val, sec[2].val);
+ sigmap.timesig(tick, z, n);
+ if (val >= n)
+ val = n-1;
+ }
+ break;
+ case 2:
+ {
+ int tick = sigmap.bar2tick(sec[0].val, sec[1].val, val);
+ int tb = sigmap.ticksBeat(tick);
+ if (val >= tb)
+ val = tb-1;
+ }
+ break;
+ }
+ }
+ sec[secNo].val = val;
+ }
+
+//---------------------------------------------------------
+// sectionText
+// Returns the text of section \a sec.
+//---------------------------------------------------------
+
+QString PosEdit::sectionText(int secNo)
+ {
+ return QString::number(sec[secNo].val + sec[secNo].voff);
+ }
+
+//---------------------------------------------------------
+// outOfRange
+// return true if out of range
+//---------------------------------------------------------
+
+bool PosEdit::outOfRange(int secNo, int val) const
+ {
+ if (val < 0)
+ return true;
+ int limit = MAXINT;
+ if (_smpte) {
+ switch(secNo) {
+ case 0:
+ break;
+ case 1:
+ limit = 59;
+ break;
+ case 2:
+ switch(mtcType) {
+ case 0: // 24 frames sec
+ limit = 23;
+ break;
+ case 1:
+ limit = 24;
+ break;
+ case 2: // 30 drop frame
+ case 3: // 30 non drop frame
+ limit = 29;
+ break;
+ }
+ break;
+ case 3:
+ limit = 99;
+ break;
+ }
+ }
+ else {
+ switch(secNo) {
+ case 0:
+ break;
+ case 1:
+ {
+ int z;
+ int tick = sigmap.bar2tick(sec[0].val, val, sec[2].val);
+ sigmap.timesig(tick, z, limit);
+ limit -= 1;
+ }
+ break;
+ case 2:
+ int tick = sigmap.bar2tick(sec[0].val, sec[1].val, val);
+ limit = sigmap.ticksBeat(tick) - 1;
+ break;
+ }
+ }
+ return val > limit;
+ }
+
+//---------------------------------------------------------
+// addNumber
+//---------------------------------------------------------
+
+void PosEdit::addNumber(int secNo, int num)
+ {
+ if (secNo == -1)
+ return;
+ killTimer(timerId);
+ bool accepted = false;
+ typing = true;
+ int voff = sec[secNo].voff;
+
+ QString txt = sectionText(secNo);
+
+ if (txt.length() == sec[secNo].len) {
+ if (!outOfRange(secNo, num - voff)) {
+ accepted = true;
+ sec[secNo].val = num - voff;
+ }
+ }
+ else {
+ txt += QString::number(num);
+ int temp = txt.toInt() - voff;
+ if (outOfRange(secNo, temp))
+ txt = sectionText(secNo);
+ else {
+ accepted = true;
+ sec[secNo].val = temp;
+ }
+ if (adv && (txt.length() == sec[secNo].len)) {
+ setFocusSection(ed->focusSection() + 1);
+ }
+ }
+ changed = accepted;
+ if (accepted)
+ emit valueChanged(pos());
+ timerId = startTimer(qApp->doubleClickInterval()*4);
+ ed->repaint(ed->rect(), false);
+ }
+
+//---------------------------------------------------------
+// removeLastNumber
+//---------------------------------------------------------
+
+void PosEdit::removeLastNumber(int secNo)
+ {
+ if (secNo == -1)
+ return;
+ QString txt = QString::number(sec[secNo].val);
+ txt = txt.mid(0, txt.length() - 1);
+ sec[secNo].val = txt.toInt() - sec[secNo].voff;
+ ed->repaint(ed->rect(), false);
+ }
+
+//---------------------------------------------------------
+// resizeEvent
+//---------------------------------------------------------
+
+void PosEdit::resizeEvent(QResizeEvent *)
+ {
+ controls->resize(width(), height());
+ }
+
+//---------------------------------------------------------
+// sizeHint
+//---------------------------------------------------------
+
+QSize PosEdit::sizeHint() const
+ {
+ QFontMetrics fm(font());
+ int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth,0, this); // ddskrjo 0
+ int h = fm.height() + fw * 2;
+ int w = 4 + controls->upRect().width() + fw * 4;
+ if (_smpte)
+ w += fm.width('9') * 10 + fm.width(ed->separator()) * 3;
+ else
+ w += fm.width('9') * 10 + fm.width(ed->separator()) * 2;
+ return QSize(w, h).expandedTo(QApplication::globalStrut());
+ }
+
+//---------------------------------------------------------
+// updateButtons
+//---------------------------------------------------------
+
+void PosEdit::updateButtons()
+ {
+ bool upEnabled = isEnabled() && (pos() < maxValue());
+ bool downEnabled = isEnabled() && (pos() > minValue());
+
+ //printf("PosEdit::updateButtons smpte:%d upEnabled:%d downEnabled:%d\n", smpte(), upEnabled, downEnabled);
+
+ controls->setUpEnabled(upEnabled);
+ controls->setDownEnabled(downEnabled);
+ }
+
+//---------------------------------------------------------
+// enterPressed
+//---------------------------------------------------------
+void PosEdit::enterPressed()
+ {
+ emit returnPressed();
+ }
+
+//---------------------------------------------------------
+// setEnabled
+//---------------------------------------------------------
+void PosEdit::setEnabled(bool v)
+{
+ QWidget::setEnabled(v);
+ updateButtons();
+}
diff --git a/muse2/muse/widgets/posedit.h b/muse2/muse/widgets/posedit.h
new file mode 100644
index 00000000..163746ad
--- /dev/null
+++ b/muse2/muse/widgets/posedit.h
@@ -0,0 +1,106 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: posedit.h,v 1.1.1.1.2.1 2004/12/27 19:47:25 lunar_shuttle Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __POSEDIT_H__
+#define __POSEDIT_H__
+
+#include <qwidget.h>
+#include <qstring.h>
+//Added by qt3to4:
+#include <QResizeEvent>
+#include <QEvent>
+#include <QTimerEvent>
+#include "pos.h"
+
+class PosEditor;
+class Q3SpinWidget;
+
+#include "section.h"
+
+//---------------------------------------------------------
+// PosEdit
+//---------------------------------------------------------
+
+class PosEdit : public QWidget
+ {
+ Q_OBJECT
+ Q_PROPERTY(QString separator READ separator WRITE setSeparator)
+ Q_PROPERTY(bool smpte READ smpte WRITE setSmpte)
+
+ void init();
+ void setSections();
+ QString sectionText(int sec);
+ Section midiSections[3];
+ Section smpteSections[4];
+ Section* sec;
+
+ bool _smpte;
+
+ bool adv;
+ bool overwrite;
+ int timerId;
+ bool typing;
+ Pos min;
+ Pos max;
+ bool changed;
+ PosEditor *ed;
+ Q3SpinWidget* controls;
+
+ private slots:
+ void stepUp();
+ void stepDown();
+
+ signals:
+ void valueChanged(const Pos&);
+ void returnPressed();
+
+ protected:
+ bool event(QEvent *e );
+ void timerEvent(QTimerEvent* e);
+ void resizeEvent(QResizeEvent*);
+ QString sectionFormattedText(int sec);
+ void addNumber(int sec, int num);
+ void removeLastNumber(int sec);
+ bool setFocusSection(int s);
+
+ virtual bool outOfRange(int, int) const;
+ virtual void setSec(int, int);
+ friend class PosEditor;
+
+ protected slots:
+ void updateButtons();
+
+ public slots:
+ virtual void setValue(const Pos& time);
+ void setValue(int t);
+ void setValue(const QString& s);
+ // Added p3.3.43
+ virtual void setEnabled(bool);
+
+ public:
+ PosEdit(QWidget*, const char* = 0);
+ PosEdit(const Pos& time, QWidget*, const char* = 0);
+ ~PosEdit();
+
+ QSize sizeHint() const;
+ Pos pos() const;
+ virtual void setAutoAdvance(bool advance) { adv = advance; }
+ bool autoAdvance() const { return adv; }
+
+ virtual void setMinValue(const Pos& d) { setRange(d, maxValue()); }
+ Pos minValue() const;
+ virtual void setMaxValue( const Pos& d ) { setRange(minValue(), d ); }
+ Pos maxValue() const;
+ virtual void setRange(const Pos& min, const Pos& max);
+ QString separator() const;
+ virtual void setSeparator(const QString& s);
+ void setSmpte(bool);
+ bool smpte() const;
+ void enterPressed();
+ };
+
+#endif
diff --git a/muse2/muse/widgets/poslabel.cpp b/muse2/muse/widgets/poslabel.cpp
new file mode 100644
index 00000000..3066b640
--- /dev/null
+++ b/muse2/muse/widgets/poslabel.cpp
@@ -0,0 +1,152 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: poslabel.cpp,v 1.2.2.2 2009/04/06 01:24:55 terminator356 Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <stdlib.h>
+#include <cmath>
+#include <qapplication.h>
+#include <qstyle.h>
+//Added by qt3to4:
+#include <QLabel>
+
+#include "poslabel.h"
+#include "sig.h"
+#include "tempo.h"
+#include "globals.h"
+
+extern int mtcType;
+
+//---------------------------------------------------------
+// PosLabel
+//---------------------------------------------------------
+
+PosLabel::PosLabel(QWidget* parent, const char* name)
+ : QLabel(parent, name)
+ {
+ _tickValue = 0;
+ _sampleValue = 0;
+ _smpte = false;
+ setFrameStyle(WinPanel | Sunken);
+ setLineWidth(2);
+ setMidLineWidth(3);
+ int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, 0, this); // ddskrjo 0
+ setIndent(fw);
+ updateValue();
+ }
+
+//---------------------------------------------------------
+// sizeHint
+//---------------------------------------------------------
+
+QSize PosLabel::sizeHint() const
+ {
+ QFontMetrics fm(font());
+ int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, 0, this); // ddskrjo 0
+ int h = fm.height() + fw * 2;
+ int w;
+ if (_smpte)
+ w = 2 + fm.width('9') * 9 + fm.width(':') * 3 + fw * 4;
+ else
+ w = 2 + fm.width('9') * 9 + fm.width('.') * 2 + fw * 4;
+ return QSize(w, h).expandedTo(QApplication::globalStrut());
+ }
+
+//---------------------------------------------------------
+// updateValue
+//---------------------------------------------------------
+
+void PosLabel::updateValue()
+ {
+ QString s;
+ if (_smpte) {
+ double time = double(_sampleValue) / double(sampleRate);
+ int min = int(time) / 60;
+ int sec = int(time) % 60;
+ double rest = time - (min * 60 + sec);
+ switch(mtcType) {
+ case 0: // 24 frames sec
+ rest *= 24;
+ break;
+ case 1: // 25
+ rest *= 25;
+ break;
+ case 2: // 30 drop frame
+ rest *= 30;
+ break;
+ case 3: // 30 non drop frame
+ rest *= 30;
+ break;
+ }
+ int frame = int(rest);
+ int subframe = int((rest-frame)*100);
+ s.sprintf("%03d:%02d:%02d:%02d", min, sec, frame, subframe);
+ }
+ else {
+ int bar, beat;
+ unsigned tick;
+ sigmap.tickValues(_tickValue, &bar, &beat, &tick);
+ //s.sprintf("%04d.%02d.%03ud", bar+1, beat+1, tick);
+ s.sprintf("%04d.%02d.%03u", bar+1, beat+1, tick);
+ }
+ setText(s);
+ }
+
+//---------------------------------------------------------
+// setSampleValue
+//---------------------------------------------------------
+
+void PosLabel::setSampleValue(unsigned val)
+ {
+ if (val == _sampleValue)
+ return;
+ _sampleValue = val;
+ updateValue();
+ }
+
+//---------------------------------------------------------
+// setTickValue
+//---------------------------------------------------------
+
+void PosLabel::setTickValue(unsigned val)
+ {
+ if (val == _tickValue)
+ return;
+ if (val >= MAX_TICK)
+ abort();
+ _tickValue = val;
+ updateValue();
+ }
+
+//---------------------------------------------------------
+// setValue
+//---------------------------------------------------------
+
+void PosLabel::setValue(unsigned val)
+ {
+ unsigned oval = _smpte ? _sampleValue : _tickValue;
+ if (val == oval)
+ return;
+ if (_smpte)
+ _sampleValue = val;
+ else
+ _tickValue = val;
+ updateValue();
+ }
+
+//---------------------------------------------------------
+// setSmpte
+//---------------------------------------------------------
+
+void PosLabel::setSmpte(bool val)
+ {
+ _smpte = val;
+ if (val)
+ _sampleValue = tempomap.tick2frame(_tickValue);
+ else
+ _tickValue = tempomap.frame2tick(_sampleValue);
+ updateValue();
+ }
+
diff --git a/muse2/muse/widgets/poslabel.h b/muse2/muse/widgets/poslabel.h
new file mode 100644
index 00000000..06cd0b09
--- /dev/null
+++ b/muse2/muse/widgets/poslabel.h
@@ -0,0 +1,45 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: poslabel.h,v 1.2 2004/01/11 18:55:37 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __POSLABEL_H__
+#define __POSLABEL_H__
+
+#include <qlabel.h>
+
+//---------------------------------------------------------
+// PosLabel
+//---------------------------------------------------------
+
+class PosLabel : public QLabel {
+ bool _smpte;
+ unsigned _tickValue;
+ unsigned _sampleValue;
+ Q_OBJECT
+
+ void updateValue();
+
+ protected:
+ QSize sizeHint() const;
+
+ public slots:
+ void setTickValue(unsigned);
+ void setSampleValue(unsigned);
+ void setValue(unsigned);
+
+ public:
+ PosLabel(QWidget* parent, const char* name = 0);
+ unsigned value() const { return _smpte ? _sampleValue : _tickValue; }
+ unsigned tickValue() const { return _tickValue; }
+ unsigned sampleValue() const { return _sampleValue; }
+ void setSmpte(bool);
+ bool smpte() const { return _smpte; }
+ };
+
+
+#endif
+
+
diff --git a/muse2/muse/widgets/scldiv.cpp b/muse2/muse/widgets/scldiv.cpp
new file mode 100644
index 00000000..a0b0e628
--- /dev/null
+++ b/muse2/muse/widgets/scldiv.cpp
@@ -0,0 +1,652 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: scldiv.cpp,v 1.1.1.1 2003/10/27 18:54:32 wschweer Exp $
+//
+// Copyright (C) 1997 Josef Wilgen
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License, version 2,
+// as published by the Free Software Foundation.
+//
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <cmath>
+#include "scldiv.h"
+#include "mmath.h"
+//Added by qt3to4:
+#include <Q3MemArray>
+
+// ScaleDiv - A class for building scale divisions
+//
+// The ScaleDiv class can build
+// linear and logarithmic scale divisions for specified
+// intervals. It uses an adjustable algorithm to
+// generate the major and minor step widths automatically.
+// A scale division has a minimum value, a maximum value,
+// a vector of major marks, and a vector of minor marks.
+//
+// ScaleDiv uses implicit sharing for the mark vectors.
+//
+// Build a logarithmic scale division from 0.01 to 1000
+// and print out the major and minor marks.
+//.c
+// #include <scldiv.h>
+// #include <iostream.h>
+//
+// main()
+// {
+// int i,k;
+// ScaleDiv sd;
+//
+// sd.rebuild(0.01, 100, 10, 10, TRUE, 0.0);
+//
+// k=0;
+// for (i=0;i<sd.majCnt();i++)
+// {
+// while(k < sd.minCnt())
+// {
+// if(sd.minMark(k) < sd.majMark(i))
+// {
+// cout << " - " << sd.minMark(i) << "\n";
+// k++;
+// }
+// else
+// break;
+// }
+// cout << "-- " << sd.majMark(i) << "\n";
+// }
+// while(k < sd.minCnt())
+// {
+// cout << " - " << sd.minMark(i) << "\n";
+// k++;
+// }
+// }
+//
+//------------------------------------------------------------
+
+static const double step_eps = 1.0e-3;
+static const double border_eps = 1.0e-10;
+
+static bool limRange(double &val, double v1, double v2, double eps_rel = 0.0,
+ double eps_abs = 0.0)
+ {
+
+ bool rv = TRUE;
+ double vmin = qwtMin(v1, v2);
+ double vmax = qwtMax(v1, v2);
+ double delta_min = qwtMax(qwtAbs(eps_rel * vmin), qwtAbs(eps_abs));
+ double delta_max = qwtMax(qwtAbs(eps_rel * vmax), qwtAbs(eps_abs));
+
+ if (val < vmin)
+ {
+ if (val < vmin - delta_min) rv = FALSE;
+ val = vmin;
+ }
+ else if (val > vmax)
+ {
+ if (val > vmax + delta_max) rv = FALSE;
+ val = vmax;
+ }
+ return rv;
+
+}
+
+//------------------------------------------------------------
+//.F ScaleDiv::ScaleDiv
+// Construct a ScaleDiv instance.
+//
+//.u Syntax
+//.f ScaleDiv::ScaleDiv()
+//------------------------------------------------------------
+
+ScaleDiv::ScaleDiv()
+ {
+ d_lBound = 0.0;
+ d_hBound = 0.0;
+ d_majStep = 0.0;
+ d_log = FALSE;
+ }
+
+//------------------------------------------------------------
+//.F ScaleDiv::~ScaleDiv
+// Destroy a ScaleDiv instance.
+//
+//.u Syntax
+//.f ScaleDiv::~ScaleDiv()
+//------------------------------------------------------------
+
+ScaleDiv::~ScaleDiv()
+ {
+ }
+
+//------------------------------------------------------------
+//.F ScaleDiv::ScaleDiv
+// Copy Constructor
+//
+//.u Syntax
+//.f ScaleDiv::ScaleDiv(const ScaleDiv &s)
+//
+//.u Parameters
+//.p const ScaleDiv &s -- scale division to be copied
+//------------------------------------------------------------
+
+ScaleDiv::ScaleDiv(const ScaleDiv &s)
+ {
+ copy(s);
+ }
+
+//------------------------------------------------------------
+//.F ScaleDiv::operator=
+// Assignment operator
+//
+//.u Syntax
+//.f ScaleDiv & ScaleDiv::operator=(const ScaleDiv &s)
+//
+//.u Parameters
+//.p const ScaleDiv &s -- scale divison to be assigned
+//------------------------------------------------------------
+
+ScaleDiv& ScaleDiv::operator=(const ScaleDiv &s)
+ {
+ copy(s);
+ return *this;
+ }
+
+//------------------------------------------------------------
+//.F ScaleDiv::copy
+// Copy member data from another ScaleDiv instance.
+//
+//.u Syntax
+//.f void ScaleDiv::copy(const ScaleDiv &s)
+//
+//.u Parameters
+//.p const ScaleDiv &s
+//------------------------------------------------------------
+
+void ScaleDiv::copy(const ScaleDiv &s)
+ {
+ d_lBound = s.d_lBound;
+ d_hBound = s.d_hBound;
+ d_log = s.d_log;
+ d_majStep = s.d_majStep;
+ d_minMarks = s.d_minMarks;
+ d_majMarks = s.d_majMarks;
+ }
+
+//------------------------------------------------------------
+//.F ScaleDiv::rebuild
+// Build a scale width major and minor divisions
+//
+//.p
+// double x1 -- first boundary value
+// double x2 -- second boundary value
+// int maxMajSteps -- max. number of major step intervals
+// int maxMinSteps -- max. number of minor step intervals
+// bool log -- logarithmic division (TRUE/FALSE)
+// double step -- fixed major step width. Defaults to 0.0.
+// bool ascend -- if TRUE, sort in ascending order from min(x1, x2)
+// to max(x1, x2). If FALSE, sort in the direction
+// from x1 to x2. Defaults to TRUE.
+//
+//.u Return Value
+// True if the arrays have been allocated successfully.
+//
+//.u Description
+// If no fixed step width is specified or if it is set to 0, the
+// major step width will be calculated automatically according to the
+// the value of maxMajSteps. The maxMajSteps parameter has no effect
+// if a fixed step size is specified. The minor step width is always
+// calculated automatically.
+// If the step width is to be calculated automatically, the algorithm
+// tries to find reasonable values fitting into the scheme {1,2,5}*10^n
+// with an integer number n for linear scales.
+// For logarithmic scales, there are three different cases:
+//.i
+// -- If the major step width is one decade, the minor marks
+// will fit into one of the schemes {1,2,...9}, {2,4,6,8}, {2,5} or {5},
+// depending on the maxMinSteps parameter.
+// -- If the major step size spans
+// more than one decade, the minor step size will be {1,2,5}*10^n decades
+// with a natural number n.
+// -- If the whole range is less than one decade, a linear scale
+// division will be built
+//
+//.u Note
+// For logarithmic scales, the step width is measured in decades.
+//------------------------------------------------------------
+
+bool ScaleDiv::rebuild(double x1, double x2, int maxMajSteps, int maxMinSteps,
+ bool log, double step, bool ascend)
+{
+
+ int rv;
+
+ d_lBound = qwtMin(x1, x2);
+ d_hBound = qwtMax(x1, x2);
+ d_log = log;
+
+ if (d_log)
+ rv = buildLogDiv(maxMajSteps,maxMinSteps,step);
+ else
+ rv = buildLinDiv(maxMajSteps, maxMinSteps, step);
+
+ if ((!ascend) && (x2 < x1))
+ {
+ d_lBound = x1;
+ d_hBound = x2;
+ qwtTwistArray(d_majMarks.data(), d_majMarks.size());
+ qwtTwistArray(d_minMarks.data(), d_minMarks.size());
+ }
+
+ return rv;
+
+}
+
+//------------------------------------------------------------
+//.F ScaleDiv::buildLinDiv
+// Build a linear scale division in ascending order
+//
+//.u Syntax
+//.f bool ScaleDiv::buildLinDiv(int majSteps, int minSteps, double step)
+//
+//.u Parameters
+//.p int maxSteps -- max. number of step intervals
+// double step -- fixed step width
+//
+//.u Return Value
+// TRUE if array has been successfully resized
+//
+//.u Description
+// If the 'step' parameter is set to 0.0, this function
+// cal[culates the step width automatically according to
+// the value of 'maxSteps'. MaxSteps must be greater than or
+// equal to 2. It will be guessed if an invalid value is specified.
+// The maximum possible number of steps is limited to 10000.
+// The maxSteps parameter has no effect if a fixed step width is
+// specified.
+//
+//.u Note
+// This function uses the data members d_lBound and d_hBound and assumes
+// that d_hBound > d_lBound.
+//------------------------------------------------------------
+
+bool ScaleDiv::buildLinDiv(int maxMajSteps, int maxMinSteps, double step)
+ {
+
+ int nMaj, nMin, minSize, i0,i,k;
+ double val, mval;
+ double firstTick, lastTick;
+ double minStep;
+ Q3MemArray<double> buffer;
+ bool rv = TRUE;
+
+ // parameter range check
+ maxMajSteps = qwtMax(1, maxMajSteps);
+ maxMinSteps = qwtMax(0, maxMinSteps);
+ step = qwtAbs(step);
+
+ // detach arrays
+ d_majMarks.duplicate(0,0);
+ d_minMarks.duplicate(0,0);
+
+ if (d_lBound == d_hBound) return TRUE;
+
+ //
+ // Set up major divisions
+ //
+ if (step == 0.0)
+ d_majStep = qwtCeil125(qwtAbs(d_hBound - d_lBound) * 0.999999
+ / double(maxMajSteps));
+ else
+ d_majStep = step;
+
+ if (d_majStep == 0.0) return TRUE;
+
+ firstTick = ceil( (d_lBound - step_eps * d_majStep) / d_majStep) * d_majStep;
+ lastTick = floor( (d_hBound + step_eps * d_majStep) / d_majStep) * d_majStep;
+
+ nMaj = qwtMin(10000, int(rint((lastTick - firstTick) / d_majStep)) + 1);
+
+ if ((rv = d_majMarks.resize(nMaj)))
+ qwtLinSpace(d_majMarks.data(), d_majMarks.size(), firstTick, lastTick);
+ else
+ return FALSE;
+
+ //
+ // Set up minor divisions
+ //
+ if (maxMinSteps < 1) // no minor divs
+ return TRUE;
+
+ minStep = qwtCeil125( d_majStep / double(maxMinSteps) );
+
+ if (minStep == 0.0) return TRUE;
+
+ nMin = qwtAbs(int(rint(d_majStep / minStep))) - 1; // # minor steps per interval
+
+ // Do the minor steps fit into the interval?
+ if ( qwtAbs(double(nMin + 1) * minStep - d_majStep) > step_eps * d_majStep)
+ {
+ nMin = 1;
+ minStep = d_majStep * 0.5;
+ }
+
+ // Are there minor ticks below the first major tick?
+ if (d_majMarks[0] > d_lBound )
+ i0 = -1;
+ else
+ i0 = 0;
+
+ // resize buffer to the maximum possible number of minor ticks
+ rv = buffer.resize(nMin * (nMaj + 1));
+
+ // calculate minor ticks
+ if (rv)
+ {
+ minSize = 0;
+ for (i = i0; i < (int)d_majMarks.size(); i++)
+ {
+ if (i >= 0)
+ val = d_majMarks[i];
+ else
+ val = d_majMarks[0] - d_majStep;
+
+ for (k=0; k< nMin; k++)
+ {
+ mval = (val += minStep);
+ if (limRange(mval, d_lBound, d_hBound, border_eps))
+ {
+ buffer[minSize] = mval;
+ minSize++;
+ }
+ }
+ }
+ d_minMarks.duplicate(buffer.data(), minSize);
+ }
+
+ return rv;
+ }
+
+//------------------------------------------------------------
+//.F ScaleDiv::buildLogDiv
+// Build a logarithmic scale division
+//
+//.u Syntax
+//.f bool ScaleDiv::buildLogDiv(int maxMajSteps, int maxMinSteps, int majStep)
+//
+//.u Parameters
+//.p int maxMajSteps, int maxMinSteps, int majStep
+//
+//.u Return Value
+// True if memory has been successfully allocated
+//
+//.u Note
+// This function uses the data members d_lBound and d_hBound and assumes
+// that d_hBound > d_lBound.
+//------------------------------------------------------------
+
+bool ScaleDiv::buildLogDiv(int maxMajSteps, int maxMinSteps, double majStep)
+ {
+ double firstTick, lastTick;
+ double lFirst, lLast;
+ double val, sval, minStep, minFactor;
+ int nMaj, nMin, minSize, i, k, k0, kstep, kmax, i0;
+ int rv = TRUE;
+ double width;
+
+ Q3MemArray<double> buffer;
+
+
+ // Parameter range check
+ maxMajSteps = qwtMax(1, qwtAbs(maxMajSteps));
+ maxMinSteps = qwtMax(0, qwtAbs(maxMinSteps));
+ majStep = qwtAbs(majStep);
+
+ // boundary check
+ limRange(d_hBound, LOG_MIN, LOG_MAX);
+ limRange(d_lBound, LOG_MIN, LOG_MAX);
+
+ // detach arrays
+ d_majMarks.duplicate(0,0);
+ d_minMarks.duplicate(0,0);
+
+ if (d_lBound == d_hBound) return TRUE;
+
+ // scale width in decades
+ width = log10(d_hBound) - log10(d_lBound);
+
+ // scale width is less than one decade -> build linear scale
+ if (width < 1.0)
+ {
+ rv = buildLinDiv(maxMajSteps, maxMinSteps, 0.0);
+ // convert step width to decades
+ if (d_majStep > 0)
+ d_majStep = log10(d_majStep);
+
+ return rv;
+ }
+
+ //
+ // Set up major scale divisions
+ //
+ if (majStep == 0.0)
+ d_majStep = qwtCeil125( width * 0.999999 / double(maxMajSteps));
+ else
+ d_majStep = majStep;
+
+ // major step must be >= 1 decade
+ d_majStep = qwtMax(d_majStep, 1.0);
+
+
+ lFirst = ceil((log10(d_lBound) - step_eps * d_majStep) / d_majStep) * d_majStep;
+ lLast = floor((log10(d_hBound) + step_eps * d_majStep) / d_majStep) * d_majStep;
+
+ firstTick = pow(10.0, lFirst);
+ lastTick = pow(10.0, lLast);
+
+ nMaj = qwtMin(10000, int(rint(qwtAbs(lLast - lFirst) / d_majStep)) + 1);
+
+ if (d_majMarks.resize(nMaj))
+ qwtLogSpace(d_majMarks.data(), d_majMarks.size(), firstTick, lastTick);
+ else
+ return FALSE;
+
+
+ //
+ // Set up minor scale divisions
+ //
+
+ if ((d_majMarks.size() < 1) || (maxMinSteps < 1)) return TRUE; // no minor marks
+
+ if (d_majStep < 1.1) // major step width is one decade
+ {
+ if (maxMinSteps >= 8)
+ {
+ k0 = 2;
+ kmax = 9;
+ kstep = 1;
+ minSize = (d_majMarks.size() + 1) * 8;
+ }
+ else if (maxMinSteps >= 4)
+ {
+ k0 = 2;
+ kmax = 8;
+ kstep = 2;
+ minSize = (d_majMarks.size() + 1) * 4;
+ }
+ else if (maxMinSteps >= 2)
+ {
+ k0 = 2;
+ kmax = 5;
+ kstep = 3;
+ minSize = (d_majMarks.size() + 1) * 2;
+ }
+ else
+ {
+ k0 = 5;
+ kmax = 5;
+ kstep = 1;
+ minSize = (d_majMarks.size() + 1);
+ }
+
+ // resize buffer to the max. possible number of minor marks
+ buffer.resize(minSize);
+
+ // Are there minor ticks below the first major tick?
+ if ( d_lBound < firstTick )
+ i0 = -1;
+ else
+ i0 = 0;
+
+ minSize = 0;
+ for (i = i0; i< (int)d_majMarks.size(); i++)
+ {
+ if (i >= 0)
+ val = d_majMarks[i];
+ else
+ val = d_majMarks[0] / pow(10.0, d_majStep);
+
+ for (k=k0; k<= kmax; k+=kstep)
+ {
+ sval = val * double(k);
+ if (limRange(sval, d_lBound, d_hBound, border_eps))
+ {
+ buffer[minSize] = sval;
+ minSize++;
+ }
+ }
+ }
+
+ // copy values into the minMarks array
+ d_minMarks.duplicate(buffer.data(), minSize);
+
+ }
+ else // major step > one decade
+ {
+
+ // substep width in decades, at least one decade
+ minStep = qwtCeil125( (d_majStep - step_eps * (d_majStep / double(maxMinSteps)))
+ / double(maxMinSteps) );
+ minStep = qwtMax(1.0, minStep);
+
+ // # subticks per interval
+ nMin = int(rint(d_majStep / minStep)) - 1;
+
+ // Do the minor steps fit into the interval?
+ if ( qwtAbs( double(nMin + 1) * minStep - d_majStep) > step_eps * d_majStep)
+ nMin = 0;
+
+ if (nMin < 1) return TRUE; // no subticks
+
+ // resize buffer to max. possible number of subticks
+ buffer.resize((d_majMarks.size() + 1) * nMin );
+
+ // substep factor = 10^substeps
+ minFactor = qwtMax(pow(10,minStep), 10.0);
+
+ // Are there minor ticks below the first major tick?
+ if ( d_lBound < firstTick )
+ i0 = -1;
+ else
+ i0 = 0;
+
+ minSize = 0;
+ for (i = i0; i< (int)d_majMarks.size(); i++)
+ {
+ if (i >= 0)
+ val = d_majMarks[i];
+ else
+ val = firstTick / pow(10.0, d_majStep);
+
+ for (k=0; k< nMin; k++)
+ {
+ sval = (val *= minFactor);
+ if (limRange(sval, d_lBound, d_hBound, border_eps))
+ {
+ buffer[minSize] = sval;
+ minSize++;
+ }
+ }
+ }
+ d_minMarks.duplicate(buffer.data(), minSize);
+ }
+
+ return rv;
+}
+
+//------------------------------------------------------------
+//.F ScaleDiv::operator==
+// Equality operator
+//
+//.u Syntax
+//.f int ScaleDiv::operator==(const ScaleDiv &s)
+//
+//.u Parameters
+//.p const ScaleDiv &s
+//
+//.u Return Value
+// TRUE if this instance is equal to s
+//------------------------------------------------------------
+
+int ScaleDiv::operator==(const ScaleDiv &s) const
+ {
+ if (d_lBound != s.d_lBound)
+ return 0;
+ if (d_hBound != s.d_hBound)
+ return 0;
+ if (d_log != s.d_log)
+ return 0;
+ if (d_majStep != s.d_majStep)
+ return 0;
+ if (d_majMarks != s.d_majMarks)
+ return 0;
+ return (d_minMarks == s.d_minMarks);
+ }
+
+//------------------------------------------------------------
+//.F ScaleDiv::operator!=
+// Inequality
+//
+//.u Syntax
+//.f int ScaleDiv::operator!=(const ScaleDiv &s)
+//
+//.u Parameters
+//.p const ScaleDiv &s
+//
+//.u Return Value
+// TRUE if this instance is not equal to s
+//------------------------------------------------------------
+
+int ScaleDiv::operator!=(const ScaleDiv &s) const
+ {
+ return (!(*this == s));
+ }
+
+//------------------------------------------------------------
+//.F ScaleDiv::reset
+// Detach the shared data and set everything to zero.
+//
+//.u Syntax
+//.f void ScaleDiv::reset()
+//------------------------------------------------------------
+
+void ScaleDiv::reset()
+ {
+ // detach arrays
+ d_majMarks.duplicate(0,0);
+ d_minMarks.duplicate(0,0);
+
+ d_lBound = 0.0;
+ d_hBound = 0.0;
+ d_majStep = 0.0;
+ d_log = FALSE;
+ }
+
+
+
+
+
+
+
+
diff --git a/muse2/muse/widgets/scldiv.h b/muse2/muse/widgets/scldiv.h
new file mode 100644
index 00000000..fcb4951c
--- /dev/null
+++ b/muse2/muse/widgets/scldiv.h
@@ -0,0 +1,57 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: scldiv.h,v 1.1.1.1 2003/10/27 18:54:43 wschweer Exp $
+//
+// Copyright (C) 1997 Josef Wilgen
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License, version 2,
+// as published by the Free Software Foundation.
+//
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __SCLDIV_H__
+#define __SCLDIV_H__
+
+#include <qglobal.h>
+#include <q3memarray.h>
+
+class ScaleDiv
+ {
+ double d_lBound;
+ double d_hBound;
+ double d_majStep;
+ bool d_log;
+
+ Q3MemArray<double> d_majMarks;
+ Q3MemArray<double> d_minMarks;
+
+ void copy(const ScaleDiv &s);
+
+ bool buildLinDiv(int maxMajMark, int maxMinMark, double step = 0.0);
+ bool buildLogDiv(int maxMajMark, int maxMinMark, double step = 0.0);
+
+ public:
+ ScaleDiv ();
+ virtual ~ScaleDiv();
+ ScaleDiv(const ScaleDiv& s);
+
+ ScaleDiv& operator= (const ScaleDiv &s);
+ int operator== (const ScaleDiv &s) const;
+ int operator!= (const ScaleDiv &s) const;
+
+ double lBound() const { return d_lBound; }
+ double hBound() const { return d_hBound; }
+ int minCnt() const { return d_minMarks.size(); }
+ int majCnt() const { return d_majMarks.size(); }
+ bool logScale() const { return d_log; }
+ double majMark(int i) const { return d_majMarks[i]; }
+ double minMark(int i) const { return d_minMarks[i]; }
+ double majStep() const { return d_majStep; }
+ void reset();
+ bool rebuild(double lBound, double hBound, int maxMaj, int maxMin,
+ bool log, double step = 0.0, bool ascend = TRUE);
+ };
+
+#endif
diff --git a/muse2/muse/widgets/scldraw.cpp b/muse2/muse/widgets/scldraw.cpp
new file mode 100644
index 00000000..b72d1000
--- /dev/null
+++ b/muse2/muse/widgets/scldraw.cpp
@@ -0,0 +1,881 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: scldraw.cpp,v 1.1.1.1 2003/10/27 18:54:36 wschweer Exp $
+//
+// Copyright (C) 1997 Josef Wilgen
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License, version 2,
+// as published by the Free Software Foundation.
+//
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <cmath>
+#include "scldraw.h"
+#include <qpainter.h>
+#include <qfontmetrics.h>
+#include <qrect.h>
+#include "mmath.h"
+
+
+int const ScaleDraw::minLen = 10;
+
+const double step_eps = 1.0e-6;
+static const double WorstCase = -8.8888888888888888888888e-88;
+
+//------------------------------------------------------------
+//.H ScaleDraw | 3 | 30/08/97 | Qwt Widget Library | Qwt Programmer's Manual
+//.I scldraw Different Scales
+//.U NAME
+// ScaleDraw - A class for drawing scales
+//
+//.U SYNOPSIS
+// #include <qwt_scldraw.h>
+//
+//.U DESCRIPTION
+// ScaleDraw can be used to draw linear or logarithmic scales.
+// A scale has an origin,
+// an orientation and a length, which all can be specified with
+// @ScaleDraw::setGeometry@.
+// After a scale division has been specified as a @^QwtScaleDiv@ object
+// using @ScaleDraw::setScale (1)@
+// or determined internally using @ScaleDraw::setScale (2)@,
+// the scale can be drawn with the @QwtScaleDiv::draw@ member.
+//
+//.U INHERITED CLASSES
+// @QwtDiMap@
+//
+//.U PUBLIC MEMBERS
+//.R
+// ScaleDraw::ScaleDraw -- constructor
+// ScaleDraw::setScale (1) -- set scale using QwtScaleDiv
+// ScaleDraw::setScale (2) -- set scale directly
+// ScaleDraw::setGeometry -- specify geometry
+// ScaleDraw::setAngleRange -- specify angle range for round scales
+// ScaleDraw::setLabelFormat -- set number format
+// ScaleDraw::scalediv -- return scale division
+// ScaleDraw::orientation -- return orientation
+// ScaleDraw::maxBoundingRect -- return maximum bounding rectangle
+// ScaleDraw::maxWidth -- return maximum width
+// ScaleDraw::maxHeight -- return maximum height
+// ScaleDraw::maxLabelWidth -- return maximum width of the number labels
+// ScaleDraw::draw -- draw the scale
+//
+//.U STATIC DATA MEMBERS
+//.t
+// enum ScaleDraw::Orientation { Left, Right, Top, Bottom, Round } --
+// Scale orientation
+//------------------------------------------------------------
+
+//------------------------------------------------------------
+//.U MEMBER FUNCTION DESCRIPTION
+//------------------------------------------------------------
+
+//------------------------------------------------------------
+//
+//.F ScaleDraw::ScaleDraw
+//
+// Constructor
+//.u Description
+// The range of the scale is initialized to [0, 100],
+// the angle range is set to [-135, 135], the geometry
+// is initialized such that the origin is at (0,0), the
+// length is 100, and the orientation is ScaleDraw::Bottom.
+//
+//------------------------------------------------------------
+ScaleDraw::ScaleDraw()
+{
+/* d_hpad = 6;
+ d_vpad = 3;
+ d_majLen = 8;
+ d_medLen = 6;
+ d_minLen = 4;
+ */
+
+ d_hpad = 3;
+ d_vpad = 1;
+ d_majLen = 4;
+ d_medLen = 3;
+ d_minLen = 2;
+
+ d_minAngle = -135 * 16;
+ d_maxAngle = 135 * 16;
+ d_fmt = 'g';
+ d_prec = 4;
+
+ // initialize scale and geometry
+ setGeometry(0,0,100,Bottom);
+ setScale(0,100,0,0,10);
+}
+
+
+//------------------------------------------------------------
+//
+//.F ScaleDraw::setScale (1)
+// Adjust the range of the scale
+//
+//.u Syntax
+//.f void ScaleDraw::setScale(double x1, double x2, double step, int logscale)
+//
+//.u Parameters
+//.p double x1 -- value at the left/low endpoint of the scale
+// double x2 -- value at the right/high endpoint of the scale
+// double step -- step size (default : 0.0)
+// int logscale -- logarithmic scale (default : 0)
+//
+//.u Description
+// If step == 0.0, the step width is calculated automatically
+// dependent on the maximal number of scale ticks.
+//
+//------------------------------------------------------------
+void ScaleDraw::setScale(double x1, double x2, int maxMajIntv,
+ int maxMinIntv, double step, int logscale)
+{
+ d_scldiv.rebuild( x1, x2, maxMajIntv, maxMinIntv, logscale, step, FALSE );
+ setDblRange( d_scldiv.lBound(), d_scldiv.hBound(), d_scldiv.logScale());
+}
+
+
+//------------------------------------------------------------
+//
+//.F ScaleDraw::setScale (2)
+// Change the scale division
+//
+//.u Syntax
+//.f void ScaleDraw::setScale(QwtAutoScale &as)
+//
+//.u Parameters
+//.p const QwtScaleDiv& sd -- new scale division
+//
+//------------------------------------------------------------
+
+void ScaleDraw::setScale(const ScaleDiv &s)
+{
+ d_scldiv = s;
+ setDblRange(d_scldiv.lBound(),d_scldiv.hBound(),d_scldiv.logScale());
+}
+
+
+
+//------------------------------------------------------------
+//.F ScaleDraw::draw
+// Draw the scale
+//.u Parameters
+//.p QPainter *p -- the painter
+//------------------------------------------------------------
+
+void ScaleDraw::draw(QPainter *p) const
+ {
+ double val,hval,majTick;
+
+ int i,k,kmax;
+
+ for (i=0; i< d_scldiv.majCnt(); i++)
+ {
+ val = d_scldiv.majMark(i);
+ drawTick(p, val, d_majLen);
+ drawLabel(p, val);
+ }
+
+ if (d_scldiv.logScale())
+ {
+ for (i=0; i< d_scldiv.minCnt(); i++)
+ {
+ drawTick(p,d_scldiv.minMark(i),d_minLen);
+ }
+ }
+ else
+ {
+ k = 0;
+ kmax = d_scldiv.majCnt() - 1;
+ if (kmax > 0)
+ {
+ majTick = d_scldiv.majMark(0);
+ hval = majTick - 0.5 * d_scldiv.majStep();
+
+ for (i=0; i< d_scldiv.minCnt(); i++)
+ {
+ val = d_scldiv.minMark(i);
+ if (val > majTick)
+ {
+ if (k < kmax)
+ {
+ k++;
+ majTick = d_scldiv.majMark(k);
+ }
+ else
+ {
+ majTick += d_scldiv.majMark(kmax) + d_scldiv.majStep();
+ }
+ hval = majTick - 0.5 * d_scldiv.majStep();
+
+ }
+ if (qwtAbs(val-hval) < step_eps * d_scldiv.majStep())
+ drawTick(p, val, d_medLen);
+ else
+ drawTick(p, val, d_minLen);
+ }
+ }
+ }
+
+ //
+ // draw backbone
+ //
+ //if (d_baseEnabled)
+ drawBackbone(p);
+
+}
+
+
+//------------------------------------------------------------
+//.F ScaleDraw::drawTick
+// Draws a singls scale tick
+//
+//.u Parameters
+//.p QPainter *p, double val, int len
+//------------------------------------------------------------
+
+void ScaleDraw::drawTick(QPainter *p, double val, int len) const
+ {
+ int tval = transform(val);
+ double arc;
+ int x1, x2, y1, y2;
+
+ switch(d_orient)
+ {
+ case Right:
+
+ p->drawLine(d_xorg, tval, d_xorg + len, tval);
+ break;
+
+ case Bottom:
+
+ p->drawLine(tval, d_yorg, tval, d_yorg + len);
+ break;
+
+ case Left:
+
+ p->drawLine(d_xorg, tval, d_xorg - len, tval);
+ break;
+
+ case Round:
+
+ if ((tval <= d_minAngle + 359 * 16) || (tval >= d_minAngle - 359 * 16))
+ {
+ arc = double(tval) / 16.0 * M_PI / 180.0;
+ x1 = qwtInt(d_xCenter + sin(arc) * d_radius);
+ x2 = qwtInt(d_xCenter + sin(arc) * (d_radius + double(len)));
+ y1 = qwtInt(d_yCenter - cos(arc) * d_radius);
+ y2 = qwtInt(d_yCenter - cos(arc) * (d_radius + double(len)));
+ p->drawLine(x1, y1, x2, y2);
+ }
+ break;
+
+ case Top:
+ default:
+
+ p->drawLine(tval, d_yorg, tval, d_yorg - len);
+ break;
+
+
+ }
+
+}
+
+
+
+
+//------------------------------------------------------------
+//.-
+//.F ScaleDraw::drawLabel
+// Draws the number label for a major scale tick
+//
+//.u Parameters
+//.p QPainter *p, double val
+//
+//------------------------------------------------------------
+void ScaleDraw::drawLabel(QPainter *p, double val) const
+{
+
+ static QString label;
+ static double pi_4 = M_PI * 0.25;
+ static double pi_75 = M_PI * 0.75;
+
+ double arc;
+ int xpos, ypos;
+ int tval;
+
+ QFontMetrics fm = p->fontMetrics();
+
+ tval = transform(val);
+
+ // correct rounding errors if val = 0
+ if ((!d_scldiv.logScale()) && (qwtAbs(val) < qwtAbs(step_eps * d_scldiv.majStep())))
+ val = 0.0;
+
+ label.setNum(val, d_fmt, d_prec);
+
+ switch(d_orient)
+ {
+ case Right:
+ p->drawText(d_xorg + d_majLen + d_hpad,
+ tval + (fm.ascent()-1) / 2,
+ label);
+ break;
+ case Left:
+ p->drawText(d_xorg - d_majLen - d_hpad - fm.width(label),
+ tval + (fm.ascent() -1) / 2,
+ label);
+ break;
+ case Bottom:
+ p->drawText(tval - (fm.width(label)-1) / 2, d_yorg + d_majLen + d_vpad + fm.ascent(), label);
+ break;
+ case Round:
+
+ if ((tval > d_minAngle + 359 * 16) || (tval < d_minAngle - 359 * 16))
+ break;
+
+ arc = double(tval) / 16.0 * M_PI / 180.0;
+
+ // Map arc into the interval -pi <= arc <= pi
+ if ((arc < -M_PI) || (arc > M_PI))
+ arc -= floor((arc + M_PI) / M_PI * 0.5) * 2.0 * M_PI;
+
+ xpos = 1 + qwtInt(d_xCenter + (d_radius + double(d_majLen + d_vpad)) * sin(arc));
+ ypos = qwtInt(d_yCenter - (d_radius + double(d_majLen + d_vpad)) * cos(arc));
+
+ if (arc < -pi_75)
+ {
+ p->drawText(xpos - qwtInt(double(fm.width(label))
+ * (1.0 + (arc + pi_75) * M_2_PI) ),
+ ypos + fm.ascent() - 1,
+ label);
+ }
+ else if (arc < -M_PI_4)
+ {
+ p->drawText(xpos - fm.width(label),
+
+
+ ypos - qwtInt(double(fm.ascent() - 1)
+ * (arc + M_PI_4) * M_2_PI),
+ label);
+ }
+ else if (arc < pi_4)
+ {
+ p->drawText(xpos + qwtInt(double(fm.width(label))
+ * ( arc - M_PI_4 ) * M_2_PI ),
+ ypos,
+ label);
+ }
+ else if (arc < pi_75)
+ {
+ p->drawText(xpos,
+ ypos + qwtInt(double(fm.ascent() - 1)
+ * (arc - M_PI_4) * M_2_PI),
+ label);
+ }
+ else
+ {
+ p->drawText(xpos - qwtInt(double(fm.width(label))
+ * ( arc - pi_75) * M_2_PI ),
+ ypos + fm.ascent() - 1,
+ label);
+ }
+ break;
+ case Top:
+ default:
+ p->drawText(tval - (fm.width(label)-1) / 2, d_yorg - d_majLen - d_vpad, label);
+ break;
+ }
+
+
+
+}
+
+//------------------------------------------------------------
+//.-
+//.F ScaleDraw::drawBackbone
+// Draws the baseline of the scale
+//
+//
+//.u Parameters
+//.p QPainter *p
+//
+//------------------------------------------------------------
+void ScaleDraw::drawBackbone(QPainter *p) const
+{
+ int bw2;
+ int a1, a2;
+ bw2 = p->pen().width() / 2;
+
+
+ switch(d_orient)
+ {
+ case Left:
+ p->drawLine(d_xorg - bw2, d_yorg, d_xorg - bw2, d_yorg + d_len - 1);
+ break;
+ case Right:
+ p->drawLine(d_xorg + bw2, d_yorg, d_xorg + bw2, d_yorg + d_len - 1);
+ break;
+ case Round:
+
+ a1 = qwtMin(i1(), i2()) - 90 * 16;
+ a2 = qwtMax(i1(), i2()) - 90 * 16;
+
+ p->drawArc(d_xorg, d_yorg, d_len,
+ d_len,
+ -a2, a2 - a1 + 1); // counterclockwise
+
+ break;
+
+ case Top:
+ p->drawLine(d_xorg, d_yorg - bw2, d_xorg + d_len - 1, d_yorg-bw2);
+ break;
+ case Bottom:
+ p->drawLine(d_xorg, d_yorg+bw2, d_xorg + d_len - 1, d_yorg+bw2);
+ break;
+ default:
+ p->drawLine(d_xorg, d_yorg, d_xorg + d_len - 1, d_yorg);
+ break;
+ }
+
+}
+
+
+//------------------------------------------------------------
+//
+//.F ScaleDraw::setGeometry
+// Specify the geometry of the scale
+//
+//
+//.u Parameters
+//.p int xorigin -- x coordinate of the origin
+// int yorigin -- y coordinate of the origin
+// int length -- length or diameter of the scale
+// Orientation o -- The orientation
+//
+//.u Description
+//
+// The parameters xorigin, yorigin and length have different meanings,
+// dependent on the
+// orientation:
+//.t
+// ScaleDraw::Left -- The origin is the topmost point of the
+// baseline. The baseline is a vertical line with the
+// specified length. Scale marks and labels are drawn
+// at the left of the baseline.
+//
+// ScaleDraw::Right -- The origin is the topmost point of the
+// baseline. The baseline is a vertical line with the
+// specified length. Scale marks and labels are drawn
+// at the right of the baseline.
+//
+// ScaleDraw::Top -- The origin is the leftmost point of the
+// baseline. The baseline is a horizontal line with the
+// specified length. Scale marks and labels are drawn
+// above the baseline.
+//
+// ScaleDraw::Bottom -- The origin is the leftmost point of the
+// baseline. The baseline is a horizontal line with the
+// specified length. Scale marks and labels are drawn
+// below the baseline.
+//
+// ScaleDraw::Round -- The origin is the top left corner of the
+// bounding rectangle of the baseline circle. The baseline
+// is the segment of a circle with a diameter of the specified length.
+// Scale marks and labels are drawn outside the baseline
+// circle.
+//
+//------------------------------------------------------------
+void ScaleDraw::setGeometry(int xorigin, int yorigin, int length, OrientationX o)
+{
+
+ d_xorg = xorigin;
+ d_yorg = yorigin;
+ d_radius = double(length) * 0.5;
+ d_xCenter = double(xorigin) + double(length) * 0.5;
+ d_yCenter = double(yorigin) + double(length) * 0.5;
+
+ if (length > minLen)
+ d_len = length;
+ else
+ d_len = minLen;
+
+ d_orient = o;
+
+ switch(d_orient)
+ {
+ case Left:
+ case Right:
+ setIntRange(d_yorg + d_len - 1, d_yorg);
+ break;
+ case Round:
+ setIntRange(d_minAngle, d_maxAngle);
+ break;
+ case Top:
+ case Bottom:
+ default:
+ setIntRange(d_xorg, d_xorg + d_len - 1);
+ break;
+ }
+}
+
+
+
+//------------------------------------------------------------
+//
+//.F ScaleDraw::maxWidth
+// Return the maximum width of the scale for a specified QPainter
+//
+//.u Syntax
+//.f int ScaleDraw::maxWidth(QPainter *p)
+//
+//.u Parameters
+//.p QPainter *p -- painter
+// bool worst -- if TRUE, assume the worst possible case. If FALSE,
+// calculate the real maximum width, which is more
+// CPU intensive.
+//
+//------------------------------------------------------------
+int ScaleDraw::maxWidth(QPainter *p, bool worst) const
+{
+ int rv = 0;
+ int bw = p->pen().width();
+
+ QString s;
+
+ QFontMetrics fm = p->fontMetrics();
+
+ rv = maxLabelWidth(p,worst);
+
+ switch (d_orient)
+ {
+ case Left:
+ case Right:
+ rv += (bw + d_hpad + d_majLen);
+ break;
+ case Round:
+ rv += (bw + d_vpad + d_majLen);
+ break;
+ case Top:
+ case Bottom:
+ default:
+ rv += d_len;
+ }
+
+ return rv;
+
+}
+
+//------------------------------------------------------------
+//
+//.F ScaleDraw::maxHeight
+// Return the maximum height of the scale for the
+// specified painter
+//
+//.u Syntax
+//.f int ScaleDraw::maxHeight(QPainter *p)
+//
+//.u Parameters
+//.p QPainter *p
+//
+//------------------------------------------------------------
+int ScaleDraw::maxHeight(QPainter *p) const
+{
+
+ int rv = 0;
+ int bw = p->pen().width();
+
+ p->save();
+ QFontMetrics fm = p->fontMetrics();
+
+ switch (d_orient)
+ {
+ case Top:
+ case Bottom:
+ case Round:
+ rv = bw + d_vpad + d_majLen + fm.height();
+ break;
+ case Left:
+ case Right:
+ default:
+ rv = d_len + ((fm.height() + 1) / 2);
+ }
+
+ return rv;
+
+}
+
+//------------------------------------------------------------
+//
+//.F ScaleDraw:maxBoundingRect
+// Return the maximum bounding rectangle of the scale
+// for a specified painter
+//
+//.u Parameters
+//.p QPainter *p -- painter
+//
+//.u Description
+// The bounding rectangle is not very exact for round scales
+// with strange angle ranges.
+//
+//------------------------------------------------------------
+QRect ScaleDraw::maxBoundingRect(QPainter *p) const
+{
+ int i, wl,h,wmax;
+ int a, ar, amin, amax;
+ double arc;
+
+ QRect r;
+
+ QFontMetrics fm = p->fontMetrics();
+
+ wl = maxLabelWidth(p, TRUE);
+ h = fm.height();
+
+ switch(d_orient)
+ {
+ case Left:
+
+ r = QRect( d_xorg - d_hpad - d_majLen - wl,
+ d_yorg - fm.ascent(),
+ d_majLen + d_hpad + wl,
+ d_len + fm.height());
+ break;
+
+ case Right:
+
+ r = QRect( d_xorg,
+ d_yorg - fm.ascent(),
+ d_majLen + d_hpad + wl,
+ d_len + fm.height());
+ break;
+
+ case Top:
+
+ r = QRect ( d_xorg - wl / 2,
+ d_yorg - d_majLen - fm.ascent(),
+ d_len + wl,
+ d_majLen + d_vpad + fm.ascent());
+ break;
+
+ case Bottom:
+
+ r = QRect ( d_xorg - wl / 2,
+ d_yorg,
+ d_len + wl,
+ d_majLen + d_vpad + fm.height());
+ break;
+
+ case Round:
+
+ amin = 2880;
+ amax = 0;
+ ar = 0;
+
+ for (i=0; i< d_scldiv.majCnt(); i++)
+ {
+ a = transform(d_scldiv.majMark(i));
+
+ while (a > 2880) a -= 5760;
+ while (a < - 2880) a += 5760;
+
+ ar = qwtAbs(a);
+
+ if (ar < amin) amin = ar;
+ if (ar > amax) amax = ar;
+
+ }
+
+ for (i=0; i< d_scldiv.minCnt(); i++)
+ {
+ a = transform(d_scldiv.majMark(i));
+
+ while (a > 2880) a -= 5760;
+ while (a < - 2880) a += 5760;
+
+ ar = qwtAbs(a);
+
+ if (ar < amin) amin = ar;
+ if (ar > amax) amax = ar;
+ }
+
+ arc = double(amin) / 16.0 * M_PI / 180.0;
+ r.setTop(qwtInt(d_yCenter - (d_radius + double(d_majLen + d_vpad)) * cos(arc))
+ + fm.ascent() );
+
+ arc = double(amax) / 16.0 * M_PI / 180.0;
+ r.setBottom(qwtInt(d_yCenter - (d_radius + double(d_majLen + d_vpad)) * cos(arc))
+ + fm.height() );
+
+ wmax = d_len + d_majLen + d_hpad + wl;
+
+ r.setLeft(d_xorg - d_majLen - d_hpad - wl);
+ r.setWidth(d_len + 2*(d_majLen + d_hpad + wl));
+ break;
+ }
+
+ return r;
+
+}
+
+//------------------------------------------------------------
+//
+//.F ScaleDraw::setAngleRange
+// Adjust the baseline circle segment for round scales.
+//
+//.u Syntax
+//.f void ScaleDraw::setAngleRange(double angle1, double angle2)
+//
+//.u Parameters
+//.p double angle1, double angle2
+// boundaries of the angle interval in degrees.
+//
+//.u Description
+// The baseline will be drawn from min(angle1,angle2) to max(angle1, angle2).
+// The settings have no effect if the scale orientation is not set to
+// ScaleDraw::Round. The default setting is [ -135, 135 ].
+// An angle of 0 degrees corresponds to the 12 o'clock position,
+// and positive angles count in a clockwise direction.
+//
+//.u Note
+//.i
+// -- The angle range is limited to [-360, 360] degrees. Angles exceeding
+// this range will be clipped.
+// -- For angles more than 359 degrees above or below min(angle1, angle2),
+// scale marks will not be drawn.
+// -- If you need a counterclockwise scale, use @QwtScaleDiv::setRange (1)@
+// or @QwtScaleDiv::setRange (2)@.
+//------------------------------------------------------------
+void ScaleDraw::setAngleRange(double angle1, double angle2)
+{
+ int amin, amax;
+
+ angle1 = qwtLim(angle1, -360.0, 360.0);
+ angle2 = qwtLim(angle2, -360.0, 360.0);
+ amin = int(rint(qwtMin(angle1, angle2) * 16.0));
+ amax = int(rint(qwtMax(angle1, angle2) * 16.0));
+
+ if (amin == amax)
+ {
+ amin -= 1;
+ amax += 1;
+ }
+
+ d_minAngle = amin;
+ d_maxAngle = amax;
+ setIntRange(d_minAngle, d_maxAngle);
+
+}
+
+
+//------------------------------------------------------------
+//
+//.F ScaleDraw::setLabelFormat
+// Set the number format for the major scale labels
+//
+//.u Syntax
+//.f void ScaleDraw::setLabelFormat(char f, int prec)
+//
+//.u Parameters
+//.p char f -- format character
+// int prec -- precision
+//
+//.u Description
+// Format character and precision have the same meaning as for the
+// QString class.
+//
+//.u See also
+// QString::setNum in the Qt manual
+//
+//------------------------------------------------------------
+void ScaleDraw::setLabelFormat(char f, int prec)
+{
+ d_fmt = f;
+ d_prec = prec;
+}
+
+//------------------------------------------------------------
+//
+//.F ScaleDraw::maxLabelWidth
+// Return the maximum width of a label
+//
+//.u Syntax
+//.f int ScaleDraw::maxLabelWidth(QPainter *p, int worst)
+//
+//.u Parameters
+//.p QPainter *p -- painter
+// int worst -- If TRUE, take the worst case. If FALSE, take
+// the actual width of the largest label.
+//
+//------------------------------------------------------------
+int ScaleDraw::maxLabelWidth(QPainter *p, int worst) const
+{
+
+ int i,rv = 0;
+ double val;
+ QString s;
+
+
+ QFontMetrics fm = p->fontMetrics();
+
+ if (worst) // worst case
+ {
+ s.setNum(WorstCase, d_fmt, d_prec);
+ rv = fm.width(s);
+ }
+ else // actual width
+ {
+ for (i=0;i<d_scldiv.majCnt(); i++)
+ {
+ val = d_scldiv.majMark(i);
+ // correct rounding errors if val = 0
+ if ((!d_scldiv.logScale()) && (qwtAbs(val) < step_eps * qwtAbs(d_scldiv.majStep())))
+ val = 0.0;
+ s.setNum(val, d_fmt, d_prec);
+ rv = qwtMax(rv,fm.width(s));
+ }
+ }
+
+
+ return rv;
+
+}
+
+
+//------------------------------------------------------------
+//
+//.F ScaleDraw::scaleDiv
+// Return the scale division
+//
+//.u Syntax
+//.f const QwtScaleDiv & ScaleDraw::scaleDiv() const
+//
+//.u See also
+// @^QwtScaleDiv@
+//------------------------------------------------------------
+
+//------------------------------------------------------------
+//
+//.F ScaleDraw::orientation
+// Return the orientation
+//
+//.u Syntax
+//.f int ScaleDraw::orientation() const
+//
+//.u See also
+// @ScaleDraw::setGeometry@
+//
+//------------------------------------------------------------
+
+
+
+
+
+
+
+
+
+
+
diff --git a/muse2/muse/widgets/scldraw.h b/muse2/muse/widgets/scldraw.h
new file mode 100644
index 00000000..8ba85600
--- /dev/null
+++ b/muse2/muse/widgets/scldraw.h
@@ -0,0 +1,89 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: scldraw.h,v 1.1.1.1 2003/10/27 18:55:08 wschweer Exp $
+//
+// Copyright (C) 1997 Josef Wilgen
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License, version 2,
+// as published by the Free Software Foundation.
+//
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __SCLDRAW_H__
+#define __SCLDRAW_H__
+
+#include <qglobal.h>
+#include <qstring.h>
+#include "dimap.h"
+#include "scldiv.h"
+#include <qfont.h>
+#include <qrect.h>
+#include <qcolor.h>
+
+class QPainter;
+class AutoScale;
+
+class ScaleDraw : public DiMap {
+ public:
+ enum OrientationX { Bottom, Top, Left, Right, Round };
+
+ private:
+ ScaleDiv d_scldiv;
+ static const int minLen;
+ OrientationX d_orient;
+
+ int d_xorg;
+ int d_yorg;
+ int d_len;
+
+ int d_hpad;
+ int d_vpad;
+
+ int d_medLen;
+ int d_majLen;
+ int d_minLen;
+
+ int d_minAngle;
+ int d_maxAngle;
+
+ double d_xCenter;
+ double d_yCenter;
+ double d_radius;
+
+ char d_fmt;
+ int d_prec;
+
+ void drawTick(QPainter *p, double val, int len) const;
+ void drawBackbone(QPainter *p) const;
+ void drawLabel(QPainter *p, double val) const;
+
+ public:
+
+ ScaleDraw();
+
+ void setScale(const ScaleDiv &s);
+ void setScale(double vmin, double vmax, int maxMajIntv, int maxMinIntv,
+ double step = 0.0, int logarithmic = 0);
+ void setGeometry(int xorigin, int yorigin, int length, OrientationX o);
+ void setAngleRange(double angle1, double angle2);
+ void setLabelFormat(char f, int prec);
+
+ const ScaleDiv& scaleDiv() const { return d_scldiv; }
+ OrientationX orientation() const { return d_orient; }
+ QRect maxBoundingRect(QPainter *p) const;
+ int maxWidth(QPainter *p, bool worst = TRUE) const;
+ int maxHeight(QPainter *p) const;
+ int maxLabelWidth(QPainter *p, int worst = TRUE) const;
+ void draw(QPainter *p) const;
+ };
+
+#endif
+
+
+
+
+
+
+
diff --git a/muse2/muse/widgets/sclif.cpp b/muse2/muse/widgets/sclif.cpp
new file mode 100644
index 00000000..8740bc53
--- /dev/null
+++ b/muse2/muse/widgets/sclif.cpp
@@ -0,0 +1,205 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: sclif.cpp,v 1.1.1.1 2003/10/27 18:55:10 wschweer Exp $
+
+// Copyright (C) 1997 Josef Wilgen
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License, version 2,
+// as published by the Free Software Foundation.
+//
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "sclif.h"
+
+// ScaleIf - An interface class for widgets containing a scale
+//
+// This interface class is used to provide classes
+// with a protected ScaleDraw member and a public
+// interface to access that scale.
+//
+// The primary purpose of this class is to define
+// a common interface for classes which are supposed to
+// contain a ScaleDraw class. It provides a protected
+// ScaleDraw member
+// called d_scale and a couple of public member functions
+// which allow direct but restricted access
+// to this scale by the user.
+// Widgets derived from this class have
+// to implement the member function scaleChange(),
+// which is called to notify changes of the
+// scale parameters and usually requires repainting or
+// resizing respectively.
+// In general, a class derived from ScaleIf is
+// expected to manage the division and the position of its scale internally
+// when no user-defined scale is set. It should take the d_maxMinor
+// and d_maxMajor members into account, which can be set by the user.
+// An implementation can check if a user-defined scale is set by calling the
+// @ScaleIf::hasUserScale@ member.
+
+//------------------------------------------------------------
+// ScaleIf::ScaleIf
+// Construct a ScaleIf instance
+//
+// Syntax
+// ScaleIf::ScaleIf()
+//------------------------------------------------------------
+
+ScaleIf::ScaleIf()
+ {
+ d_userScale = FALSE;
+ d_maxMajor = 5;
+ d_maxMinor = 3;
+ d_scale.setScale(0.0,100.0,d_maxMajor, d_maxMinor);
+ }
+
+//------------------------------------------------------------
+// ScaleIf::setScale (1)
+// Specify a user-defined scale.
+//
+// Syntax
+// void ScaleIf::setScale(double vmin, double vmax, int logarithmic)
+//
+// Parameters
+// double vmin, double vmax -- boundary values
+// int logarithmic -- If != 0, Build a logarithmic scale
+//
+// Description
+// By default, the widget is supposed to control the range of its scale
+// automatically, but sometimes it is desirable to have a user-defined
+// scale which is not in sync with
+// the widget's range, e.g. if a logarithmic scale is needed
+// (sliders don't support that) or if the scale is required
+// to have a fixed range (say 0...100%), independent of the
+// widget's range.
+//
+// See also
+// @ScaleIf::autoScale@
+//------------------------------------------------------------
+
+void ScaleIf::setScale(double vmin, double vmax, int logarithmic)
+ {
+ setScale(vmin,vmax,0.0,logarithmic);
+ }
+
+//------------------------------------------------------------
+// ScaleIf::setScale (2)
+// Specify a user-defined scale.
+//
+// Syntax
+// void ScaleIf::setScale(double vmin, double vmax, int logarithmic)
+//
+// Parameters
+// double vmin, double vmax -- interval boundaries
+// int step -- major step size
+// int logarithmic -- If != 0, build a logarithmic scale
+//
+// Description
+// By default, the widget is supposed to control the range of its scale
+// automatically, but sometimes it is desirable to have a user-defined
+// scale which is not in sync with
+// the widget's range, e.g. if a logarithmic scale is needed
+// (sliders don't support that) or if the scale is required
+// to have a fixed range (say 0...100%), independent of the
+// widget's range.
+//------------------------------------------------------------
+
+void ScaleIf::setScale(double vmin, double vmax, double step, int logarithmic)
+ {
+ ScaleDiv oldscl(d_scale.scaleDiv());
+
+ d_scale.setScale(vmin, vmax, d_maxMajor, d_maxMinor, step, logarithmic);
+ d_userScale = TRUE;
+ if (oldscl != d_scale.scaleDiv())
+ scaleChange();
+ }
+
+//------------------------------------------------------------
+// Scale::setScale
+// Assign a user-defined scale division
+//
+// Syntax
+// void Scale::setScale(const ScaleDiv &s)
+//
+// Parameters
+// const ScaleDiv &s -- scale division
+//------------------------------------------------------------
+
+void ScaleIf::setScale(const ScaleDiv &s)
+ {
+ d_scale.setScale(s);
+ scaleChange();
+ }
+
+//------------------------------------------------------------
+// ScaleIf::autoScale
+// Advise the widget to control the scale range
+// internally.
+// Syntax
+// void ScaleIf::autoScale
+//
+// Description
+// Autoscaling is on by default.
+//------------------------------------------------------------
+
+void ScaleIf::autoScale()
+ {
+ if (!d_userScale) {
+ d_userScale = FALSE;
+ scaleChange();
+ }
+ }
+
+//------------------------------------------------------------
+// ScaleIf::setScaleMaxMajor
+// Set the maximum number of major tick intervals.
+//
+// Syntax
+// void ScaleIf::setScaleMaxMajor(int ticks)
+//
+// Parameters
+// int ticks -- maximal number of major ticks.
+//
+// Description
+// The scale's major ticks are calculated automatically such that
+// the number of major intervals does not exceed <ticks>.
+// The default value is 5.
+//------------------------------------------------------------
+
+void ScaleIf::setScaleMaxMajor(int ticks)
+ {
+ if (ticks != d_maxMajor) {
+ d_maxMajor = ticks;
+ d_scale.setScale(d_scale.scaleDiv().lBound(), d_scale.scaleDiv().hBound(),
+ d_maxMajor, d_maxMinor, 0.0,d_scale.scaleDiv().logScale());
+ scaleChange();
+ }
+ }
+
+//------------------------------------------------------------
+// ScaleIf::setScaleMaxMinor
+// Set the maximum number of minor tick intervals
+//
+// Syntax
+// void ScaleIf::setScaleMaxMinor(int ticks)
+//
+// Parameters
+// int ticks
+//
+// Description
+// The scale's minor ticks are calculated automatically such that
+// the number of minor intervals does not exceed <ticks>.
+// The default value is 3.
+//------------------------------------------------------------
+
+void ScaleIf::setScaleMaxMinor(int ticks)
+ {
+ if ( ticks != d_maxMinor) {
+ d_maxMinor = ticks;
+ d_scale.setScale(d_scale.scaleDiv().lBound(), d_scale.scaleDiv().hBound(),
+ d_maxMajor, d_maxMinor, 0.0, d_scale.scaleDiv().logScale());
+ scaleChange();
+ }
+ }
+
diff --git a/muse2/muse/widgets/sclif.h b/muse2/muse/widgets/sclif.h
new file mode 100644
index 00000000..86c0ecb6
--- /dev/null
+++ b/muse2/muse/widgets/sclif.h
@@ -0,0 +1,51 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: sclif.h,v 1.1.1.1 2003/10/27 18:54:33 wschweer Exp $
+
+// Copyright (C) 1997 Josef Wilgen
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License, version 2,
+// as published by the Free Software Foundation.
+//
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __SCALE_IF_H__
+#define __SCALE_IF_H__
+
+#include <qglobal.h>
+#include "scldraw.h"
+
+//---------------------------------------------------------
+// ScaleIf
+//---------------------------------------------------------
+
+class ScaleIf
+ {
+ bool d_userScale;
+
+ protected:
+ ScaleDraw d_scale;
+ int d_maxMajor;
+ int d_maxMinor;
+ bool hasUserScale() {return d_userScale;}
+ virtual void scaleChange() = 0;
+
+ public:
+ ScaleIf();
+ virtual ~ScaleIf() {};
+
+ void setScale (double vmin, double vmax, int logarithmic = 0);
+ void setScale (double vmin, double vmax, double step, int logarithmic = 0);
+ void setScale(const ScaleDiv &s);
+ void setScaleMaxMajor( int ticks);
+ void setScaleMaxMinor( int ticks);
+ void autoScale();
+
+ int scaleMaxMinor() const {return d_maxMinor;}
+ int scaleMaxMajor() const {return d_maxMinor;}
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/scrollscale.cpp b/muse2/muse/widgets/scrollscale.cpp
new file mode 100644
index 00000000..1ff22c6a
--- /dev/null
+++ b/muse2/muse/widgets/scrollscale.cpp
@@ -0,0 +1,499 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: scrollscale.cpp,v 1.2.2.2 2009/11/04 17:43:25 lunar_shuttle Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <stdio.h>
+#include <cmath>
+#include <qslider.h>
+#include <qscrollbar.h>
+#include <qlayout.h>
+#include <qtoolbutton.h>
+#include <qtooltip.h>
+#include <qlabel.h>
+//Added by qt3to4:
+#include <Q3BoxLayout>
+#include <QResizeEvent>
+
+// #include "globals.h"
+#include "scrollscale.h"
+#include "icons.h"
+
+//---------------------------------------------------------
+// setScale
+// "val" - slider value in range 0-1024
+//---------------------------------------------------------
+
+void ScrollScale::setScale ( int val )
+{
+ int off = offset();
+ if ( invers )
+ val = 1024 - val;
+ double min, max;
+ if ( scaleMin < 0 )
+ min = 1.0/ ( -scaleMin );
+ else
+ min = double ( scaleMin );
+
+ if ( scaleMax < 0 )
+ max = 1.0/ ( -scaleMax );
+ else
+ max = double ( scaleMax );
+
+ double diff = max-min;
+ double fkt = double ( val ) /1024.0;
+ double v = ( pow ( logbase, fkt )-1 ) / ( logbase-1 );
+ double scale;
+ if ( invers )
+ scale = max - v * diff;
+ else
+ scale = min + v * diff;
+
+ if ( scale < 1.0 )
+ scaleVal = - ( int ( 1.0 / scale ) );
+ else
+ scaleVal = int ( scale );
+ if ( scaleVal == -1 ) // nur so
+ scaleVal = 1;
+
+#if 0
+ if ( scaleMax > scaleMin )
+ {
+ if ( scale < scaleMin )
+ scale = scaleMin;
+ else if ( scale > scaleMax )
+ scale = scaleMax;
+ }
+ else
+ {
+ if ( scale < scaleMax )
+ scale = scaleMax;
+ else if ( scale > scaleMin )
+ scale = scaleMin;
+ }
+#endif
+
+ emit scaleChanged ( scaleVal );
+ if ( !noScale )
+ setRange ( minVal, maxVal );
+
+ int i = ( scroll->orientation() == Qt::Horizontal ) ? width() : height();
+ int pos, pmax;
+ if ( scaleVal < 1 )
+ {
+ pos = ( off-scaleVal/2 ) / ( -scaleVal );
+ pmax = ( maxVal-scaleVal-1 ) / ( -scaleVal ) - i;
+ }
+ else
+ {
+ pos = off * scaleVal;
+ pmax = maxVal * scaleVal - i;
+ }
+ if(pos > pmax)
+ pos = pmax;
+ setPos(pos);
+}
+
+//---------------------------------------------------------
+// setMag
+//---------------------------------------------------------
+
+void ScrollScale::setMag ( int cs )
+{
+ scale->setValue ( cs );
+ setScale ( cs );
+}
+
+//---------------------------------------------------------
+// setRange
+// min,max ticks
+//---------------------------------------------------------
+
+void ScrollScale::setRange ( int min, int max )
+{
+// if ((min != minVal) && (max != maxVal))
+// return;
+ minVal = min;
+ maxVal = max;
+ int i = ( scroll->orientation() == Qt::Horizontal ) ? width() : height();
+
+ if ( !noScale )
+ {
+ if ( scaleVal < 1 )
+ {
+ min = minVal / ( -scaleVal );
+ max = ( maxVal-scaleVal-1 ) / ( -scaleVal ) - i;
+ }
+ else
+ {
+ min = minVal * scaleVal;
+ max = maxVal * scaleVal - i;
+ }
+ }
+ else
+ max -= i;
+ if ( max < 0 )
+ max = 0;
+ if ( min < 0 )
+ min = 0;
+ if ( min > max )
+ max = min;
+
+ scroll->setRange ( min, max );
+
+ // qt doesn't check this...
+ if ( scroll->value() < min )
+ scroll->setValue ( min );
+ if ( scroll->value() > max )
+ scroll->setValue ( max );
+ scroll->setSteps ( 20, i );
+}
+
+//---------------------------------------------------------
+// setPos
+// pos in pixel
+//---------------------------------------------------------
+
+void ScrollScale::setPos ( unsigned pos )
+{
+
+ scroll->setValue ( pos );
+}
+
+//---------------------------------------------------------
+// setPosNoLimit
+// pos in pixel
+//---------------------------------------------------------
+
+void ScrollScale::setPosNoLimit ( unsigned pos )
+{
+ //printf ( "ScrollScale::setPosNoLimit pos:%d scaleVal:%d offset ticks:%d\n", pos, scaleVal, pos2offset ( pos ) );
+
+ if((int)pos > scroll->maxValue())
+ scroll->setMaxValue(pos);
+ scroll->setValue(pos);
+}
+
+//---------------------------------------------------------
+// resizeEvent
+//---------------------------------------------------------
+
+void ScrollScale::resizeEvent ( QResizeEvent* )
+{
+ setScale ( scale->value() );
+}
+
+//---------------------------------------------------------
+// ScrollScale
+//---------------------------------------------------------
+
+ScrollScale::ScrollScale ( int s1, int s2, int cs, int max_, Qt::Orientation o,
+ QWidget* parent, int min_, bool inv, double bas )
+ : QWidget ( parent )
+{
+ noScale = false;
+ _page = 0;
+ _pages = 1;
+ pageButtons = false;
+ showMagFlag = true;
+ scaleMin = s1;
+ scaleMax = s2;
+ minVal = min_;
+ maxVal = max_;
+ up = 0;
+ down = 0;
+ logbase = bas;
+ invers = inv;
+
+ double min, max;
+ if ( scaleMin < 0 )
+ min = 1.0/ ( -scaleMin );
+ else
+ min = double ( scaleMin );
+
+ if ( scaleMax < 0 )
+ max = 1.0/ ( -scaleMax );
+ else
+ max = double ( scaleMax );
+
+ double cmag = ( cs < 0 ) ? ( 1.0/ ( -cs ) ) : double ( cs );
+ double diff = max-min;
+
+ //
+ // search initial value for slider
+ //
+ int cur = 512;
+ int delta = 256;
+ for ( int i = 0; i < 8; ++i )
+ {
+ int tryVal = invers ? 1025 - cur : cur;
+ double fkt = double ( tryVal ) /1024.0;
+ double v = ( pow ( logbase, fkt )-1 ) / ( logbase-1 );
+ double scale = invers ? ( max - v * diff ) : ( min + v * diff );
+ if ( scale == cmag ) // not very likely
+ break;
+ //printf("iteration %d invers:%d soll %f(cur:%d) - ist %f\n", i, invers, scale, cur, cmag);
+ int dd = invers ? -delta : delta;
+ cur += ( scale < cmag ) ? dd : -dd;
+ delta/=2;
+ }
+
+ scale = new QSlider ( 0, 1024, 1, cur, o, this );
+ scroll = new QScrollBar ( o, this );
+ setScale ( cur );
+
+ if ( o == Qt::Horizontal )
+ {
+ box = new Q3BoxLayout ( this, Q3BoxLayout::LeftToRight );
+ scale->setMaximumWidth ( 70 );
+ scroll->setMinimumWidth ( 50 );
+ }
+ else
+ {
+ box = new Q3BoxLayout ( this, Q3BoxLayout::Down );
+ scroll->setMinimumHeight ( 50 );
+ scale->setMaximumHeight ( 70 );
+ }
+ box->addWidget ( scroll, 10 );
+ box->addWidget ( scale, 5 );
+ connect ( scale, SIGNAL ( valueChanged ( int ) ), SLOT ( setScale ( int ) ) );
+ connect ( scale, SIGNAL ( valueChanged ( int ) ), SIGNAL ( lscaleChanged ( int ) ) );
+ connect ( scroll, SIGNAL ( valueChanged ( int ) ), SIGNAL ( scrollChanged ( int ) ) );
+}
+
+//---------------------------------------------------------
+// setPageButtons
+//---------------------------------------------------------
+
+void ScrollScale::setPageButtons ( bool flag )
+{
+ if ( flag == pageButtons )
+ return;
+
+ if ( flag )
+ {
+ if ( up == 0 )
+ {
+ up = new QToolButton ( this );
+ up->setPixmap ( * ( upIcon ) );
+ down = new QToolButton ( this );
+ down->setPixmap ( * ( downIcon ) );
+ pageNo = new QLabel ( this );
+ QString s;
+ s.setNum ( _page+1 );
+ pageNo->setText ( s );
+ QToolTip::add ( down, tr ( "next page" ) );
+ QToolTip::add ( up, tr ( "previous page" ) );
+ QToolTip::add ( pageNo, tr ( "current page number" ) );
+ box->insertWidget ( 1, up );
+ box->insertWidget ( 2, down );
+ box->insertSpacing ( 3, 5 );
+ box->insertWidget ( 4, pageNo );
+ box->insertSpacing ( 5, 5 );
+ connect ( up, SIGNAL ( clicked() ), SLOT ( pageUp() ) );
+ connect ( down, SIGNAL ( clicked() ), SLOT ( pageDown() ) );
+ }
+ up->show();
+ down->show();
+ pageNo->show();
+ if ( _page == ( _pages-1 ) )
+ down->setEnabled ( false );
+ if ( _page == 0 )
+ up->setEnabled ( false );
+ }
+ else
+ {
+ up->hide();
+ down->hide();
+ }
+ pageButtons = flag;
+}
+
+//---------------------------------------------------------
+// showMag
+//---------------------------------------------------------
+
+void ScrollScale::showMag ( bool flag )
+{
+ showMagFlag = flag;
+ if ( flag )
+ scale->show();
+ else
+ scale->hide();
+ box->activate();
+}
+
+//---------------------------------------------------------
+// offset
+//---------------------------------------------------------
+int ScrollScale::offset()
+{
+ return pos2offset ( scroll->value() );
+}
+
+//---------------------------------------------------------
+// pos2offset
+//---------------------------------------------------------
+int ScrollScale::pos2offset ( int pos )
+{
+ if ( scaleVal < 1 )
+ return pos * ( -scaleVal ) + scaleVal/2;
+ else
+ return pos / scaleVal;
+}
+
+//---------------------------------------------------------
+// setOffset
+// val in tick
+//---------------------------------------------------------
+
+void ScrollScale::setOffset ( int val )
+{
+ int i = ( scroll->orientation() == Qt::Horizontal ) ? width() : height();
+ int pos, max;
+
+ if ( scaleVal < 1 )
+ {
+ pos = ( val-scaleVal/2 ) / ( -scaleVal );
+ max = ( maxVal-scaleVal-1 ) / ( -scaleVal ) - i;
+ }
+ else
+ {
+ pos = val * scaleVal;
+ max = maxVal * scaleVal - i;
+ }
+ if ( pos > max )
+ {
+ int min;
+ if ( scaleVal < 1 )
+ {
+ maxVal = ( pos + width() ) * ( -scaleVal );
+ min = ( minVal-scaleVal/2 ) / ( -scaleVal );
+ max = ( maxVal-scaleVal/2 ) / ( -scaleVal ) - i;
+ }
+ else
+ {
+ maxVal = ( pos + width() + scaleVal/2 ) /scaleVal;
+ min = minVal * scaleVal;
+ max = maxVal * scaleVal - i;
+ }
+
+ if ( max < 0 )
+ max = 0;
+ if ( min < 0 )
+ min = 0;
+ if ( min > max )
+ max = min;
+ scroll->setRange ( min, max );
+ }
+
+ setPos ( pos );
+}
+
+//---------------------------------------------------------
+// pageUp
+// goto previous page
+//---------------------------------------------------------
+
+void ScrollScale::pageUp()
+{
+ if ( _page )
+ {
+ --_page;
+ emit newPage ( _page );
+ QString s;
+ s.setNum ( _page+1 );
+ pageNo->setText ( s );
+ if ( _page == 0 )
+ up->setEnabled ( false );
+ if ( _page == ( _pages-2 ) )
+ down->setEnabled ( true );
+ }
+}
+
+//---------------------------------------------------------
+// pageDown
+// goto next page
+//---------------------------------------------------------
+
+void ScrollScale::pageDown()
+{
+ if ( _page + 1 < _pages )
+ {
+ ++_page;
+ emit newPage ( _page );
+ QString s;
+ s.setNum ( _page+1 );
+ pageNo->setText ( s );
+ if ( _page == ( _pages-1 ) )
+ down->setEnabled ( false );
+ if ( _page == 1 )
+ up->setEnabled ( true );
+ }
+}
+
+//---------------------------------------------------------
+// setPages
+//---------------------------------------------------------
+
+void ScrollScale::setPages ( int n )
+{
+ _pages = n;
+ if ( _page >= _pages )
+ {
+ _page = _pages-1;
+ emit newPage ( _page );
+ QString s;
+ s.setNum ( _page+1 );
+ pageNo->setText ( s );
+ }
+ up->setEnabled ( _page );
+ down->setEnabled ( _page < ( _pages-1 ) );
+}
+
+int ScrollScale::pos() const
+{
+ return scroll->value();
+}
+
+int ScrollScale::mag() const
+{
+ return scale->value();
+}
+
+/**
+ * Hardcoded hackish function that corresponds to the values used for the scrollscales in PianoRoll and DrumEditor
+ * since I couldn't easily create any inverse function from the [0,1024]-range to detect where a zoom actually occurs
+ * (mg)
+ */
+int ScrollScale::getQuickZoomLevel(int mag)
+{
+ if (mag == 0)
+ return 0;
+
+ for (int i=0; i<24; i++) {
+ int val1 = ScrollScale::convertQuickZoomLevelToMag(i);
+ int val2 = ScrollScale::convertQuickZoomLevelToMag(i + 1);
+ if (mag > val1 && mag <= val2)
+ return i + 1;
+ }
+
+ return -1;
+
+}
+
+/**
+ * Function returning the boundary values for a zoom change, hardcoded corresponding to the values used in PianoRoll
+ * and DrumEditor
+ */
+int ScrollScale::convertQuickZoomLevelToMag(int zoomlevel)
+{
+ int vals[] = { 0, 1, 15, 30, 46, 62, 80, 99, 119, 140, 163,
+ 187, 214, 242, 274, 308, 346, 388, 436, 491, 555, 631,
+ 726, 849, 1024 };
+
+ return vals[zoomlevel];
+}
+
diff --git a/muse2/muse/widgets/scrollscale.h b/muse2/muse/widgets/scrollscale.h
new file mode 100644
index 00000000..572e5906
--- /dev/null
+++ b/muse2/muse/widgets/scrollscale.h
@@ -0,0 +1,90 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: scrollscale.h,v 1.2.2.3 2009/11/04 17:43:26 lunar_shuttle Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __SCROLLSCALE_H__
+#define __SCROLLSCALE_H__
+
+#include <qwidget.h>
+#include <qslider.h>
+//Added by qt3to4:
+#include <QResizeEvent>
+#include <Q3BoxLayout>
+#include <QLabel>
+
+// class QSlider;
+class QScrollBar;
+class Q3BoxLayout;
+class QToolButton;
+class QLabel;
+
+//---------------------------------------------------------
+// ScrollScale
+//---------------------------------------------------------
+
+class ScrollScale : public QWidget {
+ QSlider* scale;
+ QScrollBar* scroll;
+ int minVal, maxVal;
+ int scaleVal, scaleMin, scaleMax;
+ bool showMagFlag;
+ Q3BoxLayout* box;
+ bool noScale;
+ bool pageButtons;
+ int _page;
+ int _pages;
+ QToolButton* up;
+ QToolButton* down;
+ QLabel* pageNo;
+ bool invers;
+ double logbase;
+
+ virtual void resizeEvent(QResizeEvent*);
+ Q_OBJECT
+
+ private slots:
+ void pageUp();
+ void pageDown();
+
+ public slots:
+ void setPos(unsigned);
+ void setPosNoLimit(unsigned);
+ void setMag(int);
+ void setOffset(int val);
+ void setScale(int);
+
+ signals:
+ void scaleChanged(int);
+ void lscaleChanged(int);
+ void scrollChanged(int);
+ void newPage(int);
+
+ public:
+ ScrollScale(int, int, int, int max, Qt::Orientation,
+ QWidget*, int min = 0, bool i=false, double vv = 10.0);
+ int xmag() const { return scale->value(); }
+ void setXmag(int val) { scale->setValue(val); }
+ void setRange(int, int);
+ void showMag(bool);
+ void setNoScale(bool flag) { noScale = flag; }
+ void setPageButtons(bool flag);
+ void setPage(int n) { _page = n; }
+ int page() const { return _page; }
+ int pages() const { return _pages; }
+ void setPages(int n);
+ int pos() const;
+ int mag() const;
+ int getScaleValue() const { return scaleVal; }
+ void range(int* b, int* e) const { *b = minVal; *e = maxVal; }
+
+ int offset();
+ int pos2offset(int pos);
+ static int getQuickZoomLevel(int mag);
+ static int convertQuickZoomLevelToMag(int zoomlvl);
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/section.h b/muse2/muse/widgets/section.h
new file mode 100644
index 00000000..7aaa4778
--- /dev/null
+++ b/muse2/muse/widgets/section.h
@@ -0,0 +1,19 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: section.h,v 1.1.1.1 2003/10/27 18:54:27 wschweer Exp $
+// (C) Copyright 2002 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __SECTION_H__
+#define __SECTION_H__
+
+struct Section {
+ int offset;
+ unsigned len;
+ int voff;
+ int val;
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/shortcutcapturedialog.cpp b/muse2/muse/widgets/shortcutcapturedialog.cpp
new file mode 100644
index 00000000..c33b32bf
--- /dev/null
+++ b/muse2/muse/widgets/shortcutcapturedialog.cpp
@@ -0,0 +1,87 @@
+//
+// C++ Implementation: shortcutcapturedialog
+//
+// Description:
+// Dialog window for capturing keyboard shortcuts
+//
+// Author: Mathias Lundgren <lunar_shuttle@users.sourceforge.net>, (C) 2003
+//
+// Copyright: Mathias Lundgren (lunar_shuttle@users.sourceforge.net) (C) 2003
+//
+//
+#include "shortcutcapturedialog.h"
+#include "shortcuts.h"
+#include <qkeysequence.h>
+#include <qlabel.h>
+#include <qevent.h>
+#include <qpushbutton.h>
+//Added by qt3to4:
+#include <QKeyEvent>
+
+ShortcutCaptureDialog::ShortcutCaptureDialog(QWidget* parent, const char* name, int index)
+ : ShortcutCaptureDialogBase(parent, name, true)
+ {
+ QKeySequence q = QKeySequence(shortcuts[index].key);
+ oshrtLabel->setText(q);
+ connect(okButton, SIGNAL( clicked() ), this, SLOT( apply() ) );
+ connect(cancelButton, SIGNAL(pressed()), this, SLOT(cancel()));
+ shortcutindex = index;
+ grabKeyboard();
+ okButton->setText(tr("Ok"));
+ cancelButton->setText(tr("Cancel"));
+ }
+
+ShortcutCaptureDialog::~ShortcutCaptureDialog()
+ {
+ releaseKeyboard();
+ }
+
+void ShortcutCaptureDialog::keyPressEvent(QKeyEvent* e)
+ {
+ bool shift, alt, ctrl, conflict = false, realkey = false;
+ QString msgString = "";
+ int temp_key;
+ shift = e->state() & Qt::ShiftModifier;
+ ctrl = e->state() & Qt::ControlModifier;
+ alt = e->state() & Qt::AltModifier;
+ //printf("Key total: %d, alt: %d, ctrl: %d shift: %d\n",e->key(), alt, ctrl, shift);
+ temp_key = e->key();
+ temp_key += (shift ? Qt::SHIFT : 0);
+ temp_key += (ctrl ? Qt::CTRL : 0);
+ temp_key += (alt ? Qt::ALT : 0);
+ //printf("Final key assembled: %d\n",temp_key);
+
+ // Check if this is a "real" key that completes a valid shortcut:
+ int k = e->key();
+ if (k < 256 || k == Qt::Key_Enter || k == Qt::Key_Return || (k >= Qt::Key_F1 && k <= Qt::Key_F12) || k == Qt::Key_Home || k == Qt::Key_PageUp
+ || k == Qt::Key_PageDown || k == Qt::Key_End || k == Qt::Key_Insert || k == Qt::Key_Delete) {
+ key = temp_key;
+ realkey = true;
+ QKeySequence q = QKeySequence(key);
+ QString keyString = q;
+ if (keyString != QString::null)
+ nshrtLabel->setText(q);
+
+ // Check against conflicting shortcuts
+ for (int i=0; i < SHRT_NUM_OF_ELEMENTS; i++) {
+ if (shortcuts[i].key == key && (shortcuts[i].type & (shortcuts[shortcutindex].type | GLOBAL_SHRT | INVIS_SHRT))) {
+ msgString = tr("Shortcut conflicts with ") + QString(shortcuts[i].descr);
+ conflict = true;
+ break;
+ }
+ }
+ }
+ messageLabel->setText(msgString);
+ okButton->setEnabled(conflict == false && realkey);
+ if (!realkey)
+ nshrtLabel->setText(tr("Undefined"));
+
+
+ }
+
+void ShortcutCaptureDialog::apply()
+ {
+ //return the shortcut to configurator widget:
+ done(key);
+ }
+
diff --git a/muse2/muse/widgets/shortcutcapturedialog.h b/muse2/muse/widgets/shortcutcapturedialog.h
new file mode 100644
index 00000000..5a16a90f
--- /dev/null
+++ b/muse2/muse/widgets/shortcutcapturedialog.h
@@ -0,0 +1,35 @@
+//
+// C++ Interface: shortcutcapturedialog
+//
+// Description:
+// Dialog window for capturing keyboard shortcuts
+//
+// Author: Mathias Lundgren <lunar_shuttle@users.sourceforge.net>, (C) 2003
+//
+// Copyright: Mathias Lundgren (lunar_shuttle@users.sourceforge.net) (C) 2003
+//
+//
+
+#include "shortcuts.h"
+#include "filedialog.h"
+#include "shortcutcapturedialogbase.h"
+//Added by qt3to4:
+#include <QKeyEvent>
+
+class ShortcutCaptureDialog : public ShortcutCaptureDialogBase
+ {
+ Q_OBJECT
+ private:
+ int shortcutindex;
+ void keyPressEvent(QKeyEvent* e);
+ int key;
+
+ private slots:
+ void apply();
+ void cancel() { reject(); };
+
+ public:
+ ShortcutCaptureDialog(QWidget* parent, const char* name = 0, int index=0);
+ ~ShortcutCaptureDialog();
+ };
+
diff --git a/muse2/muse/widgets/shortcutcapturedialogbase.ui b/muse2/muse/widgets/shortcutcapturedialogbase.ui
new file mode 100644
index 00000000..031c86e1
--- /dev/null
+++ b/muse2/muse/widgets/shortcutcapturedialogbase.ui
@@ -0,0 +1,134 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>ShortcutCaptureDialogBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>ShortcutCaptureDialogBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>323</width>
+ <height>285</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Enter shortcut sequence</string>
+ </property>
+ <property name="modal">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>descrLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Press keys to enter shortcut sequence!</string>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>messageLabel</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout11</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>oshrtTextLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Old shortcut:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>oshrtLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Undefined</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout12</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>nshrtTextLabel</cstring>
+ </property>
+ <property name="text">
+ <string>New shortcut:</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>nshrtLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Undefined</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>okButton</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>cancelButton</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/shortcutconfig.cpp b/muse2/muse/widgets/shortcutconfig.cpp
new file mode 100644
index 00000000..b3288e6d
--- /dev/null
+++ b/muse2/muse/widgets/shortcutconfig.cpp
@@ -0,0 +1,115 @@
+//
+// C++ Implementation: shortcutconfig
+//
+// Description:
+// Dialog for configuring keyboard shortcuts
+//
+// Author: Mathias Lundgren <lunar_shuttle@users.sourceforge.net>, (C) 2003
+//
+// Copyright: Mathias Lundgren (lunar_shuttle@users.sourceforge.net) (C) 2003
+//
+//
+#include <qpushbutton.h>
+#include <qkeysequence.h>
+//Added by qt3to4:
+#include <QCloseEvent>
+#include "shortcutconfig.h"
+#include "shortcutcapturedialog.h"
+#include "shortcuts.h"
+
+ShortcutConfig::ShortcutConfig(QWidget* parent, const char* name)
+ : ShortcutConfigBase(parent, name, true)
+ {
+ connect(cgListView, SIGNAL(selectionChanged(Q3ListViewItem* )),
+ this, SLOT(categorySelChanged(Q3ListViewItem*)));
+ connect(scListView, SIGNAL(selectionChanged(Q3ListViewItem* )),
+ this, SLOT(shortcutSelChanged(Q3ListViewItem*)));
+ connect(defineButton, SIGNAL(pressed()), this, SLOT(assignShortcut()));
+ connect(clearButton, SIGNAL(pressed()), this, SLOT(clearShortcut()));
+ connect(applyButton, SIGNAL(pressed()), this, SLOT(assignAll()));
+
+ current_category = ALL_SHRT;
+ cgListView->setSorting(SHRT_CATEGORY_COL, -1);
+ _config_changed = false;
+
+ //Fill up category listview:
+ SCListViewItem* newItem;
+ for (int i=0; i < SHRT_NUM_OF_CATEGORIES; i++) {
+ newItem = new SCListViewItem(cgListView, i);
+ newItem->setText(SHRT_CATEGORY_COL, shortcut_category[i].name);
+ cgListView->insertItem(newItem);
+ }
+ updateSCListView();
+ }
+
+void ShortcutConfig::updateSCListView(int category)
+ {
+ scListView->clear();
+ SCListViewItem* newItem;
+ for (int i=0; i < SHRT_NUM_OF_ELEMENTS; i++) {
+ if (shortcuts[i].type & category) {
+ newItem = new SCListViewItem(scListView, i);
+ newItem->setText(SHRT_DESCR_COL, tr(shortcuts[i].descr));
+ QKeySequence key = QKeySequence(shortcuts[i].key);
+ newItem->setText(SHRT_SHRTCUT_COL, key);
+ }
+ }
+ }
+
+void ShortcutConfig::assignShortcut()
+ {
+ SCListViewItem* active = (SCListViewItem*) scListView->selectedItem();
+ int shortcutindex = active->getIndex();
+ ShortcutCaptureDialog* sc = new ShortcutCaptureDialog(this, "sccapture", shortcutindex);
+ int key = sc->exec();
+ delete(sc);
+ if (key != Rejected) {
+ shortcuts[shortcutindex].key = key;
+ QKeySequence keySequence = QKeySequence(key);
+ active->setText(SHRT_SHRTCUT_COL, keySequence);
+ _config_changed = true;
+ }
+ clearButton->setEnabled(true);
+ defineButton->setDown(false);
+ }
+
+void ShortcutConfig::clearShortcut()
+ {
+ SCListViewItem* active = (SCListViewItem*) scListView->selectedItem();
+ int shortcutindex = active->getIndex();
+ shortcuts[shortcutindex].key = 0; //Cleared
+ active->setText(SHRT_SHRTCUT_COL,"");
+ clearButton->setDown(false);
+ clearButton->setEnabled(false);
+ _config_changed = true;
+ }
+
+void ShortcutConfig::categorySelChanged(Q3ListViewItem* i)
+ {
+ SCListViewItem* item = (SCListViewItem*) i;
+ current_category = shortcut_category[item->getIndex()].id_flag;
+ updateSCListView(current_category);
+ }
+
+void ShortcutConfig::shortcutSelChanged(Q3ListViewItem* in_item)
+ {
+ defineButton->setEnabled(true);
+ SCListViewItem* active = (SCListViewItem*) in_item;
+ int index = active->getIndex();
+ if (shortcuts[index].key != 0)
+ clearButton->setEnabled(true);
+ else
+ clearButton->setEnabled(false);
+ }
+
+void ShortcutConfig::closeEvent(QCloseEvent* /*e*/) // prevent compiler warning : unused variable
+ {
+ done(_config_changed);
+ }
+
+
+void ShortcutConfig::assignAll()
+ {
+ applyButton->setDown(false);
+ done(_config_changed);
+ }
diff --git a/muse2/muse/widgets/shortcutconfig.h b/muse2/muse/widgets/shortcutconfig.h
new file mode 100644
index 00000000..b1f2857f
--- /dev/null
+++ b/muse2/muse/widgets/shortcutconfig.h
@@ -0,0 +1,61 @@
+//
+// C++ Interface: shortcutconfig
+//
+// Description:
+// Dialog for configuring keyboard shortcuts
+//
+// Author: Mathias Lundgren <lunar_shuttle@users.sourceforge.net>, (C) 2003
+//
+// Copyright: Mathias Lundgren (lunar_shuttle@users.sourceforge.net) (C) 2003
+//
+//
+#ifndef __SHORTCUTCONFIG_H
+#define __SHORTCUTCONFIG_H
+
+#include "shortcutconfigbase.h"
+#include <q3listview.h>
+//Added by qt3to4:
+#include <QCloseEvent>
+
+#define SHRT_CATEGORY_COL 0
+enum
+ {
+ SHRT_DESCR_COL = 0,
+ SHRT_SHRTCUT_COL
+ };
+
+class SCListViewItem : public Q3ListViewItem {
+ private:
+ int index;
+
+ public:
+ SCListViewItem(Q3ListView* parent, int i)
+ : Q3ListViewItem(parent), index(i) { }
+ int getIndex() { return index; }
+
+};
+
+
+class ShortcutConfig : public ShortcutConfigBase {
+ Q_OBJECT
+ private:
+ int current_category;
+ void updateSCListView(int category);
+ void updateSCListView() { updateSCListView(current_category); }
+ void closeEvent(QCloseEvent *e);
+
+ private slots:
+ void categorySelChanged(Q3ListViewItem*);
+ void shortcutSelChanged(Q3ListViewItem*);
+ void assignShortcut();
+ void clearShortcut();
+ void assignAll();
+
+
+ public:
+ ShortcutConfig(QWidget* parent, const char* name = 0);
+ bool _config_changed;
+
+};
+
+#endif
diff --git a/muse2/muse/widgets/shortcutconfigbase.ui b/muse2/muse/widgets/shortcutconfigbase.ui
new file mode 100644
index 00000000..2947106c
--- /dev/null
+++ b/muse2/muse/widgets/shortcutconfigbase.ui
@@ -0,0 +1,207 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>ShortcutConfigBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>ShortcutConfigBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>466</width>
+ <height>403</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Configure Keyboard Shortcuts</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox3</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="midLineWidth">
+ <number>0</number>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>3</number>
+ </property>
+ <widget class="QListView">
+ <column>
+ <property name="text">
+ <string>Shortcut Category</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>cgListView</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>105</width>
+ <height>200</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QListView">
+ <column>
+ <property name="text">
+ <string>Description</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Shortcut</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>scListView</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>2</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>170</width>
+ <height>230</height>
+ </size>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>150</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>clearButton</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Clear</string>
+ </property>
+ <property name="accel">
+ <string>Alt+C</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>defineButton</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Define</string>
+ </property>
+ <property name="accel">
+ <string>Alt+D</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>applyButton</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Apply</string>
+ </property>
+ <property name="accel">
+ <string>Alt+A</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/sigedit.cpp b/muse2/muse/widgets/sigedit.cpp
new file mode 100644
index 00000000..4d8c30b4
--- /dev/null
+++ b/muse2/muse/widgets/sigedit.cpp
@@ -0,0 +1,755 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: sigedit.cpp,v 1.1.1.1.2.1 2004/12/28 23:23:51 lunar_shuttle Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "sigedit.h"
+
+#include <stdio.h>
+#include <q3rangecontrol.h>
+#include <qapplication.h>
+#include <qpixmap.h>
+#include <qapplication.h>
+#include <q3valuelist.h>
+#include <qstring.h>
+#include <qstyle.h>
+//Added by qt3to4:
+#include <QTimerEvent>
+#include <QPaintEvent>
+#include <QResizeEvent>
+#include <QMouseEvent>
+#include <QKeyEvent>
+#include <QEvent>
+#include <values.h>
+#include <qpainter.h>
+#include <qtimer.h>
+#include "sig.h"
+
+extern int mtcType;
+
+bool Sig::isValid() const
+{
+ if((z < 1) || (z > 63))
+ return false;
+
+ switch(n)
+ {
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 8:
+ case 16:
+ case 32:
+ case 64:
+ case 128:
+ return true;
+ default:
+ return false;
+ }
+}
+
+
+//---------------------------------------------------------
+// NumberSection
+//---------------------------------------------------------
+
+class NumberSection
+ {
+ int selstart;
+ int selend;
+
+ public:
+ NumberSection(int selStart = 0, int selEnd = 0)
+ : selstart(selStart), selend(selEnd ) {}
+ int selectionStart() const { return selstart; }
+ void setSelectionStart(int s) { selstart = s; }
+ int selectionEnd() const { return selend; }
+ void setSelectionEnd( int s ) { selend = s; }
+ int width() const { return selend - selstart; }
+ };
+
+//---------------------------------------------------------
+// SigEditor
+//---------------------------------------------------------
+
+class SigEditor : public QWidget
+ {
+ SigEdit* cw;
+ bool frm;
+ QPixmap *pm;
+ int focusSec;
+ Q3ValueList<NumberSection> sections;
+ int offset;
+
+ int section(const QPoint&);
+
+ protected:
+ void init();
+ bool event(QEvent *e);
+ void resizeEvent(QResizeEvent*);
+ void paintEvent(QPaintEvent*);
+ void mousePressEvent(QMouseEvent *e);
+ void applyFocusSelection() {}
+
+ public:
+ SigEditor(SigEdit* parent, const char* name);
+ ~SigEditor();
+
+ void setControlWidget(SigEdit * widget);
+ SigEdit* controlWidget() const;
+
+ int focusSection() const { return focusSec; }
+
+ bool setFocusSection(int s);
+ void appendSection(const NumberSection& sec);
+ void clearSections();
+ void setSectionSelection(int sec, int selstart, int selend);
+ bool eventFilter(QObject *o, QEvent *e);
+ };
+
+//---------------------------------------------------------
+// section
+//---------------------------------------------------------
+
+int SigEditor::section(const QPoint& pt)
+ {
+ if (pm->isNull())
+ return -1;
+ QPainter p(pm);
+ int fw = frm ? style()->pixelMetric(QStyle::PM_DefaultFrameWidth) : 0;
+ int x = 2 + fw;
+ int y = 0;
+ int w = width();
+ int h = height();
+ for (unsigned int i = 0; i < sections.count(); ++i) {
+ QString s = cw->sectionFormattedText(i);
+ QRect bb = p.boundingRect(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s);
+ int nx = bb.x() + bb.width();
+ if (pt.x() >= x && pt.x() < nx)
+ return i;
+ x = nx;
+ if (i < sections.count()-1) {
+ QString s("/");
+ p.drawText(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1, &bb);
+ x = bb.x() + bb.width();
+ }
+ }
+ return -1;
+ }
+
+//---------------------------------------------------------
+// SigEditor
+//---------------------------------------------------------
+
+SigEditor::SigEditor(SigEdit* parent, const char* name)
+ : QWidget(parent, name)
+ {
+ cw = parent;
+ frm = true;
+ focusSec = 0;
+ pm = new QPixmap;
+ offset = 0;
+ init();
+ }
+
+//---------------------------------------------------------
+// ~SigEditor
+//---------------------------------------------------------
+
+SigEditor::~SigEditor()
+ {
+ delete pm;
+ }
+
+//---------------------------------------------------------
+// init
+//---------------------------------------------------------
+
+void SigEditor::init()
+ {
+ setBackgroundMode(Qt::PaletteBase);
+ setFocusSection(-1);
+ setKeyCompression(true);
+ installEventFilter(this);
+ setFocusPolicy(Qt::WheelFocus);
+ }
+
+//---------------------------------------------------------
+// event
+//---------------------------------------------------------
+
+bool SigEditor::event(QEvent *e)
+ {
+ if (e->type() == QEvent::FocusIn || e->type() == QEvent::FocusOut) {
+ repaint( rect(), false);
+ }
+ else if (e->type() == QEvent::ShortcutOverride) {
+ QKeyEvent* ke = (QKeyEvent*) e;
+ switch (ke->key()) {
+ case Qt::Key_Delete:
+ case Qt::Key_Backspace:
+ case Qt::Key_Up:
+ case Qt::Key_Down:
+ case Qt::Key_Left:
+ case Qt::Key_Right:
+ ke->accept();
+ default:
+ break;
+ }
+ }
+ return QWidget::event(e);
+ }
+
+void SigEditor::resizeEvent(QResizeEvent *e)
+ {
+ pm->resize(e->size());
+ QWidget::resizeEvent(e);
+ }
+
+//---------------------------------------------------------
+// paintEvent
+//---------------------------------------------------------
+
+void SigEditor::paintEvent(QPaintEvent *)
+ {
+ if (pm->isNull())
+ return;
+
+ const QColorGroup & cg = colorGroup();
+ QPainter p(pm);
+ p.setPen(colorGroup().text());
+ QBrush bg = cg.brush(QColorGroup::Base);
+
+ int fw = frm ? style()->pixelMetric(QStyle::PM_DefaultFrameWidth) : 0;
+ int x = 2 + fw;
+ int y = 0;
+ int w = width();
+ int h = height();
+ p.fillRect(0, 0, w, h, bg);
+
+ for (unsigned int i = 0; i < sections.count(); ++i) {
+ QRect bb;
+ QString s = cw->sectionFormattedText(i);
+
+ if (hasFocus() && (int(i) == focusSec)) {
+ QBrush bg = cg.brush(QColorGroup::Highlight);
+ QRect r = p.boundingRect(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1);
+ p.setPen(colorGroup().highlightedText());
+ p.fillRect(r, bg);
+ }
+ else
+ p.setPen(colorGroup().text());
+ p.drawText(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1, &bb);
+ x = bb.x() + bb.width();
+ if (i < sections.count()-1) {
+ QString s("/");
+ p.drawText(x, y, w, h, Qt::AlignVCenter|Qt::AlignLeft, s, -1, &bb);
+ x = bb.x() + bb.width();
+ }
+ }
+ p.end();
+ bitBlt(this, 0, 0, pm);
+ }
+
+//---------------------------------------------------------
+// mousePressEvent
+//---------------------------------------------------------
+
+void SigEditor::mousePressEvent(QMouseEvent *e)
+ {
+ QPoint p(e->pos().x(), 0);
+ int sec = section(p);
+ if (sec != -1) {
+ cw->setFocusSection(sec);
+ repaint(rect(), false);
+ }
+ }
+
+//---------------------------------------------------------
+// eventFilter
+//---------------------------------------------------------
+
+bool SigEditor::eventFilter(QObject *o, QEvent *e)
+ {
+ if (o != this)
+ return false;
+ if (e->type() != QEvent::KeyPress )
+ return false;
+
+ QKeyEvent *ke = (QKeyEvent*)e;
+ switch (ke->key()) {
+ case Qt::Key_Right:
+ if (unsigned(focusSec) <= sections.count()) {
+ if (cw->setFocusSection(focusSec+1))
+ repaint(rect(), false);
+ }
+ return true;
+ case Qt::Key_Left:
+ if (focusSec > 0 ) {
+ if (cw->setFocusSection(focusSec-1))
+ repaint(rect(), false);
+ }
+ return true;
+ case Qt::Key_Up:
+ cw->stepUp();
+ return true;
+ case Qt::Key_Down:
+ cw->stepDown();
+ return true;
+ case Qt::Key_Backspace:
+ case Qt::Key_Delete:
+ cw->removeLastNumber(focusSec);
+ return true;
+ case Qt::Key_Enter:
+ case Qt::Key_Return:
+ cw->enterPressed();
+ return true;
+ default:
+ QString txt = ke->text();
+ if (!txt.isEmpty() && txt[0] == '/') {
+ // do the same thing as KEY_RIGHT when the user presses the separator key
+ if (focusSec < (signed)(sections.count())) {
+ if (cw->setFocusSection(focusSec+1))
+ repaint(rect(), false);
+ }
+ return true;
+ }
+ int num = txt[0].digitValue();
+
+ //printf("SigEditor::eventFilter num:%d\n", num);
+
+ if (num != -1) {
+ cw->addNumber(focusSec, num);
+ return true;
+ }
+ }
+ return false;
+ }
+
+void SigEditor::appendSection(const NumberSection& sec)
+ {
+ sections.append(sec);
+ }
+void SigEditor::clearSections()
+ {
+ sections.clear();
+ }
+
+//---------------------------------------------------------
+// setSectionSelection
+//---------------------------------------------------------
+
+void SigEditor::setSectionSelection(int secNo, int selstart, int selend)
+ {
+ if (secNo < 0 || secNo > (int)sections.count())
+ return;
+ sections[secNo].setSelectionStart(selstart);
+ sections[secNo].setSelectionEnd(selend);
+ }
+
+//---------------------------------------------------------
+// setFocusSection
+//---------------------------------------------------------
+
+bool SigEditor::setFocusSection(int idx)
+ {
+ if (idx > (int)sections.count()-1 || idx < 0)
+ return false;
+ if (idx != focusSec) {
+ focusSec = idx;
+ applyFocusSelection();
+ return true;
+ }
+ return false;
+ }
+
+//---------------------------------------------------------
+// SigEdit
+//---------------------------------------------------------
+
+SigEdit::SigEdit(QWidget* parent, const char* name)
+ : QWidget(parent, name)
+ {
+ init();
+ updateButtons();
+ }
+
+SigEdit::~SigEdit()
+ {
+ }
+
+//---------------------------------------------------------
+// init
+//---------------------------------------------------------
+
+void SigEdit::init()
+ {
+ ed = new SigEditor(this, "pos editor");
+ controls = new Q3SpinWidget(this, "pos edit controls");
+ controls->setEditWidget(ed);
+ setFocusProxy(ed);
+ connect(controls, SIGNAL(stepUpPressed()), SLOT(stepUp()));
+ connect(controls, SIGNAL(stepDownPressed()), SLOT(stepDown()));
+ connect(this, SIGNAL(valueChanged(int,int)),SLOT(updateButtons()));
+
+ overwrite = false;
+ timerId = 0;
+ typing = false;
+ changed = false;
+ adv = false;
+
+ sec[0].offset = 0;
+ sec[0].len = 2;
+ sec[0].val = 4;
+ sec[0].voff = 0;
+ sec[1].offset = 3;
+ sec[1].len = 3;
+ sec[1].val = 4;
+ sec[1].voff = 0;
+ ed->clearSections();
+ ed->appendSection(NumberSection(0,0));
+ ed->appendSection(NumberSection(0,0));
+ setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed));
+ }
+
+//---------------------------------------------------------
+// setValue
+//---------------------------------------------------------
+
+void SigEdit::setValue(const Sig& sig)
+ {
+ sec[0].val = sig.z;
+ sec[1].val = sig.n;
+ changed = false;
+ ed->repaint(ed->rect(), false);
+ }
+
+void SigEdit::setValue(const QString& s)
+ {
+ int z, n;
+ sscanf(s.latin1(), "%d/%d", &z, &n);
+ Sig sig(z, n);
+ setValue(sig);
+ }
+
+Sig SigEdit::sig() const
+ {
+ Sig sig(sec[0].val, sec[1].val);
+ return sig;
+ }
+
+bool SigEdit::event(QEvent *e)
+ {
+ if (e->type() == QEvent::FocusOut) {
+ typing = false;
+ if (changed) {
+ emit valueChanged(sig().z, sig().n);
+ changed = false;
+ }
+ }
+ return QWidget::event(e);
+ }
+
+void SigEdit::timerEvent(QTimerEvent *)
+ {
+ overwrite = true;
+ }
+
+//---------------------------------------------------------
+// stepUp
+//---------------------------------------------------------
+
+void SigEdit::stepUp()
+ {
+ bool accepted = false;
+ int secNo = ed->focusSection();
+ int val = sec[secNo].val;
+ if (secNo == 0) {
+ if (val < 63) {
+ ++val;
+ accepted = true;
+ }
+ }
+ else {
+ accepted = true;
+ switch(val) {
+ case 1: val = 2; break;
+ case 2: val = 3; break;
+ case 3: val = 4; break;
+ case 4: val = 8; break;
+ case 8: val = 16; break;
+ case 16: val = 32; break;
+ case 32: val = 64; break;
+ case 64: val = 128; break;
+ case 128: accepted = false; break;
+ }
+ }
+ if (accepted) {
+ setSec(secNo, val);
+ changed = true;
+ emit valueChanged(sec[0].val, sec[1].val);
+ }
+ ed->repaint(ed->rect(), false);
+ }
+
+//---------------------------------------------------------
+// stepDown
+//---------------------------------------------------------
+
+void SigEdit::stepDown()
+ {
+ bool accepted = false;
+ int secNo = ed->focusSection();
+ int val = sec[secNo].val;
+ if (secNo == 0) {
+ if (val > 1) {
+ --val;
+ accepted = true;
+ }
+ }
+ else {
+ accepted = true;
+ switch(val) {
+ case 1: accepted = false; break;
+ case 2: val = 1; break;
+ case 3: val = 2; break;
+ case 4: val = 3; break;
+ case 8: val = 4; break;
+ case 16: val = 8; break;
+ case 32: val = 16; break;
+ case 64: val = 32; break;
+ case 128: val = 64; break;
+ }
+ }
+ if (accepted) {
+ setSec(secNo, val);
+ changed = true;
+ emit valueChanged(sec[0].val, sec[1].val);
+ }
+ ed->repaint(ed->rect(), false);
+ }
+
+//---------------------------------------------------------
+// sectionFormattedText
+// Returns the formatted number for section sec.
+//---------------------------------------------------------
+
+QString SigEdit::sectionFormattedText(int secNo)
+ {
+ QString txt = sectionText(secNo);
+
+ int so = sec[secNo].offset;
+ int len = sec[secNo].len;
+ int eo = so + len;
+
+ if (typing && secNo == ed->focusSection())
+ ed->setSectionSelection(secNo, eo - txt.length(), eo);
+ else
+ ed->setSectionSelection(secNo, so, eo);
+ if (secNo == 0)
+ txt = txt.rightJustify(len, ' ');
+// else
+// txt = txt.leftJustify(len, ' ');
+ return txt;
+ }
+
+//---------------------------------------------------------
+// setFocusSection
+//---------------------------------------------------------
+
+bool SigEdit::setFocusSection(int s)
+ {
+ if (s != ed->focusSection()) {
+ killTimer(timerId);
+ overwrite = true;
+ typing = false;
+ int so = sec[s].offset;
+ int eo = so + sec[s].len;
+ ed->setSectionSelection(s, so, eo);
+ if (changed) {
+ emit valueChanged(sig().z, sig().n);
+ changed = false;
+ }
+ }
+ return ed->setFocusSection(s);
+ }
+
+//---------------------------------------------------------
+// setSec
+//---------------------------------------------------------
+
+void SigEdit::setSec(int secNo, int val)
+ {
+ sec[secNo].val = val;
+ }
+
+//---------------------------------------------------------
+// sectionText
+// Returns the text of section \a sec.
+//---------------------------------------------------------
+
+QString SigEdit::sectionText(int secNo)
+ {
+ return QString::number(sec[secNo].val + sec[secNo].voff);
+ }
+
+//---------------------------------------------------------
+// outOfRange
+// return true if out of range
+//---------------------------------------------------------
+
+bool SigEdit::outOfRange(int secNo, int val) const
+ {
+ if (secNo == 0)
+ return ((val < 1) || (val > 63));
+ switch (val) {
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 8:
+ case 16:
+ case 32:
+ case 64:
+ case 128:
+ // Changed p3.3.43
+ //return true;
+ return false;
+ default:
+ // Changed p3.3.43
+ //return false;
+ return true;
+ }
+ }
+
+//---------------------------------------------------------
+// addNumber
+//---------------------------------------------------------
+
+void SigEdit::addNumber(int secNo, int num)
+ {
+ if (secNo == -1)
+ return;
+ killTimer(timerId);
+ bool accepted = false;
+ typing = true;
+ int voff = sec[secNo].voff;
+
+ QString txt = sectionText(secNo);
+
+ //printf("SigEdit::addNumber secNo:%d num:%d voff:%d txt:%s\n", secNo, num, voff, txt.latin1());
+
+ if (txt.length() == sec[secNo].len) {
+ //printf("SigEdit::addNumber txt.length() == sec[secNo].len (%d)\n", sec[secNo].len);
+
+ if (!outOfRange(secNo, num - voff)) {
+ //printf("SigEdit::addNumber accepted\n");
+
+ accepted = true;
+ sec[secNo].val = num - voff;
+ }
+ }
+ else {
+ //printf("SigEdit::addNumber txt.length() != sec[secNo].len (%d)\n", sec[secNo].len);
+
+ txt += QString::number(num);
+ int temp = txt.toInt() - voff;
+ if (outOfRange(secNo, temp))
+ {
+ //printf("SigEdit::addNumber not accepted secNo:%d txt:%s temp:%d\n", secNo, txt.latin1(), temp);
+
+ txt = sectionText(secNo);
+ }
+ else {
+ //printf("SigEdit::addNumber accepted\n");
+
+ accepted = true;
+ sec[secNo].val = temp;
+ }
+ if (adv && (txt.length() == sec[secNo].len)) {
+ setFocusSection(ed->focusSection() + 1);
+ }
+ }
+ changed = accepted;
+ if (accepted)
+ emit valueChanged(sig().z, sig().n);
+ timerId = startTimer(qApp->doubleClickInterval()*4);
+ ed->repaint(ed->rect(), false);
+ }
+
+//---------------------------------------------------------
+// removeLastNumber
+//---------------------------------------------------------
+
+void SigEdit::removeLastNumber(int secNo)
+ {
+ if (secNo == -1)
+ return;
+ QString txt = QString::number(sec[secNo].val);
+ txt = txt.mid(0, txt.length() - 1);
+ sec[secNo].val = txt.toInt() - sec[secNo].voff;
+ ed->repaint(ed->rect(), false);
+ }
+
+//---------------------------------------------------------
+// resizeEvent
+//---------------------------------------------------------
+
+void SigEdit::resizeEvent(QResizeEvent *)
+ {
+ controls->resize(width(), height());
+ }
+
+//---------------------------------------------------------
+// sizeHint
+//---------------------------------------------------------
+
+QSize SigEdit::sizeHint() const
+ {
+ QFontMetrics fm(font());
+ int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, 0, this); // ddskrjo
+ int h = fm.height() + fw * 2;
+ int w = 2 + controls->upRect().width() + fw * 4;
+ w += fm.width('9') * 5 + fm.width('/');
+ return QSize(w, h).expandedTo(QApplication::globalStrut());
+ }
+
+//---------------------------------------------------------
+// updateButtons
+//---------------------------------------------------------
+
+void SigEdit::updateButtons()
+ {
+ int secNo = ed->focusSection();
+ int val = sec[secNo].val;
+
+ bool upEnabled;
+ bool downEnabled;
+
+ if (secNo == 0) {
+ upEnabled = val < 63;
+ downEnabled = val > 1;
+ }
+ else {
+ upEnabled = true;
+ downEnabled = true;
+ switch (val) {
+ case 1: downEnabled = false; break;
+ case 128: upEnabled = false; break;
+ }
+ }
+ controls->setUpEnabled(isEnabled() && upEnabled);
+ controls->setDownEnabled(isEnabled() && downEnabled);
+ }
+
+//---------------------------------------------------------
+// enterPressed
+//! emit returnPressed
+//---------------------------------------------------------
+void SigEdit::enterPressed()
+ {
+ emit returnPressed();
+ }
diff --git a/muse2/muse/widgets/sigedit.h b/muse2/muse/widgets/sigedit.h
new file mode 100644
index 00000000..f600c44f
--- /dev/null
+++ b/muse2/muse/widgets/sigedit.h
@@ -0,0 +1,90 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: sigedit.h,v 1.1.1.1.2.1 2004/12/28 23:23:51 lunar_shuttle Exp $
+// (C) Copyright 2002 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __SIGEDIT_H__
+#define __SIGEDIT_H__
+
+#include <qwidget.h>
+#include <qstring.h>
+//Added by qt3to4:
+#include <QResizeEvent>
+#include <QTimerEvent>
+#include <QEvent>
+
+class SigEditor;
+class Q3SpinWidget;
+
+struct Sig {
+ int z;
+ int n;
+ public:
+ Sig(int _z, int _n) : z(_z), n(_n) {}
+ bool isValid() const;
+ };
+
+#include "section.h"
+
+//---------------------------------------------------------
+// SigEdit
+//---------------------------------------------------------
+
+class SigEdit : public QWidget
+ {
+ Q_OBJECT
+ void init();
+
+ QString sectionText(int sec);
+ Section sec[2];
+
+ bool adv;
+ bool overwrite;
+ int timerId;
+ bool typing;
+ bool changed;
+ SigEditor *ed;
+ Q3SpinWidget* controls;
+
+ private slots:
+ void stepUp();
+ void stepDown();
+
+ signals:
+ void valueChanged(int, int);
+ void returnPressed();
+
+ protected:
+ bool event(QEvent *e );
+ void timerEvent(QTimerEvent* e);
+ void resizeEvent(QResizeEvent*);
+ QString sectionFormattedText(int sec);
+ void addNumber(int sec, int num);
+ void removeLastNumber(int sec);
+ bool setFocusSection(int s);
+
+ virtual bool outOfRange(int, int) const;
+ virtual void setSec(int, int);
+ friend class SigEditor;
+
+ protected slots:
+ void updateButtons();
+
+ public slots:
+ virtual void setValue(const Sig& sig);
+ void setValue(const QString& s);
+
+ public:
+ SigEdit(QWidget*, const char* = 0);
+ ~SigEdit();
+
+ QSize sizeHint() const;
+ Sig sig() const;
+ virtual void setAutoAdvance(bool advance) { adv = advance; }
+ bool autoAdvance() const { return adv; }
+ void enterPressed();
+ };
+
+#endif
diff --git a/muse2/muse/widgets/siglabel.cpp b/muse2/muse/widgets/siglabel.cpp
new file mode 100644
index 00000000..54338ab6
--- /dev/null
+++ b/muse2/muse/widgets/siglabel.cpp
@@ -0,0 +1,157 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: siglabel.cpp,v 1.1.1.1 2003/10/27 18:54:28 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "siglabel.h"
+#include <stdio.h>
+
+#define TIMER1 400
+#define TIMER2 200
+#define TIMEC 7
+#define TIMER3 100
+#define TIMEC2 20
+#define TIMER4 50
+
+#include "globals.h"
+//Added by qt3to4:
+#include <QMouseEvent>
+#include <QWheelEvent>
+#include <QLabel>
+
+//---------------------------------------------------------
+// SigLabel
+// edit Signature Values (4/4)
+//---------------------------------------------------------
+
+SigLabel::SigLabel(int a, int b, QWidget* parent) : QLabel(parent)
+ {
+ z = n = 0;
+ setFocusPolicy(Qt::NoFocus);
+ setAlignment(Qt::AlignCenter);
+ setValue(a, b);
+ }
+
+//---------------------------------------------------------
+// mousePressEvent
+//---------------------------------------------------------
+
+void SigLabel::mousePressEvent(QMouseEvent* event)
+ {
+ int button = event->button();
+ bool zaehler = event->x() < width() /2;
+
+ int zz = z, nn = n;
+ switch (button) {
+ case Qt::LeftButton:
+ return;
+ case Qt::MidButton:
+ incValue(zaehler, false, zz, nn);
+ break;
+ case Qt::RightButton:
+ incValue(zaehler, true, zz, nn);
+ break;
+ default:
+ break;
+ }
+ if ((zz != z) || (nn != n)) {
+ setValue(zz, nn);
+ emit valueChanged(zz, nn);
+ }
+ }
+
+//---------------------------------------------------------
+// incValue
+//---------------------------------------------------------
+
+void SigLabel::incValue(bool zaehler, bool up, int& zz, int& nn)
+ {
+ if (!up) {
+ if (zaehler) {
+ --zz;
+ if (zz < 1)
+ zz = 1;
+ }
+ else {
+ switch (nn) {
+ case 1: break;
+ case 2: nn = 1; break;
+ case 4: nn = 2; break;
+ case 8: nn = 4; break;
+ case 16: nn = 8; break;
+ case 32: nn = 16; break;
+ case 64: nn = 32; break;
+ case 128: nn = 64; break;
+ }
+ }
+ }
+ else {
+ if (zaehler) {
+ ++zz;
+ if (zz > 16)
+ zz = 16;
+ }
+ else {
+ switch (nn) {
+ case 1: nn = 2; break;
+ case 2: nn = 4; break;
+ case 4: nn = 8; break;
+ case 8: nn = 16; break;
+ case 16: nn = 32; break;
+ case 32: nn = 64; break;
+ case 64: nn = 128; break;
+ case 128: break;
+ }
+ }
+ }
+ }
+
+//---------------------------------------------------------
+// wheelEvent
+//---------------------------------------------------------
+
+void SigLabel::wheelEvent(QWheelEvent* event)
+ {
+ bool zaehler = event->x() < width() /2;
+ int delta = event->delta();
+ int zz = z, nn = n;
+
+ bool inc = delta >= 0;
+ incValue(zaehler, inc, zz, nn);
+ if ((zz != z) || (nn != n)) {
+ setValue(zz, nn);
+ emit valueChanged(zz, nn);
+ }
+ }
+
+//---------------------------------------------------------
+// setValue
+//---------------------------------------------------------
+
+void SigLabel::setValue(int a, int b)
+ {
+ if (a == z && b == n)
+ return;
+ z = a;
+ n = b;
+ QString sa;
+ sa.setNum(a);
+
+ QString sb;
+ sb.setNum(b);
+
+ QString s = sa + QString("/") + sb;
+ setText(s);
+ }
+
+//---------------------------------------------------------
+// setFrame
+//---------------------------------------------------------
+
+void SigLabel::setFrame(bool flag)
+ {
+ setFrameStyle(flag ? Panel | Sunken : NoFrame);
+ setLineWidth(2);
+ }
diff --git a/muse2/muse/widgets/siglabel.h b/muse2/muse/widgets/siglabel.h
new file mode 100644
index 00000000..4f93a7b8
--- /dev/null
+++ b/muse2/muse/widgets/siglabel.h
@@ -0,0 +1,42 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: siglabel.h,v 1.1.1.1 2003/10/27 18:54:56 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __SIGLABEL_H__
+#define __SIGLABEL_H__
+
+#include <qlabel.h>
+//Added by qt3to4:
+#include <QWheelEvent>
+#include <QMouseEvent>
+
+//---------------------------------------------------------
+// SigLabel
+// show/edit time signature
+//---------------------------------------------------------
+
+class SigLabel : public QLabel {
+ Q_OBJECT
+ virtual void mousePressEvent(QMouseEvent*);
+ virtual void wheelEvent(QWheelEvent*);
+ void incValue(bool zaehler, bool inc, int&, int&);
+
+ protected:
+ int z, n;
+
+ signals:
+ void valueChanged(int, int);
+
+ public slots:
+ virtual void setValue(int, int);
+
+ public:
+ SigLabel(int z, int n, QWidget*);
+ void value(int& a, int& b) const { a = z; b = n; }
+ void setFrame(bool);
+ };
+#endif
+
diff --git a/muse2/muse/widgets/sigscale.cpp b/muse2/muse/widgets/sigscale.cpp
new file mode 100644
index 00000000..2735d8d2
--- /dev/null
+++ b/muse2/muse/widgets/sigscale.cpp
@@ -0,0 +1,152 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: sigscale.cpp,v 1.6 2004/04/11 13:03:32 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <values.h>
+
+#include <qpainter.h>
+#include <qtooltip.h>
+//Added by qt3to4:
+#include <QEvent>
+#include <QMouseEvent>
+
+#include "globals.h"
+#include "midieditor.h"
+#include "sigscale.h"
+#include "song.h"
+#include "gconfig.h"
+
+//---------------------------------------------------------
+// SigScale
+//---------------------------------------------------------
+
+SigScale::SigScale(int* r, QWidget* parent, int xs)
+ : View(parent, xs, 1)
+ {
+ QToolTip::add(this, tr("signature scale"));
+ raster = r;
+ pos[0] = song->cpos();
+ pos[1] = song->lpos();
+ pos[2] = song->rpos();
+ button = Qt::NoButton;
+ setMouseTracking(true);
+ connect(song, SIGNAL(posChanged(int, unsigned, bool)), this, SLOT(setPos(int, unsigned, bool)));
+ setFixedHeight(18);
+ }
+
+//---------------------------------------------------------
+// setPos
+//---------------------------------------------------------
+
+void SigScale::setPos(int idx, unsigned val, bool)
+ {
+ if (val == pos[idx])
+ return;
+ unsigned opos = mapx(pos[idx]);
+ pos[idx] = val;
+ if (!isVisible())
+ return;
+ val = mapx(val);
+ int x = -9;
+ int w = 18;
+ if (opos > val) {
+ w += opos - val;
+ x += val;
+ }
+ else {
+ w += val - opos;
+ x += opos;
+ }
+ redraw(QRect(x, 0, w, height()));
+ }
+
+void SigScale::viewMousePressEvent(QMouseEvent* event)
+ {
+ button = event->button();
+ viewMouseMoveEvent(event);
+ }
+
+void SigScale::viewMouseReleaseEvent(QMouseEvent*)
+ {
+ button = Qt::NoButton;
+ }
+
+void SigScale::viewMouseMoveEvent(QMouseEvent* event)
+ {
+ int x = sigmap.raster(event->x(), *raster);
+ emit timeChanged(x);
+ int i;
+ switch (button) {
+ case Qt::LeftButton:
+ i = 0;
+ break;
+ case Qt::MidButton:
+ i = 1;
+ break;
+ case Qt::RightButton:
+ i = 2;
+ break;
+ default:
+ return;
+ }
+ Pos p(x, true);
+ song->setPos(i, p);
+ }
+
+//---------------------------------------------------------
+// leaveEvent
+//---------------------------------------------------------
+
+void SigScale::leaveEvent(QEvent*)
+ {
+// emit timeChanged(MAXINT);
+ }
+
+//---------------------------------------------------------
+// draw
+//---------------------------------------------------------
+
+void SigScale::pdraw(QPainter& p, const QRect& r)
+ {
+ int x = r.x();
+ int w = r.width();
+ int h = height();
+
+ if (x < 0)
+ x = 0;
+ p.setFont(config.fonts[3]);
+ for (ciSigEvent si = sigmap.begin(); si != sigmap.end(); ++si) {
+ SigEvent* e = si->second;
+ int xp = mapx(e->tick);
+ if (xp > x+w)
+ break;
+ if (xp+40 < x)
+ continue;
+ p.drawLine(xp, 0, xp, h/2);
+ p.drawLine(xp, h/2, xp+5, h/2);
+ QString s;
+ s.sprintf("%d/%d", e->z, e->n);
+ p.drawText(xp+8, h-6, s);
+ }
+
+ //---------------------------------------------------
+ // draw location marker
+ //---------------------------------------------------
+
+ p.setPen(Qt::red);
+ int xp = mapx(pos[0]);
+ if (xp >= x && xp < x+w)
+ p.drawLine(xp, 0, xp, h);
+ p.setPen(Qt::blue);
+ xp = mapx(pos[1]);
+ if (xp >= x && xp < x+w)
+ p.drawLine(xp, 0, xp, h);
+ xp = mapx(pos[2]);
+ if (xp >= x && xp < x+w)
+ p.drawLine(xp, 0, xp, h);
+ }
+
+
diff --git a/muse2/muse/widgets/sigscale.h b/muse2/muse/widgets/sigscale.h
new file mode 100644
index 00000000..d66d9a73
--- /dev/null
+++ b/muse2/muse/widgets/sigscale.h
@@ -0,0 +1,50 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: sigscale.h,v 1.2 2004/01/11 18:55:37 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __SIGSCALE_H__
+#define __SIGSCALE_H__
+
+#include "view.h"
+//Added by qt3to4:
+#include <QEvent>
+#include <QMouseEvent>
+
+class QPainter;
+class MidiEditor;
+
+//---------------------------------------------------------
+// SigScale
+// Time Signature Scale
+//---------------------------------------------------------
+
+class SigScale : public View {
+ Q_OBJECT
+ int* raster;
+ unsigned pos[3];
+ int button;
+
+ signals:
+ void posChanged(unsigned, unsigned);
+
+ protected:
+ virtual void pdraw(QPainter&, const QRect&);
+ virtual void viewMousePressEvent(QMouseEvent* event);
+ virtual void viewMouseMoveEvent(QMouseEvent* event);
+ virtual void viewMouseReleaseEvent(QMouseEvent* event);
+ virtual void leaveEvent(QEvent*e);
+
+ signals:
+ void timeChanged(unsigned);
+
+ public slots:
+ void setPos(int, unsigned, bool);
+
+ public:
+ SigScale(int* raster, QWidget* parent, int xscale);
+ };
+#endif
+
diff --git a/muse2/muse/widgets/slider.cpp b/muse2/muse/widgets/slider.cpp
new file mode 100644
index 00000000..f93cadc1
--- /dev/null
+++ b/muse2/muse/widgets/slider.cpp
@@ -0,0 +1,930 @@
+#include <cmath>
+#include "mmath.h"
+#include <qdrawutil.h>
+#include <qpainter.h>
+#include <qcursor.h>
+//Added by qt3to4:
+#include <QPaintEvent>
+#include <QResizeEvent>
+
+#include "slider.h"
+
+//-------------------------------------------------------------
+// Slider - The Slider Widget
+//
+// Slider is a slider widget which operates on an interval
+// of type double. Slider supports different layouts as
+// well as a scale.
+//------------------------------------------------------------
+
+//------------------------------------------------------------
+//.F Slider::Slider
+//
+// Constructor
+//
+//.u Syntax:
+//.f Slider::Slider(QWidget *parent, const char *name, Orientation orient = Horizontal, ScalePos scalePos = None, int bgStyle = BgTrough)
+//
+//.u Parameters
+//.p
+// QWidget *parent -- parent widget
+// const char *name -- The Widget's name. Default = 0.
+// Orientation Orient -- Orientation of the slider. Can be Slider::Horizontal
+// or Slider::Vertical.
+// Defaults to Horizontal.
+// ScalePos scalePos -- Position of the scale. Can be Slider::None,
+// Slider::Left, Slider::Right, Slider::Top,
+// or Slider::Bottom. Defaults to Slider::None.
+// int bgStyle -- Background style. Slider::BgTrough draws the
+// slider button in a trough, Slider::BgSlot draws
+// a slot underneath the button. An or-combination of both
+// may also be used. The default is Slider::BgTrough.
+//------------------------------------------------------------
+
+Slider::Slider(QWidget *parent, const char *name,
+ Qt::Orientation orient, ScalePos scalePos, int bgStyle)
+ : SliderBase(parent,name)
+ {
+ if (bgStyle == BgSlot) {
+ d_thumbLength = 16;
+ d_thumbHalf = 8;
+ d_thumbWidth = 30;
+ }
+ else {
+ d_thumbLength = 30;
+ d_thumbHalf = 15;
+ d_thumbWidth = 16;
+ }
+
+ d_borderWidth = 2;
+ d_scaleDist = 4;
+ d_scaleStep = 0.0;
+ d_scalePos = scalePos;
+ d_xMargin = 0;
+ d_yMargin = 0;
+ d_bgStyle = bgStyle;
+
+ if (bgStyle & BgTrough)
+ d_bwTrough = d_borderWidth;
+ else
+ d_bwTrough = 0;
+
+ d_sliderRect.setRect(0, 0, 8, 8);
+ setOrientation(orient);
+ }
+
+//------------------------------------------------------------
+//.F Slider::~Slider
+// Destructor
+//.u Syntax
+//.f Slider::~Slider()
+//------------------------------------------------------------
+
+Slider::~Slider()
+ {
+ }
+
+//------------------------------------------------------------
+//
+//.F Slider::setBorderWidth
+// Change the slider's border width
+//
+//.u Syntax
+//.f void Slider::setBorderWidth(int bd)
+//
+//.u Parameters
+//.p int bd -- border width
+//
+//------------------------------------------------------------
+
+void Slider::setBorderWidth(int bd)
+{
+ d_borderWidth = qwtMin(qwtMax(bd,0),10);
+ if (d_bgStyle & BgTrough)
+ d_bwTrough = d_borderWidth;
+ else
+ d_bwTrough = 0;
+}
+
+//----------------------------------------------------
+//
+//.F Slider::setThumbLength
+//
+// Set the slider's thumb length
+//
+//.u Syntax
+// void Slider::setThumbLength(int l)
+//
+//.u Parameters
+//.p int l -- new length
+//
+//-----------------------------------------------------
+void Slider::setThumbLength(int l)
+{
+ d_thumbLength = qwtMax(l,8);
+ d_thumbHalf = d_thumbLength / 2;
+ resize(size());
+}
+
+//------------------------------------------------------------
+//
+//.F Slider::setThumbWidth
+// Change the width of the thumb
+//
+//.u Syntax
+//.p void Slider::setThumbWidth(int w)
+//
+//.u Parameters
+//.p int w -- new width
+//
+//------------------------------------------------------------
+void Slider::setThumbWidth(int w)
+{
+ d_thumbWidth = qwtMax(w,4);
+ resize(size());
+}
+
+
+//------------------------------------------------------------
+//.-
+//.F Slider::scaleChange
+// Notify changed scale
+//
+//.u Syntax
+//.f void Slider::scaleChange()
+//
+//.u Description
+// Called by QwtScaledWidget
+//
+//------------------------------------------------------------
+void Slider::scaleChange()
+{
+ if (!hasUserScale())
+ d_scale.setScale(minValue(), maxValue(), d_maxMajor, d_maxMinor);
+ update();
+}
+
+
+//------------------------------------------------------------
+//.-
+//.F Slider::fontChange
+// Notify change in font
+//
+//.u Syntax
+//.f Slider::fontChange(const QFont &oldFont)
+//
+//------------------------------------------------------------
+void Slider::fontChange(const QFont & /*oldFont*/)
+{
+ repaint(FALSE);
+}
+
+//------------------------------------------------------------
+// drawSlider
+// Draw the slider into the specified rectangle.
+//------------------------------------------------------------
+
+void Slider::drawSlider(QPainter *p, const QRect &r)
+ {
+ QColorGroup g = colorGroup();
+ QBrush brBack(g.background());
+ QBrush brMid;
+ QBrush brDark(g.dark());
+
+ QRect cr;
+
+ int ipos,dist1;
+ double rpos;
+ int lineDist;
+
+ if (d_bwTrough > 0) {
+ qDrawShadePanel(p, r.x(), r.y(),
+ r.width(), r.height(),
+ g, TRUE, d_bwTrough,0);
+ cr.setRect(r.x() + d_bwTrough,
+ r.y() + d_bwTrough,
+ r.width() - 2*d_bwTrough,
+ r.height() - 2*d_bwTrough);
+ brMid = QBrush(g.mid());
+ }
+ else {
+ cr = r;
+ brMid = brBack;
+ }
+
+ rpos = (value() - minValue()) / (maxValue() - minValue());
+
+ lineDist = d_borderWidth - 1;
+ if (lineDist < 1) lineDist = 1;
+
+ if (d_orient == Qt::Horizontal)
+ {
+
+ dist1 = int(double(cr.width() - d_thumbLength) * rpos);
+ ipos = cr.x() + dist1;
+ markerPos = ipos + d_thumbHalf;
+
+ //
+ // draw background
+ //
+ if (d_bgStyle & BgSlot)
+ {
+ drawHsBgSlot(p, cr, QRect(ipos, cr.y(), d_thumbLength, cr.height()), brMid);
+ }
+ else
+ {
+ p->fillRect(cr.x(),cr.y(),dist1,cr.height(),brMid);
+ p->fillRect(ipos + d_thumbLength, cr.y(),
+ cr.width() - d_thumbLength - dist1, cr.height(),brMid);
+ }
+
+ //
+ // Draw thumb
+ //
+ qDrawShadePanel(p,ipos, cr.y(), d_thumbLength, cr.height(),
+ colorGroup(), FALSE, d_borderWidth, &brBack);
+
+ if (lineDist > 1)
+ qDrawShadeLine(p,markerPos, cr.y() + lineDist , markerPos,
+ cr.y() + cr.height() - lineDist,
+ colorGroup(), TRUE, 1);
+ else
+ {
+ p->setPen(g.dark());
+ p->drawLine(markerPos -1 , cr.y() + lineDist, markerPos -1,
+ cr.y() + cr.height() - lineDist - 1);
+ p->setPen(g.light());
+ p->drawLine(markerPos, cr.y() + lineDist, markerPos,
+ cr.y() + cr.height() - lineDist - 1);
+ }
+
+
+ }
+ else
+ {
+ dist1 = int(double(cr.height() - d_thumbLength) * (1.0 - rpos));
+ ipos = cr.y() + dist1;
+ markerPos = ipos + d_thumbHalf;
+
+ if ( d_bgStyle & BgSlot)
+ {
+ drawVsBgSlot(p, cr, QRect(cr.left(), ipos, cr.width(),
+ d_thumbLength), brMid);
+ }
+ else
+ {
+ p->fillRect(cr.x(),cr.y(),cr.width(),ipos,brMid);
+ p->fillRect(cr.x(), ipos + d_thumbLength, cr.width(),
+ cr.height() - d_thumbLength - dist1, brMid);
+ }
+
+ qDrawShadePanel(p,cr.x(),ipos , cr.width(), d_thumbLength,
+ colorGroup(),FALSE,d_borderWidth, &brBack);
+ if (lineDist > 1)
+ qDrawShadeLine(p, cr.x() + lineDist , markerPos,
+ cr.x() + cr.width() - lineDist, markerPos,
+ colorGroup(), TRUE, 1);
+ else {
+
+ p->setPen(g.dark());
+ p->drawLine(cr.x() + lineDist, markerPos - 1 ,
+ cr.x() + cr.width() - lineDist - 1, markerPos - 1);
+ p->setPen(g.light());
+ p->drawLine(cr.x() + lineDist, markerPos,
+ cr.x() + cr.width() - lineDist - 1 , markerPos);
+ }
+ }
+
+}
+
+//------------------------------------------------------------
+//.-
+//.F Slider::drawSlotBg
+//
+//
+//.u Syntax
+//.f void Slider::drawSlotBg(QPainter *p, const QRect &rBound, const QRect &rThumb, const QRect &rSlot, const QBrush &brBack)
+//
+//.u Parameters
+//.p QPainter *p, const QRect &rBound, const QRect &rThumb, const QRect &rSlot, const QBrush &brBack
+//
+//------------------------------------------------------------
+void Slider::drawHsBgSlot(QPainter *p, const QRect &rBound, const QRect &rThumb, const QBrush &brBack)
+{
+ int ws, ds, dLeft;
+ int lPos, rPos;
+ QRect rSlot;
+ const QColorGroup &g = colorGroup();
+
+ ws = rBound.height();
+ if ((ws / 2) * 2 != ws)
+ ws = 5;
+ else
+ ws = 4;
+
+ ds = qwtMax(1, d_thumbLength/2 - 4);
+ dLeft = rThumb.left() - rBound.left();
+
+ rSlot = QRect(rBound.x() + ds, rBound.y() + (rBound.height() - ws) / 2,
+ rBound.width() - 2 * ds, ws);
+
+ rPos = qwtMin(rSlot.x(), rThumb.left());
+
+ if (rThumb.left() > rBound.x())
+ {
+ p->fillRect(rBound.x(),rBound.y(),dLeft, rSlot.top() - rBound.top(), brBack);
+ p->fillRect(rBound.x(),rSlot.bottom() + 1,dLeft,
+ rBound.bottom() - rSlot.bottom(),brBack);
+ if (rPos > rBound.left())
+ p->fillRect(rBound.x(),rSlot.y(),
+ rPos - rBound.left(),ws,brBack);
+
+ p->setPen(g.dark());
+ if (rSlot.x() < rThumb.left())
+ p->drawLine(rSlot.x(), rSlot.bottom(), rSlot.x(), rSlot.top());
+ if (rSlot.x() < rThumb.left() - 1)
+ {
+ p->drawLine(rSlot.x(), rSlot.top(), rThumb.left() - 1, rSlot.top());
+ p->setPen(g.light());
+ p->drawLine(rSlot.x() + 1, rSlot.bottom(),
+ rThumb.left() - 1, rSlot.bottom());
+
+ p->fillRect(rSlot.x() + 1, rSlot.y() + 1, dLeft - ds -1,
+ rSlot.height() -2, QBrush(Qt::black));
+
+ }
+ }
+
+ lPos = qwtMax(rSlot.right(), rThumb.right()) + 1;
+ if (rThumb.right() < rBound.right())
+ {
+ p->fillRect(rThumb.right() + 1,rBound.y(),rBound.right() - rThumb.right(),
+ rSlot.top() - rBound.top(), brBack);
+ p->fillRect(rThumb.right() + 1,rSlot.bottom() + 1,
+ rBound.right() - rThumb.right(),
+ rBound.bottom() - rSlot.bottom(),brBack);
+ if (lPos <= rBound.right())
+ p->fillRect(lPos, rSlot.y() , rBound.right() - lPos + 1, ws ,brBack);
+
+ p->setPen(g.dark());
+ if (rSlot.right() > rThumb.right())
+ {
+ p->drawLine(rThumb.right() + 1, rSlot.top(), rSlot.right(), rSlot.top());
+ p->setPen(g.light());
+ p->drawLine(rSlot.right(), rSlot.bottom(), rSlot.right(), rSlot.top() + 1);
+ }
+
+ if (rSlot.right() > rThumb.right() + 1)
+ {
+ p->setPen(g.light());
+ p->drawLine(rThumb.right() + 1, rSlot.bottom(),
+ rSlot.right() -1, rSlot.bottom());
+ p->fillRect(rThumb.right() + 1, rSlot.y() + 1,
+ rSlot.right() - rThumb.right() - 1,
+ rSlot.height() -2, QBrush(Qt::black));
+ }
+ }
+
+}
+
+//------------------------------------------------------------
+//.-
+//.F Slider::drawVsBgSlot
+//
+//
+//.u Syntax
+//.f void Slider::drawVsBgSlot(QPainter *p, const QRect &rBound, const QRect &rThumb, const QBrush &brBack)
+//
+//.u Parameters
+//.p QPainter *p, const QRect &rBound, const QRect &rThumb, const QBrush &brBack
+//
+//.u Return Value
+//
+//.u Description
+//
+//------------------------------------------------------------
+void Slider::drawVsBgSlot(QPainter *p, const QRect &rBound, const QRect &rThumb, const QBrush &brBack)
+{
+
+ int ws, ds, dTop;
+ int lPos, hPos;
+ QRect rSlot;
+ const QColorGroup &g = colorGroup();
+
+ ws = rBound.width();
+ if ((ws / 2) * 2 != ws)
+ ws = 5;
+ else
+ ws = 4;
+
+ ds = qwtMax(1, d_thumbLength/2 - 4);
+ dTop = rThumb.top() - rBound.top();
+
+ rSlot = QRect(rBound.x() + (rBound.width() - ws) / 2, rBound.y() + ds,
+ ws, rBound.height() - 2 * ds);
+
+ hPos = qwtMin(rSlot.y(), rThumb.top());
+
+ if (rThumb.top() > rBound.top())
+ {
+ p->fillRect(rBound.x(),rBound.y(), rSlot.left() - rBound.left(),dTop, brBack);
+ p->fillRect(rSlot.right() + 1, rBound.y(),
+ rBound.right() - rSlot.right(), dTop,brBack);
+ if (hPos > rBound.top())
+ p->fillRect(rSlot.x(),rBound.y(), ws,
+ hPos - rBound.top(),brBack);
+
+ p->setPen(g.dark());
+ if (rSlot.top() < rThumb.top())
+ p->drawLine(rSlot.left(), rSlot.top(), rSlot.right(), rSlot.top());
+
+
+ if (rSlot.top() < rThumb.top() - 1)
+ {
+ p->drawLine(rSlot.left(), rThumb.top() - 1, rSlot.left(), rSlot.top());
+ p->setPen(g.light());
+ p->drawLine(rSlot.right(), rSlot.top() + 1, rSlot.right(),
+ rThumb.top() - 1);
+
+ p->fillRect(rSlot.x() + 1, rSlot.y() + 1, rSlot.width() - 2,
+ dTop - ds -1, QBrush(Qt::black));
+
+ }
+ }
+
+ lPos = qwtMax(rSlot.bottom(), rThumb.bottom()) + 1;
+ if (rThumb.bottom() < rBound.bottom())
+ {
+ p->fillRect(rBound.left(), rThumb.bottom() + 1,
+ rSlot.left() - rBound.left(),
+ rBound.bottom() - rThumb.bottom(), brBack);
+ p->fillRect(rSlot.right() + 1, rThumb.bottom() + 1,
+ rBound.right() - rSlot.right(),
+ rBound.bottom() - rThumb.bottom(), brBack);
+ if (lPos <= rBound.bottom())
+ p->fillRect(rSlot.left(), lPos, ws, rBound.bottom() - lPos + 1, brBack);
+
+ p->setPen(g.dark());
+ if (rSlot.bottom() > rThumb.bottom())
+ {
+ p->drawLine(rSlot.left(), rThumb.bottom() + 1, rSlot.left(), rSlot.bottom());
+ p->setPen(g.light());
+ p->drawLine(rSlot.left() * 1, rSlot.bottom(), rSlot.right(), rSlot.bottom());
+ }
+
+ if (rSlot.bottom() > rThumb.bottom() + 1)
+ {
+ p->setPen(g.light());
+ p->drawLine(rSlot.right(), rThumb.bottom() + 1, rSlot.right(),
+ rSlot.bottom());
+ p->fillRect(rSlot.left() + 1, rThumb.bottom() + 1,
+ rSlot.width() - 2, rSlot.bottom() - rThumb.bottom() - 1,
+ QBrush(Qt::black));
+ }
+ }
+
+}
+
+//------------------------------------------------------------
+//.-
+//.F Slider::getValue
+// Determine the value corresponding to a specified
+// mouse location.
+//
+//.u Syntax
+//.f double Slider::getValue(const QPoint &p)
+//
+//.u Parameters
+//.p const QPoint &p --
+//
+//.u Description
+// Called by SliderBase
+//------------------------------------------------------------
+double Slider::getValue( const QPoint &p)
+{
+ double rv;
+ int pos;
+ QRect r = d_sliderRect;
+
+ r.setLeft(r.left() + d_bwTrough);
+ r.setRight(r.right() - d_bwTrough);
+ r.setTop(r.top() - d_bwTrough);
+ r.setBottom(r.bottom() - d_bwTrough);
+
+ if (d_orient == Qt::Horizontal)
+ {
+
+ if (r.width() <= d_thumbLength)
+ {
+ rv = 0.5 * (minValue() + maxValue());
+ }
+ else
+ {
+ pos = p.x() - r.x() - d_thumbHalf;
+ rv = minValue() +
+ rint( (maxValue() - minValue()) * double(pos)
+ / double(r.width() - d_thumbLength)
+ / step() ) * step();
+ }
+
+ }
+ else
+ {
+ if (r.height() <= d_thumbLength)
+ {
+ rv = 0.5 * (minValue() + maxValue());
+ }
+ else
+ {
+ pos = p.y() - r.y() - d_thumbHalf;
+ rv = minValue() +
+ rint( (maxValue() - minValue()) *
+ (1.0 - double(pos)
+ / double(r.height() - d_thumbLength))
+ / step() ) * step();
+ }
+
+ }
+
+ return(rv);
+}
+
+
+//------------------------------------------------------------
+//.-
+//.F Slider::getScrollMode
+// Determine scrolling mode and direction
+//
+//.u Syntax
+//.f void Slider::getScrollMode( const QPoint &p, int &scrollMode, int &direction )
+//
+//.u Parameters
+//.p const QPoint &p -- point
+//
+//.u Description
+// Called by SliderBase
+//
+//------------------------------------------------------------
+void Slider::getScrollMode( QPoint &p, const Qt::ButtonState &button, int &scrollMode, int &direction )
+{
+ if(cursorHoming() && button == Qt::LeftButton)
+ {
+ if(d_sliderRect.contains(p))
+ {
+ scrollMode = ScrMouse;
+ direction = 0;
+
+ int mp = 0;
+ QRect cr;
+ QPoint cp;
+ int ipos,dist1;
+ double rpos;
+ int lineDist;
+
+ if(d_bwTrough > 0)
+ cr.setRect(d_sliderRect.x() + d_bwTrough,
+ d_sliderRect.y() + d_bwTrough,
+ d_sliderRect.width() - 2*d_bwTrough,
+ d_sliderRect.height() - 2*d_bwTrough);
+ else
+ cr = d_sliderRect;
+
+ rpos = (value() - minValue()) / (maxValue() - minValue());
+
+ lineDist = d_borderWidth - 1;
+ if(lineDist < 1) lineDist = 1;
+
+ if(d_orient == Qt::Horizontal)
+ {
+ dist1 = int(double(cr.width() - d_thumbLength) * rpos);
+ ipos = cr.x() + dist1;
+ mp = ipos + d_thumbHalf;
+
+ p.setX(mp);
+ cp = mapToGlobal( QPoint(mp, p.y()) );
+ }
+ else
+ {
+ dist1 = int(double(cr.height() - d_thumbLength) * (1.0 - rpos));
+ ipos = cr.y() + dist1;
+ mp = ipos + d_thumbHalf;
+ p.setY(mp);
+ cp = mapToGlobal( QPoint(p.x(), mp) );
+ }
+ cursor().setPos(cp.x(), cp.y());
+ }
+ }
+ else
+ {
+ int currentPos;
+ if (d_orient == Qt::Horizontal)
+ currentPos = p.x();
+ else
+ currentPos = p.y();
+
+ if (d_sliderRect.contains(p))
+ {
+ if ((currentPos > markerPos - d_thumbHalf)
+ && (currentPos < markerPos + d_thumbHalf))
+ {
+ scrollMode = ScrMouse;
+ direction = 0;
+ }
+ else
+ {
+ scrollMode = ScrPage;
+ if (((currentPos > markerPos) && (d_orient == Qt::Horizontal))
+ || ((currentPos <= markerPos) && (d_orient != Qt::Horizontal)))
+ direction = 1;
+ else
+ direction = -1;
+ }
+ }
+ else
+ {
+ scrollMode = ScrNone;
+ direction = 0;
+ }
+
+ }
+}
+
+//------------------------------------------------------------
+//.F Slider::paintEvent
+// Qt paint event
+//
+//.u Syntax
+//.f void Slider::paintEvent(QPaintEvent *e)
+//------------------------------------------------------------
+
+void Slider::paintEvent(QPaintEvent* /*e*/)
+ {
+ QPainter p;
+
+ if (p.begin(this)) {
+ if (d_scalePos != None) {
+ p.fillRect(this->rect(), this->backgroundColor());
+ d_scale.draw(&p);
+ }
+ drawSlider(&p, d_sliderRect);
+ }
+ p.end();
+ }
+
+//------------------------------------------------------------
+//.F Slider::resizeEvent
+// Qt resize event
+//
+//.u Parameters
+//.p QResizeEvent *e
+//
+//.u Syntax
+//.f void Slider::resizeEvent(QResizeEvent *e)
+//------------------------------------------------------------
+
+void Slider::resizeEvent(QResizeEvent *e)
+{
+
+ d_resized = TRUE;
+ QSize s = e->size();
+ int sliderWidth = d_thumbWidth + 2 * d_bwTrough;
+
+ // reposition slider
+ if(d_orient == Qt::Horizontal)
+ {
+ switch(d_scalePos)
+ {
+ case Top:
+
+ d_sliderRect.setRect(this->rect().x() + d_xMargin,
+ this->rect().y() + s.height() - 1
+ - d_yMargin - sliderWidth,
+ s.width() - 2 * d_xMargin,
+ sliderWidth);
+ d_scale.setGeometry(d_sliderRect.x() + d_bwTrough + d_thumbHalf,
+ d_sliderRect.y() - d_scaleDist,
+ d_sliderRect.width() - d_thumbLength - 2*d_bwTrough,
+ ScaleDraw::Top);
+
+ break;
+
+ case Bottom:
+
+ d_sliderRect.setRect(this->rect().x() + d_xMargin,
+ this->rect().y() + d_yMargin,
+ s.width() - 2*d_xMargin,
+ sliderWidth);
+ d_scale.setGeometry(d_sliderRect.x() + d_bwTrough + d_thumbHalf,
+ d_sliderRect.y() + d_sliderRect.height() + d_scaleDist,
+ d_sliderRect.width() - d_thumbLength - 2*d_bwTrough,
+ ScaleDraw::Bottom);
+
+ break;
+
+ default:
+ d_sliderRect.setRect(this->rect().x(), this->rect().x(),
+ s.width(), s.height());
+ break;
+ }
+ }
+ else
+ {
+ switch(d_scalePos)
+ {
+ case Left:
+ d_sliderRect.setRect(this->rect().x() + s.width()
+ - sliderWidth - 1 - d_xMargin,
+ this->rect().y() + d_yMargin,
+ sliderWidth,
+ s.height() - 2 * d_yMargin);
+ d_scale.setGeometry(d_sliderRect.x() - d_scaleDist,
+ d_sliderRect.y() + d_thumbHalf + d_bwTrough,
+ s.height() - d_thumbLength - 2*d_bwTrough,
+ ScaleDraw::Left);
+
+ break;
+ case Right:
+ d_sliderRect.setRect(this->rect().x() + d_xMargin,
+ this->rect().y() + d_yMargin,
+ sliderWidth,
+ s.height() - 2* d_yMargin);
+ d_scale.setGeometry(this->rect().x() + d_sliderRect.width()
+ + d_scaleDist,
+ d_sliderRect.y() + d_thumbHalf + d_bwTrough,
+ s.height() - d_thumbLength - 2*d_bwTrough,
+ ScaleDraw::Right);
+ break;
+ default:
+ d_sliderRect.setRect(this->rect().x(), this->rect().x(),
+ s.width(), s.height());
+ break;
+ }
+ }
+
+}
+
+//------------------------------------------------------------
+//.-
+//.F Slider::valueChange
+// Notify change of value
+//
+//.u Syntax
+//.f void Slider::valueChange()
+//
+//------------------------------------------------------------
+
+void Slider::valueChange()
+ {
+ QPainter p;
+
+ p.begin(this);
+ drawSlider(&p, d_sliderRect);
+ p.end();
+
+ SliderBase::valueChange();
+ }
+
+//------------------------------------------------------------
+//.-
+//.F Slider::rangeChange
+// Notify change of range
+//
+//.u Description
+//
+//.u Syntax
+//.f void Slider::rangeChange()
+//
+//------------------------------------------------------------
+void Slider::rangeChange()
+{
+ if (!hasUserScale())
+ d_scale.setScale(minValue(), maxValue(), d_maxMajor, d_maxMinor);
+ SliderBase::rangeChange();
+ repaint(FALSE);
+}
+
+//------------------------------------------------------------
+//
+//.F Slider::setMargins
+// Set distances between the widget's border and
+// internals.
+//
+//.u Syntax
+//.f void Slider::setMargins(int hor, int vert)
+//
+//.u Parameters
+//.p int hor, int vert -- Margins
+//
+//------------------------------------------------------------
+void Slider::setMargins(int hor, int vert)
+{
+ d_xMargin = qwtMax(0, hor);
+ d_yMargin = qwtMin(0, vert);
+ resize(this->size());
+}
+
+//------------------------------------------------------------
+//
+//.F Slider::sizeHint
+// Return a recommended size
+//
+//.u Syntax
+//.f QSize Slider::sizeHint() const
+//
+//.u Note
+// The return value of sizeHint() depends on the font and the
+// scale.
+//------------------------------------------------------------
+
+QSize Slider::sizeHint() //const ddskrjo
+ {
+ QPainter p;
+ int msWidth = 0, msHeight = 0;
+
+ int w = 40;
+ int h = 40;
+ if (d_scalePos != None) {
+ if (p.begin(this)) {
+ msWidth = d_scale.maxWidth(&p, FALSE);
+ msHeight = d_scale.maxHeight(&p);
+ }
+ p.end();
+
+ switch(d_orient) {
+ case Qt::Vertical:
+ w = 2*d_xMargin + d_thumbWidth + 2*d_bwTrough + msWidth + d_scaleDist + 2;
+ break;
+ case Qt::Horizontal:
+ h = 2*d_yMargin + d_thumbWidth + 2*d_bwTrough + msHeight + d_scaleDist;
+ break;
+ }
+ }
+ else { // no scale
+ switch(d_orient) {
+ case Qt::Vertical:
+ w = 16 + 2 * d_bwTrough;
+ break;
+ case Qt::Horizontal:
+ h = 16 + 2 * d_bwTrough;
+ break;
+ }
+ }
+ return QSize(w, h);
+ }
+
+//---------------------------------------------------------
+// setOrientation
+//---------------------------------------------------------
+
+void Slider::setOrientation(Qt::Orientation o)
+ {
+ d_orient = o;
+ ScaleDraw::OrientationX so = ScaleDraw::Bottom;
+ switch(d_orient) {
+ case Qt::Vertical:
+ if (d_scalePos == Right)
+ so = ScaleDraw::Right;
+ else
+ so = ScaleDraw::Left;
+ break;
+ case Qt::Horizontal:
+ if (d_scalePos == Bottom)
+ so = ScaleDraw::Bottom;
+ else
+ so = ScaleDraw::Top;
+ break;
+ }
+
+ d_scale.setGeometry(0, 0, 40, so);
+ if (d_orient == Qt::Vertical)
+ setMinimumSize(10,20);
+ else
+ setMinimumSize(20,10);
+ QRect r = geometry();
+ setGeometry(r.x(), r.y(), r.height(), r.width());
+ update();
+ }
+
+Qt::Orientation Slider::orientation() const
+ {
+ return d_orient;
+ }
+
+double Slider::lineStep() const
+ {
+ return 1.0;
+ }
+
+double Slider::pageStep() const
+ {
+ return 1.0;
+ }
+
+void Slider::setLineStep(double)
+ {
+ }
+
+void Slider::setPageStep(double)
+ {
+ }
+
diff --git a/muse2/muse/widgets/slider.h b/muse2/muse/widgets/slider.h
new file mode 100644
index 00000000..499229e1
--- /dev/null
+++ b/muse2/muse/widgets/slider.h
@@ -0,0 +1,98 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: slider.h,v 1.3.2.2 2008/01/19 13:33:47 wschweer Exp $
+//
+// Copyright (C) 1997 Josef Wilgen
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License, version 2,
+// as published by the Free Software Foundation.
+//
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __SLIDER_H__
+#define __SLIDER_H__
+
+#include "sclif.h"
+#include "sliderbase.h"
+#include "scldraw.h"
+//Added by qt3to4:
+#include <QResizeEvent>
+#include <QPaintEvent>
+
+//---------------------------------------------------------
+// Slider
+//---------------------------------------------------------
+
+class Slider : public SliderBase, public ScaleIf
+ {
+ Q_OBJECT
+
+ public:
+ enum ScalePos { None, Left, Right, Top, Bottom };
+ enum { BgTrough = 0x1, BgSlot = 0x2 };
+
+ private:
+ Q_PROPERTY( double lineStep READ lineStep WRITE setLineStep )
+ Q_PROPERTY( double pageStep READ pageStep WRITE setPageStep )
+ Q_PROPERTY( Qt::Orientation orientation READ orientation WRITE setOrientation )
+
+ QRect d_sliderRect;
+
+ int d_thumbLength;
+ int d_thumbHalf;
+ int d_thumbWidth;
+ int d_borderWidth;
+ int d_bwTrough;
+ int d_scaleDist;
+ int d_xMargin;
+ int d_yMargin;
+
+ int d_resized;
+ bool d_autoResize;
+ double d_scaleStep;
+
+ Qt::Orientation d_orient;
+ ScalePos d_scalePos;
+ int d_bgStyle;
+ int markerPos;
+
+ void drawHsBgSlot(QPainter *, const QRect&, const QRect&,const QBrush&);
+ void drawVsBgSlot(QPainter *, const QRect&, const QRect&,const QBrush&);
+
+ protected:
+ virtual void drawSlider (QPainter *p, const QRect &r);
+ double getValue(const QPoint &p);
+ void getScrollMode( QPoint &p, const Qt::ButtonState &button, int &scrollMode, int &direction);
+ void resizeEvent(QResizeEvent *e);
+ void paintEvent (QPaintEvent *e);
+ void valueChange();
+ void rangeChange();
+ void scaleChange();
+ void fontChange(const QFont &oldFont);
+
+ public:
+ Slider(QWidget *parent, const char *name = 0,
+ Qt::Orientation orient = Qt::Vertical,
+ ScalePos scalePos = None,
+ int bgStyle = BgTrough);
+
+ ~Slider();
+ void setThumbLength(int l);
+ void setThumbWidth(int w);
+
+ void setOrientation(Qt::Orientation o);
+ Qt::Orientation orientation() const;
+
+ double lineStep() const;
+ double pageStep() const;
+
+ void setLineStep(double);
+ void setPageStep(double);
+
+ void setBorderWidth(int bw);
+ void setMargins(int x, int y);
+ QSize sizeHint(); // const;
+ };
+#endif
diff --git a/muse2/muse/widgets/sliderbase.cpp b/muse2/muse/widgets/sliderbase.cpp
new file mode 100644
index 00000000..0d814d3c
--- /dev/null
+++ b/muse2/muse/widgets/sliderbase.cpp
@@ -0,0 +1,726 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: sliderbase.cpp,v 1.4.2.4 2007/01/27 14:52:43 spamatica Exp $
+
+// Copyright (C) 1997 Josef Wilgen
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License, version 2,
+// as published by the Free Software Foundation.
+//
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <cmath>
+#include "sliderbase.h"
+#include "mmath.h"
+//Added by qt3to4:
+#include <QWheelEvent>
+#include <QMouseEvent>
+#include <QTimerEvent>
+
+// DESCRIPTION
+// SliderBase is a base class for
+// slider widgets. QwtSliderBase handles the mouse events
+// and updates the slider's value accordingly. Derived classes
+// only have to implement the @QwtSliderBase::getValue@ and
+// @QwtSliderBase::getScrollMode@ members, and should react to a
+// @QwtSliderbase::valueChange@, which normally requires repainting.
+
+//------------------------------------------------------------
+//.F SliderBase::SliderBase
+// Constructor
+//
+//.u Syntax
+//.f SliderBase::SliderBase(QWidget *parent, const char *name)
+//
+//.u Parameters
+//.p QWidget *parent, const char *name
+//
+//------------------------------------------------------------
+
+SliderBase::SliderBase(QWidget *parent, const char *name)
+: QWidget(parent, name)
+ {
+ _id = -1;
+ _cursorHoming = false;
+ _ignoreMouseMove = false;
+ d_tmrID = 0;
+ d_updTime = 150;
+ d_mass = 0.0;
+ d_tracking = true;
+ d_mouseOffset = 0.0;
+ d_scrollMode = ScrNone;
+ setRange(0.0, 1.0, 0.1);
+ }
+
+//------------------------------------------------------------
+//.F SliderBase::~SliderBase
+// Destructor
+//
+//.u Syntax
+//.f SliderBase::~SliderBase()
+//------------------------------------------------------------
+
+SliderBase::~SliderBase()
+ {
+ if (d_tmrID)
+ killTimer(d_tmrID);
+ }
+
+
+//------------------------------------------------------------
+//.F void SliderBase::wheelEvent(QWheelEvent *e)
+// Add wheel event handling
+//
+//.u Syntax
+//.f void SliderBase::wheelEvent(QWheelEvent *e)
+//------------------------------------------------------------
+void SliderBase::wheelEvent(QWheelEvent *e)
+{
+ // Avoid unwanted wheel events from outside the control.
+ // Just in case it grabs focus somehow.
+ // Tested: No go, can't seem to determine where event came from.
+ /*
+ const QPoint gp = mapToGlobal(e->pos());
+ const QRect gr = QRect(mapToGlobal(rect().topLeft()), mapToGlobal(rect().bottomRight()));
+ if(!gr.contains(gp))
+ {
+ e->ignore();
+ return;
+ } */
+
+ e->accept();
+
+ float inc = (maxValue() - minValue()) / 40;
+ if (e->state() == Qt::ShiftModifier)
+ inc = inc / 10;
+
+ if(inc < step())
+ inc = step();
+
+ if(e->delta() > 0)
+ setValue(value()+inc);
+ else
+ setValue(value()-inc);
+
+ emit sliderMoved(value(), _id);
+}
+
+
+//------------------------------------------------------------
+//.F SliderBase::stopMoving
+// Stop updating if automatic scrolling is active
+//
+//.u Syntax
+//.f void SliderBase::stopMoving()
+//------------------------------------------------------------
+
+void SliderBase::stopMoving()
+ {
+ if(d_tmrID) {
+ killTimer(d_tmrID);
+ d_tmrID = 0;
+ }
+ }
+
+//------------------------------------------------------------
+//.F SliderBase::setUpdateTime
+// Specify the update interval for automatic scrolling
+//
+//.u Syntax
+//.f void SliderBase::setUpdateTime(int t)
+//
+//.u Parameters
+//.p int t -- update interval in milliseconds
+//
+//.u See also
+// @SliderBase::getScrollMode@
+//------------------------------------------------------------
+
+void SliderBase::setUpdateTime(int t)
+ {
+ if (t < 50)
+ t = 50;
+ d_updTime = t;
+ }
+
+//------------------------------------------------------------
+//.F SliderBase::mousePressEvent
+// Mouse press event handler
+//
+//.u Syntax
+//.f void SliderBase::mousePressEvent(QMouseEvent *e)
+//
+//.u Parameters
+//.p QMouseEvent *e -- Qt Mouse press event
+//------------------------------------------------------------
+
+void SliderBase::mousePressEvent(QMouseEvent *e)
+ {
+ QPoint p = e->pos();
+ const Qt::ButtonState button = e->button();
+ d_timerTick = 0;
+
+ getScrollMode(p, button, d_scrollMode, d_direction);
+ stopMoving();
+
+ switch(d_scrollMode) {
+ case ScrPage:
+ case ScrTimer:
+ d_mouseOffset = 0;
+ DoubleRange::incPages(d_direction);
+ emit sliderMoved(value(), _id);
+ d_tmrID = startTimer(qwtMax(250, 2 * d_updTime));
+ break;
+
+ case ScrMouse:
+ d_speed = 0;
+ if(button == Qt::RightButton)
+ {
+ emit sliderRightClicked(e->globalPos(), _id);
+ break;
+ }
+ d_time.start();
+ if(_cursorHoming && button == Qt::LeftButton)
+ {
+ _ignoreMouseMove = true;
+ d_mouseOffset = 0.0;
+ }
+ else
+ d_mouseOffset = getValue(p) - value();
+
+ emit sliderPressed(_id);
+ break;
+
+ default:
+ d_mouseOffset = 0;
+ d_direction = 0;
+ break;
+ }
+ }
+
+
+//------------------------------------------------------------
+//.-
+//.F SliderBase::buttonRelease
+// Emit a valueChanged() signal if necessary
+//
+//.u Syntax
+//.f void SliderBase::buttonReleased()
+//
+//------------------------------------------------------------
+void SliderBase::buttonReleased()
+{
+ if ((!d_tracking) || (value() != prevValue()))
+ emit valueChanged(value(), _id);
+}
+
+
+//------------------------------------------------------------
+//
+//.F SliderBase::mouseReleaseEvent
+// Mouse Release Event handler
+//
+//.u Syntax
+//.f void SliderBase::mouseReleaseEvent(QMouseEvent *e)
+//
+//.u Parameters
+//.p QMouseEvent *e -- Qt Mouse Event
+//
+//------------------------------------------------------------
+void SliderBase::mouseReleaseEvent(QMouseEvent *e)
+{
+ int ms = 0;
+ /*double inc = step(); */ // prevent compiler warning: unused variable
+ _ignoreMouseMove = false;
+ const Qt::ButtonState button = e->button();
+
+ switch(d_scrollMode)
+ {
+
+ case ScrMouse:
+
+ if(button == Qt::RightButton)
+ {
+ d_scrollMode = ScrNone;
+ break;
+ }
+ if(_cursorHoming && button == Qt::LeftButton)
+ d_scrollMode = ScrNone;
+ else
+ {
+ setPosition(e->pos());
+ d_direction = 0;
+ d_mouseOffset = 0;
+ if (d_mass > 0.0)
+ {
+ ms = d_time.elapsed();
+ if ((fabs(d_speed) > 0.0) && (ms < 50))
+ d_tmrID = startTimer(d_updTime);
+ }
+ else
+ {
+ d_scrollMode = ScrNone;
+ buttonReleased();
+ }
+ }
+ emit sliderReleased(_id);
+
+ break;
+
+ case ScrDirect:
+
+ setPosition(e->pos());
+ d_direction = 0;
+ d_mouseOffset = 0;
+ d_scrollMode = ScrNone;
+ buttonReleased();
+ break;
+
+ case ScrPage:
+ stopMoving();
+ d_timerTick = 0;
+ buttonReleased();
+ d_scrollMode = ScrNone;
+ break;
+
+ case ScrTimer:
+ stopMoving();
+ d_timerTick = 0;
+ buttonReleased();
+ d_scrollMode = ScrNone;
+ break;
+
+ default:
+ d_scrollMode = ScrNone;
+ buttonReleased();
+ }
+}
+
+
+//------------------------------------------------------------
+//
+//.F SliderBase::setPosition
+// Move the slider to a specified point, adjust the value
+// and emit signals if necessary
+//
+//.u Syntax
+//.f void SliderBase::setPosition(const QPoint &p)
+//
+//.u Parameters
+//.p const QPoint &p
+//
+//------------------------------------------------------------
+void SliderBase::setPosition(const QPoint &p)
+{
+ DoubleRange::fitValue(getValue(p) - d_mouseOffset);
+}
+
+
+//------------------------------------------------------------
+//
+//.F SliderBase::setTracking
+//
+// Enables or disables tracking.
+//
+//.u Syntax
+//.f void SliderBase::setTracking(bool enable)
+//
+//.u Parameters
+//.p bool enable -- enable (TRUE) or disable (FALSE) tracking
+//
+//.u Description
+//
+// If tracking is enabled, the slider emits a
+// valueChanged() signal whenever its value
+// changes (the default behaviour). If tracking
+// is disabled, the value changed() signal will only
+// be emitted if
+//.i -- the user releases the mouse
+// button and the value has changed or
+// -- at the end of automatic scrolling.
+//.P
+// Tracking is enabled by default.
+//------------------------------------------------------------
+void SliderBase::setTracking(bool enable)
+{
+ d_tracking = enable;
+}
+
+//------------------------------------------------------------
+//.-
+//.F SliderBase::mouseMoveEvent
+// Mouse Move Event handler
+//
+//.u Syntax
+//.f void SliderBase::mouseMoveEvent(QMouseEvent *e)
+//
+//.u Parameters
+//.p QMouseEvent *e -- Qt Mouse Move Event
+//
+//------------------------------------------------------------
+void SliderBase::mouseMoveEvent(QMouseEvent *e)
+{
+ if(_ignoreMouseMove)
+ {
+ _ignoreMouseMove = false;
+ return;
+ }
+
+ double ms = 0.0;
+ if (d_scrollMode == ScrMouse )
+ {
+ setPosition(e->pos());
+ if (d_mass > 0.0)
+ {
+ ms = double(d_time.elapsed());
+ if (ms < 1.0) ms = 1.0;
+ d_speed = (exactValue() - exactPrevValue()) / ms;
+ d_time.start();
+ }
+ if (value() != prevValue())
+ emit sliderMoved(value(), _id);
+ }
+
+}
+
+
+
+//------------------------------------------------------------
+//
+//.F SliderBase::timerEvent
+// Timer event handler
+//
+//.u Syntax
+//.f void SliderBase::timerEvent(QTimerEvent *e)
+//
+//.u Parameters
+//.p QTimerEvent *e -- Qt timer event
+//
+//------------------------------------------------------------
+
+void SliderBase::timerEvent(QTimerEvent*)
+{
+ double newval;
+ double inc = step();
+
+ switch (d_scrollMode)
+ {
+ case ScrMouse:
+ if (d_mass > 0.0)
+ {
+ d_speed *= exp( - double(d_updTime) * 0.001 / d_mass );
+ newval = exactValue() + d_speed * double(d_updTime);
+ DoubleRange::fitValue(newval);
+ // stop if d_speed < one step per second
+ if (fabs(d_speed) < 0.001 * fabs(step()))
+ {
+ d_speed = 0;
+ stopMoving();
+ buttonReleased();
+ }
+
+ }
+ else
+ stopMoving();
+
+ break;
+
+ case ScrPage:
+ DoubleRange::incPages(d_direction);
+
+ if (value() != prevValue())
+ emit sliderMoved(value(), _id);
+
+ if (!d_timerTick)
+ {
+ killTimer(d_tmrID);
+ d_tmrID = startTimer(d_updTime);
+ }
+ break;
+ case ScrTimer:
+ DoubleRange::fitValue(value() + double(d_direction) * inc);
+
+ if (value() != prevValue())
+ emit sliderMoved(value(), _id);
+
+ if (!d_timerTick)
+ {
+ killTimer(d_tmrID);
+ d_tmrID = startTimer(d_updTime);
+ }
+ break;
+ default:
+ stopMoving();
+ break;
+ }
+
+ d_timerTick = 1;
+}
+
+
+//------------------------------------------------------------
+//
+//.F SliderBase::valueChange
+// Notify change of value
+//
+//.u Syntax
+//.f void SliderBase::valueChange()
+//
+//.u Parameters
+//.p double x -- new value
+//
+//.u Description
+// This function can be reimplemented by derived classes
+// in order to keep track of changes, i.e. repaint the widget.
+// The default implementation emits a valueChanged() signal
+// if tracking is enabled.
+//
+//------------------------------------------------------------
+void SliderBase::valueChange()
+{
+ if (d_tracking)
+ emit valueChanged(value(), _id);
+}
+
+//------------------------------------------------------------
+//
+//.F SliderBase::setMass
+// Set the slider's mass for flywheel effect.
+//
+//.u Syntax
+//.f void SliderBase::setMass(double val)
+//
+//.u Parameters
+//.p double val -- new mass in kg
+//
+//.u Description
+//
+// If the slider's mass is greater then 0, it will continue
+// to move after the mouse button has been released. Its speed
+// decreases with time at a rate depending on the slider's mass.
+// A large mass means that it will continue to move for a
+// long time.
+//
+// Limits: If the mass is smaller than 1g, it is set to zero.
+// The maximal mass is limited to 100kg.
+//
+// Derived widgets may overload this function to make it public.
+//
+//------------------------------------------------------------
+void SliderBase::setMass(double val)
+{
+ if (val < 0.001)
+ d_mass = 0.0;
+ else if (val > 100.0)
+ d_mass = 100.0;
+ else
+ d_mass = val;
+}
+
+
+//------------------------------------------------------------
+//
+//.F SliderBase::setValue
+// Move the slider to a specified value
+//
+//.u Syntax
+//.f void SliderBase::setValue(double val)
+//
+//.u Parameters
+//.p double val -- new value
+//
+//.u Description
+// This function can be used to move the slider to a value
+// which is not an integer multiple of the step size.
+//
+//.u See also
+// @SliderBase::fitValue@
+//------------------------------------------------------------
+
+void SliderBase::setValue(double val)
+ {
+ if (d_scrollMode == ScrMouse)
+ stopMoving();
+ DoubleRange::setValue(val);
+ }
+
+
+//------------------------------------------------------------
+//
+//.F QSlider::fitValue
+// Set the slider's value to the nearest integer multiple
+// of the step size.
+//
+//.u Syntax
+//.f void SliderBase::fitValue(double val)
+//
+//.u See also:
+// @SliderBase::setValue@
+//------------------------------------------------------------
+void SliderBase::fitValue(double val)
+{
+ if (d_scrollMode == ScrMouse) stopMoving();
+ DoubleRange::fitValue(val);
+}
+
+
+//------------------------------------------------------------
+//
+//.F SliderBase::incValue
+// Increment the value by a specified number of steps
+//
+//.u Syntax
+//.f void SliderBase::incValue(int steps)
+//
+//.u Parameters
+//.p int steps -- number of steps
+//
+//------------------------------------------------------------
+void SliderBase::incValue(int steps)
+{
+ if (d_scrollMode == ScrMouse) stopMoving();
+ DoubleRange::incValue(steps);
+}
+
+
+//------------------------------------------------------------
+//
+//.F SliderBase::stepPage
+// Increment the value by a specified number of steps
+//
+//.u Syntax
+//.f void SliderBase::stepPages(int pages)
+//
+//.u Parameters
+//.p int pages -- +/- number of pages
+//
+//.u Description
+// Steps the control as if pager was clicked.
+// Designed to be called from outside (like from a buddy label), rather than from
+// the control itself. Calls DoubleRange::incPages, which normally causes valueChange()
+// (and emits valueChanged), but also emits sliderMoved.
+//
+//------------------------------------------------------------
+void SliderBase::stepPages(int pages)
+{
+ DoubleRange::incPages(pages);
+ emit sliderMoved(value(), _id);
+}
+
+
+//------------------------------------------------------------
+//
+//.F SliderBase::getValue
+// Determine the value corresponding to a specified poind
+//
+//.u Syntax
+//.f void SliderBase::getValue(const QPoint &p)
+//
+//.u Parameters
+//.p const QPoint &p -- point
+//
+//.u Description
+// This is an abstract virtual function which is called when
+// the user presses or releases a mouse button or moves the
+// mouse. It has to be implemented by the derived class.
+//
+//------------------------------------------------------------
+
+//------------------------------------------------------------
+//
+//.F SliderBase::getScrollMode
+// Determine what to do when the user presses a mouse button.
+//
+//.u Syntax
+//.f void SliderBase::getScrollMode(const QPoint &p, int &scrollMode, int &direction)
+//
+//.u Input Parameters
+//.p const QPoint &p -- point where the mouse was pressed
+//
+//.u Output parameters
+// int &scrollMode -- The scrolling mode
+// int &direction -- direction: 1, 0, or -1.
+//
+//.u Description
+// This function is abstract and has to be implemented by derived classes.
+// It is called on a mousePress event. The derived class can determine
+// what should happen next in dependence of the position where the mouse
+// was pressed by returning scrolling mode and direction. SliderBase
+// knows the following modes:
+//.t
+// SliderBase::ScrNone -- Scrolling switched off. Don't change the value.
+// SliderBase::ScrMouse -- Change the value while the user keeps the
+// button pressed and moves the mouse.
+// SliderBase::ScrTimer -- Automatic scrolling. Increment the value
+// in the specified direction as long as
+// the user keeps the button pressed.
+// SliderBase::ScrPage -- Automatic scrolling. Same as ScrTimer, but
+// increment by page size.
+//
+//
+//------------------------------------------------------------
+
+//------------------------------------------------------------
+//
+//.F SliderBase::valueChanged
+// Notify a change of value.
+//
+//.u Syntax
+//.f void SliderBase::valueChanged(double value, int id)
+//
+//.u Parameters
+//.p double value -- new value
+//
+//.u Description
+// In the default setting
+// (tracking enabled), this signal will be emitted every
+// time the value changes ( see setTracking() ).
+//------------------------------------------------------------
+
+//------------------------------------------------------------
+//
+//.F SliderBase::sliderPressed
+// This signal is emitted when the user presses the
+// movable part of the slider (start ScrMouse Mode).
+//
+//.u Syntax
+//.f void SliderBase::sliderPressed()
+//
+//------------------------------------------------------------
+
+//------------------------------------------------------------
+//
+//.F SliderBase::SliderReleased
+// This signal is emitted when the user releases the
+// movable part of the slider.
+//
+//.u Syntax
+//.f void QwtSliderbase::SliderReleased()
+//
+//------------------------------------------------------------
+
+
+//------------------------------------------------------------
+//
+//.F SliderBase::sliderMoved
+// This signal is emitted when the user moves the
+// slider with the mouse.
+//
+//.u Syntax
+//.f void SliderBase::sliderMoved(double value, int _id)
+//
+//.u Parameters
+//.p double value -- new value
+//
+//------------------------------------------------------------
+
+
+
+
+
+
+
+
+
diff --git a/muse2/muse/widgets/sliderbase.h b/muse2/muse/widgets/sliderbase.h
new file mode 100644
index 00000000..d2de6f7c
--- /dev/null
+++ b/muse2/muse/widgets/sliderbase.h
@@ -0,0 +1,107 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: sliderbase.h,v 1.4.2.3 2006/11/14 06:28:37 terminator356 Exp $
+
+// Copyright (C) 1997 Josef Wilgen
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License, version 2,
+// as published by the Free Software Foundation.
+//
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __SLIDERBASE_H__
+#define __SLIDERBASE_H__
+
+#include "drange.h"
+#include <q3frame.h>
+#include <qpixmap.h>
+#include <qdatetime.h>
+//#include <qbutton.h>
+#include <QtGui>
+//Added by qt3to4:
+#include <QWheelEvent>
+#include <QMouseEvent>
+#include <QTimerEvent>
+
+//---------------------------------------------------------
+// SliderBase
+//---------------------------------------------------------
+
+class SliderBase : public QWidget, public DoubleRange
+ {
+ Q_OBJECT
+ Q_PROPERTY( int id READ id WRITE setId )
+ Q_PROPERTY( double minValue READ minValue WRITE setMinValue )
+ Q_PROPERTY( double maxValue READ maxValue WRITE setMaxValue )
+ Q_PROPERTY( double value READ value WRITE setValue )
+
+ int _id;
+ int d_tmrID;
+ int d_updTime;
+ int d_timerTick;
+ QTime d_time;
+ double d_speed;
+ double d_mass;
+ bool _cursorHoming;
+ bool _ignoreMouseMove;
+
+ void buttonReleased();
+
+ protected:
+ int d_scrollMode;
+ double d_mouseOffset;
+ int d_direction;
+ int d_tracking;
+
+ virtual void setMass(double val);
+ void setPosition(const QPoint &p);
+ virtual void valueChange();
+ virtual double mass() const { return d_mass; }
+
+ void wheelEvent(QWheelEvent *e);
+ void timerEvent(QTimerEvent *e);
+ void mousePressEvent(QMouseEvent *e);
+ void mouseReleaseEvent(QMouseEvent *e);
+ void mouseMoveEvent(QMouseEvent *e);
+ virtual double getValue(const QPoint & p) = 0;
+ virtual void getScrollMode( QPoint &p, const Qt::ButtonState &button,
+ int &scrollMode, int &direction) = 0;
+
+ public slots:
+ void setValue(double val);
+ void fitValue(double val);
+ void incValue(int steps);
+
+ signals:
+ void valueChanged(double value, int id);
+ void sliderPressed(int id);
+ void sliderReleased(int id);
+ void sliderMoved(double value, int id);
+ void sliderRightClicked(const QPoint &p, int id);
+
+ public:
+ enum { ScrNone, ScrMouse, ScrTimer, ScrDirect, ScrPage };
+
+ SliderBase( QWidget *parent = 0, const char *name = 0 );
+ ~SliderBase();
+
+ bool cursorHoming() const { return _cursorHoming; }
+ void setCursorHoming(bool b) { _cursorHoming = b; }
+ void setUpdateTime(int t);
+ // void incValue(double nSteps);
+ void stopMoving();
+ void setTracking(bool enable);
+
+ double value() const { return DoubleRange::value(); }
+ void stepPages(int pages);
+ double minValue() const { return DoubleRange::minValue(); }
+ double maxValue() const { return DoubleRange::maxValue(); }
+ void setMinValue(double v) { DoubleRange::setRange(v, maxValue(), 0.0, 1); }
+ void setMaxValue(double v) { DoubleRange::setRange(minValue(), v, 0.0, 1); }
+ int id() const { return _id; }
+ void setId(int i) { _id = i; }
+ };
+
+#endif
diff --git a/muse2/muse/widgets/songinfo.ui b/muse2/muse/widgets/songinfo.ui
new file mode 100644
index 00000000..2e4e7e80
--- /dev/null
+++ b/muse2/muse/widgets/songinfo.ui
@@ -0,0 +1,115 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>SongInfo</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>SongInfo</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>403</width>
+ <height>274</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Song Information</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QTextEdit">
+ <property name="name">
+ <cstring>songInfoText</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>311</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="accel">
+ <string>Alt+C</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Ok</string>
+ </property>
+ <property name="accel">
+ <string>Alt+O</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>SongInfo</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>SongInfo</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="local" impldecl="in implementation">songinfo.ui.h</include>
+</includes>
+<slots>
+ <slot>buttonOk_clicked()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/spinbox.cpp b/muse2/muse/widgets/spinbox.cpp
new file mode 100644
index 00000000..6eed0ba6
--- /dev/null
+++ b/muse2/muse/widgets/spinbox.cpp
@@ -0,0 +1,83 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: spinbox.cpp,v 1.1.2.3 2009/07/09 18:27:11 terminator356 Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+#include <qlineedit.h>
+//Added by qt3to4:
+#include <QKeyEvent>
+#include <QEvent>
+#include "spinbox.h"
+
+//---------------------------------------------------------
+// SpinBox
+//---------------------------------------------------------
+
+SpinBox::SpinBox(QWidget* parent, const char* name)
+ : QSpinBox(parent, name)
+{
+ _clearFocus = true;
+}
+
+SpinBox::SpinBox(int minValue, int maxValue, int step, QWidget* parent, const char* name)
+ : QSpinBox(minValue, maxValue, step, parent, name)
+{
+ _clearFocus = true;
+}
+
+bool SpinBox::eventFilter(QObject* o, QEvent* ev)
+{
+ // if (o != (QObject*)editor()) ddskrjo can't find editor()
+ // return QSpinBox::eventFilter(o,ev);
+
+ bool retval = FALSE;
+ if(ev->type() == QEvent::KeyPress)
+ {
+ QKeyEvent* k = (QKeyEvent*)ev;
+ if(k->key() == Qt::Key_Up || k->key() == Qt::Key_Down)
+ {
+ // stepUp/stepDown will be called. Set this now.
+ _clearFocus = false;
+ }
+ else if (k->key() == Qt::Key_Enter || k->key() == Qt::Key_Return)
+ {
+ // With this line, two enter presses after an edit will clear focus.
+ // Without, just one enter press clears the focus.
+ //if(!editor()->isModified())
+ {
+ clearFocus();
+ return TRUE;
+ }
+ }
+ }
+ else
+ if(ev->type() == QEvent::MouseButtonDblClick)
+ {
+ emit doubleClicked();
+ return TRUE;
+ }
+
+ retval = QSpinBox::eventFilter(o, ev);
+
+ return retval;
+}
+
+void SpinBox::stepUp()
+{
+ QSpinBox::stepUp();
+ if(_clearFocus)
+ clearFocus();
+ else
+ _clearFocus = true;
+}
+
+void SpinBox::stepDown()
+{
+ QSpinBox::stepDown();
+ if(_clearFocus)
+ clearFocus();
+ else
+ _clearFocus = true;
+}
+
diff --git a/muse2/muse/widgets/spinbox.h b/muse2/muse/widgets/spinbox.h
new file mode 100644
index 00000000..6eaa2da7
--- /dev/null
+++ b/muse2/muse/widgets/spinbox.h
@@ -0,0 +1,44 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: spinbox.h,v 1.1.2.2 2009/02/02 21:38:01 terminator356 Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+// SpinBox:
+// Click up/down, or mousewheel, or hit enter with un-modified text (which means enter TWICE for modified text),
+// and the control will give up focus, thereby allowing you to use global shortcut keys afterwards.
+// Up/down keys still keep the focus.
+#ifndef __SPINBOX_H__
+#define __SPINBOX_H__
+
+#include <qspinbox.h>
+//Added by qt3to4:
+#include <QEvent>
+
+//---------------------------------------------------------
+// SpinBox
+//---------------------------------------------------------
+
+class SpinBox : public QSpinBox {
+ Q_OBJECT
+
+ bool _clearFocus;
+
+ protected:
+ bool eventFilter(QObject* obj, QEvent* ev);
+
+ public slots:
+ virtual void stepUp();
+ virtual void stepDown();
+
+ signals:
+ void doubleClicked();
+
+ public:
+ SpinBox(QWidget* parent=0, const char* name = 0);
+ SpinBox(int minValue, int maxValue, int step = 1, QWidget* parent=0, const char* name = 0);
+};
+
+#endif
+
diff --git a/muse2/muse/widgets/spinboxFP.cpp b/muse2/muse/widgets/spinboxFP.cpp
new file mode 100644
index 00000000..c2906940
--- /dev/null
+++ b/muse2/muse/widgets/spinboxFP.cpp
@@ -0,0 +1,80 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: spinboxFP.cpp,v 1.1.1.1 2003/10/27 18:55:03 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <stdio.h>
+#include <cmath>
+
+//#include <qvalidator.h>
+#include <QtGui>
+#include "spinboxFP.h"
+
+//---------------------------------------------------------
+// SpinBoxFP
+//---------------------------------------------------------
+
+SpinBoxFP::SpinBoxFP(QWidget* parent, const char* name)
+ : QSpinBox(parent, name)
+ {
+ _precision = 0;
+ //setValidator(new QDoubleValidator(this)); ddskrjo
+ }
+
+SpinBoxFP::SpinBoxFP(int minValue, int maxValue, int step, QWidget* parent, const char* name)
+ : QSpinBox(minValue, maxValue, step, parent, name)
+ {
+ _precision = 0;
+ //setValidator(new QDoubleValidator(this)); ddskrjo
+ }
+
+//---------------------------------------------------------
+// setPrecision
+//---------------------------------------------------------
+
+void SpinBoxFP::setPrecision(int val)
+ {
+ _precision = val;
+ //updateDisplay(); ddskrjo
+ }
+
+//---------------------------------------------------------
+// mapValueToText
+//---------------------------------------------------------
+
+QString SpinBoxFP::mapValueToText(int value)
+ {
+ if (_precision) {
+ QString s;
+ int div = int(exp10(_precision));
+// printf("val %d, prec %d, div %d\n", value, _precision, div);
+ s.sprintf("%d.%0*d", value/div, _precision, value%div);
+ return s;
+ }
+ return textFromValue(value); // ddskrjo
+ }
+
+//---------------------------------------------------------
+// mapTextToValue
+//---------------------------------------------------------
+/* ddskrjo
+int SpinBoxFP::mapTextToValue(bool* ok)
+ {
+ QString qs = cleanText();
+ if (_precision) {
+ const char* s = qs.latin1();
+ int a, b;
+ int n = sscanf(s, "%d.%d", &a, &b);
+ if (n != 2) {
+ *ok = false;
+ return 0;
+ }
+ int div = int(exp10(_precision));
+ return a * div + b;
+ }
+ return QSpinBox::mapTextToValue(ok);
+ }
+
+*/
diff --git a/muse2/muse/widgets/spinboxFP.h b/muse2/muse/widgets/spinboxFP.h
new file mode 100644
index 00000000..760a7d06
--- /dev/null
+++ b/muse2/muse/widgets/spinboxFP.h
@@ -0,0 +1,35 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: spinboxFP.h,v 1.1.1.1.2.1 2008/05/21 00:28:54 terminator356 Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __SPINBOXFP_H__
+#define __SPINBOXFP_H__
+
+#include <qspinbox.h>
+
+//---------------------------------------------------------
+// SpinBoxFP
+//---------------------------------------------------------
+
+class SpinBoxFP : public QSpinBox {
+ Q_OBJECT
+ Q_PROPERTY( int precision READ precision WRITE setPrecision )
+
+ int _precision;
+
+ protected:
+ virtual QString mapValueToText(int value);
+ //virtual int mapTextToValue(bool* ok);
+
+ public:
+ SpinBoxFP(QWidget* parent=0, const char* name = 0);
+ SpinBoxFP(int minValue, int maxValue, int step = 1, QWidget* parent=0, const char* name = 0);
+ void setPrecision(int val);
+ int precision() const { return _precision; }
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/splitter.cpp b/muse2/muse/widgets/splitter.cpp
new file mode 100644
index 00000000..d1f9cfd9
--- /dev/null
+++ b/muse2/muse/widgets/splitter.cpp
@@ -0,0 +1,77 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: splitter.cpp,v 1.1.1.1 2003/10/27 18:54:59 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "splitter.h"
+#include "xml.h"
+#include <qstringlist.h>
+//Added by qt3to4:
+#include <Q3ValueList>
+
+//---------------------------------------------------------
+// Splitter
+//---------------------------------------------------------
+
+Splitter::Splitter(Qt::Orientation o, QWidget* parent, const char* name)
+ : QSplitter(o, parent, name)
+ {
+ setOpaqueResize(true);
+ }
+
+//---------------------------------------------------------
+// saveConfiguration
+//---------------------------------------------------------
+
+void Splitter::writeStatus(int level, Xml& xml)
+ {
+ Q3ValueList<int> vl = sizes();
+ //xml.nput(level++, "<%s>", name());
+ xml.nput(level++, "<%s>", Xml::xmlString(name()).latin1());
+ Q3ValueListIterator<int> ivl = vl.begin();
+ for (; ivl != vl.end(); ++ivl) {
+ xml.nput("%d ", *ivl);
+ }
+ //xml.nput("</%s>\n", name());
+ xml.nput("</%s>\n", Xml::xmlString(name()).latin1());
+ }
+
+//---------------------------------------------------------
+// loadConfiguration
+//---------------------------------------------------------
+
+void Splitter::readStatus(Xml& xml)
+ {
+ Q3ValueList<int> vl;
+
+ for (;;) {
+ Xml::Token token = xml.parse();
+ const QString& tag = xml.s1();
+ switch (token) {
+ case Xml::Error:
+ case Xml::End:
+ return;
+ case Xml::TagStart:
+ xml.unknown("Splitter");
+ break;
+ case Xml::Text:
+ {
+ QStringList sl = QStringList::split(' ', tag);
+ for (QStringList::Iterator it = sl.begin(); it != sl.end(); ++it) {
+ int val = (*it).toInt();
+ vl.append(val);
+ }
+ }
+ break;
+ case Xml::TagEnd:
+ if (tag == name()) {
+ setSizes(vl);
+ return;
+ }
+ default:
+ break;
+ }
+ }
+ }
diff --git a/muse2/muse/widgets/splitter.h b/muse2/muse/widgets/splitter.h
new file mode 100644
index 00000000..8be4da5b
--- /dev/null
+++ b/muse2/muse/widgets/splitter.h
@@ -0,0 +1,29 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: splitter.h,v 1.1.1.1 2003/10/27 18:54:51 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __SPLITTER_H__
+#define __SPLITTER_H__
+
+#include <qsplitter.h>
+
+class Xml;
+
+//---------------------------------------------------------
+// Splitter
+//---------------------------------------------------------
+
+class Splitter : public QSplitter {
+ Q_OBJECT
+
+ public:
+ Splitter(Qt::Orientation o, QWidget* parent, const char* name);
+ void writeStatus(int level, Xml&);
+ void readStatus(Xml&);
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/swidget.cpp b/muse2/muse/widgets/swidget.cpp
new file mode 100644
index 00000000..29cece1e
--- /dev/null
+++ b/muse2/muse/widgets/swidget.cpp
@@ -0,0 +1,20 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: swidget.cpp,v 1.1.1.1 2003/10/27 18:54:27 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "swidget.h"
+//Added by qt3to4:
+#include <QResizeEvent>
+
+//---------------------------------------------------------
+// resizeEvent
+//---------------------------------------------------------
+
+void SWidget::resizeEvent(QResizeEvent* ev)
+ {
+ emit heightChanged(ev->size().height());
+ }
+
diff --git a/muse2/muse/widgets/swidget.h b/muse2/muse/widgets/swidget.h
new file mode 100644
index 00000000..806fe538
--- /dev/null
+++ b/muse2/muse/widgets/swidget.h
@@ -0,0 +1,33 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: swidget.h,v 1.1.1.1 2003/10/27 18:54:49 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __SWIDGET_H__
+#define __SWIDGET_H__
+
+#include <qwidget.h>
+//Added by qt3to4:
+#include <QResizeEvent>
+
+//---------------------------------------------------------
+// SWidget
+// a simple widget which emits a heighChanged signal
+// on received ResizeEventīs
+//---------------------------------------------------------
+
+class SWidget : public QWidget {
+ virtual void resizeEvent(QResizeEvent*);
+ Q_OBJECT
+
+ signals:
+ void heightChanged(int);
+
+ public:
+ SWidget(QWidget* parent) : QWidget(parent) {}
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/synthconfigbase.ui b/muse2/muse/widgets/synthconfigbase.ui
new file mode 100644
index 00000000..761c8fb8
--- /dev/null
+++ b/muse2/muse/widgets/synthconfigbase.ui
@@ -0,0 +1,247 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>SynthConfigBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>SynthConfigBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>630</width>
+ <height>492</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Synth Configuration</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox" row="1" column="1">
+ <property name="name">
+ <cstring>GroupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>Instances</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QListView" row="0" column="0">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Midi Port</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>instanceList</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>removeInstance</cstring>
+ </property>
+ <property name="text">
+ <string>Remove Instance</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>113</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>groupBox10</cstring>
+ </property>
+ <property name="title">
+ <string>Midi connections</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QListView">
+ <property name="name">
+ <cstring>mdevView</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>GroupBox2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>GroupBoxPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="title">
+ <string>Soft Synthesizer</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="1" column="0">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>addInstance</cstring>
+ </property>
+ <property name="text">
+ <string>Add Instance</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QListView" row="0" column="0">
+ <column>
+ <property name="text">
+ <string>File</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Inst</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Version</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Description</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>synthList</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>list of available software synthesizers</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/synthwizardbase.h b/muse2/muse/widgets/synthwizardbase.h
new file mode 100644
index 00000000..61d3985c
--- /dev/null
+++ b/muse2/muse/widgets/synthwizardbase.h
@@ -0,0 +1,58 @@
+/****************************************************************************
+** Form interface generated from reading ui file 'synthwizardbase.ui'
+**
+** Created: Wed Nov 12 10:38:24 2003
+** by: The User Interface Compiler ($Id: synthwizardbase.h,v 1.5 2003/11/12 18:55:06 wschweer Exp $)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#ifndef SYNTHCONFIGBASE_H
+#define SYNTHCONFIGBASE_H
+
+#include <qvariant.h>
+#include <q3wizard.h>
+//Added by qt3to4:
+#include <Q3VBoxLayout>
+#include <Q3GridLayout>
+#include <Q3HBoxLayout>
+
+class Q3VBoxLayout;
+class Q3HBoxLayout;
+class Q3GridLayout;
+class QWidget;
+class Q3GroupBox;
+class Q3ListView;
+class Q3ListViewItem;
+class QPushButton;
+
+class SynthConfigBase : public Q3Wizard
+{
+ Q_OBJECT
+
+public:
+ SynthConfigBase( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0 );
+ ~SynthConfigBase();
+
+ QWidget* WizardPage;
+ Q3GroupBox* GroupBox2;
+ Q3ListView* synthList;
+ QPushButton* addInstance;
+ Q3GroupBox* GroupBox3;
+ Q3ListView* instanceList;
+ QPushButton* removeInstance;
+ QWidget* WizardPage_2;
+
+protected:
+ Q3VBoxLayout* WizardPageLayout;
+ Q3VBoxLayout* GroupBox2Layout;
+ Q3HBoxLayout* Layout1;
+ Q3VBoxLayout* GroupBox3Layout;
+ Q3HBoxLayout* Layout3;
+
+protected slots:
+ virtual void languageChange();
+
+};
+
+#endif // SYNTHCONFIGBASE_H
diff --git a/muse2/muse/widgets/tb1.cpp b/muse2/muse/widgets/tb1.cpp
new file mode 100644
index 00000000..8aa6225f
--- /dev/null
+++ b/muse2/muse/widgets/tb1.cpp
@@ -0,0 +1,225 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: tb1.cpp,v 1.3.2.2 2007/01/04 00:35:17 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <assert.h>
+#include <stdio.h>
+#include <values.h>
+
+#include <qlabel.h>
+#include <qlayout.h>
+#include <q3listbox.h>
+#include <qtoolbutton.h>
+
+#include "config.h"
+#include "lcombo.h"
+#include "tb1.h"
+#include "globals.h"
+#include "poslabel.h"
+#include "pitchlabel.h"
+
+static int rasterTable[] = {
+ //------ 8 4 2
+ 1, 4, 8, 16, 32, 64, 128, 256, 512, 1024,
+ 1, 6, 12, 24, 48, 96, 192, 384, 768, 1536,
+ 1, 9, 18, 36, 72, 144, 288, 576, 1152, 2304
+ };
+
+static const char* rasterStrings[] = {
+ QT_TR_NOOP("Off"), "2pp", "5pp", "64T", "32T", "16T", "8T", "4T", "2T", "1T",
+ QT_TR_NOOP("Off"), "3pp", "6pp", "64", "32", "16", "8", "4", "2", "1",
+ QT_TR_NOOP("Off"), "4pp", "7pp", "64.", "32.", "16.", "8.", "4.", "2.", "1."
+ };
+
+static int quantTable[] = {
+ 1, 16, 32, 64, 128, 256, 512, 1024,
+ 1, 24, 48, 96, 192, 384, 768, 1536,
+ 1, 36, 72, 144, 288, 576, 1152, 2304
+ };
+
+static const char* quantStrings[] = {
+ QT_TR_NOOP("Off"), "64T", "32T", "16T", "8T", "4T", "2T", "1T",
+ QT_TR_NOOP("Off"), "64", "32", "16", "8", "4", "2", "1",
+ QT_TR_NOOP("Off"), "64.", "32.", "16.", "8.", "4.", "2.", "1."
+ };
+
+//---------------------------------------------------------
+// genToolbar
+// solo time pitch raster quant
+//---------------------------------------------------------
+
+Toolbar1::Toolbar1(Q3MainWindow* parent, int r, int q, bool sp)
+ : Q3ToolBar(QString("Qant'n'Snap-tools"), parent)
+ {
+ showPitch = sp;
+ setHorizontalStretchable(false);
+
+ solo = new QToolButton(this);
+ solo->setText(tr("Solo"));
+ solo->setToggleButton(true);
+
+ //---------------------------------------------------
+ // Cursor Position
+ //---------------------------------------------------
+
+ QLabel* label = new QLabel(tr("Cursor"), this, "Cursor");
+ label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
+ label->setIndent(3);
+ pos = new PosLabel(this, "pos");
+ if (showPitch) {
+ pitch = new PitchLabel(this);
+ pitch->setEnabled(false);
+ }
+
+ //---------------------------------------------------
+ // Raster, Quant.
+ //---------------------------------------------------
+
+ raster = new LabelCombo(tr("Snap"), this);
+ quant = new LabelCombo(tr("Quantize"), this);
+
+ Q3ListBox* rlist = new Q3ListBox(this);
+ Q3ListBox* qlist = new Q3ListBox(this);
+ rlist->setMinimumWidth(95);
+ qlist->setMinimumWidth(95);
+ //raster->setListBox(rlist); ddskrjo
+ //quant->setListBox(qlist); ddskrjo
+ rlist->setColumnMode(3);
+ qlist->setColumnMode(3);
+ for (int i = 0; i < 30; i++)
+ rlist->insertItem(tr(rasterStrings[i]), i);
+ for (int i = 0; i < 24; i++)
+ qlist->insertItem(tr(quantStrings[i]), i);
+ setRaster(r);
+ setQuant(q);
+
+ //---------------------------------------------------
+ // To Menu
+ //---------------------------------------------------
+
+ LabelCombo* to = new LabelCombo(tr("To"), this);
+ Q3ListBox* toList = new Q3ListBox(this);
+ //to->setListBox(toList); ddskrjo
+ toList->insertItem(tr("All Events"), 0);
+ toList->insertItem(tr("Looped Ev."), CMD_RANGE_LOOP);
+ toList->insertItem(tr("Selected Ev."), CMD_RANGE_SELECTED);
+ toList->insertItem(tr("Looped+Sel."), CMD_RANGE_LOOP | CMD_RANGE_SELECTED);
+
+ connect(raster, SIGNAL(activated(int)), SLOT(_rasterChanged(int)));
+ connect(quant, SIGNAL(activated(int)), SLOT(_quantChanged(int)));
+ connect(to, SIGNAL(activated(int)), SIGNAL(toChanged(int)));
+ connect(solo, SIGNAL(toggled(bool)), SIGNAL(soloChanged(bool)));
+ pos->setEnabled(false);
+ }
+
+//---------------------------------------------------------
+// rasterChanged
+//---------------------------------------------------------
+
+void Toolbar1::_rasterChanged(int index)
+ {
+ emit rasterChanged(rasterTable[index]);
+ }
+
+//---------------------------------------------------------
+// quantChanged
+//---------------------------------------------------------
+
+void Toolbar1::_quantChanged(int index)
+ {
+ emit quantChanged(quantTable[index]);
+ }
+
+//---------------------------------------------------------
+// setPitch
+//---------------------------------------------------------
+
+void Toolbar1::setPitch(int val)
+ {
+ if (showPitch) {
+ pitch->setEnabled(val != -1);
+ pitch->setPitch(val);
+ }
+ }
+
+void Toolbar1::setInt(int val)
+ {
+ if (showPitch) {
+ pitch->setEnabled(val != -1);
+ pitch->setInt(val);
+ }
+ }
+
+//---------------------------------------------------------
+// setTime
+//---------------------------------------------------------
+
+void Toolbar1::setTime(unsigned val)
+ {
+ if (!pos->isVisible()) {
+ printf("NOT visible\n");
+ return;
+ }
+ if (val == MAXINT)
+ pos->setEnabled(false);
+ else {
+ pos->setEnabled(true);
+ pos->setValue(val);
+ }
+ }
+
+//---------------------------------------------------------
+// setRaster
+//---------------------------------------------------------
+
+void Toolbar1::setRaster(int val)
+ {
+ for (unsigned i = 0; i < sizeof(rasterTable)/sizeof(*rasterTable); i++) {
+ if (val == rasterTable[i]) {
+ raster->setCurrentItem(i);
+ return;
+ }
+ }
+ printf("setRaster(%d) not defined\n", val);
+ raster->setCurrentItem(0);
+ }
+
+//---------------------------------------------------------
+// setQuant
+//---------------------------------------------------------
+
+void Toolbar1::setQuant(int val)
+ {
+ for (unsigned i = 0; i < sizeof(quantTable)/sizeof(*quantTable); i++) {
+ if (val == quantTable[i]) {
+ quant->setCurrentItem(i);
+ return;
+ }
+ }
+ printf("setQuant(%d) not defined\n", val);
+ quant->setCurrentItem(0);
+ }
+
+//---------------------------------------------------------
+// setSolo
+//---------------------------------------------------------
+
+void Toolbar1::setSolo(bool flag)
+ {
+ solo->blockSignals(true);
+ solo->setOn(flag);
+ solo->blockSignals(false);
+ }
+
+//---------------------------------------------------------
+// setPitchMode
+//---------------------------------------------------------
+
+void Toolbar1::setPitchMode(bool /*flag*/)
+ {
+// pitch->setPitchMode(flag);
+ }
+
diff --git a/muse2/muse/widgets/tb1.h b/muse2/muse/widgets/tb1.h
new file mode 100644
index 00000000..b6d7860a
--- /dev/null
+++ b/muse2/muse/widgets/tb1.h
@@ -0,0 +1,57 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: tb1.h,v 1.2 2004/01/11 18:55:37 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __TB1_H__
+#define __TB1_H__
+
+#include <qwidget.h>
+#include <q3toolbar.h>
+
+class PosLabel;
+class PitchLabel;
+class Track;
+class LabelCombo;
+class QToolButton;
+
+//---------------------------------------------------------
+// Toolbar1
+//---------------------------------------------------------
+
+class Toolbar1 : public Q3ToolBar {
+ QToolButton* solo;
+ PosLabel* pos;
+ PitchLabel* pitch;
+ LabelCombo* quant;
+ LabelCombo* raster;
+ bool showPitch;
+ Q_OBJECT
+
+ private slots:
+ void _rasterChanged(int);
+ void _quantChanged(int);
+
+ public slots:
+ void setTime(unsigned);
+ void setPitch(int);
+ void setInt(int);
+ void setRaster(int);
+ void setQuant(int);
+
+ signals:
+ void rasterChanged(int);
+ void quantChanged(int);
+ void soloChanged(bool);
+ void toChanged(int);
+
+ public:
+ Toolbar1(Q3MainWindow* parent, int r=96,
+ int q=96, bool showPitch=true);
+ void setSolo(bool val);
+ void setPitchMode(bool flag);
+ };
+
+#endif
diff --git a/muse2/muse/widgets/tempolabel.cpp b/muse2/muse/widgets/tempolabel.cpp
new file mode 100644
index 00000000..35f75b09
--- /dev/null
+++ b/muse2/muse/widgets/tempolabel.cpp
@@ -0,0 +1,126 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: tempolabel.cpp,v 1.1.1.1 2003/10/27 18:54:29 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <qapplication.h>
+#include <qstyle.h>
+#include <qvalidator.h>
+//Added by qt3to4:
+#include <QLabel>
+#include "tempolabel.h"
+
+//---------------------------------------------------------
+// TempoLabel
+//---------------------------------------------------------
+
+TempoLabel::TempoLabel(QWidget* parent, const char* name)
+ : QLabel(parent, name)
+ {
+ setFrameStyle(WinPanel | Sunken);
+ setLineWidth(2);
+ setMidLineWidth(3);
+ _value = 1.0;
+ setValue(0.0);
+ setIndent(3);
+ setMinimumSize(sizeHint());
+ }
+
+//---------------------------------------------------------
+// setVal
+//---------------------------------------------------------
+
+void TempoLabel::setValue(int val)
+ {
+ setValue(double(val/1000.0));
+ }
+
+void TempoLabel::setValue(double val)
+ {
+ if (val == _value)
+ return;
+ _value = val;
+ QString s = QString("%1").arg(val, 3, 'f', 2);
+ setText(s);
+ }
+
+//---------------------------------------------------------
+// sizeHint
+//---------------------------------------------------------
+
+QSize TempoLabel::sizeHint() const
+ {
+ QFontMetrics fm(font());
+ int fw = 4;
+ int h = fm.height() + fw * 2;
+ int w = 6 + fm.width(QString("000.00")) + fw * 2; // 6=indent
+ return QSize(w, h).expandedTo(QApplication::globalStrut());
+ }
+
+//---------------------------------------------------------
+// TempoSpinBox
+//---------------------------------------------------------
+
+TempoEdit::TempoEdit(QWidget* parent, const char* name)
+ : QSpinBox(parent, name)
+ {
+ setLineStep(100);
+ setMaxValue(60000);
+ setMinValue(3000);
+ //setValidator(new QDoubleValidator(this)); ddskrjo
+ connect(this, SIGNAL(valueChanged(int)), SLOT(tempoChanged(int)));
+ }
+
+//---------------------------------------------------------
+// sizeHint
+//---------------------------------------------------------
+
+QSize TempoEdit::sizeHint() const
+ {
+ QFontMetrics fm(font());
+ int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth,0, this); // ddskrjo
+ int h = fm.height() + fw * 2;
+ int w = 2 + fm.width(QString("000.00")) + fw * 4 + 30;
+ return QSize(w, h).expandedTo(QApplication::globalStrut());
+ }
+
+//---------------------------------------------------------
+// mapValueToText
+//---------------------------------------------------------
+
+QString TempoEdit::mapValueToText(int val)
+ {
+ double v = val / 100.0;
+ return QString("%1").arg(v, 3, 'f', 2);
+ }
+
+//---------------------------------------------------------
+// mapTextToValue
+//---------------------------------------------------------
+
+int TempoEdit::mapTextToValue(bool* ok)
+ {
+ double v = text().toDouble(ok);
+ return int(v * 100);
+ }
+
+//---------------------------------------------------------
+// tempoChanged
+//---------------------------------------------------------
+
+void TempoEdit::tempoChanged(int val)
+ {
+ emit valueChanged(double(val)/100.0);
+ }
+
+//---------------------------------------------------------
+// setValue
+//---------------------------------------------------------
+
+void TempoEdit::setValue(double val)
+ {
+ QSpinBox::setValue(int(val*100));
+ }
+
diff --git a/muse2/muse/widgets/tempolabel.h b/muse2/muse/widgets/tempolabel.h
new file mode 100644
index 00000000..587938d7
--- /dev/null
+++ b/muse2/muse/widgets/tempolabel.h
@@ -0,0 +1,60 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: tempolabel.h,v 1.1.1.1 2003/10/27 18:55:05 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __TEMPOLABEL_H__
+#define __TEMPOLABEL_H__
+
+#include <qlabel.h>
+#include <qspinbox.h>
+
+//---------------------------------------------------------
+// TempoLabel
+//---------------------------------------------------------
+
+class TempoLabel : public QLabel {
+ double _value;
+
+ Q_OBJECT
+
+ protected:
+ QSize sizeHint() const;
+
+ public slots:
+ void setValue(int);
+ void setValue(double);
+
+ public:
+ TempoLabel(QWidget*, const char* name = 0);
+ };
+
+//---------------------------------------------------------
+// TempoEdit
+//---------------------------------------------------------
+
+class TempoEdit : public QSpinBox {
+ Q_OBJECT
+
+ protected:
+ QSize sizeHint() const;
+ virtual QString mapValueToText(int);
+ virtual int mapTextToValue(bool*);
+
+ private slots:
+ void tempoChanged(int);
+
+ public slots:
+ void setValue(double);
+
+ signals:
+ void valueChanged(double);
+
+ public:
+ TempoEdit(QWidget*, const char* name = 0);
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/tools.cpp b/muse2/muse/widgets/tools.cpp
new file mode 100644
index 00000000..7816f632
--- /dev/null
+++ b/muse2/muse/widgets/tools.cpp
@@ -0,0 +1,139 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: tools.cpp,v 1.2 2004/04/28 21:56:13 spamatica Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "tools.h"
+#include <qpixmap.h>
+#include <q3buttongroup.h>
+#include <qtoolbutton.h>
+#include <qtooltip.h>
+#include <q3whatsthis.h>
+#include <q3mainwindow.h>
+//Added by qt3to4:
+#include <Q3ActionGroup>
+
+#include "icons.h"
+#include "action.h"
+
+const char* infoPointer = QT_TR_NOOP("select Pointer Tool:\n"
+ "with the pointer tool you can:\n"
+ " select parts\n"
+ " move parts\n"
+ " copy parts");
+const char* infoPencil = QT_TR_NOOP("select Pencil Tool:\n"
+ "with the pencil tool you can:\n"
+ " create new parts\n"
+ " modify length of parts");
+const char* infoDel = QT_TR_NOOP("select Delete Tool:\n"
+ "with the delete tool you can delete parts");
+const char* infoCut = QT_TR_NOOP("select Cut Tool:\n"
+ "with the cut tool you can split a part");
+const char* infoGlue = QT_TR_NOOP("select Glue Tool:\n"
+ "with the glue tool you can glue two parts");
+const char* infoScore = QT_TR_NOOP("select Score Tool:\n");
+const char* infoQuant = QT_TR_NOOP("select Quantize Tool:\n"
+ "insert display quantize event");
+const char* infoDraw = QT_TR_NOOP("select Drawing Tool");
+const char* infoMute = QT_TR_NOOP("select Muting Tool:\n"
+ "click on part to mute/unmute");
+
+ToolB toolList[] = {
+ {&pointerIcon, QT_TR_NOOP("pointer"), infoPointer },
+ {&pencilIcon, QT_TR_NOOP("pencil"), infoPencil },
+ {&deleteIcon, QT_TR_NOOP("eraser"), infoDel },
+ {&cutIcon, QT_TR_NOOP("cutter"), infoCut },
+ {&note1Icon, QT_TR_NOOP("score"), infoScore },
+ {&glueIcon, QT_TR_NOOP("glue"), infoGlue },
+ {&quantIcon, QT_TR_NOOP("quantize"), infoQuant },
+ {&drawIcon, QT_TR_NOOP("draw"), infoDraw },
+ {&editmuteIcon, QT_TR_NOOP("mute parts"), infoMute },
+ };
+
+//---------------------------------------------------------
+// EditToolBar
+//---------------------------------------------------------
+
+EditToolBar::EditToolBar(Q3MainWindow* parent, int tools, const char*)
+ : Q3ToolBar(tr("Edit Tools"), parent)
+ {
+ Q3ActionGroup* action = new Q3ActionGroup(parent, "editaction", true);
+
+ nactions = 0;
+ for (unsigned i = 0; i < sizeof(toolList)/sizeof(*toolList); ++i) {
+ if ((tools & (1 << i))==0)
+ continue;
+ ++nactions;
+ }
+ actions = new Action*[nactions];
+ bool first = true;
+ int n = 0;
+ for (unsigned i = 0; i < sizeof(toolList)/sizeof(*toolList); ++i) {
+ if ((tools & (1 << i))==0)
+ continue;
+ ToolB* t = &toolList[i];
+
+ Action* a = new Action(action, 1<<i, t->tip, true);
+ actions[n] = a;
+ a->setIconSet(QIcon(**(t->icon)));
+ a->setToolTip(tr(t->tip));
+ a->setWhatsThis(tr(t->ltip));
+ if (first) {
+ a->setOn(true);
+ first = false;
+ }
+ ++n;
+ }
+ action->addTo(this);
+ connect(action, SIGNAL(selected(Q3Action*)), SLOT(toolChanged(QAction*)));
+ }
+
+//---------------------------------------------------------
+// toolChanged
+//---------------------------------------------------------
+
+void EditToolBar::toolChanged(Q3Action* action)
+ {
+ emit toolChanged(((Action*)action)->id());
+ }
+
+//---------------------------------------------------------
+// ~EditToolBar
+//---------------------------------------------------------
+
+EditToolBar::~EditToolBar()
+ {
+ delete actions;
+ }
+
+//---------------------------------------------------------
+// set
+//---------------------------------------------------------
+
+void EditToolBar::set(int id)
+ {
+ for (int i = 0; i < nactions; ++i) {
+ Action* action = actions[i];
+ if (action->id() == id) {
+ action->setOn(true);
+ return;
+ }
+ }
+ }
+
+//---------------------------------------------------------
+// curTool
+//---------------------------------------------------------
+
+int EditToolBar::curTool()
+ {
+ for (int i = 0; i < nactions; ++i) {
+ Action* action = actions[i];
+ if (action->isOn())
+ return action->id();
+ }
+ return -1;
+ }
+
diff --git a/muse2/muse/widgets/tools.h b/muse2/muse/widgets/tools.h
new file mode 100644
index 00000000..efe5d57c
--- /dev/null
+++ b/muse2/muse/widgets/tools.h
@@ -0,0 +1,57 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: tools.h,v 1.1.1.1 2003/10/27 18:54:49 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __TOOLS_H__
+#define __TOOLS_H__
+
+#include <q3toolbar.h>
+//Added by qt3to4:
+#include <QPixmap>
+
+class Q3Action;
+class Action;
+class Q3MainWindow;
+
+enum Tool { PointerTool=1, PencilTool=2, RubberTool=4, CutTool=8,
+ ScoreTool=16, GlueTool=32, QuantTool=64, DrawTool=128, MuteTool=256};
+
+const int arrangerTools = PointerTool | PencilTool | RubberTool | CutTool | GlueTool | MuteTool;
+
+struct ToolB {
+ QPixmap** icon;
+ const char* tip;
+ const char* ltip;
+ };
+
+extern ToolB toolList[];
+
+//---------------------------------------------------------
+// EditToolBar
+//---------------------------------------------------------
+
+class EditToolBar : public Q3ToolBar {
+ Q_OBJECT
+ Action** actions;
+ int nactions;
+
+ private slots:
+ void toolChanged(Q3Action* action);
+
+ signals:
+ void toolChanged(int);
+
+ public slots:
+ void set(int id);
+
+ public:
+ EditToolBar(Q3MainWindow*, int, const char* name = 0);
+ ~EditToolBar();
+ int curTool();
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/transformbase.ui b/muse2/muse/widgets/transformbase.ui
new file mode 100644
index 00000000..06aea442
--- /dev/null
+++ b/muse2/muse/widgets/transformbase.ui
@@ -0,0 +1,1146 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>MidiTransformDialogBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>MidiTransformDialogBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>636</width>
+ <height>521</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Midi Transformator</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonNew</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;New</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonDelete</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Delete</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonApply</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Apply</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0" rowspan="3" colspan="1">
+ <property name="name">
+ <cstring>Layout4</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>PresetList</string>
+ </property>
+ </widget>
+ <widget class="QListBox">
+ <property name="name">
+ <cstring>presetList</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="1" column="1">
+ <property name="name">
+ <cstring>GroupBox5</cstring>
+ </property>
+ <property name="title">
+ <string>Processing</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Event Type</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="0">
+ <item>
+ <property name="text">
+ <string>Keep</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Fix</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>procEventOp</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="2" column="0">
+ <item>
+ <property name="text">
+ <string>Note</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Poly Pressure</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Control Change</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Aftertouch</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Pitch Bend</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>NRPN</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>RPN</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>procType</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>Keep</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Plus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Minus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Multiply</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Divide</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Fix</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Value 2</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Invert</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>ScaleMap</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Flip</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Dyn</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Random</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>procVal1Op</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Value 1</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>TextLabel7</cstring>
+ </property>
+ <property name="text">
+ <string>Value 2</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="3">
+ <property name="name">
+ <cstring>TextLabel10_2</cstring>
+ </property>
+ <property name="text">
+ <string>Length</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="4">
+ <property name="name">
+ <cstring>TextLabel12</cstring>
+ </property>
+ <property name="text">
+ <string>Position</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="2">
+ <item>
+ <property name="text">
+ <string>Keep</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Plus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Minus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Multiply</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Divide</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Fix</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Value 1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Invert</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Dyn</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Random</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>procVal2Op</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="3">
+ <item>
+ <property name="text">
+ <string>Keep</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Plus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Minus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Multiply</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Divide</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Fix</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>procLenOp</cstring>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="1">
+ <property name="name">
+ <cstring>procVal1b</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="2">
+ <property name="name">
+ <cstring>procVal2b</cstring>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ </widget>
+ <widget class="SpinBoxFP" row="2" column="1">
+ <property name="name">
+ <cstring>procVal1a</cstring>
+ </property>
+ <property name="maxValue" stdset="0">
+ <number>99999999</number>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="4">
+ <item>
+ <property name="text">
+ <string>Keep</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Plus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Minus</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Multiply</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Divide</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>procPosOp</cstring>
+ </property>
+ </widget>
+ <widget class="SpinBoxFP" row="2" column="2">
+ <property name="name">
+ <cstring>procVal2a</cstring>
+ </property>
+ <property name="maxValue" stdset="0">
+ <number>99999999</number>
+ </property>
+ </widget>
+ <widget class="SpinBoxFP" row="2" column="3">
+ <property name="name">
+ <cstring>procLenA</cstring>
+ </property>
+ <property name="maxValue" stdset="0">
+ <number>99999999</number>
+ </property>
+ </widget>
+ <widget class="SpinBoxFP" row="2" column="4">
+ <property name="name">
+ <cstring>procPosA</cstring>
+ </property>
+ <property name="maxValue" stdset="0">
+ <number>99999999</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="0" column="1">
+ <property name="name">
+ <cstring>GroupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>Filter</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QComboBox" row="1" column="0">
+ <item>
+ <property name="text">
+ <string>All</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Equal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Unequal</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>selEventOp</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="2" column="0">
+ <item>
+ <property name="text">
+ <string>Note</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Poly Pressure</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Control Change</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Aftertouch</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Pitch Bend</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>NRPN</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>RPN</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>selType</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Value 2</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Value 1</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Event Type</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>Ignore</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Equal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Unequal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Higher</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Lower</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Inside</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Outside</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>selVal1Op</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="3">
+ <property name="name">
+ <cstring>TextLabel10</cstring>
+ </property>
+ <property name="text">
+ <string>Length</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="4">
+ <property name="name">
+ <cstring>TextLabel11</cstring>
+ </property>
+ <property name="text">
+ <string>Bar Range</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="2">
+ <item>
+ <property name="text">
+ <string>Ignore</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Equal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Unequal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Higher</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Lower</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Inside</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Outside</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>selVal2Op</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="3">
+ <item>
+ <property name="text">
+ <string>Ignore</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Equal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Unequal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Higher</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Lower</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Inside</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Outside</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>selLenOp</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="4">
+ <item>
+ <property name="text">
+ <string>Ignore</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Equal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Unequal</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Higher</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Lower</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Inside</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Outside</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>selRangeOp</cstring>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="1">
+ <property name="name">
+ <cstring>selVal1b</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="3">
+ <property name="name">
+ <cstring>selLenA</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="3">
+ <property name="name">
+ <cstring>selLenB</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="2">
+ <property name="name">
+ <cstring>selVal2a</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="2">
+ <property name="name">
+ <cstring>selVal2b</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>selVal1a</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ </widget>
+ <widget class="SpinBoxFP" row="3" column="4">
+ <property name="name">
+ <cstring>selBarB</cstring>
+ </property>
+ <property name="precision" stdset="0">
+ <number>3</number>
+ </property>
+ </widget>
+ <widget class="SpinBoxFP" row="2" column="4">
+ <property name="name">
+ <cstring>selBarA</cstring>
+ </property>
+ <property name="minValue" stdset="0">
+ <number>1000</number>
+ </property>
+ <property name="precision" stdset="0">
+ <number>3</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="1">
+ <property name="name">
+ <cstring>Layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox6_2</cstring>
+ </property>
+ <property name="title">
+ <string>Preset</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout5_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel13_2</cstring>
+ </property>
+ <property name="text">
+ <string>Name:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>nameEntry</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel14_2</cstring>
+ </property>
+ <property name="text">
+ <string>Comment:</string>
+ </property>
+ </widget>
+ <widget class="QMultiLineEdit">
+ <property name="name">
+ <cstring>commentEntry</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox5_2</cstring>
+ </property>
+ <property name="title">
+ <string>Range</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>processAll</cstring>
+ </property>
+ <property name="text">
+ <string>process all events</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>selectedTracks</cstring>
+ </property>
+ <property name="text">
+ <string>selected tracks</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>insideLoop</cstring>
+ </property>
+ <property name="text">
+ <string>inside loop</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox7_2</cstring>
+ </property>
+ <property name="title">
+ <string>Function</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Select</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Quantize</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Delete</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Transform</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Insert</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Copy</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Extract</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>funcOp</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel9_2</cstring>
+ </property>
+ <property name="text">
+ <string>Quantize Value</string>
+ </property>
+ </widget>
+ <widget class="ComboQuant">
+ <property name="name">
+ <cstring>funcQuantVal</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>SpinBoxFP</class>
+ <header location="global">spinboxFP.h</header>
+ <sizehint>
+ <width>50</width>
+ <height>20</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ <signal>valueChanged(int value)</signal>
+ <signal>valueChanged(const QString&amp;)</signal>
+ <slot access="public" specifier="">setValue(int)</slot>
+ <slot access="public" specifier="">setPrefix(const QString&amp;)</slot>
+ <slot access="public" specifier="">setSuffix(const QString&amp;)</slot>
+ <slot access="public" specifier="">stepUp()</slot>
+ <slot access="public" specifier="">stepDown()</slot>
+ <property type="Int">precision</property>
+ <property type="Int">minValue</property>
+ <property type="Int">maxValue</property>
+ </customwidget>
+ <customwidget>
+ <class>ComboQuant</class>
+ <header location="local">comboQuant.h</header>
+ <sizehint>
+ <width>50</width>
+ <height>20</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ <signal>valueChanged(int)</signal>
+ <slot access="public" specifier="">setValue(int)</slot>
+ </customwidget>
+</customwidgets>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>MidiTransformDialogBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>MidiTransformDialogBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>selEventOp</tabstop>
+ <tabstop>selType</tabstop>
+ <tabstop>selVal1Op</tabstop>
+ <tabstop>selVal1a</tabstop>
+ <tabstop>selVal1b</tabstop>
+ <tabstop>selVal2Op</tabstop>
+ <tabstop>selVal2a</tabstop>
+ <tabstop>selVal2b</tabstop>
+ <tabstop>selLenOp</tabstop>
+ <tabstop>selLenA</tabstop>
+ <tabstop>selLenB</tabstop>
+ <tabstop>selRangeOp</tabstop>
+ <tabstop>procEventOp</tabstop>
+ <tabstop>procType</tabstop>
+ <tabstop>procVal1Op</tabstop>
+ <tabstop>procVal1b</tabstop>
+ <tabstop>procVal2Op</tabstop>
+ <tabstop>procVal2b</tabstop>
+ <tabstop>procLenOp</tabstop>
+ <tabstop>procPosOp</tabstop>
+ <tabstop>nameEntry</tabstop>
+ <tabstop>commentEntry</tabstop>
+ <tabstop>processAll</tabstop>
+ <tabstop>selectedTracks</tabstop>
+ <tabstop>insideLoop</tabstop>
+ <tabstop>funcOp</tabstop>
+ <tabstop>presetList</tabstop>
+ <tabstop>buttonNew</tabstop>
+ <tabstop>buttonDelete</tabstop>
+ <tabstop>buttonApply</tabstop>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/transposebase.ui b/muse2/muse/widgets/transposebase.ui
new file mode 100644
index 00000000..caca7a35
--- /dev/null
+++ b/muse2/muse/widgets/transposebase.ui
@@ -0,0 +1,252 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>TransposeDialogBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>TransposeDialogBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>289</width>
+ <height>317</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Midi Transpose</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Value</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>delta</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minValue">
+ <number>-99</number>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>halftones</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup1</cstring>
+ </property>
+ <property name="title">
+ <string>Time</string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>time_all</cstring>
+ </property>
+ <property name="text">
+ <string>all</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>time_selected</cstring>
+ </property>
+ <property name="text">
+ <string>between markers</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>ButtonGroup2</cstring>
+ </property>
+ <property name="title">
+ <string>Parts</string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>parts_all</cstring>
+ </property>
+ <property name="text">
+ <string>all</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>parts_selected</cstring>
+ </property>
+ <property name="caption">
+ <string></string>
+ </property>
+ <property name="text">
+ <string>all in selected tracks</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>okButton</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>false</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>cancelButton</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>okButton</sender>
+ <signal>clicked()</signal>
+ <receiver>TransposeDialogBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>cancelButton</sender>
+ <signal>clicked()</signal>
+ <receiver>TransposeDialogBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/ttoolbar.cpp b/muse2/muse/widgets/ttoolbar.cpp
new file mode 100644
index 00000000..fe15f885
--- /dev/null
+++ b/muse2/muse/widgets/ttoolbar.cpp
@@ -0,0 +1,24 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: ttoolbar.cpp,v 1.1.1.1 2003/10/27 18:54:46 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <qaction.h>
+#include "globals.h"
+
+//---------------------------------------------------------
+// syncChanged
+//---------------------------------------------------------
+
+void syncChanged(bool flag)
+ {
+ startAction->setEnabled(!flag);
+ forwardAction->setEnabled(!flag);
+ rewindAction->setEnabled(!flag);
+ stopAction->setEnabled(!flag);
+ playAction->setEnabled(!flag);
+ }
+
+
diff --git a/muse2/muse/widgets/ttoolbar.h b/muse2/muse/widgets/ttoolbar.h
new file mode 100644
index 00000000..b7d34b2d
--- /dev/null
+++ b/muse2/muse/widgets/ttoolbar.h
@@ -0,0 +1,9 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: ttoolbar.h,v 1.1.1.1 2003/10/27 18:54:52 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+extern void syncChanged(bool flag);
+
diff --git a/muse2/muse/widgets/ttoolbutton.cpp b/muse2/muse/widgets/ttoolbutton.cpp
new file mode 100644
index 00000000..bf9234c6
--- /dev/null
+++ b/muse2/muse/widgets/ttoolbutton.cpp
@@ -0,0 +1,30 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: ttoolbutton.cpp,v 1.1 2004/02/21 16:53:50 wschweer Exp $
+// (C) Copyright 2004 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <qpainter.h>
+//Added by qt3to4:
+#include <QPixmap>
+
+#include "ttoolbutton.h"
+#include "gconfig.h"
+#include "icons.h"
+
+//---------------------------------------------------------
+// drawButton
+//---------------------------------------------------------
+
+void TransparentToolButton::drawButton(QPainter* p)
+ {
+ int w = width();
+ int h = height();
+ QIcon::Mode mode = isEnabled() ? QIcon::Normal : QIcon::Disabled;
+ QIcon::State state = isOn() ? QIcon::On : QIcon::Off;
+ const QPixmap pm(iconSet().pixmap(QIcon::Automatic, mode, state));
+ p->drawPixmap(QPoint((w - pm.width())/2, (h - pm.height())/2), pm);
+ }
+
+
diff --git a/muse2/muse/widgets/ttoolbutton.h b/muse2/muse/widgets/ttoolbutton.h
new file mode 100644
index 00000000..381f3f18
--- /dev/null
+++ b/muse2/muse/widgets/ttoolbutton.h
@@ -0,0 +1,28 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: ttoolbutton.h,v 1.1 2004/02/21 16:53:51 wschweer Exp $
+// (C) Copyright 2004 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __TTOOLBUTTON_H__
+#define __TTOOLBUTTON_H__
+
+#include <qtoolbutton.h>
+
+//---------------------------------------------------------
+// TransparentToolButton
+//---------------------------------------------------------
+
+class TransparentToolButton : public QToolButton {
+ Q_OBJECT
+
+ virtual void drawButton(QPainter*);
+
+ public:
+ TransparentToolButton(QWidget* parent, const char* name = 0)
+ : QToolButton(parent, name) {}
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/utils.cpp b/muse2/muse/widgets/utils.cpp
new file mode 100644
index 00000000..2a4852f3
--- /dev/null
+++ b/muse2/muse/widgets/utils.cpp
@@ -0,0 +1,358 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: utils.cpp,v 1.1.1.1.2.3 2009/11/14 03:37:48 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "utils.h"
+#include <math.h>
+#include <q3frame.h>
+#include <sys/time.h>
+
+// Quick bit-shift lookup table
+const unsigned int bitShiftLU[32] = { 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80,
+ 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000, 0x8000,
+ 0x10000, 0x20000, 0x40000, 0x80000, 0x100000, 0x200000, 0x400000, 0x800000,
+ 0x1000000, 0x2000000, 0x4000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000, 0x80000000 };
+
+//---------------------------------------------------------
+// curTime
+//---------------------------------------------------------
+
+double curTime()
+ {
+ struct timeval t;
+ gettimeofday(&t, 0);
+ return (double)((double)t.tv_sec + (t.tv_usec / 1000000.0));
+ }
+
+//---------------------------------------------------------
+// dump
+// simple debug output
+//---------------------------------------------------------
+
+void dump(const unsigned char* p, int n)
+ {
+ printf("dump %d\n", n);
+ for (int i = 0; i < n; ++i) {
+ printf("%02x ", *p++);
+ if ((i > 0) && (i % 16 == 0) && (i+1 < n))
+ printf("\n");
+ }
+ printf("\n");
+ }
+
+//---------------------------------------------------------
+// num2cols
+//---------------------------------------------------------
+
+int num2cols(int min, int max)
+ {
+ int amin = abs(min);
+ int amax = abs(max);
+ int l = amin > amax ? amin : amax;
+ return int(log10(l)) + 1;
+ }
+
+//---------------------------------------------------------
+// hLine
+//---------------------------------------------------------
+
+Q3Frame* hLine(QWidget* w)
+ {
+ Q3Frame* delim = new Q3Frame(w);
+ delim->setFrameStyle(Q3Frame::HLine | Q3Frame::Sunken);
+ return delim;
+ }
+
+//---------------------------------------------------------
+// vLine
+//---------------------------------------------------------
+
+Q3Frame* vLine(QWidget* w)
+ {
+ Q3Frame* delim = new Q3Frame(w);
+ delim->setFrameStyle(Q3Frame::VLine | Q3Frame::Sunken);
+ return delim;
+ }
+
+//---------------------------------------------------------
+// bitmap2String
+// 5c -> 1-4 1-6
+//
+// 01011100
+//
+//---------------------------------------------------------
+
+QString bitmap2String(int bm)
+ {
+ QString s;
+//printf("bitmap2string: bm %04x", bm);
+ if (bm == 0xffff)
+ s = "all";
+ else if (bm == 0)
+ s = "none";
+ else {
+ bool range = false;
+ int first = 0;
+ bool needSpace = false;
+ bm &= 0xffff;
+ //for (int i = 0; i < 17; ++i) {
+ for (int i = 0; i < 16; ++i) {
+ if ((1 << i) & bm) {
+ if (!range) {
+ range = true;
+ first = i;
+ }
+ }
+ else {
+ if (range) {
+ if (needSpace)
+ s += " ";
+ QString ns;
+ if (first == i-1)
+ ns.sprintf("%d", first+1);
+ else
+ ns.sprintf("%d-%d", first+1, i);
+ s += ns;
+ needSpace = true;
+ }
+ range = false;
+ }
+ }
+ }
+//printf(" -> <%s>\n", s.latin1());
+ return s;
+ }
+
+//---------------------------------------------------------
+// u32bitmap2String
+//---------------------------------------------------------
+// Added by Tim. p3.3.8
+
+QString u32bitmap2String(unsigned int bm)
+ {
+ QString s;
+//printf("bitmap2string: bm %04x", bm);
+ //if (bm == 0xffff)
+ if (bm == 0xffffffff)
+ s = "all";
+ else if (bm == 0)
+ s = "none";
+ else {
+ bool range = false;
+ int first = 0;
+ //unsigned int first = 0;
+ bool needSpace = false;
+ //bm &= 0xffff;
+ //for (int i = 0; i < 17; ++i) {
+ for (int i = 0; i < 33; ++i) {
+ if ((i < 32) && ((1U << i) & bm)) {
+ if (!range) {
+ range = true;
+ first = i;
+ }
+ }
+ else {
+ if (range) {
+ if (needSpace)
+ s += " ";
+ QString ns;
+ if (first == i-1)
+ ns.sprintf("%d", first+1);
+ //ns.sprintf("%u", first+1);
+ else
+ ns.sprintf("%d-%d", first+1, i);
+ //ns.sprintf("%u-%u", first+1, i);
+ s += ns;
+ needSpace = true;
+ }
+ range = false;
+ }
+ }
+ }
+//printf(" -> <%s>\n", s.latin1());
+ return s;
+ }
+
+//---------------------------------------------------------
+// string2bitmap
+//---------------------------------------------------------
+
+int string2bitmap(const QString& str)
+ {
+ int val = 0;
+ QString ss = str.simplifyWhiteSpace();
+ const char* s = ss.latin1();
+//printf("string2bitmap <%s>\n", s);
+
+ if (s == 0)
+ return 0;
+ if (strcmp(s, "all") == 0)
+ return 0xffff;
+ if (strcmp(s, "none") == 0)
+ return 0;
+// printf("str2bitmap: <%s> ", str.latin1);
+ int tval = 0;
+ bool range = false;
+ int sval = 0;
+ while (*s == ' ')
+ ++s;
+ while (*s) {
+ if (*s >= '0' && *s <= '9') {
+ tval *= 10;
+ tval += *s - '0';
+ }
+ else if (*s == ' ' || *s == ',') {
+ if (range) {
+ for (int i = sval-1; i < tval; ++i)
+ val |= (1 << i);
+ range = false;
+ }
+ else {
+ val |= (1 << (tval-1));
+ }
+ tval = 0;
+ }
+ else if (*s == '-') {
+ range = true;
+ sval = tval;
+ tval = 0;
+ }
+ ++s;
+ }
+ if (range && tval) {
+ for (int i = sval-1; i < tval; ++i)
+ val |= (1 << i);
+ }
+ else if (tval) {
+ val |= (1 << (tval-1));
+ }
+ return val & 0xffff;
+ }
+
+//---------------------------------------------------------
+// string2u32bitmap
+//---------------------------------------------------------
+// Added by Tim. p3.3.8
+
+unsigned int string2u32bitmap(const QString& str)
+ {
+ //int val = 0;
+ unsigned int val = 0;
+ QString ss = str.simplifyWhiteSpace();
+ const char* s = ss.latin1();
+//printf("string2bitmap <%s>\n", s);
+
+ if (s == 0)
+ return 0;
+ if (strcmp(s, "all") == 0)
+ //return 0xffff;
+ return 0xffffffff;
+ if (strcmp(s, "none") == 0)
+ return 0;
+// printf("str2bitmap: <%s> ", str.latin1);
+ int tval = 0;
+ //unsigned int tval = 0;
+ bool range = false;
+ int sval = 0;
+ //unsigned int sval = 0;
+ while (*s == ' ')
+ ++s;
+ while (*s) {
+ if (*s >= '0' && *s <= '9') {
+ tval *= 10;
+ tval += *s - '0';
+ }
+ else if (*s == ' ' || *s == ',') {
+ if (range) {
+ for (int i = sval-1; i < tval; ++i)
+ //for (unsigned int i = sval-1; i < tval; ++i)
+ val |= (1U << i);
+ range = false;
+ }
+ else {
+ val |= (1U << (tval-1));
+ }
+ tval = 0;
+ }
+ else if (*s == '-') {
+ range = true;
+ sval = tval;
+ tval = 0;
+ }
+ ++s;
+ }
+ if (range && tval) {
+ for (int i = sval-1; i < tval; ++i)
+ //for (unsigned int i = sval-1; i < tval; ++i)
+ val |= (1U << i);
+ }
+ else if (tval) {
+ val |= (1U << (tval-1));
+ }
+ //return val & 0xffff;
+ return val;
+ }
+
+//---------------------------------------------------------
+// autoAdjustFontSize
+// w: Widget to auto adjust font size
+// s: String to fit
+// ignoreWidth: Set if dealing with a vertically constrained widget - one which is free to resize horizontally.
+// ignoreHeight: Set if dealing with a horizontally constrained widget - one which is free to resize vertically.
+//---------------------------------------------------------
+// Added by Tim. p3.3.8
+
+bool autoAdjustFontSize(Q3Frame* w, const QString& s, bool ignoreWidth, bool ignoreHeight, int max, int min)
+{
+ // In case the max or min was obtained from QFont::pointSize() which returns -1
+ // if the font is a pixel font, or if min is greater than max...
+ if(!w || (min < 0) || (max < 0) || (min > max))
+ return false;
+
+ // Limit the minimum and maximum sizes to something at least readable.
+ if(max < 4)
+ max = 4;
+ if(min < 4)
+ min = 4;
+
+ QRect cr = w->contentsRect();
+ QRect r;
+ QFont fnt = w->font();
+ // An extra amount just to be sure - I found it was still breaking up two words which would fit on one line.
+ int extra = 4;
+ // Allow at least one loop. min can be equal to max.
+ for(int i = max; i >= min; --i)
+ {
+ fnt.setPointSize(i);
+ QFontMetrics fm(fnt);
+ r = fm.boundingRect(s);
+ // Would the text fit within the widget?
+ if((ignoreWidth || (r.width() <= (cr.width() - extra))) && (ignoreHeight || (r.height() <= cr.height())))
+ break;
+ }
+ // Added by Tim. p3.3.9
+ //printf("autoAdjustFontSize: ptsz:%d widget:%s before setFont x:%d y:%d w:%d h:%d\n", fnt.pointSize(), w->name(), w->x(), w->y(), w->width(), w->height());
+
+ // Here we will always have a font ranging from min to max point size.
+ w->setFont(fnt);
+ // Added by Tim. p3.3.9
+ //printf("autoAdjustFontSize: ptsz:%d widget:%s x:%d y:%d w:%d h:%d frame w:%d rw:%d rh:%d\n", fnt.pointSize(), w->name(), w->x(), w->y(), w->width(), w->height(), w->frameWidth(), cr.width(), cr.height());
+
+ // Force minimum height. Use the expected height for the highest given point size.
+ // This way the mixer strips aren't all different label heights, but can be larger if necessary.
+ // Only if ignoreHeight is set (therefore the height is adjustable).
+ if(ignoreHeight)
+ {
+ fnt.setPointSize(max);
+ QFontMetrics fm(fnt);
+ // Set the label's minimum height equal to the height of the font.
+ w->setMinimumHeight(fm.height() + 2 * w->frameWidth());
+ }
+
+ return true;
+}
diff --git a/muse2/muse/widgets/utils.h b/muse2/muse/widgets/utils.h
new file mode 100644
index 00000000..aaf501f0
--- /dev/null
+++ b/muse2/muse/widgets/utils.h
@@ -0,0 +1,33 @@
+//Added by qt3to4:
+#include <Q3Frame>
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: utils.h,v 1.1.1.1.2.3 2009/11/14 03:37:48 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __UTILS_H__
+#define __UTILS_H__
+
+class Q3Frame;
+class QWidget;
+
+#include <qstring.h>
+
+extern QString bitmap2String(int bm);
+extern int string2bitmap(const QString& str);
+extern QString u32bitmap2String(unsigned int bm);
+extern unsigned int string2u32bitmap(const QString& str);
+extern bool autoAdjustFontSize(Q3Frame* w, const QString& s, bool ignoreWidth = false, bool ignoreHeight = false, int max = 10, int min = 4);
+
+extern int num2cols(int min, int max);
+extern Q3Frame* hLine(QWidget* parent);
+extern Q3Frame* vLine(QWidget* parent);
+extern void dump(const unsigned char* p, int n);
+extern double curTime();
+
+extern const unsigned int bitShiftLU[32];
+
+#endif
+
diff --git a/muse2/muse/widgets/velocity.cpp b/muse2/muse/widgets/velocity.cpp
new file mode 100644
index 00000000..42eed7c9
--- /dev/null
+++ b/muse2/muse/widgets/velocity.cpp
@@ -0,0 +1,46 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: velocity.cpp,v 1.1.1.1 2003/10/27 18:55:04 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <q3buttongroup.h>
+#include <qspinbox.h>
+//#include <qbutton.h>
+#include <QtGui>
+
+#include "velocity.h"
+
+#include "song.h"
+
+//---------------------------------------------------------
+// Velocity
+//---------------------------------------------------------
+
+Velocity::Velocity(QWidget* parent, const char* name)
+ : VelocityBase(parent, name, true)
+ {
+ }
+
+//---------------------------------------------------------
+// accept
+//---------------------------------------------------------
+
+void Velocity::accept()
+ {
+ _range = rangeGroup->id(rangeGroup->selected());
+ _rateVal = rate->value();
+ _offsetVal = offset->value();
+ VelocityBase::accept();
+ }
+
+//---------------------------------------------------------
+// setRange
+//---------------------------------------------------------
+
+void Velocity::setRange(int id)
+ {
+ rangeGroup->setButton(id);
+ }
+
diff --git a/muse2/muse/widgets/velocity.h b/muse2/muse/widgets/velocity.h
new file mode 100644
index 00000000..6d2ca60a
--- /dev/null
+++ b/muse2/muse/widgets/velocity.h
@@ -0,0 +1,36 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: velocity.h,v 1.1.1.1 2003/10/27 18:54:51 wschweer Exp $
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __VELOCITY_H__
+#define __VELOCITY_H__
+
+#include "velocitybase.h"
+
+//---------------------------------------------------------
+// Velocity
+//---------------------------------------------------------
+
+class Velocity : public VelocityBase {
+ int _range;
+ int _rateVal;
+ int _offsetVal;
+
+ Q_OBJECT
+
+ protected slots:
+ void accept();
+
+ public:
+ Velocity(QWidget* parent, const char* name = 0);
+ void setRange(int id);
+ int range() const { return _range; }
+ int rateVal() const { return _rateVal; }
+ int offsetVal() const { return _offsetVal; }
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/velocitybase.ui b/muse2/muse/widgets/velocitybase.ui
new file mode 100644
index 00000000..e1510348
--- /dev/null
+++ b/muse2/muse/widgets/velocitybase.ui
@@ -0,0 +1,232 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>VelocityBase</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>VelocityBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>275</width>
+ <height>274</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MusE: Modify Velocity</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>rangeGroup</cstring>
+ </property>
+ <property name="title">
+ <string>Range</string>
+ </property>
+ <property name="exclusive">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>RadioButton5</cstring>
+ </property>
+ <property name="text">
+ <string>All Events</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>RadioButton6</cstring>
+ </property>
+ <property name="text">
+ <string>Selected Events</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>RadioButton7</cstring>
+ </property>
+ <property name="text">
+ <string>Looped Events</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>2</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>RadioButton8</cstring>
+ </property>
+ <property name="text">
+ <string>Selected &amp; Looped</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>3</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox3</cstring>
+ </property>
+ <property name="title">
+ <string>Values</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Rate:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Offset:</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>rate</cstring>
+ </property>
+ <property name="suffix">
+ <string>%</string>
+ </property>
+ <property name="maxValue">
+ <number>200</number>
+ </property>
+ <property name="value">
+ <number>100</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>offset</cstring>
+ </property>
+ <property name="maxValue">
+ <number>127</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ <property name="lineStep">
+ <number>1</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>okButton</cstring>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>false</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>cancelButton</cstring>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>okButton</sender>
+ <signal>clicked()</signal>
+ <receiver>VelocityBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>cancelButton</sender>
+ <signal>clicked()</signal>
+ <receiver>VelocityBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/view.cpp b/muse2/muse/widgets/view.cpp
new file mode 100644
index 00000000..75116415
--- /dev/null
+++ b/muse2/muse/widgets/view.cpp
@@ -0,0 +1,514 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: view.cpp,v 1.3.2.2 2009/04/06 01:24:55 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "view.h"
+#include <cmath>
+#include <stdio.h>
+#include <QPainter>
+//Added by qt3to4:
+#include <QPixmap>
+#include <QResizeEvent>
+#include <QDropEvent>
+#include <QMouseEvent>
+#include <QKeyEvent>
+#include <QPaintEvent>
+
+//---------------------------------------------------------
+// View::View
+// double xMag = (xmag < 0) ? 1.0/-xmag : double(xmag)
+//---------------------------------------------------------
+
+View::View(QWidget* w, int xm, int ym, const char* name)
+ : QWidget(w, name, Qt::WNoAutoErase | Qt::WResizeNoErase)
+ {
+ xmag = xm;
+ ymag = ym;
+ xpos = 0;
+ ypos = 0;
+ xorg = 0;
+ yorg = 0;
+ _virt = true;
+ setBackgroundMode(Qt::NoBackground);
+ brush.setStyle(Qt::SolidPattern);
+ brush.setColor(Qt::lightGray);
+ pmValid = false;
+ }
+
+//---------------------------------------------------------
+// setOrigin
+//---------------------------------------------------------
+
+void View::setOrigin(int x, int y)
+ {
+ xorg = x;
+ yorg = y;
+ redraw();
+ }
+
+//---------------------------------------------------------
+// setXMag
+//---------------------------------------------------------
+
+void View::setXMag(int xs)
+ {
+ xmag = xs;
+ redraw();
+ }
+
+//---------------------------------------------------------
+// seqYMag
+//---------------------------------------------------------
+
+void View::setYMag(int ys)
+ {
+ ymag = ys;
+ redraw();
+ }
+
+//---------------------------------------------------------
+// setXPos
+// x - phys offset
+//---------------------------------------------------------
+
+void View::setXPos(int x)
+ {
+ int delta = xpos - x; // - -> shift left
+ xpos = x;
+ if (pm.isNull())
+ return;
+ if (!pmValid) {
+ //printf("View::setXPos !pmValid x:%d width:%d delta:%d\n", x, width(), delta);
+ redraw();
+ return;
+ }
+ int w = width();
+ int h = height();
+
+ QRect r;
+ if (delta >= w || delta <= -w)
+ r = QRect(0, 0, w, h);
+ else if (delta < 0) { // shift left
+ bitBlt(&pm, 0, 0, &pm, -delta, 0, w + delta, h, true); //CopyROP, true); // ddskrjo
+ r = QRect(w + delta, 0, -delta, h);
+ }
+ else { // shift right
+ bitBlt(&pm, delta, 0, &pm, 0, 0, w-delta, h, true); //CopyROP, true); // ddskrjo
+ r = QRect(0, 0, delta, h);
+ }
+ QRect olr = overlayRect();
+ QRect olr1(olr);
+ olr1.moveBy(delta, 0);
+
+ r |= olr;
+ r |= olr1;
+
+ //printf("View::setXPos x:%d w:%d delta:%d r.x:%d r.w:%d\n", x, w, delta, r.x(), r.width());
+
+ paint(r);
+ update();
+ }
+
+//---------------------------------------------------------
+// setYPos
+//---------------------------------------------------------
+
+void View::setYPos(int y)
+ {
+ int delta = ypos - y; // - -> shift up
+ ypos = y;
+ if (pm.isNull())
+ return;
+ if (!pmValid) {
+ //printf("View::setYPos !pmValid y:%d height:%d delta:%d\n", y, height(), delta);
+
+ redraw();
+ return;
+ }
+ int w = width();
+ int h = height();
+ QRect r;
+ if (delta >= h || delta <= -h)
+ r = QRect(0, 0, w, h);
+ else if (delta < 0) { // shift up
+ bitBlt(&pm, 0, 0, &pm, 0, -delta, w, h + delta, true); //CopyROP, true); ddskrjo
+ r = QRect(0, h + delta, w, -delta);
+ }
+ else { // shift down
+ bitBlt(&pm, 0, delta, &pm, 0, 0, w, h-delta, true); // CopyROP, true); ddskrjo
+
+ // NOTE: June 2 2010: On my machine with an old NV V8200 + prop drivers (curr 96.43.11),
+ // this is a problem. There is severe graphical corruption in some of the view-based windows.
+ // Not just here but several other windows (ex. ladspa browser).
+ // I believe (?) I saw other QT3 apps exhibit this problem, too. QT4 apps don't do it.
+ // Neither does it happen when xorg drivers used.
+ //
+ // However, there is one type of MusE corruption which ALL drivers seem to show, and that is
+ // the arranger 'grey' non-part-based tracks (Input, Output, Group etc.).
+ // It is also observed on another machine with an ATI card and a different linux distro.
+ // This change also fixes that problem, although the fact that xorg drivers show the problem
+ // had long made me believe that it was our drawing technique, not particularly this line.
+ // Meaning that perhaps this line is not the right way to fix that problem.
+ //
+ // On the other hand the two problems may be related, and only one shows with xorg drivers...
+ // Ultimately it could just be my NV card, as a request for similar experience in mail list
+ // returned all negative.
+ //
+ // FIXME: This change cures it for me, but we shouldn't leave this in - shouldn't need to do this...
+ //
+ //r = QRect(0, 0, w, delta);
+ // Changed p3.3.43
+ r = QRect(0, 0, w, h);
+
+ }
+ QRect olr = overlayRect();
+ QRect olr1(olr);
+ olr1.moveBy(0, delta);
+
+ r |= olr;
+ r |= olr1;
+ paint(r);
+ update();
+ }
+
+//---------------------------------------------------------
+// resizeEvent
+//---------------------------------------------------------
+
+void View::resizeEvent(QResizeEvent* ev)
+ {
+ pm.resize(ev->size());
+ pmValid = false;
+ }
+
+//---------------------------------------------------------
+// paintEvent
+//---------------------------------------------------------
+
+void View::paintEvent(QPaintEvent* ev)
+ {
+ //printf("View::paintEvent pmValid:%d x:%d width:%d y:%d height:%d\n", pmValid, ev->rect().x(), ev->rect().width(), ev->rect().y(), ev->rect().height());
+ if (!pmValid)
+ paint(ev->rect());
+ bitBlt(this, ev->rect().topLeft(), &pm, ev->rect(), true); // CopyROP, true); ddskrjo
+ }
+
+//---------------------------------------------------------
+// redraw
+//---------------------------------------------------------
+
+void View::redraw()
+ {
+ QRect r(0, 0, pm.width(), pm.height());
+ //printf("View::redraw() r.x:%d r.w:%d\n", r.x(), r.width());
+ paint(r);
+ update();
+ }
+
+//---------------------------------------------------------
+// redraw
+//---------------------------------------------------------
+
+void View::redraw(const QRect& r)
+ {
+ //printf("View::redraw(QRect& r) r.x:%d r.w:%d\n", r.x(), r.width());
+ paint(r);
+ update(r);
+ }
+
+//---------------------------------------------------------
+// paint
+// r - phys coord system
+//---------------------------------------------------------
+
+void View::paint(const QRect& r)
+ {
+ if (pm.isNull())
+ return;
+ QRect rr(r);
+ if (!pmValid) {
+ pmValid = true;
+ rr = QRect(0, 0, pm.width(), pm.height());
+ }
+ QPainter p(&pm);
+ if (bgPixmap.isNull())
+ p.fillRect(rr, brush);
+ else
+ p.drawTiledPixmap(rr, bgPixmap, QPoint(xpos + rmapx(xorg)
+ + rr.x(), ypos + rmapy(yorg) + rr.y()));
+ p.setClipRegion(rr);
+ //printf("View::paint r.x:%d w:%d\n", rr.x(), rr.width());
+ pdraw(p, rr); // draw into pixmap
+
+ p.resetXForm();
+ drawOverlay(p);
+ }
+
+//---------------------------------------------------------
+// keyPressEvent
+//---------------------------------------------------------
+
+void View::keyPressEvent(QKeyEvent* event)
+ {
+ viewKeyPressEvent(event);
+ }
+
+//---------------------------------------------------------
+// viewKeyPressEvent
+//---------------------------------------------------------
+
+void View::viewKeyPressEvent(QKeyEvent* event)
+ {
+ event->ignore();
+ }
+
+//---------------------------------------------------------
+// mousePressEvent
+//---------------------------------------------------------
+
+void View::mousePressEvent(QMouseEvent* ev)
+ {
+ QMouseEvent e(ev->type(), mapDev(ev->pos()),
+ ev->globalPos(), ev->button(), ev->state());
+ viewMousePressEvent(&e);
+ }
+
+//---------------------------------------------------------
+// mouseDoubleClickEvent
+//---------------------------------------------------------
+
+void View::mouseDoubleClickEvent(QMouseEvent* ev)
+ {
+ QMouseEvent e(ev->type(), mapDev(ev->pos()),
+ ev->globalPos(), ev->button(), ev->state());
+ viewMouseDoubleClickEvent(&e);
+ }
+
+//---------------------------------------------------------
+// mouseMoveEvent
+//---------------------------------------------------------
+
+void View::mouseMoveEvent(QMouseEvent* ev)
+ {
+ QMouseEvent e(ev->type(), mapDev(ev->pos()),
+ ev->globalPos(), ev->button(), ev->state());
+ viewMouseMoveEvent(&e);
+ }
+
+//---------------------------------------------------------
+// mouseReleaseEvent
+//---------------------------------------------------------
+
+void View::mouseReleaseEvent(QMouseEvent* ev)
+ {
+ QMouseEvent e(ev->type(), mapDev(ev->pos()),
+ ev->globalPos(), ev->button(), ev->state());
+ viewMouseReleaseEvent(&e);
+ }
+
+//---------------------------------------------------------
+// dropEvent
+//---------------------------------------------------------
+
+void View::dropEvent(QDropEvent* ev)
+ {
+ ev->setPoint(mapDev(ev->pos()));
+ viewDropEvent(ev);
+ }
+
+//---------------------------------------------------------
+// setBg
+//---------------------------------------------------------
+
+void View::setBg(const QPixmap& bgpm)
+ {
+ bgPixmap = bgpm;
+ redraw();
+ }
+
+//---------------------------------------------------------
+// pdraw
+// r - phys coords
+//---------------------------------------------------------
+
+void View::pdraw(QPainter& p, const QRect& r)
+ {
+ if (virt()) {
+ setPainter(p);
+ int x = r.x();
+ int y = r.y();
+ int w = r.width();
+ int h = r.height();
+ if (xmag <= 0) {
+ x -= 1;
+ w += 2;
+ x = (x + xpos + rmapx(xorg)) * (-xmag);
+ w = w * (-xmag);
+ }
+ else {
+ x = (x + xpos + rmapx(xorg)) / xmag;
+ w = (w + xmag - 1) / xmag;
+ x -= 1;
+ w += 2;
+ }
+ if (ymag <= 0) {
+ y -= 1;
+ h += 2;
+ y = (y + ypos + rmapy(yorg)) * (-ymag);
+ h = h * (-ymag);
+ }
+ else {
+ y = (y + ypos + rmapy(yorg)) / ymag;
+ h = (h + ymag - 1) / ymag;
+ y -= 1;
+ h += 2;
+ }
+
+ if (x < 0)
+ x = 0;
+ if (y < 0)
+ y = 0;
+ draw(p, QRect(x, y, w, h));
+ }
+ else
+ draw(p, r);
+ }
+
+//---------------------------------------------------------
+// setPainter
+//---------------------------------------------------------
+
+void View::setPainter(QPainter& p)
+ {
+ p.resetXForm();
+ p.translate(double(-(xpos+rmapx(xorg))), double(-(ypos+rmapy(yorg))));
+ double xMag = (xmag < 0) ? 1.0/(-xmag) : double(xmag);
+ double yMag = (ymag < 0) ? 1.0/(-ymag) : double(ymag);
+ p.scale(xMag, yMag);
+ }
+
+//---------------------------------------------------------
+// map
+//---------------------------------------------------------
+
+QRect View::map(const QRect& r) const
+ {
+ int x, y, w, h;
+ if (xmag < 0) {
+ x = r.x()/(-xmag) - (xpos + rmapx(xorg)); // round down
+ w = (r.width()-xmag-1) / (-xmag); // round up
+ }
+ else {
+ x = r.x()*xmag - (xpos + rmapx(xorg));
+ w = r.width() * xmag;
+ }
+ if (ymag < 0) {
+ y = r.y()/-ymag - (ypos + rmapy(yorg));
+ h = (r.height()-ymag-1) / (-ymag);
+ }
+ else {
+ y = r.y() * ymag - (ypos + rmapy(yorg));
+ h = r.height() * ymag;
+ }
+ return QRect(x, y, w, h);
+ }
+
+QPoint View::map(const QPoint& p) const
+ {
+ int x, y;
+ if (xmag < 0) {
+ x = p.x()/(-xmag) - (xpos + rmapx(xorg)); // round down
+ }
+ else {
+ x = p.x()*xmag - (xpos + rmapx(xorg));
+ }
+ if (ymag < 0) {
+ y = p.y()/-ymag - (ypos + rmapy(yorg));
+ }
+ else {
+ y = p.y() * ymag - (ypos + rmapy(yorg));
+ }
+ return QPoint(x, y);
+ }
+
+QRect View::mapDev(const QRect& r) const
+ {
+ return QRect(mapxDev(r.x()), mapyDev(r.y()),
+ rmapxDev(r.width()), rmapyDev(r.height()));
+ }
+
+QPoint View::mapDev(const QPoint& r) const
+ {
+ return QPoint(mapxDev(r.x()), mapyDev(r.y()));
+ }
+
+int View::mapx(int x) const
+ {
+ if (xmag < 0) {
+ return (x-xmag/2)/(-xmag) - (xpos + rmapx(xorg)); // round
+ }
+ else {
+ return (x * xmag) - (xpos + rmapx(xorg));
+ }
+ }
+int View::mapy(int y) const
+ {
+ if (ymag < 0) {
+ return (y-ymag/2)/(-ymag) - (ypos + rmapy(yorg)); // round
+ }
+ else {
+ return (y * ymag) - (ypos + rmapy(yorg));
+ }
+ }
+int View::mapxDev(int x) const
+ {
+ int val;
+ if (xmag <= 0)
+ val = (x + xpos + rmapx(xorg)) * (-xmag);
+ else
+ val = (x + xpos + rmapx(xorg) + xmag / 2) / xmag;
+ if (val < 0) // DEBUG
+ val = 0;
+ return val;
+ }
+
+int View::mapyDev(int y) const
+ {
+ if (ymag <= 0)
+ return (y + ypos + rmapy(yorg)) * (-ymag);
+ else
+ return (y + ypos + rmapy(yorg) + ymag / 2) / ymag;
+ }
+
+int View::rmapx(int x) const
+ {
+ if (xmag < 0)
+ return (x-xmag/2) / (-xmag);
+ else
+ return x * xmag;
+ }
+int View::rmapy(int y) const
+ {
+ if (ymag < 0)
+ return (y-ymag/2) / (-ymag);
+ else
+ return y * ymag;
+ }
+int View::rmapxDev(int x) const
+ {
+ if (xmag <= 0)
+ return x * (-xmag);
+ else
+ return (x + xmag/2) / xmag;
+ }
+int View::rmapyDev(int y) const
+ {
+ if (ymag <= 0)
+ return y * (-ymag);
+ else
+ return (y + ymag/2) / ymag;
+ }
+
diff --git a/muse2/muse/widgets/view.h b/muse2/muse/widgets/view.h
new file mode 100644
index 00000000..5eaf761f
--- /dev/null
+++ b/muse2/muse/widgets/view.h
@@ -0,0 +1,108 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: view.h,v 1.2.2.1 2008/01/26 07:23:21 terminator356 Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __VIEW_H__
+#define __VIEW_H__
+
+#include <qwidget.h>
+#include <qpixmap.h>
+#include <qmatrix.h>
+#include <qpainter.h>
+#include <qbrush.h>
+//Added by qt3to4:
+#include <QResizeEvent>
+#include <QDropEvent>
+#include <QMouseEvent>
+#include <QKeyEvent>
+#include <QPaintEvent>
+
+//---------------------------------------------------------
+// View
+// horizontal View with double buffering
+//---------------------------------------------------------
+
+class View : public QWidget {
+ QPixmap pm; // for double buffering
+ bool pmValid;
+ QPixmap bgPixmap; // background Pixmap
+ QBrush brush;
+ bool _virt;
+ Q_OBJECT
+
+ protected:
+ int xorg;
+ int yorg;
+ int xpos, ypos;
+ int xmag, ymag;
+
+ virtual void keyPressEvent(QKeyEvent* event);
+ virtual void mousePressEvent(QMouseEvent* event);
+ virtual void mouseDoubleClickEvent(QMouseEvent* event);
+ virtual void mouseMoveEvent(QMouseEvent* event);
+ virtual void mouseReleaseEvent(QMouseEvent* event);
+ virtual void dropEvent(QDropEvent* event);
+
+ virtual void draw(QPainter&, const QRect&) {}
+ virtual void drawOverlay(QPainter&) {}
+ virtual QRect overlayRect() const { return QRect(0, 0, 0, 0); }
+
+ virtual void pdraw(QPainter&, const QRect&);
+
+ virtual void paintEvent(QPaintEvent* ev);
+ void redraw(const QRect&);
+
+ void paint(const QRect& r);
+
+ virtual void resizeEvent(QResizeEvent*);
+ virtual void viewKeyPressEvent(QKeyEvent*);
+ virtual void viewMousePressEvent(QMouseEvent*) {}
+ virtual void viewMouseDoubleClickEvent(QMouseEvent*) {}
+ virtual void viewMouseMoveEvent(QMouseEvent*) {}
+ virtual void viewMouseReleaseEvent(QMouseEvent*) {}
+ virtual void viewDropEvent(QDropEvent*) {}
+
+ QRect map(const QRect&) const;
+ QPoint map(const QPoint&) const;
+ QRect mapDev(const QRect&) const;
+ QPoint mapDev(const QPoint&) const;
+
+ int mapx(int x) const;
+ int mapy(int y) const;
+ int mapyDev(int y) const;
+ int mapxDev(int x) const;
+ int rmapy(int y) const;
+ int rmapyDev(int y) const;
+
+ void setPainter(QPainter& p);
+
+ public slots:
+ void setXPos(int);
+ void setYPos(int);
+ void setXMag(int xs);
+ void setYMag(int ys);
+ void redraw();
+
+ public:
+ View(QWidget*, int, int, const char* name = 0);
+ void setBg(const QPixmap& pm);
+ void setBg(const QColor& color) { brush.setColor(color); redraw(); }
+ void setXOffset(int v) { setXPos(mapx(v)); }
+ int xOffset() const { return mapxDev(xpos)-xorg; }
+ int xOffsetDev() const { return xpos-rmapx(xorg); }
+
+ int yOffset() const { return mapyDev(ypos)-yorg; }
+ int getXScale() const { return xmag; }
+ int getYScale() const { return ymag; }
+ void setOrigin(int x, int y);
+ void setVirt(bool flag) { _virt = flag; }
+ bool virt() const { return _virt; }
+ int rmapxDev(int x) const;
+ int rmapx(int x) const;
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/vscale.cpp b/muse2/muse/widgets/vscale.cpp
new file mode 100644
index 00000000..c0679882
--- /dev/null
+++ b/muse2/muse/widgets/vscale.cpp
@@ -0,0 +1,27 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: vscale.cpp,v 1.1.1.1 2003/10/27 18:54:41 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include "vscale.h"
+#include <qpainter.h>
+//Added by qt3to4:
+#include <QPaintEvent>
+
+//---------------------------------------------------------
+// paintEvent
+//---------------------------------------------------------
+
+void VScale::paintEvent(QPaintEvent*)
+ {
+ int h = height();
+ int w = width();
+ QPainter p(this);
+ p.drawLine(w/2, h/4, w, h/4);
+ p.drawLine(0, h/2, w, h/2);
+ p.drawLine(w/2, (3*h)/4, w, (3*h)/4);
+ setFixedWidth(18);
+ }
+
diff --git a/muse2/muse/widgets/vscale.h b/muse2/muse/widgets/vscale.h
new file mode 100644
index 00000000..b6b381ac
--- /dev/null
+++ b/muse2/muse/widgets/vscale.h
@@ -0,0 +1,29 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: vscale.h,v 1.1.1.1.2.1 2008/01/19 13:33:47 wschweer Exp $
+// (C) Copyright 1999 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __VSCALE_H__
+#define __VSCALE_H__
+
+#include <qwidget.h>
+//Added by qt3to4:
+#include <QPaintEvent>
+
+//---------------------------------------------------------
+// VScale
+//---------------------------------------------------------
+
+class VScale : public QWidget {
+ Q_OBJECT
+
+ virtual void paintEvent(QPaintEvent*);
+
+ public:
+ VScale(QWidget* parent) : QWidget(parent) {}
+ };
+
+#endif
+
diff --git a/muse2/muse/widgets/wtrackinfobase.ui b/muse2/muse/widgets/wtrackinfobase.ui
new file mode 100644
index 00000000..a429398a
--- /dev/null
+++ b/muse2/muse/widgets/wtrackinfobase.ui
@@ -0,0 +1,224 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>WaveTrackInfoBase</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>WaveTrackInfoBase</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>120</width>
+ <height>548</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="caption">
+ <string>MusE: TrackInfo</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string></string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>WinPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <property name="lineWidth">
+ <number>1</number>
+ </property>
+ <property name="midLineWidth">
+ <number>0</number>
+ </property>
+ <property name="text">
+ <string>Track Info</string>
+ </property>
+ <property name="alignment">
+ <set>AlignCenter</set>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>iName</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Track Name</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Track Name</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Output Route:</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>outputRoute</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Input Route:</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>inputRoute</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Ports:</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Mono</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Stereo</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>ports</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>371</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<tabstops>
+ <tabstop>iName</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/muse2/muse/widgets/wtscale.cpp b/muse2/muse/widgets/wtscale.cpp
new file mode 100644
index 00000000..5976670e
--- /dev/null
+++ b/muse2/muse/widgets/wtscale.cpp
@@ -0,0 +1,289 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: wtscale.cpp,v 1.3 2004/04/11 13:03:32 wschweer Exp $
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#include <values.h>
+
+#include <qpainter.h>
+#include <qtooltip.h>
+//Added by qt3to4:
+#include <QPixmap>
+#include <QMouseEvent>
+#include <QEvent>
+
+#include "wtscale.h"
+#include "midieditor.h"
+#include "globals.h"
+#include "song.h"
+#include "../marker/marker.h"
+#include "icons.h"
+
+//---------------------------------------------------------
+// WTScale
+// Wave Time Scale
+//---------------------------------------------------------
+
+WTScale::WTScale(int* r, QWidget* parent, int xs)
+ : View(parent, xs, 1)
+ {
+ QToolTip::add(this, tr("bar scale"));
+ barLocator = false;
+ raster = r;
+ pos[0] = int(song->tempomap()->tick2time(song->cpos()) * sampleRate);
+ pos[1] = int(song->tempomap()->tick2time(song->lpos()) * sampleRate);
+ pos[2] = int(song->tempomap()->tick2time(song->rpos()) * sampleRate);
+ pos[3] = -1; // do not show
+ button = Qt::NoButton;
+ setMouseTracking(true);
+ connect(song, SIGNAL(posChanged(int, unsigned, bool)), SLOT(setPos(int, unsigned, bool)));
+ connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int)));
+ connect(song, SIGNAL(markerChanged(int)), SLOT(redraw()));
+ setFixedHeight(28);
+ setBg(QColor(0xe0, 0xe0, 0xe0));
+ }
+
+//---------------------------------------------------------
+// songChanged
+//---------------------------------------------------------
+
+void WTScale::songChanged(int /*type*/)
+ {
+ }
+
+//---------------------------------------------------------
+// setPos
+//---------------------------------------------------------
+
+void WTScale::setPos(int idx, unsigned val, bool adjustScrollbar)
+ {
+ val = int(song->tempomap()->tick2time(val) * sampleRate);
+ if (val == pos[idx])
+ return;
+ int opos = mapx(pos[idx] == -1 ? val : pos[idx]);
+ pos[idx] = val;
+ if (!isVisible())
+ return;
+ val = mapx(val);
+ int x = -9;
+ int w = 18;
+ if (opos > val) {
+ w += opos - val;
+ x += val;
+ }
+ else {
+ w += val - opos;
+ x += opos;
+ }
+ redraw(QRect(x, 0, w, height()));
+ }
+
+//---------------------------------------------------------
+// viewMousePressEvent
+//---------------------------------------------------------
+
+void WTScale::viewMousePressEvent(QMouseEvent* event)
+ {
+ button = event->button();
+ viewMouseMoveEvent(event);
+ }
+
+//---------------------------------------------------------
+// viewMouseReleaseEvent
+//---------------------------------------------------------
+
+void WTScale::viewMouseReleaseEvent(QMouseEvent* event)
+ {
+ button = Qt::NoButton;
+ }
+
+//---------------------------------------------------------
+// viewMouseMoveEvent
+//---------------------------------------------------------
+
+void WTScale::viewMouseMoveEvent(QMouseEvent* event)
+ {
+ int x= song->tempomap()->time2tick(double(event->x())/double(sampleRate));
+ x = song->raster(x, *raster);
+ if (x < 0)
+ x = 0;
+ emit timeChanged(x);
+ int i;
+ switch (button) {
+ case Qt::LeftButton:
+ i = 0;
+ break;
+ case Qt::MidButton:
+ i = 1;
+ break;
+ case Qt::RightButton:
+ i = 2;
+ break;
+ default:
+ return;
+ }
+ song->setPos(i, x);
+ }
+
+//---------------------------------------------------------
+// leaveEvent
+//---------------------------------------------------------
+
+void WTScale::leaveEvent(QEvent*)
+ {
+// emit timeChanged(MAXINT);
+ }
+
+//---------------------------------------------------------
+// draw
+//---------------------------------------------------------
+
+void WTScale::pdraw(QPainter& p, const QRect& r)
+ {
+ int x = r.x();
+ int w = r.width();
+
+ x -= 20;
+ w += 40; // wg. Text
+
+ //
+ // draw Marker
+ //
+ int y = 12;
+ p.setPen(Qt::black);
+ p.setFont(font4);
+ p.drawLine(r.x(), y+1, r.x() + r.width(), y+1);
+ QRect tr(r);
+ tr.setHeight(12);
+ MarkerList* marker = song->marker();
+ for (iMarker m = marker->begin(); m != marker->end(); ++m) {
+ int xp = mapx(int(m->second.time() * sampleRate));
+ if (xp > x+w)
+ break;
+ int xe = r.x() + r.width();
+ iMarker mm = m;
+ ++mm;
+ if (mm != marker->end()) {
+ xe = mapx(mm->first);
+ }
+ QRect tr(xp, 0, xe-xp, 13);
+ if (m->second.current()) {
+ p.fillRect(tr, Qt::white);
+ }
+ if (r.intersects(tr)) {
+ int x2;
+ iMarker mm = m;
+ ++mm;
+ if (mm != marker->end())
+ x2 = mapx(mm->first);
+ else
+ x2 = xp+200;
+ QRect r = QRect(xp+10, 0, x2-xp, 12);
+ p.drawPixmap(xp, 0, *flagIconS);
+ p.drawText(r, Qt::AlignLeft|Qt::AlignVCenter, m->second.name());
+ }
+ }
+
+ //---------------------------------------------------
+ // draw location marker
+ //---------------------------------------------------
+
+ int h = height()-12;
+
+ if (barLocator) {
+ p.setPen(Qt::red);
+ int xp = mapx(pos[0]);
+ if (xp >= x && xp < x+w)
+ p.drawLine(xp, y, xp, h);
+ p.setPen(Qt::blue);
+ xp = mapx(pos[1]);
+ if (xp >= x && xp < x+w)
+ p.drawLine(xp, y, xp, h);
+ xp = mapx(pos[2]);
+ if (xp >= x && xp < x+w)
+ p.drawLine(xp, y, xp, h);
+ }
+ else {
+ for (int i = 0; i < 3; ++i) {
+ int xp = mapx(pos[i]);
+ if (xp >= x && xp < x+w) {
+ QPixmap* pm = markIcon[i];
+ p.drawPixmap(xp - pm->width()/2, y-1, *pm);
+ }
+ }
+ }
+ p.setPen(Qt::black);
+ if (pos[3] != -1) {
+ int xp = mapx(pos[3]);
+ if (xp >= x && xp < x+w)
+ p.drawLine(xp, 0, xp, height());
+ }
+
+ int ctick = song->samples2tick(mapxDev(x));
+ int bar1, bar2, beat, tick;
+ song->tickValues(ctick, &bar1, &beat, &tick);
+ song->tickValues(song->samples2tick(mapxDev(x+w)), &bar2, &beat, &tick);
+
+//printf("bar %d %d-%d=%d\n", bar, ntick, stick, ntick-stick);
+
+ int stick = song->bar2tick(bar1, 0, 0);
+ int ntick;
+ for (int bar = bar1; bar <= bar2; bar++, stick = ntick) {
+ ntick = song->bar2tick(bar+1, 0, 0);
+ int a = song->tick2samples(ntick);
+ int b = song->tick2samples(stick);
+ int tpix = rmapx(a - b);
+ if (tpix < 64) {
+ // donīt show beats if measure is this small
+ int n = 1;
+ if (tpix < 32)
+ n = 2;
+ if (tpix <= 16)
+ n = 4;
+ if (tpix < 8)
+ n = 8;
+ if (tpix <= 4)
+ n = 16;
+ if (tpix <= 2)
+ n = 32;
+ if (bar % n)
+ continue;
+ p.setFont(font3);
+ int x = mapx(b);
+ QString s;
+ s.setNum(bar + 1);
+ p.drawLine(x, y+1, x, y+1+h);
+ QRect r = QRect(x+2, y, 0, h);
+ p.drawText(r, Qt::AlignLeft|Qt::AlignVCenter|Qt::TextDontClip, s);
+ }
+ else {
+ int z, n;
+ song->timesig(stick, z, n);
+ for (int beat = 0; beat < z; beat++) {
+ int xx = song->tick2samples(song->bar2tick(bar, beat, 0));
+ int xp = mapx(xx);
+ QString s;
+ QRect r(xp+2, y, 0, h);
+ int y1;
+ int num;
+ if (beat == 0) {
+ num = bar + 1;
+ y1 = y + 1;
+ p.setFont(font3);
+ }
+ else {
+ num = beat + 1;
+ y1 = y + 7;
+ p.setFont(font1);
+ r.setY(y+3);
+ }
+ s.setNum(num);
+ p.drawLine(xp, y1, xp, y+1+h);
+ p.drawText(r, Qt::AlignLeft|Qt::AlignVCenter|Qt::TextDontClip, s);
+ }
+ }
+ }
+ }
+
diff --git a/muse2/muse/widgets/wtscale.h b/muse2/muse/widgets/wtscale.h
new file mode 100644
index 00000000..ab378296
--- /dev/null
+++ b/muse2/muse/widgets/wtscale.h
@@ -0,0 +1,51 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: wtscale.h,v 1.2 2004/01/11 18:55:37 wschweer Exp $
+// (C) Copyright 2000 Werner Schweer (ws@seh.de)
+//=========================================================
+
+#ifndef __MTSCALE_H__
+#define __MTSCALE_H__
+
+#include "view.h"
+//Added by qt3to4:
+#include <QMouseEvent>
+#include <QEvent>
+
+class QPainter;
+
+//---------------------------------------------------------
+// WTScale
+// scale for wave track
+//---------------------------------------------------------
+
+class WTScale : public View {
+ Q_OBJECT
+ int* raster;
+ unsigned pos[4];
+ int button;
+ bool barLocator;
+
+ private slots:
+ void songChanged(int);
+
+ protected:
+ virtual void pdraw(QPainter&, const QRect&);
+ virtual void viewMousePressEvent(QMouseEvent* event);
+ virtual void viewMouseMoveEvent(QMouseEvent* event);
+ virtual void viewMouseReleaseEvent(QMouseEvent* event);
+ virtual void leaveEvent(QEvent*e);
+
+ signals:
+ void timeChanged(unsigned);
+
+ public slots:
+ void setPos(int, unsigned, bool);
+
+ public:
+ WTScale(int* raster, QWidget* parent, int xscale);
+ void setBarLocator(bool f) { barLocator = f; }
+ };
+#endif
+