diff options
author | Robert Jonsson <spamatica@gmail.com> | 2010-10-13 19:34:22 +0000 |
---|---|---|
committer | Robert Jonsson <spamatica@gmail.com> | 2010-10-13 19:34:22 +0000 |
commit | 8a2c2824a59d7644e13bc52c9a0ecbd641f21f95 (patch) | |
tree | 064ad3f2bf8daab0ad27b128abd86a9bbdb1e496 /muse2/muse/widgets | |
parent | a27706d9629e8b592cca4659f865b70adef24e6d (diff) |
new branch muse2, first checkin
Diffstat (limited to 'muse2/muse/widgets')
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>&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 &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 &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 &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>&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>&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&)</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 & 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>&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> +<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>&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>&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>&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&)</signal> + <slot access="public" specifier="">setValue(int)</slot> + <slot access="public" specifier="">setPrefix(const QString&)</slot> + <slot access="public" specifier="">setSuffix(const QString&)</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>&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>&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>&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>&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>&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><unknown></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>&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>&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>&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>&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>&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 }, + {¬e1Icon, 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>&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>&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>&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>&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>&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&)</signal> + <slot access="public" specifier="">setValue(int)</slot> + <slot access="public" specifier="">setPrefix(const QString&)</slot> + <slot access="public" specifier="">setSuffix(const QString&)</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 & 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 + |